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