//========= Copyright Valve Corporation, All rights reserved. ============// // //============================================================================= #ifndef ITEMTEST_CONTROLS_H #define ITEMTEST_CONTROLS_H #ifdef _WIN32 #pragma once #endif // Valve includes #include "itemtest/itemtest.h" #include "tier1/utlstring.h" #include "vgui_controls/Label.h" #include "vgui_controls/WizardPanel.h" #include "vgui_controls/WizardSubPanel.h" #include "vgui_controls/FileOpenStateMachine.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- class vgui::CheckButton; class vgui::PanelListPanel; class vgui::TextEntry; class vgui::ComboBox; class vgui::TextEntry; class CDualPanelList; class CVmtEntry; //============================================================================= // //============================================================================= class CStatusLabel : public vgui::Label { DECLARE_CLASS_SIMPLE( CStatusLabel, vgui::Label ); public: CStatusLabel( vgui::Panel *pPanel, const char *pszName, bool bValid = false ); // From vgui::Label virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); // New functions virtual void SetValid( bool bValid ); virtual bool GetValid() const; protected: bool m_bValid; Color m_cValid; Color m_cInvalid; void UpdateColors(); }; //============================================================================= // //============================================================================= class CItemUploadSubPanel : public vgui::WizardSubPanel { DECLARE_CLASS_SIMPLE( CItemUploadSubPanel, vgui::WizardSubPanel ); public: CItemUploadSubPanel( vgui::Panel *pParent, const char *pszName, const char *pszNextName ); // From vgui::Panel virtual void PerformLayout(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); // From vgui::WizardSubPanel virtual void OnDisplay(); virtual vgui::WizardSubPanel *GetNextSubPanel(); // Sucks data from the asset into the GUI virtual void UpdateGUI() { AssertMsg1( 0, "Implement UpdateGUI in base class: %s", GetPanelClassName() ); } // Sets the status labels virtual bool UpdateStatus(); protected: CUtlString m_sNextName; // The name of the next wizard sub panel vgui::Label *m_pLabel; // Label at the top of the wizard sub panel vgui::PanelListPanel *m_pPanelListPanel; // Standard list of widgets to set parameters CStatusLabel *m_pStatusLabel; // Whether the overall panel is valid or not vgui::Label *m_pStatusText; // The text for the overall status // New functions void AddStatusPanels( const char *pszPrefix ); void SetStatus( bool bValid, const char *pszPrefix, const char *pszMessage = NULL, bool bHide = false ); }; //============================================================================= // //============================================================================= class CGlobalSubPanel : public CItemUploadSubPanel { DECLARE_CLASS_SIMPLE( CGlobalSubPanel, CItemUploadSubPanel ); public: CGlobalSubPanel( vgui::Panel *pParent, const char *pszName, const char *pszNextName ); // From CItemUploadSubPanel virtual void UpdateGUI(); virtual bool UpdateStatus(); MESSAGE_FUNC_PTR( OnTextChanged, "TextChanged", panel ); MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel ); protected: vgui::TextEntry *m_pNameTextEntry; vgui::ComboBox *m_pClassComboBox; vgui::TextEntry *m_pSteamTextEntry; vgui::CheckButton *m_pAutoSkinCheckButton; }; //============================================================================= // //============================================================================= class CGeometrySubPanel : public CItemUploadSubPanel, public vgui::IFileOpenStateMachineClient { DECLARE_CLASS_SIMPLE( CGeometrySubPanel, CItemUploadSubPanel ); public: CGeometrySubPanel( vgui::Panel *pParent, const char *pszName, const char *pszNextName ); // From CItemUploadSubpanel virtual void UpdateGUI(); virtual bool UpdateStatus(); // From IFileOpenStateMachineClient virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pszFileFormat, KeyValues *pContextKeyValues ); virtual bool OnReadFileFromDisk( const char *pszFileName, const char *pszFileFormat, KeyValues *pContextKeyValues ); virtual bool OnWriteFileToDisk( const char *pszFileName, const char *pszFileFormat, KeyValues *pContextKeyValues ); MESSAGE_FUNC_INT( OnOpen, "Open", nLodIndex ); MESSAGE_FUNC_INT( OnDelete, "Delete", nLodIndex ); protected: vgui::FileOpenStateMachine *m_pFileOpenStateMachine; void AddGeometry(); }; //============================================================================= // //============================================================================= class CMaterialSubPanel : public CItemUploadSubPanel, public vgui::IFileOpenStateMachineClient { DECLARE_CLASS_SIMPLE( CMaterialSubPanel, CItemUploadSubPanel ); public: CMaterialSubPanel( vgui::Panel *pParent, const char *pszName, const char *pszNextName ); // From CItemUploadSubpanel virtual void InvalidateLayout(); virtual void UpdateGUI(); virtual bool UpdateStatus(); // From IFileOpenStateMachineClient virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pszFileFormat, KeyValues *pContextKeyValues ); virtual bool OnReadFileFromDisk( const char *pszFileName, const char *pszFileFormat, KeyValues *pContextKeyValues ); virtual bool OnWriteFileToDisk( const char *pszFileName, const char *pszFileFormat, KeyValues *pContextKeyValues ); enum Browse_t { kCommon, kRed, kBlue, kNormal }; void Browse( CVmtEntry *pVmtEntry, Browse_t nBrowseType ); CTargetVMT *GetTargetVMT( int nTargetVMTIndex ); protected: vgui::FileOpenStateMachine *m_pFileOpenStateMachine; void AddMaterial(); }; //============================================================================= // //============================================================================= class CFinalSubPanel : public CItemUploadSubPanel { DECLARE_CLASS_SIMPLE( CFinalSubPanel, CItemUploadSubPanel ); public: CFinalSubPanel( vgui::Panel *pParent, const char *pszName, const char *pszNextName ); // From CItemUploadSubPanel virtual void UpdateGUI(); virtual bool UpdateStatus(); virtual void OnCommand( const char *command ); virtual void PerformLayout(); MESSAGE_FUNC( OnQuitApp, "QuitApp" ); void OnZip(); protected: void OnGather(); void OnStudioMDL(); void OnHlmv(); void OnExplore( bool bMaterial, bool bContent); bool GetHlmvCmd( CFmtStrMax &sHlmvCmd ); vgui::Button *m_pHLMVButton; vgui::Label *m_pHLMVLabel; vgui::Button *m_pExploreMaterialContentButton; vgui::Label *m_pExploreMaterialContentLabel; vgui::Button *m_pExploreModelContentButton; vgui::Label *m_pExploreModelContentLabel; vgui::Button *m_pExploreMaterialGameButton; vgui::Label *m_pExploreMaterialGameLabel; vgui::Button *m_pExploreModelGameButton; vgui::Label *m_pExploreModelGameLabel; }; //============================================================================= // //============================================================================= class CItemUploadWizard : public vgui::WizardPanel { DECLARE_CLASS_SIMPLE( CItemUploadWizard, vgui::WizardPanel ); public: CItemUploadWizard( vgui::Panel *pParent, const char *pszName ); virtual ~CItemUploadWizard(); void Run(); void UpdateGUI(); // This should be templatized but this is taking too long to write already... CAssetTF &Asset() { return m_asset; } virtual void OnFinishButton(); CItemUploadSubPanel *GetCurrentItemUploadSubPanel() { return dynamic_cast< CItemUploadSubPanel * >( GetCurrentSubPanel() ); } protected: friend class CItemUploadSubPanel; CUtlVector< vgui::DHANDLE< vgui::WizardSubPanel > > m_hSubPanelList; CAssetTF m_asset; CFinalSubPanel *m_pFinalSubPanel; }; //============================================================================= // //============================================================================= class CItemUploadDialog : public vgui::Frame { DECLARE_CLASS_SIMPLE( CItemUploadDialog, vgui::Frame ); public: CItemUploadDialog( vgui::Panel *pParent, const char *pszName ); ~CItemUploadDialog(); }; //----------------------------------------------------------------------------- // //----------------------------------------------------------------------------- extern CItemUploadDialog *g_pItemUploadDialog; #endif // ITEMTEST_CONTROLS_H