1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#ifndef TREEVIEWLISTCONTROL_H
#define TREEVIEWLISTCONTROL_H
#ifdef _WIN32
#pragma once
#endif
#include <utllinkedlist.h>
#include <utlvector.h>
#include <vgui/VGUI.h>
#include <vgui_controls/Panel.h>
#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<CColumnInfo> m_Columns;
vgui::HFont m_TitleBarFont;
int m_TitleBarHeight;
// These are indices into the tree view.
CUtlVector<int> m_Rows;
Color m_BorderColor;
};
} // namespace
#endif // TREEVIEWLISTCONTROL_H
|