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.
410 lines
11 KiB
410 lines
11 KiB
//========= 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; |
|
} |