summaryrefslogtreecommitdiff
path: root/vgui2/src/VPanel.h
blob: 754fcfd846ac5497f7ad5311d7e93d5b4660f780 (plain) (blame)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//===========================================================================//

#ifndef VPANEL_H
#define VPANEL_H

#ifdef _WIN32
#pragma once
#endif

#include <vgui/Dar.h>
#include <vgui/IPanel.h>

#ifdef GetClassName
#undef GetClassName
#endif

namespace vgui
{

	class SurfaceBase;
	class IClientPanel;
	struct SerialPanel_t;

	//-----------------------------------------------------------------------------
	// Purpose: VGUI private implementation of panel
	//-----------------------------------------------------------------------------
	class VPanel
	{
	public:
		VPanel();
		virtual ~VPanel();

		virtual void Init(IClientPanel *attachedClientPanel);

		virtual SurfacePlat *Plat();
		virtual void SetPlat(SurfacePlat *pl);

		virtual HPanel GetHPanel() { return _hPanel; } // safe pointer handling
		virtual void SetHPanel(HPanel hPanel) { _hPanel = hPanel; }

		virtual bool IsPopup();
		virtual void SetPopup(bool state);
		virtual bool IsFullyVisible();

		virtual void SetPos(int x, int y);
		virtual void GetPos(int &x, int &y);
		virtual void SetSize(int wide,int tall);
		virtual void GetSize(int& wide,int& tall);
		virtual void SetMinimumSize(int wide,int tall);
		virtual void GetMinimumSize(int& wide,int& tall);
		virtual void SetZPos(int z);
		virtual int  GetZPos();

		virtual void GetAbsPos(int &x, int &y);
		virtual void GetClipRect(int &x0, int &y0, int &x1, int &y1);
		virtual void SetInset(int left, int top, int right, int bottom);
		virtual void GetInset(int &left, int &top, int &right, int &bottom);

		virtual void Solve();

		virtual void SetVisible(bool state);
		virtual void SetEnabled(bool state);
		virtual bool IsVisible();
		virtual bool IsEnabled();
		virtual void SetParent(VPanel *newParent);
		virtual int GetChildCount();
		virtual VPanel *GetChild(int index);
		virtual VPanel *GetParent();
		virtual void MoveToFront();
		virtual void MoveToBack();
		virtual bool HasParent(VPanel *potentialParent);

		virtual CUtlVector< VPanel * > &GetChildren();

		// gets names of the object (for debugging purposes)
		virtual const char *GetName();
		virtual const char *GetClassName();

		virtual HScheme GetScheme();

		// handles a message
		virtual void SendMessage(KeyValues *params, VPANEL ifromPanel);

		// wrapper to get Client panel interface
		virtual IClientPanel *Client() { return _clientPanel; }

		// input interest
		virtual void SetKeyBoardInputEnabled(bool state);
		virtual void SetMouseInputEnabled(bool state);
		virtual bool IsKeyBoardInputEnabled();
		virtual bool IsMouseInputEnabled();

		virtual bool IsTopmostPopup() const;
		virtual void SetTopmostPopup( bool bEnable );

		// sibling pins
		virtual void SetSiblingPin(VPanel *newSibling, byte iMyCornerToPin = 0, byte iSiblingCornerToPinTo = 0 );

	public:
		virtual void GetInternalAbsPos(int &x, int &y);
		virtual void TraverseLevel( int val );

	private:
		Dar<VPanel*> _childDar;
		VPanel *_parent;
		SurfacePlat	*_plat;	// platform-specific data
		HPanel _hPanel;

		// our companion Client panel
		IClientPanel *_clientPanel;

		short _pos[2];
		short _size[2];
		short _minimumSize[2];

		short _inset[4];
		short _clipRect[4];
		short _absPos[2];

		short _zpos;	// z-order position

		bool _visible : 1;
		bool _enabled : 1;
		bool _popup : 1;
		bool _mouseInput : 1; // used for popups
		bool _kbInput : 1;
		bool _isTopmostPopup : 1;

		VPanel  *_pinsibling;
		byte	_pinsibling_my_corner;
		byte	_pinsibling_their_corner;

		int	 m_nMessageContextId;
		int m_nThinkTraverseLevel;
		HPanel _clientPanelHandle; // Temp to check if _clientPanel is valid.
	};

}


#endif // VPANEL_H