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.
326 lines
12 KiB
326 lines
12 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Core Movie Maker UI API |
|
// |
|
//============================================================================= |
|
|
|
#ifndef BASETOOLSYSTEM_H |
|
#define BASETOOLSYSTEM_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "tier1/interface.h" |
|
#include "toolframework/itoolsystem.h" |
|
#include "vgui/IScheme.h" |
|
#include "vgui_controls/EditablePanel.h" |
|
#include "vgui_controls/PHandle.h" |
|
#include "toolutils/recentfilelist.h" |
|
#include "vgui/keycode.h" |
|
#include "vgui_controls/fileopenstatemachine.h" |
|
|
|
|
|
// #defines |
|
#define TOGGLE_WINDOWED_KEY_CODE KEY_F11 |
|
#define TOGGLE_WINDOWED_KEY_NAME "F11" |
|
|
|
#define TOGGLE_INPUT_KEY_CODE KEY_F10 |
|
#define TOGGLE_INPUT_KEY_NAME "F10" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
class KeyValues; |
|
class CToolUI; |
|
class CToolMenuButton; |
|
class CMiniViewport; |
|
class IGlobalFlexController; |
|
|
|
namespace vgui |
|
{ |
|
class Panel; |
|
class Menu; |
|
class CKeyBoardEditorDialog; |
|
class CKeyBindingHelpDialog; |
|
enum KeyBindingContextHandle_t; |
|
class IScheme; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Save document types |
|
//----------------------------------------------------------------------------- |
|
enum SaveDocumentCloseType_t |
|
{ |
|
SAVEDOC_QUIT_AFTER_SAVE = 0, |
|
SAVEDOC_CLOSE_AFTER_SAVE, |
|
SAVEDOC_LEAVEOPEN_AFTER_SAVE, |
|
SAVEDOC_POSTCOMMAND_AFTER_SAVE, // Closes, then posts a command |
|
SAVEDOC_LEAVEOPEN_POSTCOMMAND_AFTER_SAVE, // Leaves open, then posts a command |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// The toolsystem panel is the main panel in which the tool "ui" lives. |
|
// The tool "ui" encapsulates the main menu and a client area in which the |
|
// tools are drawn. |
|
// Usually, the workspace is the size of the entire screen |
|
// and the ui can be smaller than the toolsystem panel. The reason these are decoupled |
|
// is so that you can get the 'action' menu no matter where you click on the screen |
|
//----------------------------------------------------------------------------- |
|
class CBaseToolSystem : public vgui::EditablePanel, public IToolSystem, public vgui::IFileOpenStateMachineClient |
|
{ |
|
DECLARE_CLASS_SIMPLE( CBaseToolSystem, vgui::EditablePanel ); |
|
|
|
public: |
|
// Methods inherited from IToolSystem |
|
virtual bool Init( ); |
|
virtual void Shutdown(); |
|
virtual bool ServerInit( CreateInterfaceFn serverFactory ); |
|
virtual bool ClientInit( CreateInterfaceFn clientFactory ); |
|
virtual void ServerShutdown(); |
|
virtual void ClientShutdown(); |
|
virtual bool CanQuit(); |
|
virtual void PostMessage( HTOOLHANDLE hEntity, KeyValues *message ); |
|
virtual void Think( bool finalTick ); |
|
virtual void ServerLevelInitPreEntity(); |
|
virtual void ServerLevelInitPostEntity(); |
|
virtual void ServerLevelShutdownPreEntity(); |
|
virtual void ServerLevelShutdownPostEntity(); |
|
virtual void ServerFrameUpdatePreEntityThink(); |
|
virtual void ServerFrameUpdatePostEntityThink(); |
|
virtual void ServerPreClientUpdate(); |
|
virtual void ServerPreSetupVisibility(); |
|
virtual const char* GetEntityData( const char *pActualEntityData ); |
|
virtual void ClientLevelInitPreEntity(); |
|
virtual void ClientLevelInitPostEntity(); |
|
virtual void ClientLevelShutdownPreEntity(); |
|
virtual void ClientLevelShutdownPostEntity(); |
|
virtual void ClientPreRender(); |
|
virtual void ClientPostRender(); |
|
virtual void OnToolActivate(); |
|
virtual void OnToolDeactivate(); |
|
virtual bool TrapKey( ButtonCode_t key, bool down ); |
|
virtual void AdjustEngineViewport( int& x, int& y, int& width, int& height ); |
|
virtual bool SetupEngineView( Vector &origin, QAngle &angles, float &fov ); |
|
virtual bool SetupAudioState( AudioState_t &audioState ); |
|
virtual bool ShouldGameRenderView(); |
|
virtual bool IsThirdPersonCamera(); |
|
virtual bool IsToolRecording(); |
|
virtual IMaterialProxy *LookupProxy( const char *proxyName ); |
|
virtual bool GetSoundSpatialization( int iUserData, int guid, SpatializationInfo_t& info ); |
|
virtual void HostRunFrameBegin(); |
|
virtual void HostRunFrameEnd(); |
|
virtual void RenderFrameBegin(); |
|
virtual void RenderFrameEnd(); |
|
virtual void VGui_PreRender( int paintMode ); |
|
virtual void VGui_PostRender( int paintMode ); |
|
virtual void VGui_PreSimulate(); |
|
virtual void VGui_PostSimulate(); |
|
|
|
// Inherited from vgui::Panel |
|
virtual void OnMousePressed( vgui::MouseCode code ); |
|
virtual void OnThink(); |
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme); |
|
|
|
// Inherited from IFileOpenStateMachineClient |
|
virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pFileFormat, KeyValues *pContextKeyValues ) { Assert(0); } |
|
virtual bool OnReadFileFromDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ) { Assert(0); return false; } |
|
virtual bool OnWriteFileToDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ) { Assert(0); return false; } |
|
|
|
MESSAGE_FUNC_INT( OnUnhandledMouseClick, "UnhandledMouseClick", code ); |
|
|
|
public: |
|
// Other methods |
|
// NOTE: This name here is 'general' strictly so 'general' shows up in the keybinding dialog |
|
CBaseToolSystem( char const *toolName = "#ToolGeneral" ); |
|
|
|
// Gets the action target to sent to panels so that the tool system's OnCommand is called |
|
vgui::Panel *GetActionTarget(); |
|
|
|
// Gets at the action menu |
|
vgui::Menu *GetActionMenu(); |
|
|
|
// Returns the client area |
|
vgui::Panel* GetClientArea(); |
|
|
|
// Adds a menu button to the main menu bar |
|
void AddMenuButton( CToolMenuButton *pMenuButton ); |
|
|
|
// Returns the current map name |
|
char const *MapName() const; |
|
|
|
// Derived classes implement this to create an action menu |
|
// that appears if you right-click in the tool workspace |
|
virtual vgui::Menu *CreateActionMenu( vgui::Panel *pParent ) { return NULL; } |
|
|
|
// Derived classes implement this to create a custom menubar |
|
virtual vgui::MenuBar *CreateMenuBar( CBaseToolSystem *pParent ); |
|
// Derived classes implement this to create status bar, can return NULL for no status bar in tool... |
|
virtual vgui::Panel *CreateStatusBar( vgui::Panel *pParent ); |
|
|
|
virtual CMiniViewport *CreateMiniViewport( vgui::Panel *parent ); |
|
|
|
virtual void UpdateMenu( vgui::Menu *menu ); |
|
|
|
virtual void ShowMiniViewport( bool state ); |
|
void SetMiniViewportBounds( int x, int y, int width, int height ); |
|
void SetMiniViewportText( const char *pText ); |
|
|
|
void GetMiniViewportEngineBounds( int &x, int &y, int &width, int &height ); |
|
vgui::Panel *GetMiniViewport( void ); |
|
|
|
virtual void ComputeMenuBarTitle( char *buf, size_t buflen ); |
|
|
|
// Usage mode |
|
void SetMode( bool bGameInputEnabled, bool bFullscreen ); |
|
bool IsFullscreen() const; |
|
bool IsGameInputEnabled() const; |
|
void EnableFullscreenToolMode( bool bEnable ); |
|
|
|
// Is this the active tool? |
|
bool IsActiveTool( ) const; |
|
|
|
// Returns the tool that had focus most recently |
|
Panel *GetMostRecentlyFocusedTool(); |
|
|
|
void PostMessageToAllTools( KeyValues *message ); |
|
|
|
protected: |
|
virtual void PaintBackground(); |
|
|
|
// Derived classes must implement this to specify where in the |
|
// registry to store registry settings |
|
virtual const char *GetRegistryName() = 0; |
|
|
|
// Derived classes must return the key bindings context |
|
virtual const char *GetBindingsContextFile() = 0; |
|
|
|
// Derived classes implement this to do stuff when the tool is shown or hidden |
|
virtual void OnModeChanged() {} |
|
|
|
// Derived classes can implement this to get a new scheme to be applied to this tool |
|
virtual vgui::HScheme GetToolScheme() { return 0; } |
|
|
|
// Derived classes can implement this to get notified when files are saved/loaded |
|
virtual void OnFileOperationCompleted( const char *pFileType, bool bWroteFile, vgui::FileOpenStateMachine::CompletionState_t state, KeyValues *pContextKeyValues ) {} |
|
|
|
// Used to open a specified file, and deal with all the lovely dialogs |
|
void OpenFile( const char *pOpenFileType, const char *pSaveFileName = NULL, const char *pSaveFileType = NULL, int nFlags = 0, KeyValues *pKeyValues = NULL ); |
|
void OpenFile( const char *pOpenFileName, const char *pOpenFileType, const char *pSaveFileName = NULL, const char *pSaveFileType = NULL, int nFlags = 0, KeyValues *pKeyValues = NULL ); |
|
|
|
// Used to save a specified file, and deal with all the lovely dialogs |
|
// Pass in NULL to get a dialog to choose a filename to save |
|
// Posts the keyvalues |
|
void SaveFile( const char *pFileName, const char *pFileType, int nFlags, KeyValues *pKeyValues = NULL ); |
|
|
|
KEYBINDING_FUNC_NODECLARE( editkeybindings, KEY_E, vgui::MODIFIER_SHIFT | vgui::MODIFIER_CONTROL | vgui::MODIFIER_ALT, OnEditKeyBindings, "#editkeybindings_help", 0 ); |
|
KEYBINDING_FUNC( keybindinghelp, KEY_H, 0, OnKeyBindingHelp, "#keybindinghelp_help", 0 ); |
|
|
|
virtual char const *GetBackgroundTextureName(); |
|
virtual char const *GetLogoTextureName() = 0; |
|
|
|
virtual bool HasDocument(); |
|
|
|
virtual void ToggleForceToolCamera(); |
|
|
|
// Shows, hides the tool ui (menu, client area, status bar) |
|
void SetToolUIVisible( bool bVisible ); |
|
|
|
// Deals with keybindings |
|
void LoadKeyBindings(); |
|
void ShowKeyBindingsEditor( vgui::Panel *panel, vgui::KeyBindingContextHandle_t handle ); |
|
void ShowKeyBindingsHelp( vgui::Panel *panel, vgui::KeyBindingContextHandle_t handle, vgui::KeyCode boundKey, int modifiers ); |
|
vgui::KeyBindingContextHandle_t GetKeyBindingsHandle(); |
|
|
|
// Registers tool window |
|
void RegisterToolWindow( vgui::PHandle hPanel ); |
|
void UnregisterAllToolWindows(); |
|
void PostMessageToActiveTool( char const *msg, float delay = 0.0f ); |
|
void PostMessageToActiveTool( KeyValues *pKeyValues, float flDelay = 0.0f ); |
|
|
|
protected: |
|
// Recent file list |
|
CRecentFileList m_RecentFiles; |
|
|
|
private: |
|
// Shows/hides the tool |
|
bool ShowUI( bool bVisible ); |
|
|
|
// Updates UI visibility |
|
void UpdateUIVisibility(); |
|
|
|
// Create, destroy action menu |
|
void InitActionMenu(); |
|
void ShutdownActionMenu(); |
|
|
|
// Positions the action menu when it's time to pop it up |
|
void PositionActionMenu(); |
|
|
|
// Messages related to saving a file |
|
MESSAGE_FUNC_PARAMS( OnFileStateMachineFinished, "FileStateMachineFinished", kv ); |
|
|
|
// Handlers for standard menus |
|
MESSAGE_FUNC( OnClearRecent, "OnClearRecent" ); |
|
MESSAGE_FUNC( OnEditKeyBindings, "OnEditKeyBindings" ); |
|
|
|
// The root toolsystem panel which should cover the entire screen |
|
// here to allow us to do action menus anywhere |
|
|
|
// The tool UI |
|
CToolUI *m_pToolUI; |
|
|
|
// The action menu |
|
vgui::DHANDLE<vgui::Menu> m_hActionMenu; |
|
|
|
bool m_bGameInputEnabled; |
|
bool m_bFullscreenMode; |
|
bool m_bIsActive; |
|
bool m_bFullscreenToolModeEnabled; |
|
|
|
vgui::DHANDLE< CMiniViewport > m_hMiniViewport; |
|
vgui::FileOpenStateMachine *m_pFileOpenStateMachine; |
|
IMaterial *m_pBackground; |
|
IMaterial *m_pLogo; |
|
|
|
// Keybindings |
|
vgui::KeyBindingContextHandle_t m_KeyBindingsHandle; |
|
vgui::DHANDLE< vgui::CKeyBoardEditorDialog > m_hKeyBindingsEditor; |
|
vgui::DHANDLE< vgui::CKeyBindingHelpDialog > m_hKeyBindingsHelp; |
|
CUtlVector< vgui::PHandle > m_Tools; |
|
vgui::PHandle m_MostRecentlyFocused; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Inline methods |
|
//----------------------------------------------------------------------------- |
|
|
|
//----------------------------------------------------------------------------- |
|
// Is this the active tool? |
|
//----------------------------------------------------------------------------- |
|
inline bool CBaseToolSystem::IsActiveTool( ) const |
|
{ |
|
return m_bIsActive; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Mode query |
|
//----------------------------------------------------------------------------- |
|
inline bool CBaseToolSystem::IsFullscreen( ) const |
|
{ |
|
return m_bFullscreenMode; |
|
} |
|
|
|
inline bool CBaseToolSystem::IsGameInputEnabled() const |
|
{ |
|
// NOTE: IsActive check here is a little bogus. |
|
// It's necessary to get the IFM to play nice with other tools, though. |
|
// Is there a better way of doing it? |
|
return m_bGameInputEnabled || !m_bIsActive; |
|
} |
|
|
|
|
|
#endif // BASETOOLSYSTEM_H
|
|
|