diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/vgui_controls/PHandle.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/vgui_controls/PHandle.h')
| -rw-r--r-- | public/vgui_controls/PHandle.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/public/vgui_controls/PHandle.h b/public/vgui_controls/PHandle.h new file mode 100644 index 0000000..959ee4a --- /dev/null +++ b/public/vgui_controls/PHandle.h @@ -0,0 +1,86 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef PHANDLE_H +#define PHANDLE_H + +#ifdef _WIN32 +#pragma once +#endif + +#include <vgui/VGUI.h> + +namespace vgui +{ + +class Panel; + +//----------------------------------------------------------------------------- +// Purpose: Safe pointer class for handling Panel or derived panel classes +//----------------------------------------------------------------------------- +class PHandle +{ +public: + PHandle() : m_iPanelID(INVALID_PANEL) {} //m_iSerialNumber(0), m_pListEntry(0) {} + + Panel *Get(); + Panel *Set( Panel *pPanel ); + Panel *Set( HPanel hPanel ); + + operator Panel *() { return Get(); } + Panel * operator ->() { return Get(); } + Panel * operator = (Panel *pPanel) { return Set(pPanel); } + + bool operator == (Panel *pPanel) { return (Get() == pPanel); } + operator bool () { return Get() != 0; } + +private: + HPanel m_iPanelID; +}; + +//----------------------------------------------------------------------------- +// Purpose: Safe pointer class to just convert between VPANEL's and PHandle +//----------------------------------------------------------------------------- +class VPanelHandle +{ +public: + VPanelHandle() : m_iPanelID(INVALID_PANEL) {} + + VPANEL Get(); + VPANEL Set( VPANEL pPanel ); + + operator VPANEL () { return Get(); } + VPANEL operator = (VPANEL pPanel) { return Set(pPanel); } + + bool operator == (VPANEL pPanel) { return (Get() == pPanel); } + operator bool () { return Get() != 0; } + +private: + HPanel m_iPanelID; +}; + +//----------------------------------------------------------------------------- +// Purpose: DHANDLE is a templated version of PHandle +//----------------------------------------------------------------------------- +template< class PanelType > +class DHANDLE : public PHandle +{ +public: + PanelType *Get() { return (PanelType *)PHandle::Get(); } + PanelType *Set( PanelType *pPanel ) { return (PanelType *)PHandle::Set(pPanel); } + PanelType *Set( HPanel hPanel ) { return (PanelType *)PHandle::Set(hPanel); } + + operator PanelType *() { return (PanelType *)PHandle::Get(); } + PanelType * operator ->() { return (PanelType *)PHandle::Get(); } + PanelType * operator = (PanelType *pPanel) { return (PanelType *)PHandle::Set(pPanel); } + bool operator == (Panel *pPanel) { return (PHandle::Get() == pPanel); } + operator bool () { return PHandle::Get() != NULL; } +}; + +}; + +#endif // PHANDLE_H |