222 lines
5.4 KiB
C++
222 lines
5.4 KiB
C++
/**********************************************************************/
|
|
/** 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_
|