diff --git a/include/GewiButton.h b/include/GewiButton.h index 2899212..5f166ff 100755 --- a/include/GewiButton.h +++ b/include/GewiButton.h @@ -13,7 +13,7 @@ \brief Definition file for GButton. Definition file for GButton, a simple button class. -
$Id: GewiButton.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiButton.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -26,22 +26,91 @@ namespace Gewi { +/*! + \brief Enumeration for the button types. + + Definitions of the two possible button types. +**/ +enum GButtonType +{ + GBT_PRESS, /*!< Simple button with standard behavior. */ + GBT_HOVER /*!< Button which shows itself clicked when hovered over. */ +}; + +/*! + \brief GButton class for basic buttons. + + GButton simple button widget, derived from GWidget. +**/ class GButton : public GWidget { protected: + //! Boolean holding if button is currently pressed or not. bool rPressed; + //! Enum for type of button. GButtonType rType; + //! Resource ID for the non-pressed image. ResourceID rNormalImage; + //! Resource ID for the pressed (or hover) image. ResourceID rPressedImage; + public: + /*! + \brief Simple constructor for GButton. + + Constructor for GButton, can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ GButton(GContainer *parent=NULL); - virtual void Create(float x, float y, float width, float height, ResourceID normalImg, ResourceID pressImg, GButtonType type=G_PRESS); + /*! + \brief GButton's create function, must be called to set up actual button. + + Every widget has a create function which must be called to define the button's appearance and settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + \param normalImg Image for button when not pressed. + \param pressImg Image for button when pressed (or hovered if type is GBT_HOVER). + \param type GButtonType, either the default, GBT_PRESS (normal button), or GBT_HOVER (a button which responds to the hovering mouse). + **/ + virtual void Create(float x, float y, float width, float height, ResourceID normalImg, ResourceID pressImg, GButtonType type=GBT_PRESS); + + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Draws this button to the screen. + + Draws widget to the screen, required overload for all widgets. + **/ virtual void Show(); + /*! + \brief Returns button state. + + Returns true if buttons is pressed, false otherwise. (GBT_HOVER can only be pressed once, after that they stay down.) + \return button pressed state + **/ bool IsPressed(); - void SetState(bool state); + + /*! + \brief Sets button state (pressed/unpressed). + + Sets button to pressed (true) or unpressed (false). + \param pressed true means pressed, false means unpressed. + **/ + void SetState(bool pressed); }; } diff --git a/include/GewiContainer.h b/include/GewiContainer.h index 18a4db8..4d145c5 100755 --- a/include/GewiContainer.h +++ b/include/GewiContainer.h @@ -13,7 +13,7 @@ \brief Definition file for GContainer. Definition file for GContainer, a barebones widget that can contain child widgets. -
$Id: GewiContainer.h,v 1.4 2003/05/21 02:47:56 cozman Exp $
+
$Id: GewiContainer.h,v 1.5 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -27,24 +27,91 @@ namespace Gewi { +/*! + \brief GContainer class, definition of a container widget. + + GContainer widget which is a standard GWidget that can serve as a parent, contain and manage other widgets. +**/ class GContainer : public GWidget { - //friend here is used simply to allow GWidget proper access to what used to belong to it before - //the class split GWidget needs access to Add/ReleaseChild but to make them public would _reduce_ - //encapsulation (for those keeping score, this is to many people the only effective use of friend) + /*! + The usage of friend here is used simply to allow GWidget proper access to what used to belong to + it before the class split GWidget needs access to Add/ReleaseChild but to make them public would + reduce encapsulation. (For those keeping score, this is to many people the only effective use of + friend.) + **/ friend GWidget; protected: + //! List of child widgets assigned to this container. WidgetList rChildList; + + /*! + \brief Adds a child to the child list. + + Registers the widget as a child of this container, private because GWidget is a friend. + \param widget Widget to register as a child of this container. + **/ void AddChild(GWidget *widget); + + /*! + \brief Removes a child from the child list. + + Releases the widget which is a child of this container, private because GWidget is a friend. + \param widget Widget to release from this container. + **/ void ReleaseChild(GWidget *widget); + + /*! + \brief Inserts a child to the child list. + + Calls needed function of WidgetList class to put widget into the linked list. + \param node WidgetNode to insert into rChildList. + **/ void InsertWidget(WidgetNode *node); + public: + /*! + \brief Simple constructor for GContainer. + + Constructor for GContainer, can take a parent (to be contained on a GContainer derived class, allowing nested containers). + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ GContainer(GContainer *parent=NULL); + /*! + \brief Destroy container and children. + + Deletes container and releases children, overloaded to free children. + **/ virtual void Kill(); + + /*! + \brief Move container and children. + + Same as GWidget::Move but overloaded to move children. + \param x New x position for container. + \param y New y position for container. + **/ virtual void Move(float x, float y); + + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets, overloaded to also account for children. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Show children. + + Draws all children in appropriate back-to-front order. + **/ virtual void Show(); }; diff --git a/include/GewiEngine.h b/include/GewiEngine.h index e489eff..ab17b60 100755 --- a/include/GewiEngine.h +++ b/include/GewiEngine.h @@ -13,7 +13,7 @@ \brief Definition file for GewiEngine. Definition file for GewiEngine, core engine for Gewi GUI control. -
$Id: GewiEngine.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiEngine.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -23,44 +23,175 @@ #include "GewiIncludes.h" #include "GewiWidgetList.h" + +/*! + \brief Gewi Namespace. + + Namespace for all Gewi classes and utility functions. +**/ namespace Gewi { +/*! + \brief Main GewiEngine Singleton Class + + GewiEngine Singleton Class, accessible from anywhere in a program via GetInstance. Contains widgets in global context + (those drawn in relation to screen, with a NULL parent) also handles resource management of fonts and images. +**/ class GewiEngine { private: + //! Singleton static instance of GewiEngine. static GewiEngine *sInstance; + //! SDL_EventFilter to store old event filter, GewiEngine sets it's own. static SDL_EventFilter sOldFilter; + //! Vector of pointers to ZImages, used by resource management system. vector mImageVec; + //! Vector of pointers to ZFonts, used by resource management system. vector mFontVec; + //! List of widgets in global context. WidgetList mWidgetList; //singleton setup// - private: + private: + /*! + \brief GewiEngine constructor, private due to singleton design. + + Initializes GewiEngine instance variables, can only be called once per run of program due to design. + **/ GewiEngine(); + public: + //! Static variable used to represent invalid IDs (before an ID has been assigned all resourceIDs should == InvalidID). static const ResourceID InvalidID = UINT_MAX; //UINT_MAX b/c many compilers don't like numeric_limits + + /*! + \brief Get the static instance of GewiEngine. + + Important key to the singleton's design, gets the static instance stored within. Creates static instance on first call. + \return Pointer to static instance of GewiEngine. + **/ + static GewiEngine* GetInstance(); + + /*! + \brief Release static instance. + + Releases the instance of GewiEngine, basically only called at very end of program. + **/ static void ReleaseInstance(); - //utilities// + //utilities// + + /*! + \brief Static event filter, defined to SDL specifications. + + Replaces SDL default event filter, and filters events into static GewiEngine instance. + \param event SDL_Event to handle. + \return Return values specified by SDL. + **/ static int EventFilter(SDL_Event *event); + + /*! + \brief Translate an SDL structure into a character, used by EventFilter. + + Converts SDL_keysym into a standard char, only works for certain meaningful keys. + \param key SDL_keysm structure to convert. + \return Converted character. + **/ static char TranslateKey(SDL_keysym key); + + /*! + \brief Draw all widgets in the Gewi system. + + Draws all top level widgets and containers, container widgets are expected to draw their own children. + **/ void Display(); //resource management// + + /*! + \brief Adds an image resource to the private vector. + + Add a ZImage to the private vector of images and assign it a ResourceID. + \param image Image to add to resources. + \return ID number of new resource. + **/ ResourceID AddResource(ZImage *image); + + /*! + \brief Adds a font resource to the private vector. + + Add a ZFont to the private vector of fonts and assign it a ResourceID. + \param font Font to add to resources. + \return ID number of new resource. + **/ ResourceID AddResource(ZFont *font); + + /*! + \brief Access an image in the resource vector. + + Given the images ID get a pointer to an image stored in the image vector. + \param id ID of image to retrieve. + \return Pointer to image or NULL if invalid ID for images. + **/ ZImage* Image(ResourceID id); + + /*! + \brief Access a font in the resource vector. + + Given the fonts ID get a pointer to a font stored in the font vector. + \param id ID of font to retrieve. + \return Pointer to font or NULL if invalid ID for fonts. + **/ ZFont* Font(ResourceID id); + + /*! + \brief Free all resources. + + Frees memory for all resources. + **/ void FreeResources(); //widget management// private: + /*! + \brief Inserts a child to the child list. + + Calls needed function of WidgetList class to put widget into the linked list. + \param node WidgetNode to insert into mWidgetList. + **/ void InsertWidget(WidgetNode *node); + public: + /*! + \brief Register a widget, adding it to the list of widgets. + + Add a widget to the list of widgets, all widgets register themselves. + \param widget Widget to register. + **/ void Register(GWidget *widget); + + /*! + \brief Send a message to the widgets, this function will decide which widgets the message is relevant to. + + Send a message to the widgets, this function will decide which widgets the message is relevant to. + This generally isn't called by the client of GewiEngine, instead the EventFilter hook on events will filter + and process. This can be used to fake an event however. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ void SendMessage(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Delete a widget. + + This deletes a widget and memory associated with that widget, like register, widgets do this for themselves. + \param widget to delete + **/ void DeleteWidget(GWidget *widget); }; diff --git a/include/GewiIncludes.h b/include/GewiIncludes.h index c52fb59..ad91e1a 100755 --- a/include/GewiIncludes.h +++ b/include/GewiIncludes.h @@ -13,7 +13,7 @@ \brief Include file for Gewi. Include file for Gewi, contains external includes for Gewi. -
$Id: GewiIncludes.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$id: GewiIncludes.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
\author James Turk **/ @@ -22,14 +22,10 @@ #include #include -#include +#include #include "ZEngine.h" -typedef unsigned int WidgetID; -typedef unsigned int ResourceID; -enum GewiEvent { GE_LDOWN, GE_LUP, GE_RDOWN, GE_RUP, GE_KDOWN, GE_KUP, GE_GOTFOCUS, GE_LOSTFOCUS }; -enum _GewiJustify { GJ_CENTER = 0, GJ_LEFT = 1<<0, GJ_RIGHT = 1<<1, GJ_TOP = 1<<2, GJ_BOTTOM = 1<<3 }; -enum GButtonType { G_PRESS, G_HOVER }; -typedef unsigned int GewiJustify; +#include "GewiDefines.h" + using namespace std; using namespace ZE; diff --git a/include/GewiSlider.h b/include/GewiSlider.h index b1d98b0..2445eea 100755 --- a/include/GewiSlider.h +++ b/include/GewiSlider.h @@ -13,7 +13,7 @@ \brief Definition file for GSlider, GHorizSlider and GVertSlider. Definition file for GSlider, GHorizSlider and GVertSlider, the slide-select classes for Gewi. -
$Id: GewiSlider.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiSlider.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -26,35 +26,125 @@ namespace Gewi { +/*! + \brief GSlider (virtual) slider widget class. + + Framework for simple slider widget, virtual (fails to overload Show), derived from GWidget. +**/ class GSlider : public GWidget { protected: + //! Boolean value holding if slider is currently 'pressed' or active. bool rPressed; + //! ID for background image for slider. ResourceID rBackground; + //! Image ID for the sliding part of the slider. ResourceID rSlider; - float rMin,rMax,rPos; + //! Minimum position for slider. + float rMin; + //! Maximum position for slider. + float rMax; + //! Current position of slider. + float rPos; + //! Movement snap increment. int rIncrement; - public: - GSlider(); + public: + /*! + \brief Simple constructor for GSlider. + + Default constructor for GSlider, can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ + GSlider(GContainer *parent=NULL); + + /*! + \brief GSlider's create function, must be called to set up actual slider. + + Every widget has a create function which must be called to define the button's appearance and settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + \param backgroundImg Image for stationary portion of slider. + \param sliderImg Image for moving portion of slider. + \param min Minimum value on slider. + \param max Maximum value on slider. + \param increment Slider snap-to increment. + **/ virtual void Create(float x, float y, float width, float height, ResourceID backgroundImg, ResourceID sliderImg, float min, float max, int increment); + /*! + \brief Set position of slider. + + Sets position of slider, will snap within bounds. + \param pos Desired position. + **/ void SetPos(float pos); + + /*! + \brief Get position of slider. + + Access current position of slider. + \return Slider position. + **/ float GetPos(); }; +/*! + \brief GHorizSlider, horizontal slider widget class. + + Derived from GSlider, overloads message and show to complete the class. +**/ class GHorizSlider : public GSlider { public: + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Draws this slider to the screen. + + Draws widget to the screen, required overload for all widgets. + **/ virtual void Show(); }; +/*! + \brief GHorizSlider, horizontal slider widget class + + Derived from GSlider, overloads message and show to complete the class. +**/ class GVertSlider : public GSlider { public: + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Draws this slider to the screen. + + Draws widget to the screen, required overload for all widgets. + **/ virtual void Show(); }; diff --git a/include/GewiStaticText.h b/include/GewiStaticText.h index 5719b4a..fcd7865 100755 --- a/include/GewiStaticText.h +++ b/include/GewiStaticText.h @@ -13,7 +13,7 @@ \brief Definition file for GStaticText. Definition file for GStaticText, file to hold static text, labels and such. -
$Id: GewiStaticText.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiStaticText.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -26,24 +26,86 @@ namespace Gewi { +/*! + \brief GStaticText for stationary labels. + + GStaticText, stationary label class, derived from GWidget. +**/ class GStaticText : public GWidget { protected: + //! Image for background of label (often no image). ResourceID rBackgroundImage; + //! Font to use for label. ResourceID rFont; + //! Current text of label. string rText; + //! Text buffer ZImage, used internally. ZImage rTextBuf; - int rXOff,rYOff; + //! Calculated X Offset for text, calculated from justification. + int rXOff; + //! Calculated Y Offset for text, calculated from justification. + int rYOff; + //! Justification, can be or'ed together enums from _GewiJustify, see documentation of that enum for details. GewiJustify rJustify; public: + /*! + \brief Simple constructor for GStaticText. + + Constructor for GStaticText, can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ GStaticText(GContainer *parent=NULL); + /*! + \brief GButton's create function, must be called to set up actual button. + + Every widget has a create function which must be called to define the button's appearance and settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + \param font Font ID for text. + \param text Text for static label. (Defaults to a blank space.) + \param just Justification, see documented _GewiJustify for details. Defaults to GJ_CENTER. + \param backgroundImg Image for background, defaults to GewiEngine::InvalidID. + **/ virtual void Create(float x, float y, float width, float height, - ResourceID font, ResourceID backgroundImg=GewiEngine::InvalidID, string text=" ", GewiJustify just=GJ_CENTER); + ResourceID font, string text=" ", GewiJustify just=GJ_CENTER, ResourceID backgroundImg=GewiEngine::InvalidID); + + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Draws static label to the screen. + + Draws static label to the screen, required overload for all widgets. + **/ virtual void Show(); + /*! + \brief Set text of label. + + Sets the current text of the label. + \param text New text for label. + **/ void SetText(string text); + + /*! + \brief Get current text in label. + + Return text in label. + \return text currently in label. + **/ string GetText(); }; diff --git a/include/GewiTextButton.h b/include/GewiTextButton.h index 85ad928..5896c68 100755 --- a/include/GewiTextButton.h +++ b/include/GewiTextButton.h @@ -13,7 +13,7 @@ \brief Definition file for GTextButton. Definition file for GTextButton, a GButton that has a text label. -
$Id: GewiTextButton.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiTextButton.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -26,21 +26,72 @@ namespace Gewi { +/*! + \brief GTextButton class for button with text label. + + GTextButton text label button widget, derived from GButton. +**/ class GTextButton : public GButton { protected: + //! Text label for button. string rText; + //! Text Buffer, used internally. ZImage rTextBuf; - int rXOff,rYOff; + //! X offset of text. + int rXOff; + //! Y offset of text. + int rYOff; + //! Font ID for text label. ResourceID rFont; + public: + /*! + \brief Simple constructor for GButton. + + Constructor for GButton, can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ GTextButton(GContainer *parent=NULL); + /*! + \brief GButton's create function, must be called to set up actual button. + + Every widget has a create function which must be called to define the button's appearance and settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + \param normalImg Image for button when not pressed. + \param pressImg Image for button when pressed (or hovered if type is GBT_HOVER). + \param font Font to draw label with. + \param text Text for button. (default is blank) + \param type GButtonType, either the default, GBT_PRESS (normal button), or GBT_HOVER (a button which responds to the hovering mouse). + **/ virtual void Create(float x, float y, float width, float height, ResourceID normalImg, ResourceID pressImg, ResourceID font, - string text=" ", GButtonType type=G_PRESS); + string text=" ", GButtonType type=GBT_PRESS); + + /*! + \brief Draws static label to the screen. + + Draws static label to the screen, required overload for all widgets. + **/ virtual void Show(); + /*! + \brief Set text of button. + + Sets the current text of the button. + \param text New text for button. + **/ void SetText(string text); + + /*! + \brief Get current text of button label. + + Return text on button label. + \return text currently on button label. + **/ string GetText(); }; diff --git a/include/GewiTextField.h b/include/GewiTextField.h index 9f900b9..4fdc241 100755 --- a/include/GewiTextField.h +++ b/include/GewiTextField.h @@ -13,7 +13,7 @@ \brief Definition file for GTextField. Definition file for GTextField, text input area widget. -
$Id: GewiTextField.h,v 1.4 2003/05/21 02:47:56 cozman Exp $
+
$Id: GewiTextField.h,v 1.5 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -26,24 +26,84 @@ namespace Gewi { +/*! + \brief GTextField class for basic text input area. + + GTextField simple text input area widget, derived from GWidget. +**/ class GTextField : public GWidget { protected: + //! Text currently entered. string rText; + //! Text buffer, used internally. ZImage rBuffer; + //! Font for text. ResourceID rFont; + //! Background for text input area. ResourceID rBackground; - int rMaxChars,rLeftPadding; - public: - GTextField(GContainer *parent=NULL); - ~GTextField(); + //! Maximum number of characters allowed to be entered. + int rMaxChars; + //! Amount of padding on left hand side. + int rLeftPadding; - virtual void Kill(); + public: + /*! + \brief Simple constructor for GTextField. + + Constructor for GTextField, can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ + GTextField(GContainer *parent=NULL); + + /*! + \brief GButton's create function, must be called to set up actual button. + + Every widget has a create function which must be called to define the button's appearance and settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + \param font Font for text. + \param backgroundImg Image for text input box. + \param maxChars Maximum number of characters to be entered, defaults to 256. + \param leftPad padding on left side, defaults to zero. + **/ virtual void Create(float x, float y, float width, float height, ResourceID font, ResourceID backgroundImg, int maxChars=256, int leftPad=0); + + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Draws the text input area & text to the screen. + + Draws widget to the screen, required overload for all widgets. + **/ virtual void Show(); + /*! + \brief Set text in input area. + + Sets the current text of the buffer for input area. + \param text New text for button. + **/ void SetText(string text); + + /*! + \brief Get current text of the input box. + + Return text in the input buffer. + \return text currently in input buffer. + **/ string GetText(); }; diff --git a/include/GewiWidget.h b/include/GewiWidget.h index 2b30fc9..31bb062 100755 --- a/include/GewiWidget.h +++ b/include/GewiWidget.h @@ -13,7 +13,7 @@ \brief Definition file for GWidget. Definition file for GWidget, virtual widget base class. -
$Id: GewiWidget.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiWidget.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -25,38 +25,151 @@ namespace Gewi { - class GewiEngine; class GContainer; +/*! + \brief GWidget base widget class. + + Basic widget class, framework and base class for all other widgets. +**/ class GWidget { protected: + //! Pointer to GewiEngine instance. GewiEngine *rGewi; + //! Pointer to ZEngine instance. ZEngine *rZE; + //! Rectangle describing area of widget. ZRect rBoundRect; + //! Pointer to parent container. (NULL means it lays in the global setting). GContainer *rParent; - float rRelX,rRelY; + //! Relative X position, relative to parent, or top corner of screen if in global setting. + float rRelX; + //! Relative Y position, relative to parent, or top corner of screen if in global setting. + float rRelY; + //! Stores if widget is currently visible. bool rVisible; + //! Stores if widget is currently 'alive.' bool rAlive; public: + /*! + \brief Simple constructor for GWidget. + + Constructor for GWidget, like all widgets this must initialize private data and can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ GWidget(GContainer *parent=NULL); + + /*! + \brief Simple destructor. + + Must be virtual so that each derived class can free it's members. + **/ virtual ~GWidget(); - - void FitParent(); + + /*! + \brief Toggle the visible flag. + + Toggles the visible flag, only visible widgets are drawn. + **/ void ToggleVisible(); + /*! + \brief Kill widget, and all data associated with it. + + Widget frees itself from parent, and sets it's internal state to dead. + Virtual in case other things need to be freed. + **/ virtual void Kill(); + + /*! + \brief Reposition widget within parent. + + Adjust this widget to be in the correct position in relationship to it's parent. Only containers call this on + their children, it generally shouldn't be called. + **/ + void FitParent(); + + /*! + \brief Sets position and dimensions of widget. + + Sets up widget rectangle, most widgets must override this to include their specific settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + **/ virtual void Create(float x, float y, float width, float height); + + /*! + \brief Change relative position. + + Set new relative position for widget. + \param x New relative x position. + \param y New relative y position. + **/ virtual void Move(float x, float y); + + /*! + \brief Important function used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch)=0; + + /*! + \brief Draws this button to the screen. + + Draws widget to the screen, required overload for all widgets. + **/ virtual void Show()=0; + /*! + \brief Get X position of widget. + + Get actual (not relative) X position of top left corner of widget. + \return Actual x position of widget. + **/ float X(); + + /*! + \brief Get Y position of widget. + + Get actual (not relative) Y position of top left corner of widget. + \return Actual y position of widget. + **/ float Y(); + + /*! + \brief Get visible state of widget. + + Returns status of internal visible flag. + \return true if visible, false otherwise. + **/ bool Visible(); + + /*! + \brief Check if mouse is in widget. + + Returns status of mouse inside widget. + \return true if mouse pointer inside widget, false otherwise. + **/ bool MouseInWidget(); + + /*! + \brief Check if the widget contains a point. + + Check if the widget contains the point specified. + \param x X value of point to check. + \param y Y value of point to check. + **/ bool Contains(Sint16 x, Sint16 y); }; diff --git a/include/GewiWidgetList.h b/include/GewiWidgetList.h index b18fec7..e563c9e 100755 --- a/include/GewiWidgetList.h +++ b/include/GewiWidgetList.h @@ -13,7 +13,7 @@ \brief Definition file for WidgetList. Definition file for WidgetList, a list of widgets used by GewiEngine and GContainers. -
$Id: GewiWidgetList.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiWidgetList.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -27,32 +27,107 @@ namespace Gewi class GWidget; +/*! + \brief WidgetNode class, node for linked list. + + Doubly linked list node containing a widget. +**/ class WidgetNode { public: + /*! + \brief Basic constructor. + + Simple safety constructor just sets all values to NULL. + **/ WidgetNode(); + + //! Pointer to widget for this node. GWidget *widget; + //! Pointer to previous node. WidgetNode *prev; + //! Pointer to next node. WidgetNode *next; }; + +/*! + \brief Class containing a linked list of widgets. + + Linked list of widgets, and various utility functions for containers. + Class is internally used only, GContainer and GewiEngine heavily rely on it. +**/ class WidgetList { private: + //! Pointer to head of list. WidgetNode *mWidgetList; + //! Variable keeping track of where the last click was, to change focus. WidgetNode *mClick; + /*! + \brief Internal function to delete widget memory. + + Deletes the memory used by a widget node, interally used. + \param node Node to delete. + **/ void DeleteWidgetMem(WidgetNode *node); public: + /*! + \brief Constructor for the linked list. + + Simply NULLs pointers for the linked list. + **/ WidgetList(); + /*! + \brief Add a WidgetNode to the list. + + Adds a WidgetNode to the list, in the 'front'. + \param node Node to add to list. + **/ void AddWidget(WidgetNode *node); + + /*! + \brief Delete a widget. + + Deletes a widget, it's memory and frees it from it's container or GewiEngine. + \param widget Widget to delete. + **/ void DeleteWidget(GWidget *widget); + + /*! + \brief Delete all widgets. + + Deletes all widgets and their memory. + **/ void DeleteWidgets(); + /*! + \brief Intercepts a message to process. + + Intercepts and processes incoming messages, delegating them where they belong. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Fit all widgets to the parent. + + Fits widgets to parent of which this linked list is a part of. + **/ void FitParent(); - void ShowWidgets(); + + /*! + \brief Show widgets. + + Calls Show method of widgets in reverse order for proper appearance. + **/ + void ShowWidgets(); }; } diff --git a/include/GewiWindow.h b/include/GewiWindow.h index 76de61f..1bfeec2 100755 --- a/include/GewiWindow.h +++ b/include/GewiWindow.h @@ -13,7 +13,7 @@ \brief Definition file for GWindow. Definition file for GWindow, a basic window class based on GContainer. -
$Id: GewiWindow.h,v 1.3 2003/05/19 23:56:05 cozman Exp $
+
$Id: GewiWindow.h,v 1.4 2003/06/07 05:41:18 cozman Exp $
\author James Turk **/ @@ -26,17 +26,61 @@ namespace Gewi { +/*! + \brief GWindow, a simple window class. + + GWindow, basic window class, derived from GContainer. +**/ class GWindow : public GContainer { protected: + //! Holds internal state of if mouse is dragging the window or not. bool rDrag; - float rDragX,rDragY; + //! X value of drag coordinate used for drag calculation. + float rDragX; + //! Y value of drag coordinate used for drag calculation. + float rDragY; + //! Image used for window. ResourceID rBackground; - public: - GWindow(); + public: + /*! + \brief Simple constructor for GWindow. + + Default constructor for GWindow, can take a parent. + \param parent Pointer to GContainer derived class to be the parent. Default value is NULL which means no parent. + **/ + GWindow(GContainer *parent=NULL); + + /*! + \brief GButton's create function, must be called to set up actual button. + + Every widget has a create function which must be called to define the button's appearance and settings. + \param x X position of widget within it's container (entire screen if no parent) + \param y Y position of widget within it's container (entire screen if no parent) + \param width Width of widget. + \param height Height of widget. + \param backgroundImg Image for window. + **/ virtual void Create(float x, float y, float width, float height, ResourceID backgroundImg); + + /*! + \brief Overload of Message, used to recieve messages. + + Recieves and processes a message, required overload for all widgets. + \param rawEvent SDL_Event of original message, may be needed if more information is available on event. (May be NULL). + \param event GewiEvent enum, description of event recieved. + \param mouseX Mouse x position in event, if not mouse event may be incorrect. + \param mouseY Mouse y position in event, if not mouse event may be incorrect. + \param ch Character pressed in event, may be 0 if not a keypress event. + **/ virtual void Message(SDL_Event *rawEvent, GewiEvent event, Uint16 mouseX, Uint16 mouseY, char ch); + + /*! + \brief Draws window & children to the screen. + + Draws window & children to the screen, required overload for all widgets. + **/ virtual void Show(); }; diff --git a/src/GewiButton.cpp b/src/GewiButton.cpp index 085bae6..62c84ca 100755 --- a/src/GewiButton.cpp +++ b/src/GewiButton.cpp @@ -13,7 +13,7 @@ \brief Implementation of GButton. Implementation of GButton, a simple button class. -
$Id: GewiButton.cpp,v 1.2 2003/05/20 00:06:10 cozman Exp $
+
$Id: GewiButton.cpp,v 1.3 2003/06/07 05:42:32 cozman Exp $
\author James Turk **/ @@ -25,7 +25,7 @@ namespace Gewi GButton::GButton(GContainer *parent) : GWidget(parent), rPressed(false), - rType(G_PRESS), + rType(GBT_PRESS), rNormalImage(GewiEngine::InvalidID), rPressedImage(GewiEngine::InvalidID) { @@ -64,14 +64,14 @@ void GButton::Show() if(rVisible) { - if(rType == G_PRESS) //G_PRESS: standard press button, down when pressed, up when not + if(rType == GBT_PRESS) //G_PRESS: standard press button, down when pressed, up when not { if(rPressed) rGewi->Image(rPressedImage)->Draw(x,y); else rGewi->Image(rNormalImage)->Draw(x,y); } - else if(rType == G_HOVER) //G_HOVER: button shows as down when hovered over + else if(rType == GBT_HOVER) //G_HOVER: button shows as down when hovered over { if(MouseInWidget()) rGewi->Image(rPressedImage)->Draw(x,y); @@ -86,9 +86,9 @@ bool GButton::IsPressed() return rPressed; } -void GButton::SetState(bool state) +void GButton::SetState(bool pressed) { - rPressed = state; + rPressed = pressed; } } diff --git a/src/GewiEngine.cpp b/src/GewiEngine.cpp index a5714fc..0de07c0 100755 --- a/src/GewiEngine.cpp +++ b/src/GewiEngine.cpp @@ -13,7 +13,7 @@ \brief Implementation of GewiEngine. Implementation of GewiEngine, core engine for Gewi GUI control. -
$Id: GewiEngine.cpp,v 1.3 2003/05/20 00:08:55 cozman Exp $
+
$Id: GewiEngine.cpp,v 1.4 2003/06/07 05:42:33 cozman Exp $
\author James Turk **/ @@ -150,18 +150,12 @@ void GewiEngine::FreeResources() for(ResourceID i=0; i < mImageVec.size(); i++) { if(mImageVec[i]) - { mImageVec[i]->Release(); - delete mImageVec[i]; - } } for(ResourceID i=0; i < mFontVec.size(); i++) { if(mFontVec[i]) - { mFontVec[i]->Release(); - delete mFontVec[i]; - } } } diff --git a/src/GewiSlider.cpp b/src/GewiSlider.cpp index beb5bcd..d4e7b77 100755 --- a/src/GewiSlider.cpp +++ b/src/GewiSlider.cpp @@ -13,7 +13,7 @@ \brief Implementation of GSlider, GHorizSlider and GVertSlider. Implementation of GSlider, GHorizSlider and GVertSlider, the slide-select classes for Gewi. -
$Id: GewiSlider.cpp,v 1.3 2003/05/20 00:08:55 cozman Exp $
+
$Id: GewiSlider.cpp,v 1.4 2003/06/07 05:42:33 cozman Exp $
\author James Turk **/ @@ -22,8 +22,8 @@ namespace Gewi { -GSlider::GSlider() : - GWidget(), +GSlider::GSlider(GContainer *parent) : + GWidget(parent), rPressed(false), rBackground(GewiEngine::InvalidID), rSlider(GewiEngine::InvalidID), diff --git a/src/GewiStaticText.cpp b/src/GewiStaticText.cpp index 7330595..8520018 100755 --- a/src/GewiStaticText.cpp +++ b/src/GewiStaticText.cpp @@ -13,7 +13,7 @@ \brief Implementation of GStaticText. Implementation of GStaticText, file to hold static text, labels and such. -
$Id: GewiStaticText.cpp,v 1.3 2003/05/20 00:08:55 cozman Exp $
+
$Id: GewiStaticText.cpp,v 1.4 2003/06/07 05:42:33 cozman Exp $
\author James Turk **/ @@ -34,7 +34,7 @@ GStaticText::GStaticText(GContainer *parent) : void GStaticText::Create(float x, float y, float width, float height, - ResourceID font, ResourceID backgroundImg, string text, GewiJustify justify) + ResourceID font, string text, GewiJustify justify, ResourceID backgroundImg) { GWidget::Create(x,y,width,height); @@ -77,26 +77,21 @@ void GStaticText::SetText(string text) if(rJustify & GJ_LEFT) { - printf("left"); rXOff = 0; } else if(rJustify & GJ_RIGHT) { - printf("right"); rXOff = static_cast(rBoundRect.Width()-w); } if(rJustify & GJ_TOP) { - printf("top"); rYOff = 0; } else if(rJustify & GJ_BOTTOM) { - printf("bottom"); rYOff = static_cast(rBoundRect.Height()-h); } - printf("\n"); } string GStaticText::GetText() diff --git a/src/GewiTextField.cpp b/src/GewiTextField.cpp index 949e3fc..03877b9 100755 --- a/src/GewiTextField.cpp +++ b/src/GewiTextField.cpp @@ -13,7 +13,7 @@ \brief Implementation of GTextField. Implementation of GTextField, text input area widget. -
$Id: GewiTextField.cpp,v 1.3 2003/05/20 00:08:55 cozman Exp $
+
$Id: GewiTextField.cpp,v 1.4 2003/06/07 05:42:33 cozman Exp $
\author James Turk **/ @@ -30,16 +30,6 @@ GTextField::GTextField(GContainer *parent) : rLeftPadding(0) {} -GTextField::~GTextField() -{ -} - -void GTextField::Kill() -{ - rBuffer.Release(); - GWidget::Kill(); -} - void GTextField::Create(float x, float y, float width, float height, ResourceID font, ResourceID backgroundImg, int maxChars, int leftPad) { GWidget::Create(x,y,width,height); diff --git a/src/GewiWindow.cpp b/src/GewiWindow.cpp index a67c388..a7e8c04 100755 --- a/src/GewiWindow.cpp +++ b/src/GewiWindow.cpp @@ -13,7 +13,7 @@ \brief Implementation of GWindow. Implementation of GWindow, a basic window class based on GContainer. -
$Id: GewiWindow.cpp,v 1.3 2003/05/20 00:08:55 cozman Exp $
+
$Id: GewiWindow.cpp,v 1.4 2003/06/07 05:42:33 cozman Exp $
\author James Turk **/ @@ -22,8 +22,8 @@ namespace Gewi { -GWindow::GWindow() : - GContainer(), +GWindow::GWindow(GContainer *parent) : + GContainer(parent), rDrag(false), rDragX(0), rDragY(0),