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.

150 lines
5.1 KiB

/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
//////////////////////////////////////////////////////////////////////////////
// //
// pfConsole Header //
// //
// 9.21.2001 mcn - Added pfLogDisplays. These are classes that represent //
// a scrolling buffer, much like the console, for on- //
// screen display of error logs and the such. Currently //
// managed by the console, but hopefully once we have //
// a general manager for dialogs/menus (debug or //
// otherwise), that manager will take the displays over. //
// //
//////////////////////////////////////////////////////////////////////////////
#ifndef _pfConsole_h
#define _pfConsole_h
#include "hsTypes.h"
#include "pnKeyedObject/hsKeyedObject.h"
class plPipeline;
//// Class Definition ////////////////////////////////////////////////////////
class pfConsoleEngine;
class plKeyEventMsg;
class pfConsoleInputInterface;
class pfConsole : public hsKeyedObject
{
friend class pfConsoleInputInterface;
protected:
enum Konstants
{
kNumHistoryItems = 16,
kModeHidden = 0,
kModeSingleLine = 1,
kModeFull = 2,
kEffectDivisions = 1000,
kMaxCharsWide = 80,
kHelpDelay = 32,
kCursorBlinkRate = 16,
kMsgHintTimeout = 64,
kWorkingLineSize = 256
};
UInt32 fNumDisplayLines;
Int32 fEffectCounter;
float fLastTime;
UInt32 fHelpTimer;
char fLastHelpMsg[ kWorkingLineSize ];
UInt8 fMode; // 0 - invisible, 1 - single line, 2 - full
hsBool fInited, fHelpMode, fPythonMode, fPythonFirstTime, fFXEnabled;
UInt32 fPythonMultiLines;
short fCursorTicks;
UInt32 fMsgTimeoutTimer;
char fHistory[ kNumHistoryItems ][ kMaxCharsWide ];
UInt32 fHistoryCursor, fHistoryRecallCursor;
char *fDisplayBuffer;
char fWorkingLine[ kWorkingLineSize ];
UInt32 fWorkingCursor;
pfConsoleInputInterface *fInputInterface;
pfConsoleEngine *fEngine;
void IHandleKey( plKeyEventMsg *msg );
char IKeyEventToChar( plKeyEventMsg *msg );
static UInt32 fConsoleTextColor;
static pfConsole *fTheConsole;
static void _cdecl IAddLineCallback( const char *string );
static plPipeline *fPipeline;
void IAddLine( const char *string, short leftMargin = 0 );
void IAddParagraph( const char *string, short margin = 0 );
void IClear( void );
void ISetMode( UInt8 mode );
void IEnableFX( hsBool e ) { fFXEnabled = e; }
hsBool IFXEnabled( void ) { return fFXEnabled; }
void IPrintSomeHelp( void );
void IUpdateTooltip( void );
public:
pfConsole();
~pfConsole();
CLASSNAME_REGISTER( pfConsole );
GETINTERFACE_ANY( pfConsole, plReceiver );
static pfConsole * GetInstance ();
virtual hsBool MsgReceive( plMessage *msg );
void Init( pfConsoleEngine *engine );
void Draw( plPipeline *p );
static void AddLine( const char *string ) { fTheConsole->IAddParagraph( string ); }
static void AddLineF(const char * fmt, ...);
static void Clear( void ) { fTheConsole->IClear(); }
static void Hide( void ) { fTheConsole->ISetMode(kModeHidden); }
static void EnableEffects( hsBool enable ) { fTheConsole->IEnableFX( enable ); }
static hsBool AreEffectsEnabled( void ) { return fTheConsole->IFXEnabled(); }
static void SetTextColor( UInt32 color ) { fConsoleTextColor = color; }
static UInt32 GetTextColor() { return fConsoleTextColor; }
static void SetPipeline( plPipeline *pipe ) { fPipeline = pipe; }
static plPipeline *GetPipeline( void ) { return fPipeline; }
static void RunCommandAsync (const char cmd[]);
};
#endif //_pfConsole_h