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
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
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
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
00142 virtual void LoadResourcePolyBorder( CUI_SAXElement *elem );
00144 virtual void LoadResourceCoordSys( CUI_SAXElement *elem );
00146 virtual void LoadResourceFBMFont( CUI_SAXElement *elem );
00147
00148
00150
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
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 );
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 );
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