//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef TREEVIEWLISTCONTROL_H #define TREEVIEWLISTCONTROL_H #ifdef _WIN32 #pragma once #endif #include #include #include #include #include "utlsymbol.h" namespace vgui { // --------------------------------------------------------------------------------- // // CTreeViewListControl // // This control has N columns, with a tree view in the leftmost column. // --------------------------------------------------------------------------------- // class CTreeViewListControl : public vgui::Panel { DECLARE_CLASS_SIMPLE( CTreeViewListControl, Panel ); public: CTreeViewListControl( vgui::Panel *pParent, const char *pName ); // Set the tree view to be displayed on the left. If this isn't set, then nothing displays in here. virtual void SetTreeView( vgui::TreeView *pTree ); // Set the height of the title bar. virtual void SetTitleBarInfo( vgui::HFont hFont, int titleBarHeight ); // Set the color to draw the border lines in. virtual void SetBorderColor( Color clr ); // Initialize the column headers.. This info includes the tree view on the left, so this virtual void SetNumColumns( int nColumns ); virtual int GetNumColumns() const; // ciFlags is a combination of CI_ flags. virtual void SetColumnInfo( int iColumn, const char *pTitle, int width, int ciFlags=0 ); // Use this to render your stuff. Iterate over the rows in the tree view and virtual int GetNumRows(); virtual int GetTreeItemAtRow( int iRow ); // You can use m_pTree->GetItemData to get at the data for the row. // Use this to find out the client area to render in for each grid element. // The returned box is inclusive. // The rule is that the the top and left pixels in each grid element are reserved for lines. virtual void GetGridElementBounds( int iColumn, int iRow, int &left, int &top, int &right, int &bottom ); virtual vgui::TreeView *GetTree(); virtual int GetTitleBarHeight(); virtual int GetScrollBarSize(); // Overrides. public: // This is where it recalculates the row infos. virtual void PerformLayout(); // Usually, you'll want to override paint. After calling the base, use GetNumRows() to // iterate over the data in the tree control and fill in the other columns. virtual void Paint(); virtual void PostChildPaint(); // You can override this to change the way the title bars are drawn. virtual void DrawTitleBars(); public: enum { // By default, column header text is centered. CI_HEADER_LEFTALIGN =0x0001 }; protected: void RecalculateRows(); void RecalculateRows_R( int index ); void RecalculateColumns(); private: vgui::TreeView *m_pTree; class CColumnInfo { public: CColumnInfo() { m_Width = m_Left = m_Right = m_ciFlags = 0; } CUtlSymbol m_Title; int m_Width; int m_Left; int m_Right; int m_ciFlags; // Combination of CI_ flags. }; CUtlVector m_Columns; vgui::HFont m_TitleBarFont; int m_TitleBarHeight; // These are indices into the tree view. CUtlVector m_Rows; Color m_BorderColor; }; } // namespace #endif // TREEVIEWLISTCONTROL_H