|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#include "cbase.h"
#include "scene.h"
#include "vcdfile.h"
#include "project.h"
#include "workspacemanager.h"
#include "workspacebrowser.h"
CScene::CScene( CProject *proj, char const *name ) : m_pOwner( proj ) { Q_strncpy( m_szName, name, sizeof( m_szName ) ); m_pszComments = NULL; }
CScene::~CScene() { while ( m_Files.Count() > 0 ) { CVCDFile *f = m_Files[ 0 ]; m_Files.Remove( 0 ); delete f; } delete[] m_pszComments; }
CProject *CScene::GetOwnerProject() { return m_pOwner; }
void CScene::SetComments( char const *comments ) { delete[] m_pszComments; m_pszComments = V_strdup( comments );
GetOwnerProject()->SetDirty( true ); }
char const *CScene::GetComments( void ) const { return m_pszComments ? m_pszComments : ""; }
char const *CScene::GetName() const { return m_szName; }
int CScene::GetVCDCount() const { return m_Files.Count(); }
CVCDFile *CScene::GetVCD( int index ) { if ( index < 0 || index >= m_Files.Count() ) return NULL; return m_Files[ index ]; }
void CScene::AddVCD( CVCDFile *vcd ) { Assert( m_Files.Find( vcd ) == m_Files.InvalidIndex() );
m_Files.AddToTail( vcd );
GetOwnerProject()->SetDirty( true ); }
void CScene::RemoveVCD( CVCDFile *vcd ) { if ( m_Files.Find( vcd ) == m_Files.InvalidIndex() ) return;
m_Files.FindAndRemove( vcd );
GetOwnerProject()->SetDirty( true ); }
CVCDFile *CScene::FindVCD( char const *filename ) { int c = GetVCDCount(); CVCDFile *vcd; for ( int i = 0; i < c; i++ ) { vcd = GetVCD( i ); if ( !vcd ) continue;
if ( !Q_stricmp( filename, vcd->GetName() ) ) return vcd; } return NULL; }
void CScene::ValidateTree( mxTreeView *tree, mxTreeViewItem* parent ) { CUtlVector< mxTreeViewItem * > m_KnownItems;
int c = GetVCDCount(); CVCDFile *vcd; for ( int i = 0; i < c; i++ ) { vcd = GetVCD( i ); if ( !vcd ) continue;
char sz[ 256 ]; if ( vcd->GetComments() && vcd->GetComments()[0] ) { Q_snprintf( sz, sizeof( sz ), "%s : %s", vcd->GetName(), vcd->GetComments() ); } else { Q_snprintf( sz, sizeof( sz ), "%s", vcd->GetName() ); }
mxTreeViewItem *spot = vcd->FindItem( tree, parent ); if ( !spot ) { spot = tree->add( parent, sz ); }
m_KnownItems.AddToTail( spot );
vcd->SetOrdinal( i );
tree->setLabel( spot, sz );
tree->setImages( spot, vcd->GetIconIndex(), vcd->GetIconIndex() ); tree->setUserData( spot, vcd ); //tree->setOpen( spot, vcd->IsExpanded() );
vcd->ValidateTree( tree, spot ); }
mxTreeViewItem *start = tree->getFirstChild( parent ); while ( start ) { mxTreeViewItem *next = tree->getNextChild( start );
if ( m_KnownItems.Find( start ) == m_KnownItems.InvalidIndex() ) { tree->remove( start ); }
start = next; }
tree->sortTree( parent, true, CWorkspaceBrowser::CompareFunc, 0 ); }
bool CScene::IsCheckedOut() const { return false; }
int CScene::GetIconIndex() const { /*
if ( IsCheckedOut() ) { return IMAGE_SCENE_CHECKEDOUT; } else */ { return IMAGE_SCENE; } }
void CScene::Checkout(bool updatestateicons /*= true*/) { // Scenes aren't made for checkin / checkout
}
void CScene::Checkin(bool updatestateicons /*= true*/) { // Scenes aren't made for checkin / checkout
}
void CScene::MoveChildUp( ITreeItem *child ) { int c = GetVCDCount(); for ( int i = 1; i < c; i++ ) { CVCDFile *p = GetVCD( i ); if ( p != child ) continue;
CVCDFile *prev = GetVCD( i - 1 ); // Swap
m_Files[ i - 1 ] = p; m_Files[ i ] = prev; return; } }
void CScene::MoveChildDown( ITreeItem *child ) { int c = GetVCDCount(); for ( int i = 0; i < c - 1; i++ ) { CVCDFile *p = GetVCD( i ); if ( p != child ) continue;
CVCDFile *next = GetVCD( i + 1 ); // Swap
m_Files[ i ] = next; m_Files[ i + 1 ] = p; return; } }
bool CScene::IsChildFirst( ITreeItem *child ) { int idx = m_Files.Find( (CVCDFile *)child ); if ( idx == m_Files.InvalidIndex() ) return false;
if ( idx != 0 ) return false;
return true; }
bool CScene::IsChildLast( ITreeItem *child ) { int idx = m_Files.Find( (CVCDFile *)child ); if ( idx == m_Files.InvalidIndex() ) return false;
if ( idx != m_Files.Count() - 1 ) return false;
return true; }
|