Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

190 lines
6.0 KiB

//========= 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