You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.8 KiB
118 lines
3.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// The tool UI has 4 purposes: |
|
// 1) Create the menu bar and client area (lies under the menu bar) |
|
// 2) Forward all mouse messages to the tool workspace so action menus work |
|
// 3) Forward all commands to the tool system so all smarts can reside there |
|
// 4) Control the size of the menu bar + the working area |
|
//============================================================================= |
|
|
|
#include "ToolUI.h" |
|
#include "toolutils/toolmenubar.h" |
|
#include "toolutils/basetoolsystem.h" |
|
#include "vgui/Cursor.h" |
|
#include "vgui/ISurface.h" |
|
#include "tier1/KeyValues.h" |
|
#include "toolutils/toolmenubar.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
|
|
#define MENU_HEIGHT 28 |
|
// Height of the status bar, if the tool installs one |
|
#define STATUS_HEIGHT 24 |
|
//----------------------------------------------------------------------------- |
|
// Constructor |
|
//----------------------------------------------------------------------------- |
|
CToolUI::CToolUI( vgui::Panel *pParent, const char *panelName, CBaseToolSystem *pBaseToolSystem ) : |
|
BaseClass( pParent, panelName ), m_pClientArea( 0 ), m_pBaseToolSystem( pBaseToolSystem ) |
|
{ |
|
SetPaintEnabled(false); |
|
SetPaintBackgroundEnabled(false); |
|
SetPaintBorderEnabled(false); |
|
|
|
int w, h; |
|
pParent->GetSize( w, h ); |
|
SetBounds( 0, 0, w, h ); |
|
|
|
m_pMenuBar = m_pBaseToolSystem->CreateMenuBar( m_pBaseToolSystem ); |
|
m_pMenuBar->SetParent( this ); |
|
m_pMenuBar->SetSize( w, MENU_HEIGHT ); |
|
// This can be NULL if no status bar should be included |
|
m_pStatusBar = m_pBaseToolSystem->CreateStatusBar( this ); |
|
m_pStatusBar->SetParent( this ); |
|
|
|
m_pClientArea = new vgui::Panel( this, "ClientArea" ); |
|
m_pClientArea->SetMouseInputEnabled( false ); |
|
m_pClientArea->SetCursor( vgui::dc_none ); |
|
m_pClientArea->SetBounds( 0, MENU_HEIGHT, w, h - MENU_HEIGHT ); |
|
} |
|
|
|
vgui::Panel *CToolUI::GetClientArea() |
|
{ |
|
return m_pClientArea; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// The tool UI panel should always fill the space... |
|
//----------------------------------------------------------------------------- |
|
void CToolUI::PerformLayout() |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
// Make the editor panel fill the space |
|
int iWidth, iHeight; |
|
vgui::VPANEL parent = GetParent() ? GetParent()->GetVPanel() : vgui::surface()->GetEmbeddedPanel(); |
|
vgui::ipanel()->GetSize( parent, iWidth, iHeight ); |
|
SetSize( iWidth, iHeight ); |
|
int insettop = MENU_HEIGHT; |
|
int insetbottom = 0; |
|
m_pMenuBar->SetSize( iWidth, insettop ); |
|
if ( m_pStatusBar ) |
|
{ |
|
insetbottom = STATUS_HEIGHT; |
|
m_pStatusBar->SetBounds( 0, iHeight - insetbottom, iWidth, insetbottom ); |
|
} |
|
m_pClientArea->SetBounds( 0, insettop, iWidth, iHeight - insettop - insetbottom ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Returns the menu bar |
|
//----------------------------------------------------------------------------- |
|
vgui::MenuBar *CToolUI::GetMenuBar() |
|
{ |
|
return m_pMenuBar; |
|
} |
|
|
|
vgui::Panel *CToolUI::GetStatusBar() |
|
{ |
|
return m_pStatusBar; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward commands to systems that have more smarts than I do! |
|
//----------------------------------------------------------------------------- |
|
void CToolUI::OnMousePressed( vgui::MouseCode code ) |
|
{ |
|
// Chain mouse pressed calls to the parent tool workspace |
|
CallParentFunction( new KeyValues( "MousePressed", "code", code ) ); |
|
} |
|
|
|
void CToolUI::OnCommand( const char *cmd ) |
|
{ |
|
m_pBaseToolSystem->OnCommand( cmd ); |
|
} |
|
|
|
void CToolUI::UpdateMenuBarTitle() |
|
{ |
|
CToolFileMenuBar *mb = dynamic_cast< CToolFileMenuBar * >( GetMenuBar() ); |
|
if ( mb ) |
|
{ |
|
char title[ 64 ]; |
|
m_pBaseToolSystem->ComputeMenuBarTitle( title, sizeof( title ) ); |
|
mb->SetInfo( title ); |
|
} |
|
}
|
|
|