Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

CUI_SAXLoader.h

Go to the documentation of this file.
00001 
00015 #ifndef CUI_SAXLOADER
00016 #define CUI_SAXLOADER
00017 
00018 #include <sax/HandlerBase.hpp>
00019 #include <sax/AttributeList.hpp>
00020 
00021 #include <stack>
00022 
00023 #include "UI_Lib.h"
00024 #include "UI_types.h"
00025 #include "CUI_Widget.h"
00026 #include "CUI_TextBox.h"
00027 #include "CUI_EditableTextBox.h"
00028 #include "CUI_Button.h"
00029 #include "CUI_MultipleStateButton.h"
00030 #include "CUI_ProgressBar.h"
00031 #include "CUI_SliderBar.h"
00032 #include "CUI_DraggableViewFrame.h"
00033 #include "CUI_DraggableFrame.h"
00034 #include "CUI_Control.h"
00035 #include "CUI_ListBox.h"
00036 #include "CUI_Menu.h"
00037 #include "CUI_ComboBox.h"
00038 #include "CUI_ScrollableTextBox.h"
00039 #include "CUI_RadioGroup.h"
00040 #include "CUI_MessageBox.h"
00041 #include "CUI_TextField.h"
00042 #include "CUI_ScrollableFrame.h"
00043 #include "CUI_ResizeButton.h"
00044 #include "CUI_Console.h"
00045 
00046 #include "CUI_PolyEdgeBorder.h"
00047 #include "CUI_FixedBMFont.h"
00048 
00049 
00051 typedef enum elementtype {NONE, FRAME, ROOTFRAME, TEXTFRAME, BUTTON, LIST,
00052                                                         RECTANGLE, LISTITEM, POINT2D, STATE, COORDSYS, FONT,
00053                                                         BORDER, TEXTBOX, EDITTEXTBOX, MENU, MENUITEM,
00054                                                         COMBOBOX, RADIOITEM, RADIOGROUP, SCROLLTEXT};
00055 
00056 class CUI_SAXElement;
00057 
00059 
00065 class GLGUI_ENTRY CUI_SAXLoader : public HandlerBase
00066 {
00067 public:
00069         CUI_SAXLoader( CUI_UI *ui );
00070 
00072         ~CUI_SAXLoader();
00073 
00074         // -----------------------------------------------------------------------
00075         //  Implementations of the SAX DocumentHandler interface
00076         // -----------------------------------------------------------------------
00077 
00079 
00081         virtual void endDocument();
00082 
00084 
00086         virtual void endElement(const XMLCh* const name);
00087 
00089 
00091         virtual void characters(const XMLCh* const chars, const unsigned int length);
00092 
00094 
00096         virtual void startDocument();
00097 
00099 
00101         virtual void startElement(const XMLCh* const name, AttributeList& attributes);
00102 
00103 
00104 
00105         // -----------------------------------------------------------------------
00106         //  Implementations of the SAX ErrorHandler interface
00107         // -----------------------------------------------------------------------
00109         virtual void warning(const SAXParseException& exception);
00111         virtual void error(const SAXParseException& exception);
00113         virtual void fatalError(const SAXParseException& exception);
00114 
00116 
00117         static char *BinToChar( const XMLCh* const string );
00118 
00119 private :
00120 
00122         //      Data Loading
00125         virtual void LoadDataRect( CUI_SAXElement *elem );
00127         virtual void LoadDataPoint2d( CUI_SAXElement *elem );
00129         virtual void LoadDataState( CUI_SAXElement *elem );
00131         virtual void LoadDataListItem( CUI_SAXElement *elem, CUI_ListItem *list = NULL );
00133         virtual void LoadDataMenuItem( CUI_SAXElement *elem );
00135         virtual void LoadDataRadioItem( CUI_SAXElement *elem );
00136 
00137 
00139         //      Resource Loading
00142         virtual void LoadResourcePolyBorder( CUI_SAXElement *elem );
00144         virtual void LoadResourceCoordSys( CUI_SAXElement *elem );
00146         virtual void LoadResourceFBMFont( CUI_SAXElement *elem );
00147 
00148 
00150         //      Control Loading
00153         virtual void LoadControlFrame( CUI_SAXElement *elem, CUI_Frame *frame = NULL );
00155         virtual void LoadControlDraggableFrame( CUI_SAXElement *elem );
00157         virtual void LoadControlDraggableViewFrame( CUI_SAXElement *elem );
00159         virtual void LoadControlTextLabel( CUI_SAXElement *elem, CUI_Widget *frame = NULL );
00161         virtual void LoadControlButton( CUI_SAXElement *elem );
00163         virtual void LoadControlResizeButton( CUI_SAXElement *elem );
00165         virtual void LoadControlProgressBar( CUI_SAXElement *elem, CUI_ProgressBar *frame = NULL );
00167         virtual void LoadControlSliderBar( CUI_SAXElement *elem );
00169         virtual void LoadControlTextBox( CUI_SAXElement *elem, CUI_TextBox *frame = NULL );
00171         virtual void LoadControlEditTextBox( CUI_SAXElement *elem );
00173 
00176         virtual void LoadControlListBox( CUI_SAXElement *elem, CUI_ListBox *frame = NULL );
00178         virtual void LoadControlComboBox( CUI_SAXElement *elem );
00180         virtual void LoadControlMenu( CUI_SAXElement *elem );
00182         virtual void LoadControlRadioGroup( CUI_SAXElement *elem );
00184         virtual void LoadControlScrollFrame( CUI_SAXElement *elem );
00186         virtual void LoadControlScrollTextBox( CUI_SAXElement *elem );
00187 
00189         //      Members
00191         CUI_UI *m_ui;
00192 
00194         typedef std::stack<CUI_SAXElement *> ELEMSTACK;
00195 
00197         ELEMSTACK m_elementStack;
00198 
00200         unsigned long m_warnings;
00201 
00203         unsigned long m_errors;
00204 
00205 };
00206 
00208 class CUI_SAXElement
00209 {
00210 public:
00212         CUI_SAXElement( char *name, AttributeList *attrib, elementtype type, bool delobj = false )
00213         {
00214                 m_name = name;
00215                 m_attributeList = attrib;
00216                 m_type = type;
00217                 m_deleteObj = delobj;
00218         }
00220         ~CUI_SAXElement()
00221         {
00222                 if( m_name )
00223                         delete []m_name;
00224                 if( m_deleteObj )
00225                 {
00226                         if( m_object )
00227                           {
00228                             switch( m_type )
00229                               {
00230                               case FRAME:
00231                               case TEXTFRAME:
00232                               case EDITTEXTBOX:
00233                               case TEXTBOX:
00234                               case BUTTON:
00235                               case LIST:
00236                               case COMBOBOX:
00237                               case MENU:
00238                               case RADIOGROUP:
00239                               case SCROLLTEXT:
00240                               case ROOTFRAME:
00241                                 delete (CUI_Frame*)m_object;
00242                                 break;
00243                               case COORDSYS:
00244                                 delete (CUI_CoordSys*)m_object;
00245                                 break;
00246                               case POINT2D:
00247                                 delete (float*)m_object;
00248                                 break;
00249                               case STATE:
00250                                 assert( 1 ); // cannot delete shader (void *)
00251                                 break;
00252                               case LISTITEM:
00253                                 delete (CUI_ListItem*)m_object;
00254                                 break;
00255                               case MENUITEM:
00256                                 delete (CUI_MenuItem*)m_object;
00257                                 break;
00258                               case RADIOITEM:
00259                                 delete (CUI_RadioItem*)m_object;
00260                                 break;
00261                               default:
00262                                 assert( 1 ); // attempt to delete unknown type
00263                                 break;
00264                               }
00265                           }
00266                 }
00267         }
00269 
00270         bool GetValue( char *name, unsigned long &value )
00271         {
00272                 char *val = CUI_SAXLoader::BinToChar( m_attributeList->getValue( name ) );
00273                 if( val != NULL )
00274                 {
00275                         value = atoi( val );
00276                         delete []val;
00277                 }
00278                 else
00279                         return false;
00280                 return true;
00281         }
00283 
00284         bool GetValuei( char *name, int &value )
00285         {
00286                 char *val = CUI_SAXLoader::BinToChar( m_attributeList->getValue( name ) );
00287                 if( val != NULL )
00288                 {
00289                         value = atoi( val );
00290                         delete []val;
00291                 }
00292                 else
00293                         return false;
00294                 return true;
00295         }
00297 
00298         bool GetValue( char *name, float &value )
00299         {
00300                 char *val = CUI_SAXLoader::BinToChar( m_attributeList->getValue( name ) );
00301                 if( val != NULL )
00302                 {
00303                         value = atof( val );
00304                         delete []val;
00305                 }
00306                 else
00307                         return false;
00308                 return true;
00309         }
00311 
00312         bool GetValue( char *name, char ** value )
00313         {
00314                 char *val = CUI_SAXLoader::BinToChar( m_attributeList->getValue( name ) );
00315                 if( val != NULL )
00316                 {
00317                         *value = val;
00318                 }
00319                 else
00320                         return false;
00321                 return true;
00322         }
00323         bool GetValueb( char *name, bool &value )
00324         {
00325                 char *val = CUI_SAXLoader::BinToChar( m_attributeList->getValue( name ) );
00326                 if( val != NULL )
00327                 {
00328                         value = stricmp(val, "true") == 0 ? true : false;
00329                 }
00330                 else
00331                         return false;
00332                 return true;
00333         }
00334 
00336         char *m_name;
00338         AttributeList *m_attributeList;
00340         elementtype m_type;
00342         void *m_object;
00344         char *m_objectName;
00345 private:
00347         bool m_deleteObj;
00348 };
00349 
00350 #endif

Generated on Mon Sep 29 23:07:02 2003 for glGUI by doxygen 1.3.4