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.
171 lines
4.2 KiB
171 lines
4.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//===========================================================================// |
|
|
|
#ifndef CONSOLEDIALOG_H |
|
#define CONSOLEDIALOG_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include <Color.h> |
|
#include "tier1/utlvector.h" |
|
#include "vgui_controls/EditablePanel.h" |
|
#include "vgui_controls/Frame.h" |
|
#include "icvar.h" |
|
|
|
class ConCommandBase; |
|
|
|
|
|
namespace vgui |
|
{ |
|
|
|
// Things the user typed in and hit submit/return with |
|
class CHistoryItem |
|
{ |
|
public: |
|
CHistoryItem( void ); |
|
CHistoryItem( const char *text, const char *extra = NULL ); |
|
CHistoryItem( const CHistoryItem& src ); |
|
~CHistoryItem( void ); |
|
|
|
const char *GetText() const; |
|
const char *GetExtra() const; |
|
void SetText( const char *text, const char *extra ); |
|
bool HasExtra() { return m_bHasExtra; } |
|
|
|
private: |
|
char *m_text; |
|
char *m_extraText; |
|
bool m_bHasExtra; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Game/dev console dialog |
|
//----------------------------------------------------------------------------- |
|
class CConsolePanel : public vgui::EditablePanel, public IConsoleDisplayFunc |
|
{ |
|
DECLARE_CLASS_SIMPLE( CConsolePanel, vgui::EditablePanel ); |
|
|
|
public: |
|
CConsolePanel( Panel *pParent, const char *pName, bool bStatusVersion ); |
|
~CConsolePanel(); |
|
|
|
// Inherited from IConsoleDisplayFunc |
|
virtual void ColorPrint( const Color& clr, const char *pMessage ); |
|
virtual void Print( const char *pMessage ); |
|
virtual void DPrint( const char *pMessage ); |
|
virtual void GetConsoleText( char *pchText, size_t bufSize ) const; |
|
|
|
// clears the console |
|
void Clear(); |
|
|
|
// writes console to a file |
|
void DumpConsoleTextToFile(); |
|
|
|
// Hides the console |
|
void Hide(); |
|
|
|
bool TextEntryHasFocus() const; |
|
void TextEntryRequestFocus(); |
|
|
|
|
|
|
|
private: |
|
enum |
|
{ |
|
MAX_HISTORY_ITEMS = 100, |
|
}; |
|
|
|
class CompletionItem |
|
{ |
|
public: |
|
CompletionItem( void ); |
|
CompletionItem( const CompletionItem& src ); |
|
CompletionItem& operator =( const CompletionItem& src ); |
|
~CompletionItem( void ); |
|
const char *GetItemText( void ); |
|
const char *GetCommand( void ) const; |
|
const char *GetName() const; |
|
|
|
bool m_bIsCommand; |
|
ConCommandBase *m_pCommand; |
|
CHistoryItem *m_pText; |
|
}; |
|
|
|
protected: |
|
// methods |
|
void OnAutoComplete(bool reverse); |
|
MESSAGE_FUNC_PTR( OnTextChanged, "TextChanged", panel ); |
|
void RebuildCompletionList(const char *partialText); |
|
void UpdateCompletionListPosition(); |
|
MESSAGE_FUNC( CloseCompletionList, "CloseCompletionList" ); |
|
MESSAGE_FUNC_CHARPTR( OnMenuItemSelected, "CompletionCommand", command ); |
|
void ClearCompletionList(); |
|
void AddToHistory( const char *commandText, const char *extraText ); |
|
|
|
// vgui overrides |
|
virtual void PerformLayout(); |
|
virtual void ApplySchemeSettings(vgui::IScheme *pScheme); |
|
virtual void OnCommand(const char *command); |
|
virtual void OnKeyCodeTyped(vgui::KeyCode code); |
|
virtual void OnThink(); |
|
|
|
vgui::RichText *m_pHistory; |
|
vgui::TextEntry *m_pEntry; |
|
vgui::Button *m_pSubmit; |
|
vgui::Menu *m_pCompletionList; |
|
Color m_PrintColor; |
|
Color m_DPrintColor; |
|
|
|
int m_iNextCompletion; // the completion that we'll next go to |
|
char m_szPartialText[256]; |
|
char m_szPreviousPartialText[256]; |
|
bool m_bAutoCompleteMode; // true if the user is currently tabbing through completion options |
|
bool m_bWasBackspacing; |
|
bool m_bStatusVersion; |
|
|
|
CUtlVector< CompletionItem * > m_CompletionList; |
|
CUtlVector< CHistoryItem > m_CommandHistory; |
|
|
|
friend class CConsoleDialog; |
|
}; |
|
|
|
|
|
class CConsoleDialog : public vgui::Frame |
|
{ |
|
DECLARE_CLASS_SIMPLE( CConsoleDialog, vgui::Frame ); |
|
|
|
public: |
|
CConsoleDialog( vgui::Panel *pParent, const char *pName, bool bStatusVersion ); |
|
|
|
virtual void OnScreenSizeChanged( int iOldWide, int iOldTall ); |
|
virtual void Close(); |
|
virtual void PerformLayout(); |
|
|
|
// brings dialog to the fore |
|
MESSAGE_FUNC( Activate, "Activate" ); |
|
MESSAGE_FUNC_CHARPTR( OnCommandSubmitted, "CommandSubmitted", command ); |
|
|
|
// hides the console |
|
void Hide(); |
|
|
|
// Chain to the page |
|
void Print( const char *msg ); |
|
void DPrint( const char *msg ); |
|
void ColorPrint( const Color& clr, const char *msg ); |
|
void Clear(); |
|
void DumpConsoleTextToFile(); |
|
|
|
virtual void OnKeyCodePressed( vgui::KeyCode code ); |
|
|
|
protected: |
|
CConsolePanel *m_pConsolePanel; |
|
}; |
|
|
|
} // end namespace vgui |
|
|
|
#endif // CONSOLEDIALOG_H
|
|
|