123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456 |
- #ifndef __WINDOW_H__
- #define __WINDOW_H__
- #include "Rectangle.h"
- #include "DeviceContext.h"
- #include "RegExp.h"
- #include "Winvar.h"
- #include "GuiScript.h"
- #include "SimpleWindow.h"
- const int WIN_CHILD = 0x00000001;
- const int WIN_CAPTION = 0x00000002;
- const int WIN_BORDER = 0x00000004;
- const int WIN_SIZABLE = 0x00000008;
- const int WIN_MOVABLE = 0x00000010;
- const int WIN_FOCUS = 0x00000020;
- const int WIN_CAPTURE = 0x00000040;
- const int WIN_HCENTER = 0x00000080;
- const int WIN_VCENTER = 0x00000100;
- const int WIN_MODAL = 0x00000200;
- const int WIN_INTRANSITION = 0x00000400;
- const int WIN_CANFOCUS = 0x00000800;
- const int WIN_SELECTED = 0x00001000;
- const int WIN_TRANSFORM = 0x00002000;
- const int WIN_HOLDCAPTURE = 0x00004000;
- const int WIN_NOWRAP = 0x00008000;
- const int WIN_NOCLIP = 0x00010000;
- const int WIN_INVERTRECT = 0x00020000;
- const int WIN_NATURALMAT = 0x00040000;
- const int WIN_NOCURSOR = 0x00080000;
- const int WIN_MENUGUI = 0x00100000;
- const int WIN_ACTIVE = 0x00200000;
- const int WIN_SHOWCOORDS = 0x00400000;
- const int WIN_SHOWTIME = 0x00800000;
- const int WIN_WANTENTER = 0x01000000;
- const int WIN_DESKTOP = 0x10000000;
- const char CAPTION_HEIGHT[] = "16.0";
- const char SCROLLER_SIZE[] = "16.0";
- const int SCROLLBAR_SIZE = 16;
- const int MAX_WINDOW_NAME = 32;
- const int MAX_LIST_ITEMS = 1024;
- const char DEFAULT_BACKCOLOR[] = "1 1 1 1";
- const char DEFAULT_FORECOLOR[] = "0 0 0 1";
- const char DEFAULT_BORDERCOLOR[] = "0 0 0 1";
- const char DEFAULT_TEXTSCALE[] = "0.4";
- typedef enum {
- WOP_TYPE_ADD,
- WOP_TYPE_SUBTRACT,
- WOP_TYPE_MULTIPLY,
- WOP_TYPE_DIVIDE,
- WOP_TYPE_MOD,
- WOP_TYPE_TABLE,
- WOP_TYPE_GT,
- WOP_TYPE_GE,
- WOP_TYPE_LT,
- WOP_TYPE_LE,
- WOP_TYPE_EQ,
- WOP_TYPE_NE,
- WOP_TYPE_AND,
- WOP_TYPE_OR,
- WOP_TYPE_VAR,
- WOP_TYPE_VARS,
- WOP_TYPE_VARF,
- WOP_TYPE_VARI,
- WOP_TYPE_VARB,
- WOP_TYPE_COND
- } wexpOpType_t;
- typedef enum {
- WEXP_REG_TIME,
- WEXP_REG_NUM_PREDEFINED
- } wexpRegister_t;
- typedef struct {
- wexpOpType_t opType;
- int a, b, c, d;
- } wexpOp_t;
- struct idRegEntry {
- const char *name;
- idRegister::REGTYPE type;
- int index;
- };
- class rvGEWindowWrapper;
- class idWindow;
- struct idTimeLineEvent {
- idTimeLineEvent() {
- event = new idGuiScriptList;
- }
- ~idTimeLineEvent() {
- delete event;
- }
- int time;
- idGuiScriptList *event;
- bool pending;
- size_t Size() {
- return sizeof(*this) + event->Size();
- }
- };
- class rvNamedEvent
- {
- public:
- rvNamedEvent(const char* name)
- {
- mEvent = new idGuiScriptList;
- mName = name;
- }
- ~rvNamedEvent(void)
- {
- delete mEvent;
- }
- size_t Size()
- {
- return sizeof(*this) + mEvent->Size();
- }
-
- idStr mName;
- idGuiScriptList* mEvent;
- };
- struct idTransitionData {
- idWinVar *data;
- int offset;
- idInterpolateAccelDecelLinear<idVec4> interp;
- };
- class idUserInterfaceLocal;
- class idWindow {
- public:
- idWindow(idUserInterfaceLocal *gui);
- idWindow(idDeviceContext *d, idUserInterfaceLocal *gui);
- virtual ~idWindow();
- enum {
- ON_MOUSEENTER = 0,
- ON_MOUSEEXIT,
- ON_ACTION,
- ON_ACTIVATE,
- ON_DEACTIVATE,
- ON_ESC,
- ON_FRAME,
- ON_TRIGGER,
- ON_ACTIONRELEASE,
- ON_ENTER,
- ON_ENTERRELEASE,
- SCRIPT_COUNT
- };
- enum {
- ADJUST_MOVE = 0,
- ADJUST_TOP,
- ADJUST_RIGHT,
- ADJUST_BOTTOM,
- ADJUST_LEFT,
- ADJUST_TOPLEFT,
- ADJUST_BOTTOMRIGHT,
- ADJUST_TOPRIGHT,
- ADJUST_BOTTOMLEFT
- };
- static const char *ScriptNames[SCRIPT_COUNT];
- static const idRegEntry RegisterVars[];
- static const int NumRegisterVars;
- void SetDC(idDeviceContext *d);
- idDeviceContext* GetDC ( void ) { return dc; }
- idWindow *SetFocus(idWindow *w, bool scripts = true);
- idWindow *SetCapture(idWindow *w);
- void SetParent(idWindow *w);
- void SetFlag(unsigned int f);
- void ClearFlag(unsigned int f);
- unsigned GetFlags() {return flags;};
- void Move(float x, float y);
- void BringToTop(idWindow *w);
- void Adjust(float xd, float yd);
- void SetAdjustMode(idWindow *child);
- void Size(float x, float y, float w, float h);
- void SetupFromState();
- void SetupBackground();
- drawWin_t *FindChildByName(const char *name);
- idSimpleWindow *FindSimpleWinByName(const char *_name);
- idWindow *GetParent() { return parent; }
- idUserInterfaceLocal *GetGui() {return gui;};
- bool Contains(float x, float y);
- size_t Size();
- virtual size_t Allocated();
- idStr* GetStrPtrByName(const char *_name);
- virtual idWinVar *GetWinVarByName (const char *_name, bool winLookup = false, drawWin_t** owner = NULL);
- int GetWinVarOffset( idWinVar *wv, drawWin_t *dw );
- float GetMaxCharHeight();
- float GetMaxCharWidth();
- void SetFont();
- void SetInitialState(const char *_name);
- void AddChild(idWindow *win);
- void DebugDraw(int time, float x, float y);
- void CalcClientRect(float xofs, float yofs);
- void CommonInit();
- void CleanUp();
- void DrawBorderAndCaption(const idRectangle &drawRect);
- void DrawCaption(int time, float x, float y);
- void SetupTransforms(float x, float y);
- bool Contains(const idRectangle &sr, float x, float y);
- const char *GetName() { return name; };
- virtual bool Parse(idParser *src, bool rebuild = true);
- virtual const char *HandleEvent(const sysEvent_t *event, bool *updateVisuals);
- void CalcRects(float x, float y);
- virtual void Redraw(float x, float y);
- virtual void ArchiveToDictionary(idDict *dict, bool useNames = true);
- virtual void InitFromDictionary(idDict *dict, bool byName = true);
- virtual void PostParse();
- virtual void Activate( bool activate, idStr &act );
- virtual void Trigger();
- virtual void GainFocus();
- virtual void LoseFocus();
- virtual void GainCapture();
- virtual void LoseCapture();
- virtual void Sized();
- virtual void Moved();
- virtual void Draw(int time, float x, float y);
- virtual void MouseExit();
- virtual void MouseEnter();
- virtual void DrawBackground(const idRectangle &drawRect);
- virtual const char *RouteMouseCoords(float xd, float yd);
- virtual void SetBuddy(idWindow *buddy) {};
- virtual void HandleBuddyUpdate(idWindow *buddy) {};
- virtual void StateChanged( bool redraw );
- virtual void ReadFromDemoFile( class idDemoFile *f, bool rebuild = true );
- virtual void WriteToDemoFile( class idDemoFile *f );
-
- void WriteSaveGameString( const char *string, idFile *savefile );
- void WriteSaveGameTransition( idTransitionData &trans, idFile *savefile );
- virtual void WriteToSaveGame( idFile *savefile );
- void ReadSaveGameString( idStr &string, idFile *savefile );
- void ReadSaveGameTransition( idTransitionData & trans, idFile *savefile );
- virtual void ReadFromSaveGame( idFile *savefile );
- void FixupTransitions();
- virtual void HasAction(){};
- virtual void HasScripts(){};
- void FixupParms();
- void GetScriptString(const char *name, idStr &out);
- void SetScriptParams();
- bool HasOps() { return (ops.Num() > 0); };
- float EvalRegs(int test = -1, bool force = false);
- void StartTransition();
- void AddTransition(idWinVar *dest, idVec4 from, idVec4 to, int time, float accelTime, float decelTime);
- void ResetTime(int time);
- void ResetCinematics();
- int NumTransitions();
- bool ParseScript(idParser *src, idGuiScriptList &list, int *timeParm = NULL, bool allowIf = false);
- bool RunScript(int n);
- bool RunScriptList(idGuiScriptList *src);
- void SetRegs(const char *key, const char *val);
- int ParseExpression( idParser *src, idWinVar *var = NULL, int component = 0 );
- int ExpressionConstant(float f);
- idRegisterList *RegList() { return ®List; }
- void AddCommand(const char *cmd);
- void AddUpdateVar(idWinVar *var);
- bool Interactive();
- bool ContainsStateVars();
- void SetChildWinVarVal(const char *name, const char *var, const char *val);
- idWindow *GetFocusedChild();
- idWindow *GetCaptureChild();
- const char *GetComment() { return comment; }
- void SetComment( const char * p) { comment = p; }
- idStr cmd;
- virtual void RunNamedEvent ( const char* eventName );
- void AddDefinedVar ( idWinVar* var );
- idWindow* FindChildByPoint ( float x, float y, idWindow* below = NULL );
- int GetChildIndex ( idWindow* window );
- int GetChildCount ( void );
- idWindow* GetChild ( int index );
- void RemoveChild ( idWindow *win );
- bool InsertChild ( idWindow *win, idWindow* before );
- void ScreenToClient ( idRectangle* rect );
- void ClientToScreen ( idRectangle* rect );
- bool UpdateFromDictionary ( idDict& dict );
- protected:
- friend class rvGEWindowWrapper;
- idWindow* FindChildByPoint ( float x, float y, idWindow** below );
- void SetDefaults ( void );
- friend class idSimpleWindow;
- friend class idUserInterfaceLocal;
- bool IsSimple();
- void UpdateWinVars();
- void DisableRegister(const char *_name);
- void Transition();
- void Time();
- bool RunTimeEvents(int time);
- void Dump();
- int ExpressionTemporary();
- wexpOp_t *ExpressionOp();
- int EmitOp( int a, int b, wexpOpType_t opType, wexpOp_t **opp = NULL );
- int ParseEmitOp( idParser *src, int a, wexpOpType_t opType, int priority, wexpOp_t **opp = NULL );
- int ParseTerm( idParser *src, idWinVar *var = NULL, int component = 0 );
- int ParseExpressionPriority( idParser *src, int priority, idWinVar *var = NULL, int component = 0 );
- void EvaluateRegisters(float *registers);
- void SaveExpressionParseState();
- void RestoreExpressionParseState();
- void ParseBracedExpression(idParser *src);
- bool ParseScriptEntry(const char *name, idParser *src);
- bool ParseRegEntry(const char *name, idParser *src);
- virtual bool ParseInternalVar(const char *name, idParser *src);
- void ParseString(idParser *src, idStr &out);
- void ParseVec4(idParser *src, idVec4 &out);
- void ConvertRegEntry(const char *name, idParser *src, idStr &out, int tabs);
- float actualX;
- float actualY;
- int childID;
- unsigned int flags;
- int lastTimeRun;
- idRectangle drawRect;
- idRectangle clientRect;
- idVec2 origin;
- int timeLine;
- float xOffset;
- float yOffset;
- float forceAspectWidth;
- float forceAspectHeight;
- float matScalex;
- float matScaley;
- float borderSize;
- float textAlignx;
- float textAligny;
- idStr name;
- idStr comment;
- idVec2 shear;
- signed char textShadow;
- unsigned char fontNum;
- unsigned char cursor;
- signed char textAlign;
- idWinBool noTime;
- idWinBool visible;
- idWinBool noEvents;
- idWinRectangle rect;
- idWinVec4 backColor;
- idWinVec4 matColor;
- idWinVec4 foreColor;
- idWinVec4 hoverColor;
- idWinVec4 borderColor;
- idWinFloat textScale;
- idWinFloat rotate;
- idWinStr text;
- idWinBackground backGroundName;
- idList<idWinVar*> definedVars;
- idList<idWinVar*> updateVars;
- idRectangle textRect;
- const idMaterial *background;
- idWindow *parent;
- idList<idWindow*> children;
- idList<drawWin_t> drawWindows;
- idWindow *focusedChild;
- idWindow *captureChild;
- idWindow *overChild;
- bool hover;
- idDeviceContext *dc;
- idUserInterfaceLocal *gui;
- static idCVar gui_debug;
- static idCVar gui_edit;
- idGuiScriptList *scripts[SCRIPT_COUNT];
- bool *saveTemps;
- idList<idTimeLineEvent*> timeLineEvents;
- idList<idTransitionData> transitions;
- static bool registerIsTemporary[MAX_EXPRESSION_REGISTERS];
- idList<wexpOp_t> ops;
- idList<float> expressionRegisters;
- idList<wexpOp_t> *saveOps;
- idList<rvNamedEvent*> namedEvents;
- idList<float> *saveRegs;
- idRegisterList regList;
- idWinBool hideCursor;
- };
- ID_INLINE void idWindow::AddDefinedVar( idWinVar* var ) {
- definedVars.AddUnique( var );
- }
- #endif
|