workspacemanager.cpp
来自「hl2 source code. Do not use it illegal.」· C++ 代码 · 共 1,903 行 · 第 1/3 页
CPP
1,903 行
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CScene *scene = item->GetScene();
if ( !scene )
return;
// Show file io
const char *fullpath = mxGetOpenFileName(
0,
".",
"*.vcd" );
if ( !fullpath || !fullpath[ 0 ] )
return;
// Strip game directory and slash
char vcd_name[ 512 ];
filesystem->FullPathToRelativePath( fullpath, vcd_name );
StripExtension( vcd_name );
DefaultExtension( vcd_name, ".vcd" );
if ( scene->FindVCD( vcd_name ) )
{
Con_Printf( "File '%s' is already in scene '%s'\n", vcd_name, scene->GetName() );
return;
}
CVCDFile *vcd = new CVCDFile( scene, vcd_name );
scene->AddVCD( vcd );
GetBrowser()->PopulateTree();
OnUpdateTitle();
}
void CWorkspaceManager::OnModifySceneComments()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CScene *scene = item->GetScene();
if ( !scene )
return;
CInputParams params;
memset( ¶ms, 0, sizeof( params ) );
Q_snprintf( params.m_szDialogTitle, sizeof( params.m_szDialogTitle ), "Edit comments for '%s'", scene->GetName() );
Q_strcpy( params.m_szPrompt, "Comments:" );
Q_strncpy( params.m_szInputText, scene->GetComments(), sizeof( params.m_szInputText ) );
if ( !InputProperties( ¶ms ) )
return;
if ( !Q_strcmp( params.m_szInputText, scene->GetComments() ) )
return;
scene->SetComments( params.m_szInputText );
GetBrowser()->PopulateTree();
OnUpdateTitle();
}
void CWorkspaceManager::OnModifyVCDComments()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CVCDFile *file = item->GetVCDFile();
if ( !file )
return;
CInputParams params;
memset( ¶ms, 0, sizeof( params ) );
Q_snprintf( params.m_szDialogTitle, sizeof( params.m_szDialogTitle ), "Edit comments for '%s'", file->GetName() );
Q_strcpy( params.m_szPrompt, "Comments:" );
Q_strncpy( params.m_szInputText, file->GetComments(), sizeof( params.m_szInputText ) );
if ( !InputProperties( ¶ms ) )
return;
if ( !Q_strcmp( params.m_szInputText, file->GetComments() ) )
return;
file->SetComments( params.m_szInputText );
GetBrowser()->PopulateTree();
OnUpdateTitle();
}
void CWorkspaceManager::OnSceneRemoveVCD()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CVCDFile *file = item->GetVCDFile();
if ( !file )
return;
CScene *scene = file->GetOwnerScene();
if ( !scene )
return;
scene->RemoveVCD( file );
GetBrowser()->PopulateTree();
OnUpdateTitle();
}
void CWorkspaceManager::ShowContextMenu( int x, int y, ITreeItem *p )
{
CWorkspace *w = p->GetWorkspace();
if ( w )
{
ShowContextMenu_Workspace( x, y, w );
return;
}
CProject *proj = p->GetProject();
if ( proj )
{
ShowContextMenu_Project( x, y, proj );
return;
}
CScene *scene = p->GetScene();
if ( scene )
{
ShowContextMenu_Scene( x, y, scene );
return;
}
CVCDFile *vcd = p->GetVCDFile();
if ( vcd )
{
ShowContextMenu_VCD( x, y, vcd );
return;
}
CSoundEntry *sound = p->GetSoundEntry();
if ( sound )
{
ShowContextMenu_SoundEntry( x, y, sound );
return;
}
CWaveFile *wave = p->GetWaveFile();
if ( wave )
{
ShowContextMenu_WaveFile( x, y, wave );
return;
}
Con_Printf( "unknown tree item type\n" );
Assert( 0 );
}
void CWorkspaceManager::ShowContextMenu_Workspace( int x, int y, CWorkspace *ws )
{
if ( !ws )
return;
// New project and insert project
mxPopupMenu *pop = new mxPopupMenu();
pop->add ("Create New Project...", IDC_WSM_PROJECT_PRJ_NEW );
pop->add ("Insert Project...", IDC_WSM_PROJECT_PRJ_INSERT );
pop->addSeparator();
pop->add( "VSS Properties...", IDC_WSM_FILE_WS_VSSPROPERTIES );
if ( !filesystem->IsFileWritable( ws->GetFileName() ) )
{
pop->add( va( "Checkout '%s'", ws->GetName() ), IDC_WSM_SELECTION_CHECKOUT );
}
else
{
pop->add( va( "Checkin '%s'", ws->GetName() ), IDC_WSM_SELECTION_CHECKIN );
}
pop->popup( this, x, y );
}
void CWorkspaceManager::ShowContextMenu_Project( int x, int y, CProject *project )
{
// New scene, edit comments
mxPopupMenu *pop = new mxPopupMenu();
pop->add ("Create New Scene...", IDC_WSM_PROJECT_SCENE_NEW );
pop->addSeparator();
pop->add ("Remove Project...", IDC_WSM_PROJECT_PRJ_REMOVE );
pop->addSeparator();
pop->add( "Edit comments...", IDC_WSM_PROJECT_PRJ_MODIFYCOMMENTS );
if ( !project->IsFirstChild() || !project->IsLastChild() )
{
pop->addSeparator();
if( !project->IsFirstChild() )
{
pop->add( va( "Move '%s' Up", project->GetName() ), IDC_WSM_SELECTION_MOVEUP );
}
if( !project->IsLastChild() )
{
pop->add( va( "Move '%s' Down", project->GetName() ), IDC_WSM_SELECTION_MOVEDOWN );
}
}
pop->addSeparator();
if ( !filesystem->IsFileWritable( project->GetFileName() ) )
{
pop->add( va( "Checkout '%s'", project->GetName() ), IDC_WSM_SELECTION_CHECKOUT );
}
else
{
pop->add( va( "Checkin '%s'", project->GetName() ), IDC_WSM_SELECTION_CHECKIN );
}
pop->popup( this, x, y );
}
void CWorkspaceManager::ShowContextMenu_Scene( int x, int y, CScene *scene )
{
// New scene, edit comments
mxPopupMenu *pop = new mxPopupMenu();
pop->add( va( "Add VCD to '%s'...", scene->GetName() ), IDC_WSM_SCENE_VCD_ADD );
pop->addSeparator();
pop->add ("Remove Scene", IDC_WSM_SCENE_REMOVE );
pop->addSeparator();
pop->add( va( "Edit comments..." ), IDC_WSM_SCENE_EDIT_COMMENTS );
if ( !scene->IsFirstChild() || !scene->IsLastChild() )
{
pop->addSeparator();
if( !scene->IsFirstChild() )
{
pop->add( va( "Move '%s' Up", scene->GetName() ), IDC_WSM_SELECTION_MOVEUP );
}
if( !scene->IsLastChild() )
{
pop->add( va( "Move '%s' Down", scene->GetName() ), IDC_WSM_SELECTION_MOVEDOWN );
}
}
pop->popup( this, x, y );
}
void CWorkspaceManager::ShowContextMenu_VCD( int x, int y, CVCDFile *vcd )
{
// New scene, edit comments
mxPopupMenu *pop = new mxPopupMenu();
pop->add( va( "Remove VCD" ), IDC_WSM_SCENE_VCD_REMOVE );
pop->addSeparator();
pop->add( va( "Edit comments..." ), IDC_WSM_VCD_EDIT_COMMENTS );
if ( !vcd->IsFirstChild() || !vcd->IsLastChild() )
{
pop->addSeparator();
if( !vcd->IsFirstChild() )
{
pop->add( va( "Move '%s' Up", vcd->GetName() ), IDC_WSM_SELECTION_MOVEUP );
}
if( !vcd->IsLastChild() )
{
pop->add( va( "Move '%s' Down", vcd->GetName() ), IDC_WSM_SELECTION_MOVEDOWN );
}
}
pop->addSeparator();
if ( !filesystem->IsFileWritable( vcd->GetName() ) )
{
pop->add( va( "Checkout '%s'", vcd->GetName() ), IDC_WSM_SELECTION_CHECKOUT );
}
else
{
pop->add( va( "Checkin '%s'", vcd->GetName() ), IDC_WSM_SELECTION_CHECKIN );
}
pop->popup( this, x, y );
}
void CWorkspaceManager::ShowContextMenu_SoundEntry( int x, int y, CSoundEntry *entry )
{
// New scene, edit comments
mxPopupMenu *pop = new mxPopupMenu();
pop->add ("&Play", IDC_WSM_SOUNDENTRY_PLAY );
// pop->add( "&Jump To", IDC_WSM_SOUNDENTRY_SHOWINBROWSERS );
pop->addSeparator();
pop->add( "Properties...", IDC_WSM_SOUNDENTRY_PROPERTIES );
pop->popup( this, x, y );
}
void CWorkspaceManager::ShowContextMenu_WaveFile( int x, int y, CWaveFile *entry )
{
// New scene, edit comments
mxPopupMenu *pop = new mxPopupMenu();
pop->add ("&Play", IDC_WSM_SOUNDENTRY_PLAY );
// pop->add( "&Jump To", IDC_WSM_SOUNDENTRY_SHOWINBROWSERS );
if ( entry->GetVoiceDuck() )
{
pop->add ("Disable &voice duck", IDC_WSM_SOUNDENTRY_TOGGLEVOICEDUCK );
}
else
{
pop->add ("Enable &voice duck", IDC_WSM_SOUNDENTRY_TOGGLEVOICEDUCK );
}
pop->add( "&Edit sentence text...", IDC_WSM_SOUNDENTRY_EDITTEXT );
pop->addSeparator();
if ( !filesystem->IsFileWritable( entry->GetFileName() ) )
{
pop->add( va( "Checkout '%s'", entry->GetName() ), IDC_WSM_SELECTION_CHECKOUT );
}
else
{
pop->add( va( "Checkin '%s'", entry->GetName() ), IDC_WSM_SELECTION_CHECKIN );
}
pop->addSeparator();
pop->add( "Properties...", IDC_WSM_WAVEFILE_PROPERTIES );
pop->popup( this, x, y );
}
void CWorkspaceManager::OnChangeVSSProperites()
{
CWorkspace *ws = GetBrowser()->GetWorkspace();
if ( !ws )
{
return;
}
CVSSParams params;
memset( ¶ms, 0, sizeof( params ) );
Q_snprintf( params.m_szDialogTitle, sizeof( params.m_szDialogTitle ), "VSS Properites" );
Q_strcpy( params.m_szUserName, ws->GetVSSUserName() );
Q_strcpy( params.m_szProject, ws->GetVSSProject() );
if ( !VSSProperties( ¶ms ) )
return;
if ( !params.m_szUserName[ 0 ] )
{
Con_Printf( "You must enter a user name\n" );
return;
}
if ( !params.m_szProject[ 0 ] )
{
Con_Printf( "You must enter a project name\n" );
return;
}
ws->SetVSSUserName( params.m_szUserName );
ws->SetVSSProject( params.m_szProject );
ws->SetDirty( true );
Con_Printf( "VSS user = '%s', project = '%s'\n",
ws->GetVSSUserName(), ws->GetVSSProject() );
}
void CWorkspaceManager::OnCheckoutWorkspace()
{
CWorkspace *ws = GetBrowser()->GetWorkspace();
if ( !ws )
{
return;
}
ws->Checkout();
}
void CWorkspaceManager::OnCheckinWorkspace()
{
CWorkspace *ws = GetBrowser()->GetWorkspace();
if ( !ws )
{
return;
}
ws->Checkin();
}
#define CX_ICON 16
#define CY_ICON 16
HIMAGELIST CWorkspaceManager::CreateImageList()
{
HIMAGELIST list;
list = ImageList_Create( CX_ICON, CY_ICON,
FALSE, NUM_IMAGES, 0 );
// Load the icon resources, and add the icons to the image list.
HICON hicon;
int slot;
int c = 0;
hicon = LoadIcon( GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_WORKSPACE));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon( GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_WORKSPACE_CHECKEDOUT));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_PROJECT));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_PROJECT_CHECKEDOUT));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_SCENE));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
// hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_SCENE_CHECKEDOUT));
// slot = ImageList_AddIcon(list, hicon);
// Assert( slot == c++ );
// DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_VCD));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_VCD_CHECKEDOUT ));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_WAV));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_WAV_CHECKEDOUT));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_SPEAK));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
hicon = LoadIcon(GetModuleHandle( 0 ), MAKEINTRESOURCE(IDI_SPEAK_CHECKEDOUT));
slot = ImageList_AddIcon(list, hicon);
Assert( slot == c++ );
DeleteObject( hicon );
return list;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWorkspaceManager::RefreshBrowsers()
{
GetBrowser()->PopulateTree();
GetSoundBrowser()->RepopulateTree();
GetWaveBrowser()->RepopulateTree();
}
void CWorkspaceManager::OnSoundShowInBrowsers()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CSoundEntry *se = item->GetSoundEntry();
if ( se )
{
GetSoundBrowser()->JumpToItem( se );
return;
}
CWaveFile *wave = item->GetWaveFile();
if ( wave )
{
GetWaveBrowser()->JumpToItem( wave );
if ( wave->GetOwnerSoundEntry() )
{
GetSoundBrowser()->JumpToItem( wave->GetOwnerSoundEntry() );
}
}
}
void CWorkspaceManager::OnCheckout()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
item->Checkout();
GetBrowser()->PopulateTree();
OnUpdateTitle();
}
void CWorkspaceManager::OnCheckin()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
item->Checkin();
GetBrowser()->PopulateTree();
OnUpdateTitle();
}
void CWorkspaceManager::OnMoveUp()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
ITreeItem *parent = item->GetParentItem();
if ( !parent )
return;
parent->MoveChildUp( item );
parent->SetDirty( true );
GetBrowser()->PopulateTree();
OnUpdateTitle();
GetBrowser()->JumpTo( item );
}
void CWorkspaceManager::OnMoveDown()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
ITreeItem *parent = item->GetParentItem();
if ( !parent )
return;
parent->MoveChildDown( item );
parent->SetDirty( true );
GetBrowser()->PopulateTree();
OnUpdateTitle();
GetBrowser()->JumpTo( item );
}
void CWorkspaceManager::SetWorkspaceDirty()
{
CWorkspace *ws = GetBrowser()->GetWorkspace();
if ( ws )
{
ws->SetDirty( true );
}
OnUpdateTitle();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWorkspaceManager::OnSoundProperties()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CSoundEntry *entry = item->GetSoundEntry();
if ( !entry )
return;
CSoundParams params;
memset( ¶ms, 0, sizeof( params ) );
Q_snprintf( params.m_szDialogTitle, sizeof( params.m_szDialogTitle ), "Sound Properties" );
params.items.AddToTail( entry );
SoundProperties( ¶ms );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWorkspaceManager::OnWaveProperties()
{
ITreeItem *item = GetBrowser()->GetSelectedItem();
if ( !item )
return;
CWaveFile *wave = item->GetWaveFile();
if ( !wave )
return;
CWaveParams params;
memset( ¶ms, 0, sizeof( params ) );
Q_snprintf( params.m_szDialogTitle, sizeof( params.m_szDialogTitle ), "Wave Properties" );
params.items.AddToTail( wave );
WaveProperties( ¶ms );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?