|
|
//====== Copyright � 1996-2006, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#include "dme_controls/BaseAnimationSetEditor.h"
#include "tier1/KeyValues.h"
#include "vgui_controls/Splitter.h"
#include "vgui_controls/Menu.h"
#include "studio.h"
#include "dme_controls/BaseAnimSetAttributeSliderPanel.h"
#include "dme_controls/BaseAnimSetPresetFaderPanel.h"
#include "dme_controls/BaseAnimSetControlGroupPanel.h"
#include "dme_controls/dmecontrols_utils.h"
#include "movieobjects/dmechannel.h"
#include "movieobjects/dmeanimationset.h"
#include "movieobjects/dmegamemodel.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
using namespace vgui;
#define ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT 38
#define ANIMATION_SET_BUTTON_INSET 0
CBaseAnimationSetEditor::CBaseAnimationSetEditor( vgui::Panel *parent, const char *className, CBaseAnimationSetControl *pAnimationSetController ) : BaseClass( parent, className ), m_Layout( LAYOUT_SPLIT ), m_pController( pAnimationSetController ) { // SETUP_PANEL( this );
//#pragma warning( disable: 4355 )
m_pController->SetAnimationSetEditorPanel( this ); //#pragma warning( default: 4355 )
PostMessage( GetVPanel(), new KeyValues( "OnChangeLayout", "value", m_Layout ) ); }
CBaseAnimationSetEditor::~CBaseAnimationSetEditor() { }
CBaseAnimationSetControl *CBaseAnimationSetEditor::GetController() { return m_pController; }
void CBaseAnimationSetEditor::CreateToolsSubPanels() { m_hControlGroup = new CBaseAnimSetControlGroupPanel( (Panel *)NULL, "AnimSetControlGroup", this, false ); m_hPresetFader = new CBaseAnimSetPresetFaderPanel( (Panel *)NULL, "AnimSetPresetFader", this ); m_hAttributeSlider = new CBaseAnimSetAttributeSliderPanel( (Panel *)NULL, "AnimSetAttributeSliderPanel", this ); }
void CBaseAnimationSetEditor::ChangeLayout( EAnimSetLayout_t newLayout ) { m_Layout = newLayout;
// Make sure these don't get blown away...
m_hControlGroup->SetParent( (Panel *)NULL ); m_hPresetFader->SetParent( (Panel *)NULL ); m_hAttributeSlider->SetParent( (Panel *)NULL );
delete m_Splitter.Get(); m_Splitter = NULL;
CUtlVector< Panel * > list; list.AddToTail( m_hControlGroup.Get() ); list.AddToTail( m_hPresetFader.Get() ); list.AddToTail( m_hAttributeSlider.Get() );
Splitter *sub = NULL;
switch ( m_Layout ) { default: case LAYOUT_SPLIT: { m_Splitter = new Splitter( this, "AnimSetEditorMainSplitter", SPLITTER_MODE_VERTICAL, 1 ); m_Splitter->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT, 0, 0 ); m_Splitter->SetBounds( 0, ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT, GetWide(), GetTall() - ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT ); m_Splitter->SetSplitterColor( Color(32, 32, 32, 255) );
// m_Splitter->EnableBorders( false );
m_hControlGroup->SetParent( m_Splitter->GetChild( 0 ) ); m_hControlGroup->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, 0, 0, 0 );
sub = new Splitter( m_Splitter->GetChild( 1 ), "AnimSetEditorSubSplitter", SPLITTER_MODE_HORIZONTAL, 1 ); sub->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, 0, 0, 0 );
m_hPresetFader->SetParent( sub->GetChild( 0 ) ); m_hPresetFader->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, 0, 0, 0 ); m_hAttributeSlider->SetParent( sub->GetChild( 1 ) ); m_hAttributeSlider->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, 0, 0, 0 ); } break; case LAYOUT_VERTICAL: { m_Splitter = new Splitter( this, "AnimSetEditorMainSplitter", SPLITTER_MODE_VERTICAL, 2 ); m_Splitter->SetSplitterColor( Color(32, 32, 32, 255) ); m_Splitter->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT, 0, 0 ); m_Splitter->SetBounds( 0, ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT, GetWide(), GetTall() - ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT );
for ( int i = 0; i < list.Count(); ++i ) { list[ i ]->SetParent( m_Splitter->GetChild( i ) ); list[ i ]->SetSize( m_Splitter->GetChild( i )->GetWide(), m_Splitter->GetChild( i )->GetTall() ); list[ i ]->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, 0, 0, 0 ); }
m_Splitter->EvenlyRespaceSplitters(); } break; case LAYOUT_HORIZONTAL: { m_Splitter = new Splitter( this, "AnimSetEditorMainSplitter", SPLITTER_MODE_HORIZONTAL, 2 ); m_Splitter->SetSplitterColor( Color(32, 32, 32, 255) ); m_Splitter->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT, 0, 0 );
m_Splitter->SetBounds( 0, ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT, GetWide(), GetTall() - ANIMATION_SET_EDITOR_BUTTONTRAY_HEIGHT );
for ( int i = 0; i < list.Count(); ++i ) { list[ i ]->SetParent( m_Splitter->GetChild( i ) ); list[ i ]->SetSize( m_Splitter->GetChild( i )->GetWide(), m_Splitter->GetChild( i )->GetTall() ); list[ i ]->SetAutoResize ( Panel::PIN_TOPLEFT, Panel::AUTORESIZE_DOWNANDRIGHT, 0, 0, 0, 0 ); }
m_Splitter->EvenlyRespaceSplitters(); } break; }
if ( sub ) { sub->OnSizeChanged( sub->GetWide(), sub->GetTall() ); sub->EvenlyRespaceSplitters(); } }
void CBaseAnimationSetEditor::OnChangeLayout( int value ) { ChangeLayout( ( EAnimSetLayout_t )value ); }
void CBaseAnimationSetEditor::OnOpenContextMenu( KeyValues *params ) { if ( m_hContextMenu.Get() ) { delete m_hContextMenu.Get(); m_hContextMenu = NULL; }
m_hContextMenu = new Menu( this, "ActionMenu" );
m_hContextMenu->AddMenuItem( "#BxAnimSetSplitLayout", new KeyValues( "OnChangeLayout", "value", (int)LAYOUT_SPLIT ), this ); m_hContextMenu->AddMenuItem( "#BxAnimSetVerticalLayout", new KeyValues( "OnChangeLayout", "value", (int)LAYOUT_VERTICAL ), this ); m_hContextMenu->AddMenuItem( "#BxAnimSetHorizontalLayout", new KeyValues( "OnChangeLayout", "value", (int)LAYOUT_HORIZONTAL ), this );
Panel *rpanel = reinterpret_cast< Panel * >( params->GetPtr( "contextlabel" ) ); if ( rpanel ) { // force the menu to compute required width/height
m_hContextMenu->PerformLayout(); m_hContextMenu->PositionRelativeToPanel( rpanel, Menu::DOWN, 0, true ); } else { Menu::PlaceContextMenu( this, m_hContextMenu.Get() ); } }
void CBaseAnimationSetEditor::OpenTreeViewContextMenu( KeyValues *pItemData ) { }
void CBaseAnimationSetEditor::ApplySchemeSettings( vgui::IScheme *pScheme ) { BaseClass::ApplySchemeSettings( pScheme );
// Have to manually apply settings here if they aren't attached in hierarchy
if ( m_hControlGroup->GetParent() != this ) { m_hControlGroup->ApplySchemeSettings( pScheme ); } if ( m_hPresetFader->GetParent() != this ) { m_hPresetFader->ApplySchemeSettings( pScheme ); } if ( m_hAttributeSlider->GetParent() != this ) { m_hAttributeSlider->ApplySchemeSettings( pScheme ); } }
CBaseAnimSetControlGroupPanel *CBaseAnimationSetEditor::GetControlGroup() { return m_hControlGroup.Get(); }
CBaseAnimSetPresetFaderPanel *CBaseAnimationSetEditor::GetPresetFader() { return m_hPresetFader.Get(); }
CBaseAnimSetAttributeSliderPanel *CBaseAnimationSetEditor::GetAttributeSlider() { return m_hAttributeSlider.Get(); }
void CBaseAnimationSetEditor::OnControlsAddedOrRemoved() { m_pController->OnControlsAddedOrRemoved(); if ( m_hControlGroup ) { m_hControlGroup->OnControlsAddedOrRemoved(); } if ( m_hAttributeSlider ) { m_hAttributeSlider->OnControlsAddedOrRemoved(); } }
void CBaseAnimationSetEditor::ChangeAnimationSetClip( CDmeFilmClip *pFilmClip ) { m_pController->ChangeAnimationSetClip( pFilmClip ); if ( m_hControlGroup ) { m_hControlGroup->ChangeAnimationSetClip( pFilmClip ); } if ( m_hAttributeSlider ) { m_hAttributeSlider->ChangeAnimationSetClip( pFilmClip ); } }
|