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.
520 lines
16 KiB
520 lines
16 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef TF_QUEST_EDITOR_PANEL_H |
|
#define TF_QUEST_EDITOR_PANEL_H |
|
|
|
#include "cbase.h" |
|
#include "vgui_controls/EditablePanel.h" |
|
#include "vgui_controls/Frame.h" |
|
#include "vgui_controls/ComboBox.h" |
|
#include "tf_quest_restriction.h" |
|
#include "clientmode_tf.h" |
|
#include "vgui_controls/ScrollableEditablePanel.h" |
|
#include "tf_controls.h" |
|
|
|
|
|
#ifdef STAGING_ONLY |
|
|
|
using namespace vgui; |
|
|
|
#define MAX_QUEST_NAME_LENGTH 256 |
|
#define MAX_QUEST_DESC_LENGTH 4096 |
|
|
|
class CEditorQuest; |
|
class IEditorObjectParameter; |
|
class IEditableDataType; |
|
|
|
struct EditorObjectInitStruct |
|
{ |
|
Panel *pParent; |
|
const char* m_pszKeyName; |
|
int nFlags; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class IEditorObject : public EditablePanel |
|
{ |
|
public: |
|
|
|
DECLARE_CLASS_SIMPLE( IEditorObject, EditablePanel ); |
|
IEditorObject( EditorObjectInitStruct init ); |
|
|
|
virtual int GetContentTall() const = 0; |
|
virtual void PerformLayout() OVERRIDE; |
|
virtual void OnSizeChanged( int newWide, int newTall ) OVERRIDE; |
|
|
|
virtual void OnThink() OVERRIDE; |
|
|
|
void SetOwningEditable( const IEditableDataType* pEditable ) { m_pOwningEditable = pEditable; } |
|
void SetFlag( int nFlag, bool bValue ) { bValue ? m_Flags |= nFlag : m_Flags &= (~nFlag); } |
|
bool IsFlagSet( int nFlag, bool bCheckUpTree = false ) const; |
|
|
|
enum ESerializeAction |
|
{ |
|
WRITE_THIS_AND_CONTINUE, |
|
SKIP_THIS_AND_CONTINUE, |
|
SKIP_THIS_AND_CHILDREN |
|
}; |
|
|
|
virtual void SerializeToKVs( KeyValues* pKV, const IEditableDataType* pCallingEditable ) const = 0; |
|
ESerializeAction ShouldWrite( const IEditableDataType* pCallingEditable ) const; |
|
|
|
const char* GetKeyName() const { return m_szKeyName; } |
|
virtual void ClearPendingChangesFlag(); |
|
|
|
virtual bool HasChanges( bool bCheckChildren ) const { return m_bHasChanges; } |
|
|
|
protected: |
|
|
|
const IEditableDataType* GetOwningEditable() const; |
|
void InvalidateChain(); |
|
|
|
mutable bool m_bHasChanges; |
|
uint32 m_Flags; |
|
|
|
char m_szKeyName[MAX_QUEST_DESC_LENGTH]; |
|
|
|
private: |
|
const IEditableDataType* m_pOwningEditable; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class IEditableDataType |
|
{ |
|
public: |
|
|
|
enum EType |
|
{ |
|
TYPE_QUEST = 0, |
|
TYPE_OBJECTIVE_CONDITIONS, |
|
NUM_TYPES |
|
}; |
|
|
|
IEditableDataType( KeyValues* pKVData ); |
|
virtual ~IEditableDataType(); |
|
void CreatePanels( Panel* pParent ); |
|
void DestroyPanels(); |
|
bool MatchesCriteria( EType type, const char* pszName ) const; |
|
void SaveChangesToDisk(); // Writes all changes to disk |
|
void SaveEdits(); // Saves any changes that have been made with the controls. Does NOT write to disk. |
|
void DeleteEntry(); |
|
void RevertChanges(); |
|
void SetButton( Button* pButton ) { m_hButton = pButton; } |
|
Panel* GetButton() const { return m_hButton.Get(); } |
|
void CheckForChanges(); |
|
|
|
KeyValues* GetLiveData() const { return m_pKVLiveData; } |
|
virtual EType GetType() const = 0; |
|
|
|
protected: |
|
virtual void WriteDataToDisk( bool bDelete ) = 0; |
|
void WriteObjectToKeyValues( bool bDelete, KeyValues* pKVExistingFileData ); |
|
virtual IEditorObject* CreateEditableObject_Internal( Panel* pParent ) const = 0; |
|
void UpdateButton(); |
|
|
|
IEditorObject* m_pCurrentObject; |
|
KeyValues* m_pKVLiveData; |
|
KeyValues* m_pKVSavedData; |
|
bool m_bHasUnsavedChanges; |
|
mutable PHandle m_hButton; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CEditableQuestDataType : public IEditableDataType |
|
{ |
|
public: |
|
CEditableQuestDataType( KeyValues *pKV ) : IEditableDataType( pKV ) {} |
|
private: |
|
virtual void WriteDataToDisk( bool bDelete ) OVERRIDE; |
|
virtual EType GetType() const { return IEditableDataType::TYPE_QUEST; } |
|
virtual IEditorObject* CreateEditableObject_Internal( Panel* pParent ) const OVERRIDE; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CEditableObjectiveConditionDataType : public IEditableDataType |
|
{ |
|
public: |
|
CEditableObjectiveConditionDataType( KeyValues *pKV ) : IEditableDataType( pKV ) {} |
|
private: |
|
virtual void WriteDataToDisk( bool bDelete ) OVERRIDE; |
|
virtual EType GetType() const { return IEditableDataType::TYPE_OBJECTIVE_CONDITIONS; } |
|
virtual IEditorObject* CreateEditableObject_Internal( Panel* pParent ) const OVERRIDE; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Contains children |
|
//----------------------------------------------------------------------------- |
|
class CEditorObjectNode : public IEditorObject |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CEditorObjectNode, IEditorObject ); |
|
CEditorObjectNode( EditorObjectInitStruct init ); |
|
virtual ~CEditorObjectNode(); |
|
|
|
virtual void PerformLayout() OVERRIDE; |
|
virtual void OnCommand( const char *command ) OVERRIDE; |
|
virtual void MarkForDeletion() OVERRIDE; |
|
|
|
virtual int GetContentTall() const OVERRIDE; |
|
virtual void SerializeToKVs( KeyValues* pKV, const IEditableDataType* pCallingEditable ) const OVERRIDE; |
|
|
|
void AddChild( IEditorObject* pChild ); |
|
void RemoveChild( IEditorObject* pChild ); |
|
|
|
const CUtlVector< IEditorObject* >& GetChildren() const { return m_vecChildren; } |
|
int GetNextAvailableKeyNumber() const; |
|
|
|
virtual bool HasChanges( bool bCheckChildren ) const OVERRIDE; |
|
|
|
protected: |
|
|
|
virtual void RemoveNode(); |
|
virtual void ClearPendingChangesFlag() OVERRIDE; |
|
|
|
CUtlVector< IEditorObject* > m_vecChildren; |
|
|
|
private: |
|
|
|
Button *m_pDeleteButton; |
|
Button *m_pToggleCollapseButton; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Contains a single parameter that can be edited |
|
//----------------------------------------------------------------------------- |
|
class IEditorObjectParameter : public IEditorObject |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( IEditorObjectParameter, IEditorObject ); |
|
IEditorObjectParameter( EditorObjectInitStruct init, const char *pszLabelText ); |
|
~IEditorObjectParameter(); |
|
|
|
virtual void PerformLayout(); |
|
|
|
virtual int GetContentTall() const = 0; |
|
virtual const char *GetValue() const = 0; |
|
virtual void SerializeToKVs( KeyValues* pKV, const IEditableDataType* pCallingEditable ) const OVERRIDE; |
|
void UpdateSavedValue( const char* pszNewValue ) const; |
|
|
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); |
|
protected: |
|
|
|
mutable char m_szSavedValueBuff[MAX_QUEST_DESC_LENGTH]; // This is the value that's saved to disk |
|
|
|
private: |
|
virtual bool CheckForChanges() const; |
|
|
|
Label *m_pLabel; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CTextEntryEditorParam : public IEditorObjectParameter |
|
{ |
|
public: |
|
|
|
DECLARE_CLASS_SIMPLE( CTextEntryEditorParam, IEditorObjectParameter ); |
|
CTextEntryEditorParam( EditorObjectInitStruct init, const char *pszLabelText, const char *pszValue ); |
|
|
|
virtual void PerformLayout() OVERRIDE; |
|
|
|
virtual int GetContentTall() const OVERRIDE; |
|
TextEntry* GetTextEntry() const { return m_pTextEntry; } |
|
void SetTextEntryValue( const char* pszValue ); |
|
const char *GetValue() const OVERRIDE; |
|
|
|
private: |
|
|
|
TextEntry *m_pTextEntry; |
|
mutable char m_szValueBuff[MAX_QUEST_DESC_LENGTH]; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
DECLARE_AUTO_LIST( ILocalizationEditorParamAutoList ); |
|
class CLocalizationEditorParam : public CTextEntryEditorParam, public ILocalizationEditorParamAutoList |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CLocalizationEditorParam, CTextEntryEditorParam ); |
|
CLocalizationEditorParam( EditorObjectInitStruct init, const char *pszLabelText, const char *pszLocalizationToken ); |
|
|
|
const char *GetValue() const OVERRIDE; |
|
const char *GetLocalizationValue() const; |
|
|
|
private: |
|
virtual bool CheckForChanges() const OVERRIDE; |
|
|
|
char m_szLocalizationToken[MAX_QUEST_NAME_LENGTH]; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CComboBoxEditorParam : public IEditorObjectParameter |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CComboBoxEditorParam, IEditorObjectParameter ); |
|
CComboBoxEditorParam( EditorObjectInitStruct init, const char *pszLabelText ); |
|
|
|
virtual void PerformLayout() OVERRIDE; |
|
const char *GetValue() const OVERRIDE; |
|
|
|
virtual int GetContentTall() const OVERRIDE; |
|
void ClearComboBoxEntries() { m_pComboBox->RemoveAll(); } |
|
void AddComboBoxEntry( const char* pszText, bool bSelected, const char* pszWriteValue, const char* pszCommand ); |
|
ComboBox* GetComboBox() const { return m_pComboBox; } |
|
|
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); |
|
|
|
protected: |
|
|
|
ComboBox *m_pComboBox; |
|
mutable char m_szValueBuff[MAX_QUEST_DESC_LENGTH]; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CNewQuestObjectiveParam : public CComboBoxEditorParam |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CNewQuestObjectiveParam, CComboBoxEditorParam ); |
|
CNewQuestObjectiveParam( EditorObjectInitStruct init, const char *pszLabelText ); |
|
|
|
virtual void PerformLayout() OVERRIDE; |
|
virtual void OnCommand( const char *command ) OVERRIDE; |
|
|
|
private: |
|
Button *m_pAddButton; |
|
}; |
|
|
|
class CQuestObjectiveNode : public CEditorObjectNode |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CQuestObjectiveNode, CEditorObjectNode ); |
|
CQuestObjectiveNode( CEditorObjectNode* pParentNode, KeyValues* pKVObjective ); |
|
|
|
virtual void OnCommand( const char *command ) OVERRIDE; |
|
virtual void PerformLayout() OVERRIDE; |
|
|
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); |
|
MESSAGE_FUNC_PARAMS( OnObjectiveSelected, "ObjectiveSelected", data ); |
|
private: |
|
void PopulateAndSelectConditionsCombobox( int nSelectedDefIndex ); |
|
|
|
CComboBoxEditorParam* m_pDefIndexComboBox; |
|
Button* m_pSelectObjectiveButton; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class IOptionalExpandableBlock : public CEditorObjectNode |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( IOptionalExpandableBlock, CEditorObjectNode ); |
|
IOptionalExpandableBlock( EditorObjectInitStruct init, const char* pszButtonText ); |
|
|
|
virtual void InitControls( KeyValues* pKVBlock ); |
|
|
|
virtual void PerformLayout() OVERRIDE; |
|
virtual void OnCommand( const char *command ) OVERRIDE; |
|
|
|
protected: |
|
virtual void CreateNewControl( KeyValues* pKV ); |
|
|
|
private: |
|
virtual void CreateNewDefaultControl() = 0; |
|
virtual int GetMinCount() const = 0; |
|
|
|
Button *m_pAddButton; |
|
int m_nMinCount; |
|
}; |
|
|
|
|
|
class CQuestDescriptionNode : public IOptionalExpandableBlock |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CQuestDescriptionNode, IOptionalExpandableBlock ); |
|
CQuestDescriptionNode( EditorObjectInitStruct init ) : IOptionalExpandableBlock( init, "Add new Description" ) {} |
|
|
|
private: |
|
virtual void CreateNewControl( KeyValues* pKV ) OVERRIDE; |
|
virtual void CreateNewDefaultControl() OVERRIDE; |
|
virtual int GetMinCount() const OVERRIDE { return 1; } |
|
}; |
|
|
|
class CQuestNameNode : public IOptionalExpandableBlock |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CQuestNameNode, IOptionalExpandableBlock ); |
|
CQuestNameNode( EditorObjectInitStruct init ) : IOptionalExpandableBlock( init, "Add new Name" ) {} |
|
|
|
private: |
|
virtual void CreateNewControl( KeyValues* pKV ) OVERRIDE; |
|
virtual void CreateNewDefaultControl() OVERRIDE; |
|
virtual int GetMinCount() const OVERRIDE { return 1; } |
|
}; |
|
|
|
class CRequiredItemsParam : public IOptionalExpandableBlock |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CRequiredItemsParam, IOptionalExpandableBlock ); |
|
CRequiredItemsParam( EditorObjectInitStruct init ) : IOptionalExpandableBlock( init, "Add new Loaner Item Set" ) {} |
|
|
|
private: |
|
virtual void CreateNewControl( KeyValues* pKV ) OVERRIDE; |
|
virtual void CreateNewDefaultControl() OVERRIDE; |
|
virtual int GetMinCount() const OVERRIDE { return 0; } |
|
}; |
|
|
|
class CQualifyingItemsParam : public IOptionalExpandableBlock |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CQualifyingItemsParam, IOptionalExpandableBlock ); |
|
CQualifyingItemsParam( EditorObjectInitStruct init ) : IOptionalExpandableBlock( init, "Add new Qualifying Item" ) {} |
|
|
|
private: |
|
virtual void CreateNewControl( KeyValues* pKV ) OVERRIDE; |
|
virtual void CreateNewDefaultControl() OVERRIDE; |
|
virtual int GetMinCount() const OVERRIDE { return 0; } |
|
}; |
|
|
|
class CObjectiveExpandable : public IOptionalExpandableBlock |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CObjectiveExpandable, IOptionalExpandableBlock ); |
|
CObjectiveExpandable( EditorObjectInitStruct init ) : IOptionalExpandableBlock( init, "Add new Objective" ) {} |
|
|
|
private: |
|
virtual void CreateNewControl( KeyValues* pKV ) OVERRIDE; |
|
virtual void CreateNewDefaultControl() OVERRIDE; |
|
virtual int GetMinCount() const OVERRIDE { return 1; } |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CQuestObjectiveRestrictionNode : public CEditorObjectNode |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CQuestObjectiveRestrictionNode, CEditorObjectNode ); |
|
CQuestObjectiveRestrictionNode( EditorObjectInitStruct init, CTFQuestCondition *pCondition ); |
|
|
|
virtual void PerformLayout() OVERRIDE; |
|
|
|
CTFQuestCondition *GetCondition() { return m_pCondition; } |
|
|
|
void SetNewType( const char *pszType ); |
|
void SetNewEvent( const char *pszEvent ); |
|
|
|
private: |
|
|
|
virtual void RemoveNode() OVERRIDE; |
|
void CreateControlsForCondition(); |
|
void CreateAddOpportunityParam(); |
|
|
|
char m_szEventName[MAX_QUEST_NAME_LENGTH]; |
|
|
|
CTFQuestCondition *m_pCondition; |
|
CNewQuestObjectiveParam *m_pNewCondition; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CEditorQuest : public CEditorObjectNode |
|
{ |
|
public: |
|
CEditorQuest( KeyValues *pKV, Panel* pParent, const IEditableDataType* pEditable ); |
|
~CEditorQuest(); |
|
|
|
private: |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CQuestEditorPanel : public Frame |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CQuestEditorPanel, Frame ); |
|
|
|
CQuestEditorPanel( Panel *pParent, const char *pszName ); |
|
~CQuestEditorPanel() {} |
|
|
|
virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; |
|
virtual void ApplySettings( KeyValues *inResourceData ); |
|
virtual void PerformLayout() OVERRIDE; |
|
virtual void OnCommand( const char *command ) OVERRIDE; |
|
|
|
virtual void OnThink() OVERRIDE; |
|
|
|
void Deploy(); |
|
|
|
IEditableDataType* OpenForEdit( IEditableDataType::EType type, const char* pszName, Panel* pParent ); |
|
void CloseEdit( IEditableDataType* pEditable ); |
|
bool IsOpenForEdit( const IEditableDataType* pEditable ) const; |
|
|
|
const CUtlVector< IEditableDataType* >& GetEditableData() const { return m_vecEditableData; } |
|
|
|
IEditableDataType* CreateNewQuest(); |
|
IEditableDataType* CreateNewObjectiveCondition(); |
|
|
|
Button* GetButtonForEditable( const IEditableDataType* pEditable ) const; |
|
|
|
void CheckForChanges(); |
|
|
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); |
|
MESSAGE_FUNC_PARAMS( OnSelectQuestObjective, "SelectQuestObjective", data ); |
|
private: |
|
|
|
void UpdateButtons( IEditableDataType::EType type ); |
|
void ResetQuestSelectionState() { m_eCurrentSelectionMode = SELECTION_MODE_NONE; } |
|
|
|
template< typename T > |
|
IEditableDataType* AddNewEditableKVData( KeyValues* pKVConditionsData, const char* pszName ); |
|
|
|
void PopulateExistingQuests(); |
|
void OpenEditContextMenu(); |
|
|
|
CExScrollingEditablePanel* m_pButtonsContainers[ IEditableDataType::NUM_TYPES ]; |
|
CUtlVector< Button* > m_vecEditableButtons[ IEditableDataType::NUM_TYPES ]; |
|
TextEntry* m_pButtonsFilterTextEntry[ IEditableDataType::NUM_TYPES ]; |
|
|
|
CExScrollingEditablePanel *m_pEditingPanel; |
|
|
|
IEditableDataType* m_pCurrentOpenEdit; |
|
CUtlVector< IEditableDataType* > m_vecEditableData; |
|
CUtlVector< IEditableDataType* > m_vecOpenEdits; |
|
|
|
enum ESelectionMode_t |
|
{ |
|
SELECTION_MODE_NONE = 0, |
|
SELECTION_MODE_QUEST_OBJECTIVE, |
|
}; |
|
|
|
ESelectionMode_t m_eCurrentSelectionMode; |
|
PHandle m_hSelectionPanel; |
|
}; |
|
|
|
#endif // STAGING_ONLY |
|
#endif // TF_QUEST_EDITOR_PANEL_H
|
|
|