//======= Copyright (c) 1996-2009, Valve Corporation, All rights reserved. ====== // // CAttributeSheetSequencePickerPanel - Panel for editing int attributes that select a sprite sheet sequence // //=============================================================================== #include "dme_controls/attributesheetsequencepickerpanel.h" #include "FileSystem.h" #include "vgui_controls/MenuButton.h" #include "vgui_controls/FileOpenDialog.h" #include "dme_controls/AttributeTextEntry.h" #include "matsys_controls/sheetsequencepanel.h" #include "movieobjects/dmeparticlesystemdefinition.h" #include "tier1/keyvalues.h" #include "dme_controls/AttributeWidgetFactory.h" #include "movieobjects/dmeeditortypedictionary.h" // NOTE: This has to be the last file included! #include "tier0/memdbgon.h" using namespace vgui; //----------------------------------------------------------------------------- // // CNotifyMenuButton - MenuButton with a notify before the menu is shown // //----------------------------------------------------------------------------- class CNotifyMenuButton: public vgui::MenuButton { DECLARE_CLASS_SIMPLE( CNotifyMenuButton, vgui::MenuButton ); public: CNotifyMenuButton(CAttributeSheetSequencePickerPanel *parent, const char *panelName, const char *text); virtual void OnShowMenu(Menu *menu); private: CAttributeSheetSequencePickerPanel* m_pParent; }; CNotifyMenuButton::CNotifyMenuButton(CAttributeSheetSequencePickerPanel *parent, const char *panelName, const char *text): BaseClass(parent,panelName,text) { m_pParent = parent; } void CNotifyMenuButton::OnShowMenu(Menu *menu) { if ( m_pParent ) { m_pParent->UpdateSheetPanel(); } BaseClass::OnShowMenu(menu); } //----------------------------------------------------------------------------- // // CAttributeSheetSequencePickerPanel // //----------------------------------------------------------------------------- CAttributeSheetSequencePickerPanel::CAttributeSheetSequencePickerPanel( vgui::Panel *parent, const AttributeWidgetInfo_t &info ) : BaseClass( parent, info ) { if ( info.m_pEditorInfo ) { m_bIsSecondView = !V_stricmp( info.m_pEditorInfo->GetWidgetName(), "sheetsequencepicker_second" ); } else { m_bIsSecondView = false; } m_pSheetPanel = new CSheetSequencePanel(this, "sheetsequencepanel"); m_pSheetPanel->AddActionSignalTarget( this ); m_pSequenceSelection = new CNotifyMenuButton( this, "SequenceSelection", "seq" ); m_pSequenceSelection->SetMenu( m_pSheetPanel ); m_pSheetPanel->AddActionSignalTarget( this ); UpdateSheetPanel(); } void CAttributeSheetSequencePickerPanel::UpdateSheetPanel() { CDmElement* pElement = GetPanelElement(); CDmAttribute* pMaterialAttr = pElement->GetAttribute("material"); if ( m_bIsSecondView ) { m_pSheetPanel->SetSecondSequenceView( true ); m_pSequenceSelection->SetText( "sq2" ); } if ( pMaterialAttr == NULL ) { pElement = FindReferringElement< CDmeParticleSystemDefinition >( pElement, "initializers" ); if ( pElement ) { pMaterialAttr = pElement->GetAttribute("material"); } } if ( pMaterialAttr ) { m_pSheetPanel->SetFromMaterialName( pMaterialAttr->GetValueString() ); } } CAttributeSheetSequencePickerPanel::~CAttributeSheetSequencePickerPanel() { } void CAttributeSheetSequencePickerPanel::OnSheetSequenceSelected( int nSequenceNumber ) { CUndoScopeGuard guard( 0, NOTIFY_SETDIRTYFLAG, GetNotify(), "Select Sheet Sequence" ); SetAttributeValue(nSequenceNumber); } // MOC_TODO: factor this somewhere else - shared with other attribute controls void CAttributeSheetSequencePickerPanel::PerformLayout() { BaseClass::PerformLayout(); int x, y, w, h; m_pType->GetBounds( x, y, w, h ); int inset = 25; m_pType->SetWide( w - inset ); x += w; x -= inset; h -= 2; m_pSequenceSelection->SetBounds( x, y, inset, h ); }