diff options
Diffstat (limited to 'public/vgui_controls/BuildGroup.h')
| -rw-r--r-- | public/vgui_controls/BuildGroup.h | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/public/vgui_controls/BuildGroup.h b/public/vgui_controls/BuildGroup.h new file mode 100644 index 0000000..a0fcf35 --- /dev/null +++ b/public/vgui_controls/BuildGroup.h @@ -0,0 +1,190 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef VGUI_BUILDGROUP_H +#define VGUI_BUILDGROUP_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "tier1/utlvector.h" +#include "tier1/utldict.h" +#include "tier1/utlsymbol.h" +#include <vgui/VGUI.h> +#include <vgui/Dar.h> +#include <vgui/Cursor.h> +#include <vgui/IScheme.h> +#include <vgui_controls/Controls.h> +#include <vgui_controls/PHandle.h> +#include "tier1/utlhandletable.h" + +class KeyValues; + +namespace vgui +{ + +//----------------------------------------------------------------------------- +// Purpose: a BuildGroup is a list of panels contained in a window (the contextPanel) +// Members of this group are viewable and editable in Build Mode, via the BuildModeDialog wizard +//----------------------------------------------------------------------------- +class BuildGroup +{ + DECLARE_HANDLES( BuildGroup, 20 ); + +public: + BuildGroup(Panel *parentPanel, Panel *contextPanel); + ~BuildGroup(); + + // Toggle build mode on/off + virtual void SetEnabled(bool state); + + // Check if buildgroup is enabled + virtual bool IsEnabled(); + + // Return the currently selected panel + virtual Panel *GetCurrentPanel(); + + // Load the control settings from file + virtual void LoadControlSettings(const char *controlResourceName, const char *pathID = NULL, KeyValues *pPreloadedKeyValues = NULL, KeyValues *pConditions = NULL ); + + // Reload the control settings from file + void ReloadControlSettings(); + + // changes which control settings are currently loaded + void ChangeControlSettingsFile(const char *controlResourceName); + + // Save control settings from file, using the same resource + // name as what LoadControlSettings() was called with + virtual bool SaveControlSettings(); + + // Serialize settings from a resource data container + virtual void ApplySettings(KeyValues *resourceData); + + // Serialize settings to a resource data container + virtual void GetSettings(KeyValues *resourceData); + + // Remove all objects in the current control group + virtual void RemoveSettings(); + + // Get a new unique fieldname for a new control + void GetNewFieldName(char *newFieldName, int newFieldNameSize, Panel *newPanel); + + // Check if a control name is already taken + Panel *FieldNameTaken(const char *fieldName); + + // Add a new control (via the BuildModeDialog) + Panel *NewControl( KeyValues *controlKeys, int x=0, int y=0); + Panel *NewControl( const char *name, int x=0, int y=0); + + // Set the panel from which the build group gets all it's object creation information + virtual void SetContextPanel(Panel *contextPanel); + + //Get the panel that build group is pointed at. + virtual Panel *GetContextPanel(); + + // Get the list of panels in the buildgroup + CUtlVector<PHandle> *GetPanelList(); + + // Get the resource file name used + virtual const char *GetResourceName(void) { return m_pResourceName; } + + virtual void PanelAdded(Panel* panel); + + virtual bool MousePressed(MouseCode code,Panel* panel); + virtual bool MouseReleased(MouseCode code,Panel* panel); + + // Get the list of panels that are currently selected + virtual CUtlVector<PHandle> *GetControlGroup(); + + // Toggle ruler display on/off + virtual void ToggleRulerDisplay(); + + // Toggle visibility of ruler number labels + virtual void SetRulerLabelsVisible(bool state); + + // Check if ruler display is activated + virtual bool HasRulersOn(); + + // Draw Rulers on screen + virtual void DrawRulers(); + + // registers that a control settings file may be loaded + // use when the dialog may have multiple states and the editor will need to be able to switch between them + void RegisterControlSettingsFile(const char *controlResourceName, const char *pathID = NULL); + + // iterator for registered files + int GetRegisteredControlSettingsFileCount(); + const char *GetRegisteredControlSettingsFileByIndex(int index); + + // dialog variables + KeyValues *GetDialogVariables(); + + // conditional keys for selectively reading keyvalues + void ProcessConditionalKeys( KeyValues *pDat, KeyValues *pConditions ); + + static bool PrecacheResFile( const char* pszResFileName ); + static void ClearResFileCache(); + +protected: + virtual bool CursorMoved(int x, int y, Panel *panel); + virtual bool MouseDoublePressed(MouseCode code, Panel *panel); + virtual bool KeyCodeTyped(KeyCode code, Panel *panel); + virtual bool KeyCodeReleased(KeyCode code, Panel *panel ); + virtual void ApplySchemeSettings(IScheme *pScheme); + virtual bool KeyTyped( wchar_t unichar, Panel *panel ); + + virtual HCursor GetCursor(Panel *panel); + +private: + void ApplySnap(Panel* panel); + Panel *CreateBuildDialog(); + void ActivateBuildDialog(); + void DeleteAllControlsCreatedByControlSettingsFile(); + + bool _enabled; + int _snapX; + int _snapY; + HCursor _cursor_sizenwse; + HCursor _cursor_sizenesw; + HCursor _cursor_sizewe; + HCursor _cursor_sizens; + HCursor _cursor_sizeall; + bool _dragging; + MouseCode _dragMouseCode; + int _dragStartPanelPos[2]; + int _dragStartCursorPos[2]; + int _dragStartPanelSize[ 2 ]; + Panel * _currentPanel; + CUtlVector<PHandle> _panelDar; + char *m_pResourceName; + char *m_pResourcePathID; + PHandle m_hBuildDialog; + Panel *m_pBuildContext; // the panel from which the build dialog gets all the information it needs + Panel *m_pParentPanel; // panel to create new controls in + CUtlVector<PHandle> _controlGroup; // grouped panels + CUtlVector<int> _groupDeltaX; // x offsets of panels in group from the selected panel + CUtlVector<int> _groupDeltaY; // y offsets of panels in group from the selected panel + Label *_rulerNumber[4]; // 4 numbers to label rulers with + bool _showRulers; // toggles ruler display + CUtlVector<CUtlSymbol> m_RegisteredControlSettingsFiles; + + friend class Panel; + + static CUtlDict< KeyValues* > m_dictCachedResFiles; +}; + + +//----------------------------------------------------------------------------- +// Handle to a build group +//----------------------------------------------------------------------------- +typedef CUtlHandle<BuildGroup> HBuildGroup; + + +} // namespace vgui + +#endif // VGUI_BUILDGROUP_H |