//-------------------------------------------------------------------------------------------------------- //========= Copyright Valve Corporation, All rights reserved. ============// #ifndef NAVUI_H #define NAVUI_H #ifdef SERVER_USES_VGUI #include "KeyValues.h" #include #include #include #include #include #include #include #include "vgui/ISurface.h" #include "vgui/IVGui.h" #include "fmtstr.h" #include //-------------------------------------------------------------------------------------------------------- void GetNavUIEditVectors( Vector *pos, Vector *forward ); //-------------------------------------------------------------------------------------------------------- class CNavUIButton : public vgui::Button { DECLARE_CLASS_SIMPLE( CNavUIButton, vgui::Button ); public: CNavUIButton( Panel *parent, const char *name ) : vgui::Button( parent, name, "" ) { m_hideKey = BUTTON_CODE_INVALID; } virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void OnKeyCodeReleased( vgui::KeyCode code ); private: void LookupKey( void ); ButtonCode_t m_hideKey; IntervalTimer m_hidePressedTimer; }; //-------------------------------------------------------------------------------------------------------- class CNavUITextEntry : public vgui::TextEntry { DECLARE_CLASS_SIMPLE( CNavUIButton, vgui::TextEntry ); public: CNavUITextEntry( Panel *parent, const char *name ) : vgui::TextEntry( parent, name ) { m_hideKey = BUTTON_CODE_INVALID; } virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void OnKeyCodeReleased( vgui::KeyCode code ); private: void LookupKey( void ); ButtonCode_t m_hideKey; IntervalTimer m_hidePressedTimer; }; //-------------------------------------------------------------------------------------------------------- class CNavUIComboBox : public vgui::ComboBox { DECLARE_CLASS_SIMPLE( CNavUIComboBox, vgui::ComboBox ); public: CNavUIComboBox( Panel *parent, const char *name, int numLines, bool editable ) : vgui::ComboBox( parent, name, numLines, editable ) { m_hideKey = BUTTON_CODE_INVALID; } virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void OnKeyCodeReleased( vgui::KeyCode code ); private: void LookupKey( void ); ButtonCode_t m_hideKey; IntervalTimer m_hidePressedTimer; }; //-------------------------------------------------------------------------------------------------------- class CNavUICheckButton : public vgui::CheckButton { DECLARE_CLASS_SIMPLE( CNavUICheckButton, vgui::CheckButton ); public: CNavUICheckButton( Panel *parent, const char *name, const char *text ) : vgui::CheckButton( parent, name, text ) { m_hideKey = BUTTON_CODE_INVALID; } virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void OnKeyCodeReleased( vgui::KeyCode code ); private: void LookupKey( void ); ButtonCode_t m_hideKey; IntervalTimer m_hidePressedTimer; }; //-------------------------------------------------------------------------------------------------------- class CNavUIToolPanel : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CNavUIToolPanel, vgui::EditablePanel ); public: CNavUIToolPanel( vgui::Panel *parent, const char *toolName ) : vgui::EditablePanel( parent, toolName ) { } virtual void Init( void ) { } virtual void Shutdown( void ) { } virtual vgui::Panel *CreateControlByName( const char *controlName ); virtual void StartLeftClickAction( const char *actionName ) { } virtual void FinishLeftClickAction( const char *actionName ) { } virtual void StartRightClickAction( const char *actionName ) { } protected: bool IsCheckButtonChecked( const char *name ); }; //-------------------------------------------------------------------------------------------------------- class CNavUIBasePanel : public vgui::Frame { DECLARE_CLASS_SIMPLE( CNavUIBasePanel, vgui::Frame ); public: CNavUIBasePanel(); virtual ~CNavUIBasePanel(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void OnCommand( const char *command ); virtual void PerformLayout( void ); virtual void PaintBackground( void ); // GameUI panels are always visible by default, so here we hide ourselves if the GameUI is up. virtual void OnTick( void ); void ToggleVisibility( void ); virtual Panel *CreateControlByName( const char *controlName ); virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void OnKeyCodeReleased( vgui::KeyCode code ); virtual void OnMousePressed( vgui::MouseCode code ); virtual void OnCursorMoved( int x, int y ); virtual void OnCursorEntered( void ); virtual void OnCursorExited( void ); virtual void OnMouseReleased( vgui::MouseCode code ); void SetLeftClickAction( const char *action, const char *text ); const char *GetLeftClickAction( void ) const { return m_leftClickAction; } void PlaySound( const char *sound ); protected: const char *ActiveToolName( void ) const; void ActivateTool( const char *toolName ); virtual CNavUIToolPanel *CreateTool( const char *toolName, vgui::Panel *toolParent ); private: bool m_hidden; bool m_dragSelecting; bool m_dragUnselecting; CNavUIToolPanel *m_toolPanel; CNavUIToolPanel *m_selectionPanel; void LookupKey( void ); ButtonCode_t m_hideKey; IntervalTimer m_hidePressedTimer; CountdownTimer m_audioTimer; char m_leftClickAction[ 64 ]; bool m_performingLeftClickAction; }; extern CNavUIBasePanel *CreateNavUI( void ); extern CNavUIBasePanel *TheNavUI( void ); #endif // SERVER_USES_VGUI #endif // NAVUI_H