diff options
Diffstat (limited to 'utils/itemtest_controls/finalsubpanel.cpp')
| -rw-r--r-- | utils/itemtest_controls/finalsubpanel.cpp | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/utils/itemtest_controls/finalsubpanel.cpp b/utils/itemtest_controls/finalsubpanel.cpp new file mode 100644 index 0000000..4828308 --- /dev/null +++ b/utils/itemtest_controls/finalsubpanel.cpp @@ -0,0 +1,410 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//============================================================================= + + +// Valve includes +#include "itemtest/itemtest_controls.h" +#include "vgui_controls/ComboBox.h" +#include "vgui_controls/MenuItem.h" +#include "vgui_controls/PanelListPanel.h" +#include "vgui/ISystem.h" +#include "vgui_controls/MessageBox.h" +#include "tier1/fmtstr.h" + + +// Last include +#include <tier0/memdbgon.h> + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +CFinalSubPanel::CFinalSubPanel( vgui::Panel *pParent, const char *pszName, const char *pszNextName ) +: BaseClass( pParent, pszName, pszNextName ) +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + return; + + { + m_pHLMVButton = new vgui::Button( this, "hlmvButton", "#hlmvButton", this, "Hlmv" ); + m_pHLMVLabel = new vgui::Label( this, "hlmvLabel", "#hlmvLabel" ); + + CFmtStrMax sCmd; + if ( GetHlmvCmd( sCmd ) ) + { + m_pHLMVLabel->SetText( sCmd.Access() ); + } + + m_pPanelListPanel->AddItem( m_pHLMVButton, m_pHLMVLabel ); + m_pHLMVButton->AddActionSignalTarget( this ); + } + + { + m_pExploreMaterialContentButton = new vgui::Button( this, "exploreMaterialContentButton", "#exploreMaterialContentButton", this, "ExploreMaterialContent" ); + m_pExploreMaterialContentLabel = new vgui::Label( this, "exploreMaterialContentLabel", "#exploreMaterialContentLabel" ); + + m_pPanelListPanel->AddItem( m_pExploreMaterialContentButton, m_pExploreMaterialContentLabel ); + } + + { + m_pExploreModelContentButton = new vgui::Button( this, "exploreModelContentButton", "#exploreModelContentButton", this, "ExploreModelContent" ); + m_pExploreModelContentLabel = new vgui::Label( this, "exploreModelContentLabel", "#exploreModelContentLabel" ); + + m_pPanelListPanel->AddItem( m_pExploreModelContentButton, m_pExploreModelContentLabel ); + } + + { + m_pExploreMaterialGameButton = new vgui::Button( this, "exploreMaterialGameButton", "#exploreMaterialGameButton", this, "ExploreMaterialGame" ); + m_pExploreMaterialGameLabel = new vgui::Label( this, "exploreMaterialGameLabel", "#exploreMaterialGameLabel" ); + + m_pPanelListPanel->AddItem( m_pExploreMaterialGameButton, m_pExploreMaterialGameLabel ); + } + + { + m_pExploreModelGameButton = new vgui::Button( this, "exploreModelGameButton", "#exploreModelGameButton", this, "ExploreModelGame" ); + m_pExploreModelGameLabel = new vgui::Label( this, "exploreModelGameLabel", "#exploreModelGameLabel" ); + + m_pPanelListPanel->AddItem( m_pExploreModelGameButton, m_pExploreModelGameLabel ); + } + + UpdateStatus(); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::PerformLayout() +{ + BaseClass::PerformLayout(); + + m_pPanelListPanel->SetFirstColumnWidth( 256 ); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::UpdateGUI() +{ + UpdateStatus(); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnCommand( const char *command ) +{ + if ( !V_strcmp( command, "Gather" ) ) + { + OnGather(); + } + else if ( !V_strcmp( command, "StudioMDL" ) ) + { + OnStudioMDL(); + } + else if ( !V_strcmp( command, "Zip" ) ) + { + OnZip(); + } + else if ( !V_strcmp( command, "Hlmv" ) ) + { + OnHlmv(); + } + else if ( !V_strcmp( command, "ExploreMaterialContent" ) ) + { + OnExplore( true, true ); + } + else if ( !V_strcmp( command, "ExploreModelContent" ) ) + { + OnExplore( false, true ); + } + else if ( !V_strcmp( command, "ExploreMaterialGame" ) ) + { + OnExplore( true, false ); + } + else if ( !V_strcmp( command, "ExploreModelGame" ) ) + { + OnExplore( false, false ); + } + else + { + BaseClass::OnCommand( command ); + } +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +bool CFinalSubPanel::UpdateStatus() +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + return false; + + SetStatus( true, "", NULL, true ); + + CAsset &asset = pItemUploadWizard->Asset(); + + { + char szBuf[ MAX_PATH ]; + + CUtlString sDir; + + asset.GetAbsoluteDir( sDir, "materialsrc", true ); + V_FixupPathName( szBuf, ARRAYSIZE( szBuf ), sDir.Get() ); + m_pExploreMaterialContentLabel->SetText( szBuf ); + + asset.GetAbsoluteDir( sDir, "materials", false ); + V_FixupPathName( szBuf, ARRAYSIZE( szBuf ), sDir.Get() ); + m_pExploreMaterialGameLabel->SetText( szBuf ); + + asset.GetAbsoluteDir( sDir, NULL, true ); + V_FixupPathName( szBuf, ARRAYSIZE( szBuf ), sDir.Get() ); + m_pExploreModelContentLabel->SetText( szBuf ); + + asset.GetAbsoluteDir( sDir, NULL, false ); + V_FixupPathName( szBuf, ARRAYSIZE( szBuf ), sDir.Get() ); + m_pExploreModelGameLabel->SetText( szBuf ); + + CFmtStrMax sCmd; + if ( GetHlmvCmd( sCmd ) ) + { + m_pHLMVLabel->SetText( sCmd.Access() ); + } + } + + return BaseClass::UpdateStatus(); + + return true; +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnGather() +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + { +// m_pGatherLabel->SetText( "Gather Failed" ); + return; + } + +// m_pGatherLabel->SetText( "OnGather" ); + + m_pExploreMaterialContentButton->SetEnabled( true ); + m_pExploreModelContentButton->SetEnabled( true ); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnStudioMDL() +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + { +// m_pStudioMDLLabel->SetText( "StudioMDL Failed" ); + return; + } + + OnGather(); + +// m_pStudioMDLLabel->SetText( "OnStudioMDL" ); +} + + +//----------------------------------------------------------------------------- +// +// The idea is that there could be three steps... +// 1. Gather data from user specified sources into properly named & organized content, make VMT's & QC +// 2. Run StudioMDL on the gathered content +// 3. Zip the results +// +// Right now all three steps are combined +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnZip() +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + + CAsset &asset = pItemUploadWizard->Asset(); + const bool bOk = asset.Compile(); + + vgui::MessageBox *pMsgDialog = NULL; + + if ( bOk ) + { + pMsgDialog = new vgui::MessageBox( "Compile Ok", "Compile Ok", this ); + } + else + { + pMsgDialog = new vgui::MessageBox( "Compile Failed", "Compile Failed", this ); + } + + pMsgDialog->SetOKButtonVisible( true ); + pMsgDialog->SetOKButtonText( "Quit ItemTest" ); + pMsgDialog->SetCommand( new KeyValues( "QuitApp" ) ); + + pMsgDialog->SetCancelButtonVisible( true ); + pMsgDialog->SetCancelButtonText( "Dismiss And Continue" ); + + pMsgDialog->AddActionSignalTarget( this ); + + pMsgDialog->DoModal(); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnHlmv() +{ + CUtlString sBinDir; + if ( !CItemUpload::GetBinDirectory( sBinDir ) ) + { + m_pHLMVLabel->SetText( "Cannot determine bin directory" ); + return; + } + + char szBinLaunchDir[ MAX_PATH ]; + V_ExtractFilePath( sBinDir.String(), szBinLaunchDir, ARRAYSIZE( szBinLaunchDir ) ); + + CFmtStrMax sCmd; + if ( !GetHlmvCmd( sCmd ) ) + return; + + if ( CItemUpload::RunCommandLine( sCmd.Access(), szBinLaunchDir, false ) ) + { + m_pHLMVLabel->SetText( sCmd.Access() ); + } + else + { + m_pHLMVLabel->SetText( "Hlmv launch failed" ); + } +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnExplore( bool bMaterial, bool bContent ) +{ + vgui::Label *pLabel = NULL; + if ( bMaterial ) + { + if ( bContent ) + { + pLabel = m_pExploreMaterialContentLabel; + } + else + { + pLabel = m_pExploreMaterialGameLabel; + } + } + else + { + if ( bContent ) + { + pLabel = m_pExploreModelContentLabel; + } + else + { + pLabel = m_pExploreModelGameLabel; + } + } + + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + { + pLabel->SetText( "Explore game failed" ); + return; + } + + CAsset &asset = pItemUploadWizard->Asset(); + CUtlString sDir; + const char *pszPrefix = bMaterial ? ( bContent ? "materialsrc" : "materials" ) : NULL; + asset.GetAbsoluteDir( sDir, pszPrefix, bContent ); + + char szBuf[ MAX_PATH ]; + V_FixupPathName( szBuf, ARRAYSIZE( szBuf ), sDir.Get() ); + vgui::system()->ShellExecute( "open", szBuf ); + + pLabel->SetText( szBuf ); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +void CFinalSubPanel::OnQuitApp() +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + return; + + pItemUploadWizard->Close(); +} + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +bool CFinalSubPanel::GetHlmvCmd( CFmtStrMax &sHlmvCmd ) +{ + CItemUploadWizard *pItemUploadWizard = dynamic_cast< CItemUploadWizard * >( GetWizardPanel() ); + if ( !pItemUploadWizard ) + { + m_pHLMVLabel->SetText( "Hlmv Failed" ); + return false; + } + + CUtlString sBinDir; + if ( !CItemUpload::GetBinDirectory( sBinDir ) ) + { + m_pHLMVLabel->SetText( "Cannot determine bin directory" ); + return false; + } + + CAsset &asset = pItemUploadWizard->Asset(); + CSmartPtr< CTargetMDL > pTargetMDL = asset.GetTargetMDL(); + if ( !pTargetMDL.IsValid() ) + { + m_pHLMVLabel->SetText( "No TargetMDL" ); + return false; + } + + CUtlString sMdlPath; + if ( !pTargetMDL->GetOutputPath( sMdlPath ) ) + { + m_pHLMVLabel->SetText( "Cannot determine path to MDL" ); + return false; + } + + + if ( CItemUpload::GetDevMode() ) + { + sHlmvCmd.sprintf( "\"%s\\hlmv.exe\" \"%s\"", sBinDir.Get(), sMdlPath.Get() ); + } + else + { + CUtlString sVProjectDir; + if ( CItemUpload::GetVProjectDir( sVProjectDir ) ) + { + sHlmvCmd.sprintf( "\"%s\\hlmv.exe\" -allowdebug -game \"%s\" -nop4 \"%s\"", sBinDir.Get(), sVProjectDir.Get(), sMdlPath.Get() ); + } + else + { + m_pHLMVLabel->SetText( "Cannot determine VPROJECT (gamedir)" ); + return false; + } + } + + return true; +}
\ No newline at end of file |