diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/scenemanager/scene.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'utils/scenemanager/scene.cpp')
| -rw-r--r-- | utils/scenemanager/scene.cpp | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/utils/scenemanager/scene.cpp b/utils/scenemanager/scene.cpp new file mode 100644 index 0000000..d535952 --- /dev/null +++ b/utils/scenemanager/scene.cpp @@ -0,0 +1,243 @@ +//========= 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; +} |