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 /tools/toolutils/ToolUI.cpp | |
| download | archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip | |
Diffstat (limited to 'tools/toolutils/ToolUI.cpp')
| -rw-r--r-- | tools/toolutils/ToolUI.cpp | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/tools/toolutils/ToolUI.cpp b/tools/toolutils/ToolUI.cpp new file mode 100644 index 0000000..012811c --- /dev/null +++ b/tools/toolutils/ToolUI.cpp @@ -0,0 +1,118 @@ +//========= 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 ); + } +} |