/*========================================================================= gui.h Author: PKG Created: Project: Spongebob Purpose: NB: GUI ITEMS delete() THEMSELVES WHEN THEY ARE SHUTDOWN! Copyright (c) 2000 Climax Development Ltd ===========================================================================*/ #ifndef __GUI_GUI_H__ #define __GUI_GUI_H__ /*---------------------------------------------------------------------- Includes -------- */ #ifndef __FILE_EQUATES_H__ #include // just to get the bloody def for FileEquate(!) #endif /* Std Lib ------- */ /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ // PKG // None of these clasess should ever really be instantiated, but they are the basis of all other GUI objects. // Need a nice way to force this to be the case.. class CGUIObject { public: typedef int GUIId; static const GUIId noId=-1; typedef enum { FLAG_NONE= 0, FLAG_SELECTED= 1<<0, FLAG_HIDDEN= 1<<2, FLAG_DRAWBORDER= 1<<3, } GUI_FLAGS; enum { INITIAL_OT=5, BORDERWIDTH=8, BORDERHEIGHT=5, }; virtual void init(CGUIObject *_parent,GUIId _id=noId); virtual void shutdown(); void setObjectX(int _x) {m_x=_x;recalc();} void setObjectY(int _y) {m_y=_y;recalc();} void setObjectW(int _w) {m_w=_w;recalc();} void setObjectH(int _h) {m_h=_h;recalc();} void setObjectXY(int _x,int _y) {setObjectX(_x);setObjectY(_y);} void setObjectWH(int _w,int _h) {setObjectW(_w);setObjectH(_h);} void setObjectXYWH(int _x,int _y,int _w,int _h) {setObjectXY(_x,_y);setObjectWH(_w,_h);} virtual void render(); virtual void think(int _frames); virtual void setFlags(GUI_FLAGS _flags) {m_flags|=_flags;} virtual void clearFlags(GUI_FLAGS _flags) {m_flags&=_flags^-1;} int getFlags(GUI_FLAGS _flags) {return (m_flags&_flags)!=0;} // Quick access functions to the most frequently used flags void select() {setFlags(FLAG_SELECTED);} void unselect() {clearFlags(FLAG_SELECTED);} int isSelected() {return getFlags(FLAG_SELECTED);} void hide() {setFlags(FLAG_HIDDEN);} void unhide() {clearFlags(FLAG_HIDDEN);} int isHidden() {return getFlags(FLAG_HIDDEN);} CGUIObject *getChild() {return m_child;} CGUIObject *getNext() {return m_next;} virtual int isSelectable() {return false;} virtual int isUnselectable() {return true;} void setOt(int _ot) {m_ot=_ot;} int getOt() {return m_ot;} // PKG - Do we really need ids!? int getId() {return m_id;} protected: virtual void recalc(); virtual GUI_FLAGS getInitialFlags() {return FLAG_NONE;} int getX() {return m_x;} int getY() {return m_y;} int getW() {return m_w;} int getH() {return m_h;} int getParentX() {if(m_parent)return m_parent->getX()+m_parent->getParentX();else return 0;} int getParentY() {if(m_parent)return m_parent->getY()+m_parent->getParentY();else return 0;} private: GUIId m_id; int m_x,m_y,m_w,m_h; int m_flags; int m_ot; CGUIObject *m_this; // Used to check that that the object has been initialised CGUIObject *m_parent; // Parent object CGUIObject *m_child; // First child CGUIObject *m_next; // Next item at this level }; class CGUIObjectWithFont : public CGUIObject { public: virtual void init(CGUIObject *_parent,GUIId _id=noId); virtual void shutdown(); virtual void setFlags(GUI_FLAGS _flags); virtual void clearFlags(GUI_FLAGS _flags); void setOt(int _ot); protected: enum { DEFAULT_FONT_R=110, DEFAULT_FONT_G=110, DEFAULT_FONT_B=110, SELECTED_FONT_R=245, SELECTED_FONT_G=245, SELECTED_FONT_B=245, }; virtual void recalc(); class FontBank *getFontBank() {return m_fontBank;} private: class FontBank *m_fontBank; }; class CGUIObjectWithSpriteBank : public CGUIObject { public: virtual void init(CGUIObject *_parent,GUIId _id=noId); virtual void shutdown(); virtual void setSpriteBank(FileEquate _fe); protected: class SpriteBank *getSpriteBank() {return m_spriteBank;} private: class SpriteBank *m_spriteBank; }; /*---------------------------------------------------------------------- Globals ------- */ /*---------------------------------------------------------------------- Functions --------- */ extern void initGUIStuff(); extern void drawBambooBorder(int _x,int _y,int _w,int _h,int _ot); extern void drawSpeechBubbleBorder(int _x,int _y,int _w,int _h,int _ot,int _faceFrame=-1); /*---------------------------------------------------------------------- */ #endif /* __GUI_GUI_H__ */ /*=========================================================================== end */