/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* FILE HISTORY: kevinl 12-Oct-1991 Created kevinl 05-Nov-1991 Code Review changes attended by: DavidHov, Keithmo, o-simop Yi-HsinS 09-Nov-1992 Added AbandonAllChildren() and DeleteChildren() */ #ifndef _HIERLB_HXX_ #define _HIERLB_HXX_ DLL_CLASS HIER_LBI; // declared below DLL_CLASS HIER_LBI_ITERATOR; // declared below DLL_CLASS HIER_LISTBOX; // declared below DLL_CLASS LBITREE; // declared below /************************************************************************* NAME: HIER_LBI SYNOPSIS: Listbox item for HIER_LISTBOX PARENT: LBI HISTORY: kevinl 12-Oct-1991 created beng 29-Jun-1992 Outlined SetDestroyable (dll delta) **************************************************************************/ DLL_CLASS HIER_LBI : public LBI { friend class LBITREE; friend class HIER_LISTBOX; friend class HIER_LBI_ITERATOR; private: HIER_LBI * _phlbiParent; HIER_LBI * _phlbiChild; HIER_LBI * _phlbiLeft; HIER_LBI * _phlbiRight; static BOOL _fDestroyable; BOOL _fShowChildren; UINT _dDescendants; UINT _dIndentPels; VOID AdjustDescendantCount( INT iAdjustment ); VOID Adopt( HIER_LBI * phlbi, BOOL fSort ); // Get rid of all children under this node VOID AbandonAllChildren( VOID ); VOID Abandon(); INT QueryLBIndex(); VOID SetIndentLevel(); UINT QueryDescendants() { return _dDescendants; } BOOL IsParent( HIER_LBI * phlbiParent ); static VOID SetDestroyable( BOOL f ); virtual BOOL IsDestroyable(); public: HIER_LBI( BOOL fExpanded = FALSE ); ~HIER_LBI(); VOID SetExpanded( BOOL f = TRUE ) { _fShowChildren = f; } BOOL QueryExpanded() const { return _fShowChildren; } virtual VOID SetPelIndent( UINT ui ); BOOL HasChildren() { return ( _phlbiChild != NULL ); } INT QueryPelIndent() const { return _dIndentPels; } INT QueryIndentLevel( VOID ); }; /************************************************************************* NAME: HIER_LBI_ITERATOR SYNOPSIS: Iterator for HIER_LBI HISTORY: kevinl 12-Oct-1991 created **************************************************************************/ DLL_CLASS HIER_LBI_ITERATOR { private: HIER_LBI * _phlbiStart; HIER_LBI * _phlbiEnd; public: HIER_LBI_ITERATOR( HIER_LBI * phlbi, BOOL fChildIterator = FALSE ); ~HIER_LBI_ITERATOR(); HIER_LBI * operator()(); }; /************************************************************************* NAME: LBITREE SYNOPSIS: Class that is used by HIER_LISTBOX to anchor the shadow LBI's PARENT: BASE HISTORY: kevinl 12-Oct-1991 created **************************************************************************/ DLL_CLASS LBITREE : public BASE { private: HIER_LBI _hlbiRoot; public: LBITREE(); ~LBITREE(); INT AddNode( HIER_LBI * phlbiParent, HIER_LBI * phlbiChild, BOOL fSort ); }; /************************************************************************* NAME: HIER_LISTBOX SYNOPSIS: Listbox with outline-manipulation support PARENT: BLT_LISTBOX HISTORY: kevinl 12-Oct-1991 created beng 22-Apr-1992 Elided classname arg to ctor **************************************************************************/ DLL_CLASS HIER_LISTBOX : public BLT_LISTBOX { private: BOOL _fMultSel; BOOL _fSort; LBITREE _lbit; INT ExpandChildren( INT dIndex, HIER_LBI * phlbi ); protected: virtual APIERR AddChildren( HIER_LBI * phlbi ); virtual VOID RefreshChildren( HIER_LBI * phlbi ); public: HIER_LISTBOX( OWNER_WINDOW * powin, CID cid, BOOL fReadOnly = FALSE, enum FontType font = FONT_DEFAULT, BOOL fSort = FALSE ); HIER_LISTBOX( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle, BOOL fReadOnly = FALSE, enum FontType font = FONT_DEFAULT, BOOL fSort = FALSE ); ~HIER_LISTBOX(); INT AddItem( HIER_LBI * phlbi, HIER_LBI * phlbiParent = NULL, BOOL fSaveSelection = TRUE ); void HIER_LISTBOX::AddSortedItems( HIER_LBI * * pphlbi, INT cItems, HIER_LBI * phlbiParent = NULL, BOOL fSaveSelection = TRUE ) ; INT DeleteItem( INT i, BOOL fSaveSelection = TRUE ); APIERR ExpandItem( INT i ); APIERR ExpandItem( HIER_LBI * phlbi ); VOID CollapseItem( INT i, BOOL fInvalidate = TRUE ); VOID CollapseItem( HIER_LBI * phlbi, BOOL fInvalidate = TRUE ); // Delete all the children of the given HIER_LBI VOID DeleteChildren( HIER_LBI * phlbi ); VOID OnDoubleClick( HIER_LBI * phlbi ); void SetSortFlag( BOOL fSort = TRUE ) { _fSort = fSort ; } }; #endif // _HIERLB_HXX_