/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ // This file contains the declarations of the various Bookmark Quick // File classes. #if !defined(__QUICKFIL_H__) #define __QUICKFIL_H__ #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif /**************************************************************************** * * Class: CTreeItemList * * DESCRIPTION: * This is a collection class for holding CTreeItem objects. * ****************************************************************************/ class CTreeItem; #define CTreeItemListBase CPtrArray class CTreeItemList : public CTreeItemListBase { public: CTreeItemList(); virtual ~CTreeItemList(); int Add(CTreeItem * pItem) { return(CTreeItemListBase::Add(pItem)); } CTreeItem * Get(int nIndex) const { return((CTreeItem *)GetAt(nIndex)); } protected: private: }; // END OF CLASS CTreeItemList() /**************************************************************************** * * Class: CTreeItem * * DESCRIPTION: * This class provides an abstract object for representing an item * within a hierarchical tree. * ****************************************************************************/ class CTreeItem { public: CTreeItem(CBitmap * pUnselectedImg, CBitmap *pSelectedImg, const UINT uID, const CString & strLabel, CMenu *pSubMenu = NULL); virtual ~CTreeItem(); CTreeItemList * GetSubItems() { return(&m_SubItems); } CMenu * GetSubMenu(void) { return(m_pSubMenu); } CBitmap * GetUnselectedImage() const { return (m_pUnselectedImg); } CBitmap * GetSelectedImage() const { return(m_pSelectedImg); } const UINT GetID() const { return(m_uID); } const CString & GetLabel() const { return(m_strLabel); } void SetUnselectedBitmapSize(CSize size) { m_unselectedBitmapSize = size; } CSize GetUnselectedBitmapSize(void) { return m_unselectedBitmapSize; } void SetSelectedBitmapSize(CSize size) { m_selectedBitmapSize = size; } CSize GetSelectedBitmapSize(void) { return m_selectedBitmapSize; } void SetTextSize(CSize size) { m_textSize = size; } CSize GetTextSize(void) { return m_textSize; } void SetAcceleratorSize(CSize size) { m_accelSize = size; } CSize GetAcceleratorSize(void) { return m_accelSize; } // Aurora improvements to handle custom icons and arbitrary URLs. void SetIcon(void* pIcon, IconType iconType) { m_pCustomIcon = pIcon; m_nIconType = iconType; } HICON GetLocalFileIcon() { return (HICON)m_pCustomIcon; } CRDFImage* GetCustomIcon() { return (CRDFImage*)m_pCustomIcon; } IconType GetIconType() { return m_nIconType; } protected: CBitmap * m_pUnselectedImg; // Image to be displayed for this item when unselected CBitmap * m_pSelectedImg; // Image to be displayed for this item when selected UINT m_uID; // Unique item identifier CString m_strLabel; // Text label for this item CSize m_unselectedBitmapSize; // The size of the unselected bitmap CSize m_selectedBitmapSize; // The size of the selected bitmap CSize m_textSize; // The size of the text in the font when this is calculated CSize m_accelSize; // The size of the accelerator in the font when this is calculated CTreeItemList m_SubItems; // List of items subordinate to this one CMenu *m_pSubMenu; void* m_pCustomIcon; IconType m_nIconType; private: }; // END OF CLASS CTreeItem() /**************************************************************************** * * Class: CTreeMenu * * DESCRIPTION: * This class provides a custom, owner draw menu object for displaying * graphics as well as text in a menu item. A group of these objects * can be used to construct a hierarchical list. * ****************************************************************************/ #define CTreeMenuBase CMenu class CTreeMenu : public CTreeMenuBase, public CCustomImageObject { public: CTreeMenu(); ~CTreeMenu(); BOOL AddItem(CTreeItem * pItem, int nPosition = 0, CTreeMenu *pSubMenu = NULL, void* pCustomIcon = NULL, IconType m_nIconType = BUILTIN_BITMAP); BOOL Create() { return(CreatePopupMenu()); } void ClearItems(int start, int fromEnd); void CalculateItemDimensions(void); CMenu * FindMenu(CString& menuName); // if nCommand is 0, then the mnemonic is for a submenu void AddMnemonic(TCHAR cMnemonic, UINT nCommand, int nPosition); // if nCommand is 0 then mnemonic is for a submenu // it returns FALSE if there is no mnemonic BOOL GetMnemonic(TCHAR cMnemonic, UINT &nCommand, int &nPosition); void SetParent(CWnd *pParent) { m_pParent = pParent;} virtual void LoadComplete(HT_Resource r) {} protected: virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMI); virtual void DrawItem(LPDRAWITEMSTRUCT lpDI); virtual CSize DrawImage(CDC * pDC, const CRect & rect, CTreeItem * pItem, BOOL bIsSelected); virtual void DeleteMnemonics(void); private: int m_WidestImage; int m_WidestText; int m_WidestAccelerator; CTreeItemList m_itemList; CMapWordToPtr m_mnemonicMap; CWnd *m_pParent; private: CSize MeasureBitmap(CBitmap *pBitmap); CSize MeasureText(CString text); }; // END OF CLASS CTreeMenu() /**************************************************************************** * * Class: CPopupTree * * DESCRIPTION: * This class represents a hierarchical popup menu object that can be * used for selecting from a list of sub-categorized items. * ****************************************************************************/ class CPopupTree { public: CPopupTree(CTreeItemList * pItems); virtual ~CPopupTree(); BOOL Activate(int nX, int nY, CWnd * pParent); protected: void BuildMenu(CTreeMenu * pMenu, CTreeItemList * pItems); CTreeItemList * m_pTree; // Contains entire tree of abstract item // objects. The menu is constructed from // this. private: CObArray m_GarbageList; // Used for garbage collection, since we // dynamically allocate stuff within a // recursive function. }; // END OF CLASS CPopupTree() #endif // __QUICKFIL_H__