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/workspacebrowser.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'utils/scenemanager/workspacebrowser.cpp')
| -rw-r--r-- | utils/scenemanager/workspacebrowser.cpp | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/utils/scenemanager/workspacebrowser.cpp b/utils/scenemanager/workspacebrowser.cpp new file mode 100644 index 0000000..31775e9 --- /dev/null +++ b/utils/scenemanager/workspacebrowser.cpp @@ -0,0 +1,258 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "workspacebrowser.h" +#include "workspace.h" +#include "project.h" +#include <windows.h> +#include "resource.h" +#include "project.h" +#include "vcdfile.h" +#include "soundentry.h" +#include "scene.h" +#include "workspacemanager.h" + +enum +{ + IDC_WSB_TREE = 101, +}; + +class CBrowserTree : public mxTreeView +{ +public: + CBrowserTree( mxWindow *parent, int id = 0 ) + : mxTreeView( parent, 0, 0, 0, 0, id ) + { + // SendMessage ( (HWND)getHandle(), WM_SETFONT, (WPARAM) (HFONT) GetStockObject (ANSI_FIXED_FONT), MAKELPARAM (TRUE, 0)); + } +}; + +int CALLBACK CWorkspaceBrowser::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) +{ + ITreeItem const *item1 = (ITreeItem *)lParam1; + ITreeItem const *item2 = (ITreeItem *)lParam2; + + Assert( item1 && item2 ); + + if ( item1->GetOrdinal() < item2->GetOrdinal() ) + return -1; + else if ( item1->GetOrdinal() > item2->GetOrdinal() ) + return 1; + + // Ok, just compare pointers... sigh + return ( item1 < item2 ) ? -1 : 1; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *parent - +//----------------------------------------------------------------------------- +CWorkspaceBrowser::CWorkspaceBrowser( mxWindow *parent, CWorkspaceManager *manager, int id ) : + BaseClass( parent, 0, 0, 0, 0, "Workspace Browser", id ) +{ + m_pManager = manager; + + SceneManager_MakeToolWindow( this, false ); + + m_pLastSelected = NULL; + + m_pCurrentWorkspace = NULL; + m_pTree = new CBrowserTree( this, IDC_WSB_TREE ); + + HIMAGELIST list = GetWorkspaceManager()->CreateImageList(); + + // Associate the image list with the tree-view control. + m_pTree->setImageList( (void *)list ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *event - +// Output : int +//----------------------------------------------------------------------------- +int CWorkspaceBrowser::handleEvent( mxEvent *event ) +{ + int iret = 0; + switch ( event->event ) + { + default: + break; + case mxEvent::Action: + { + switch ( event->action ) + { + default: + break; + case IDC_WSB_TREE: + { + iret = 1; + + bool rightmouse = ( event->flags == mxEvent::RightClicked ) ? true : false; + bool doubleclicked = ( event->flags == mxEvent::DoubleClicked ) ? true : false; + + OnTreeItemSelected( event->x, event->y, rightmouse, doubleclicked ); + } + break; + } + } + break; + case mxEvent::Size: + { + m_pTree->setBounds( 0, 0, w2(), h2() ); + + GetWorkspaceManager()->SetWorkspaceDirty(); + + iret = 1; + } + break; + case mxEvent::Close: + { + iret = 1; + } + break; + } + + return iret; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : CWorkspace +//----------------------------------------------------------------------------- +CWorkspace *CWorkspaceBrowser::GetWorkspace() +{ + return m_pCurrentWorkspace; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CWorkspaceBrowser::PopulateTree() +{ + m_pLastSelected = NULL; + + CWorkspace *w = m_pCurrentWorkspace; + + if ( !w ) + return; + + // Add root element + char sz[ 128 ]; + if ( w->GetProjectCount() == 1 ) + { + Q_snprintf( sz, sizeof( sz ), "Workspace '%s': %i project", w->GetName(), w->GetProjectCount() ); + } + else + { + Q_snprintf( sz, sizeof( sz ), "Workspace '%s': %i projects", w->GetName(), w->GetProjectCount() ); + } + + + mxTreeViewItem *root = w->FindItem( m_pTree, NULL ); + if ( !root ) + { + root = m_pTree->add( NULL, sz ); + } + + // Reset the label + m_pTree->setLabel( root, sz ); + + m_pTree->setImages( root, w->GetIconIndex(), w->GetIconIndex() ); + m_pTree->setUserData( root, w ); + + w->ValidateTree( m_pTree, root ); + + m_pTree->setOpen( root, true ); + + m_pTree->sortTree( root, true, CompareFunc, 0 ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *w - +//----------------------------------------------------------------------------- +void CWorkspaceBrowser::SetWorkspace( CWorkspace *w ) +{ + m_pCurrentWorkspace = w; + + PopulateTree(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *project - +//----------------------------------------------------------------------------- +void CWorkspaceBrowser::AddProject( CProject *project ) +{ + if ( !m_pCurrentWorkspace ) + return; + + m_pCurrentWorkspace->AddProject( project ); + + PopulateTree(); +} + +ITreeItem *CWorkspaceBrowser::GetSelectedItem() +{ + return m_pLastSelected; +} + +CWorkspaceManager *CWorkspaceBrowser::GetManager() +{ + return m_pManager; +} + +void CWorkspaceBrowser::OnTreeItemSelected( int x, int y, bool rightmouse, bool doubleclick ) +{ + mxTreeViewItem *item = m_pTree->getSelectedItem(); + if ( !item ) + { + Con_Printf( "No item selected\n" ); + return; + } + + ITreeItem *p = (ITreeItem *)m_pTree->getUserData( item ); + if ( !p ) + { + Con_Printf( "No userdata for item\n" ); + return; + } + + m_pLastSelected = p; + + GetManager()->UpdateMenus(); + + if ( p->GetSoundEntry() || p->GetWaveFile() ) + { + GetManager()->OnSoundShowInBrowsers(); + } + + if ( !rightmouse ) + { + if ( doubleclick ) + { + GetManager()->OnDoubleClicked( GetSelectedItem() ); + } + return; + } + + POINT pt; + GetCursorPos( &pt ); + + ScreenToClient( (HWND)GetManager()->getHandle(), &pt ); + + GetManager()->ShowContextMenu( pt.x, pt.y, GetSelectedItem() ); +} + +void CWorkspaceBrowser::JumpTo( ITreeItem *item ) +{ + mxTreeViewItem *found = item->FindItem( m_pTree, NULL, true ); + if ( found ) + { + m_pTree->scrollTo( found ); + } +}
\ No newline at end of file |