|
|
//====== Copyright � 1996-2005, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#include "filesystem.h"
#include "matsys_controls/vmtpicker.h"
#include "matsys_controls/vmtpreviewpanel.h"
#include "vgui_controls/Splitter.h"
#include "vgui_controls/CheckButton.h"
#include "vgui_controls/Slider.h"
#include "vgui_controls/MenuButton.h"
#include "vgui_controls/Panel.h"
#include "matsys_controls/sheetsequencepanel.h"
#include "bitmap/psheet.h"
#include "keyvalues.h"
// NOTE: This has to be the last file included!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
// VMT Preview Toolbar - controls for tweaking the VMT preview
//-----------------------------------------------------------------------------
CVMTPreviewToolbar::CVMTPreviewToolbar( vgui::Panel *parent, const char *panelName, CVMTPicker *parentpicker ) : BaseClass( parent, panelName ), m_pParentPicker( parentpicker ) { vgui::CBoxSizer* pSizer = new vgui::CBoxSizer( vgui::ESLD_HORIZONTAL ); SetSizer( pSizer );
// buttons + controls
vgui::SizerAddArgs_t buttonAddArgs = vgui::SizerAddArgs_t().FixedSize(-1,18).Padding(2);
pSizer->AddSpacer( vgui::SizerAddArgs_t().Padding( 15 ) );
m_pPrevSeqButton = new vgui::Button( this, "PrevSeqButton", "<", this ); m_pPrevSeqButton->SetCommand( new KeyValues( "OnPrevSequence" ) ); pSizer->AddPanel( m_pPrevSeqButton, buttonAddArgs );
m_pSequenceSelection = new vgui::MenuButton( this, "SequenceSelection", "-" ); pSizer->AddPanel( m_pSequenceSelection, vgui::SizerAddArgs_t().FixedSize(120,18).Padding(2) );
m_pNextSeqButton = new vgui::Button( this, "NextSeqButton", ">", this ); m_pNextSeqButton->SetCommand( new KeyValues( "OnNextSequence" ) ); pSizer->AddPanel( m_pNextSeqButton, buttonAddArgs );
m_pSequenceSelection_Second = new vgui::MenuButton( this, "SequenceSelection", "(Color)" ); pSizer->AddPanel( m_pSequenceSelection_Second, buttonAddArgs );
m_pSheetPreviewSpeed = new vgui::Slider( this, "SheetPreviewSpeed" ); m_pSheetPreviewSpeed->SetRange( 5, 3000 ); m_pSheetPreviewSpeed->SetValue( 750 ); m_pSheetPreviewSpeed->AddActionSignalTarget( this ); pSizer->AddPanel( m_pSheetPreviewSpeed, vgui::SizerAddArgs_t().FixedSize(150,18).Padding(2) );
// preview panels
m_pSheetPanel = new CSheetSequencePanel(this, "sheetpanel"); m_pSheetPanel->AddActionSignalTarget( this ); m_pSequenceSelection->SetMenu( m_pSheetPanel );
m_pSheetPanel_Second = new CSheetSequencePanel(this, "sheetpanel_second"); m_pSheetPanel_Second->SetSecondSequenceView( true ); m_pSheetPanel_Second->AddActionSignalTarget( this ); m_pSequenceSelection_Second->SetMenu( m_pSheetPanel_Second );
UpdateToolbarGUI(); }
void CVMTPreviewToolbar::OnNextSequence( ) { int nSeq = m_pParentPicker->GetCurrentSequence(); nSeq = (nSeq + 1) % m_pParentPicker->GetSheetSequenceCount(); m_pParentPicker->SetSelectedSequence( nSeq ); UpdateToolbarGUI(); }
void CVMTPreviewToolbar::OnPrevSequence( ) { int nSeq = m_pParentPicker->GetCurrentSequence();
if ( nSeq == 0 ) { nSeq = m_pParentPicker->GetSheetSequenceCount()-1; } else { nSeq = (nSeq - 1) % m_pParentPicker->GetSheetSequenceCount(); }
m_pParentPicker->SetSelectedSequence( nSeq ); UpdateToolbarGUI(); }
void CVMTPreviewToolbar::OnSliderMoved( KeyValues *pData ) { vgui::Panel *pPanel = reinterpret_cast<vgui::Panel *>( const_cast<KeyValues*>(pData)->GetPtr("panel") );
if ( pPanel == m_pSheetPreviewSpeed ) { m_pParentPicker->SetSheetPreviewSpeed( m_pSheetPreviewSpeed->GetValue() ); } }
void CVMTPreviewToolbar::PopulateSequenceMenu( vgui::Menu *menu ) { menu->DeleteAllItems();
int nSequences = m_pParentPicker->GetSheetSequenceCount(); for ( int i = 0; i < nSequences; ++i ) { char sz[64]; Q_snprintf( sz, sizeof( sz ), "Sequence %d", i ); menu->AddMenuItem( "seqitem", sz, new KeyValues( "OnSelectSequence", "nSequenceNumber", i ), this ); } }
int CVMTPreviewToolbar::GetSequenceMenuItemCount( ) { return m_pParentPicker->GetSheetSequenceCount(); }
void CVMTPreviewToolbar::OnSelectSequence( int nSequenceNumber ) { m_pParentPicker->SetSelectedSequence(nSequenceNumber); UpdateToolbarGUI(); }
void CVMTPreviewToolbar::OnSheetSequenceSelected( KeyValues *pData ) { if ( pData->GetBool("bIsSecondSequence") ) { m_pParentPicker->SetSelectedSecondarySequence( pData->GetInt("nSequenceNumber") ); } else { m_pParentPicker->SetSelectedSequence( pData->GetInt("nSequenceNumber") ); } UpdateToolbarGUI(); }
void CVMTPreviewToolbar::ApplySchemeSettings(vgui::IScheme *pScheme) { BaseClass::ApplySchemeSettings(pScheme);
m_pSequenceSelection->SetFont( pScheme->GetFont( "DefaultVerySmall" ) ); }
void CVMTPreviewToolbar::UpdateToolbarGUI() { int nSequences = m_pParentPicker->GetSheetSequenceCount(); int nCurrentSequence = m_pParentPicker->GetCurrentSequence(); int nRealSeqNumber = m_pParentPicker->GetRealSequenceNumber(); bool bSecondPicker = CSheetExtended::IsMaterialSeparateAlphaColorMaterial( m_pParentPicker->GetMaterial() );
if ( nSequences == 0 ) { m_pSequenceSelection->SetText( "No Sequences" ); m_pSequenceSelection->SetEnabled(false); m_pNextSeqButton->SetEnabled(false); m_pPrevSeqButton->SetEnabled(false); m_pSequenceSelection_Second->SetVisible(false);
m_pSheetPanel->SetFromMaterial( NULL ); m_pSheetPanel_Second->SetFromMaterial( NULL ); } else { char sz[64]; Q_snprintf( sz, sizeof( sz ), "%d/%d Sequences (#%d)", nCurrentSequence+1, nSequences, nRealSeqNumber ); m_pSequenceSelection->SetText( sz ); m_pSequenceSelection->SetEnabled(true); m_pSequenceSelection_Second->SetVisible(bSecondPicker);
m_pNextSeqButton->SetEnabled(true); m_pPrevSeqButton->SetEnabled(true);
m_pSheetPanel->SetFromMaterial( m_pParentPicker->GetMaterial() ); m_pSheetPanel_Second->SetFromMaterial( m_pParentPicker->GetMaterial() ); }
InvalidateLayout(); }
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CVMTPicker::CVMTPicker( vgui::Panel *pParent, bool bAllowMultiselect ) : BaseClass( pParent, "VMT Files", "vmt", "materials", "vmtName" ) { // Horizontal splitter for preview
m_pPreviewSplitter = new vgui::Splitter( this, "PreviewSplitter", vgui::SPLITTER_MODE_VERTICAL, 1 ); vgui::Panel *pSplitterLeftSide = m_pPreviewSplitter->GetChild( 0 ); vgui::Panel *pSplitterRightSide = m_pPreviewSplitter->GetChild( 1 );
m_p2D3DSplitter = new vgui::Splitter( pSplitterRightSide, "2D3DSplitter", vgui::SPLITTER_MODE_HORIZONTAL, 1 ); vgui::Panel *pSplitterTopSide = m_p2D3DSplitter->GetChild( 0 ); vgui::Panel *pSplitterBottomSide = m_p2D3DSplitter->GetChild( 1 );
// VMT preview
m_pVMTPreview2D = new CVMTPreviewPanel( pSplitterTopSide, "VMTPreview2D" ); m_pVMTPreview3D = new CVMTPreviewPanel( pSplitterBottomSide, "VMTPreview3D" ); m_pVMTPreview3D->DrawIn3DMode( true );
m_pVMTPreviewToolbar = new CVMTPreviewToolbar( pSplitterBottomSide, "PreviewToolbar", this );
// Standard browser controls
CreateStandardControls( pSplitterLeftSide, bAllowMultiselect );
LoadControlSettingsAndUserConfig( "resource/vmtpicker.res" ); }
CVMTPicker::~CVMTPicker() { }
void CVMTPicker::SetSheetPreviewSpeed( float flPreviewSpeed ) { m_pVMTPreview2D->SetSheetPreviewSpeed( flPreviewSpeed ); m_pVMTPreview3D->SetSheetPreviewSpeed( flPreviewSpeed ); }
void CVMTPicker::SetSelectedSequence( int nSequence ) { m_pVMTPreview2D->SetSheetSequence( nSequence ); m_pVMTPreview3D->SetSheetSequence( nSequence ); }
void CVMTPicker::SetSelectedSecondarySequence( int nSequence ) { m_pVMTPreview2D->SetSecondarySheetSequence( nSequence ); m_pVMTPreview3D->SetSecondarySheetSequence( nSequence ); }
int CVMTPicker::GetSheetSequenceCount() { return m_pVMTPreview3D->GetSheetSequenceCount(); }
int CVMTPicker::GetCurrentSequence() { return m_pVMTPreview3D->GetCurrentSequence(); }
int CVMTPicker::GetCurrentSecondarySequence() { return m_pVMTPreview3D->GetCurrentSecondarySequence(); }
int CVMTPicker::GetRealSequenceNumber() { return m_pVMTPreview3D->GetRealSequenceNumber(); }
void CVMTPicker::CustomizeSelectionMessage( KeyValues *pKeyValues ) { BaseClass::CustomizeSelectionMessage(pKeyValues);
pKeyValues->SetInt( "sheet_sequence_count", GetSheetSequenceCount() ); pKeyValues->SetInt( "sheet_sequence_number", GetCurrentSequence() ); pKeyValues->SetInt( "sheet_sequence_secondary_number", GetCurrentSecondarySequence() ); }
CSheetExtended* CVMTPicker::GetSheet() { return m_pVMTPreview3D->GetSheet(); }
IMaterial* CVMTPicker::GetMaterial() { return m_pVMTPreview3D->GetMaterial(); }
//-----------------------------------------------------------------------------
// Derived classes have this called when the previewed asset changes
//-----------------------------------------------------------------------------
void CVMTPicker::OnSelectedAssetPicked( const char *pAssetName ) { m_pVMTPreview2D->SetVMT( pAssetName ); m_pVMTPreview3D->SetVMT( pAssetName ); m_pVMTPreviewToolbar->UpdateToolbarGUI(); }
//-----------------------------------------------------------------------------
//
// Purpose: Modal picker frame
//
//-----------------------------------------------------------------------------
CVMTPickerFrame::CVMTPickerFrame( vgui::Panel *pParent, const char *pTitle, bool bAllowMultiselect ) : BaseClass( pParent ) { SetAssetPicker( new CVMTPicker( this, bAllowMultiselect ) ); LoadControlSettingsAndUserConfig( "resource/vmtpickerframe.res" ); SetTitle( pTitle, false ); }
|