Crazy Eddie's GUI System  0.8.4
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
falagard/XMLHandler.h
1 /***********************************************************************
2  created: Fri Jun 17 2005
3  author: Paul D Turner <paul@cegui.org.uk>
4 *************************************************************************/
5 /***************************************************************************
6  * Copyright (C) 2004 - 2012 Paul D Turner & The CEGUI Development Team
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining
9  * a copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sublicense, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be
17  * included in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25  * OTHER DEALINGS IN THE SOFTWARE.
26  ***************************************************************************/
27 #ifndef _CEGUIFalagard_xmlHandler_h_
28 #define _CEGUIFalagard_xmlHandler_h_
29 
30 #include "../ChainedXMLHandler.h"
31 #include "./Dimensions.h"
32 #include "../Window.h"
33 #include <vector>
34 
35 // Start of CEGUI namespace section
36 namespace CEGUI
37 {
38  // forward refs
39  class WidgetLookManager;
40  class WidgetLookFeel;
41  class WidgetComponent;
42  class ImagerySection;
43  class StateImagery;
44  class LayerSpecification;
45  class SectionSpecification;
46  class ImageryComponent;
47  class ComponentArea;
48  class Dimension;
49  class TextComponent;
50  class NamedArea;
51  class FrameComponent;
52  class PropertyDefinitionBase;
53  class EventLinkDefinition;
54 
60  {
61  public:
67 
73 
75  static const String NativeVersion;
76 
79 
82 
84  static const String GenericDataType;
85 
86 
88  static const String ParentIdentifier;
89 
90  /*************************************************************************
91  XML element and attribute name constants
92  *************************************************************************/
93  // element names
94  static const String FalagardElement;
95  static const String WidgetLookElement;
96  static const String ChildElement;
98  static const String StateImageryElement;
99  static const String LayerElement;
100  static const String SectionElement;
104  static const String AreaElement;
105  static const String ImageElement;
106  static const String ColoursElement;
107  static const String VertFormatElement;
108  static const String HorzFormatElement;
111  static const String PropertyElement;
112  static const String DimElement;
113  static const String UnifiedDimElement;
114  static const String AbsoluteDimElement;
115  static const String ImageDimElement;
117  static const String WidgetDimElement;
118  static const String FontDimElement;
119  static const String PropertyDimElement;
120  static const String TextElement;
123  static const String NamedAreaElement;
127  static const String OperatorDimElement;
134  static const String ColourElement;
137 
141  // attribute names
142  static const String VersionAttribute;
143  static const String TopLeftAttribute;
144  static const String TopRightAttribute;
147  static const String TypeAttribute;
148  static const String NameAttribute;
149  static const String PriorityAttribute;
152  static const String RendererAttribute;
153  static const String LookAttribute;
154  static const String ScaleAttribute;
155  static const String OffsetAttribute;
156  static const String ValueAttribute;
157  static const String DimensionAttribute;
158  static const String WidgetAttribute;
159  static const String StringAttribute;
160  static const String FontAttribute;
162  static const String ClippedAttribute;
163  static const String OperatorAttribute;
164  static const String PaddingAttribute;
169  static const String ColourAttribute;
170  static const String PropertyAttribute;
173 
176  static const String EventAttribute;
178  static const String InheritsAttribute;
184  static const String ActionAttribute;
187 
188  protected:
189  /*************************************************************************
190  ChainedXMLHandler base class overrides
191  *************************************************************************/
192  void elementStartLocal(const String& element,
193  const XMLAttributes& attributes);
194  void elementEndLocal(const String& element);
195 
196  private:
197  /*************************************************************************
198  Typedefs
199  *************************************************************************/
201  typedef void (Falagard_xmlHandler::*ElementStartHandler)(const XMLAttributes& attributes);
203  typedef void (Falagard_xmlHandler::*ElementEndHandler)();
205  typedef std::map<String, ElementStartHandler, StringFastLessCompare> ElementStartHandlerMap;
207  typedef std::map<String, ElementEndHandler, StringFastLessCompare> ElementEndHandlerMap;
208 
209  /*************************************************************************
210  helper methods
211  **************************************************************************/
212  static argb_t hexStringToARGB(const String& str);
213 
214  /*************************************************************************
215  implementation methods
216  **************************************************************************/
217  void assignAreaDimension(Dimension& dim);
218  void assignColours(const ColourRect& colours);
219 
224  void doBaseDimStart(const BaseDim* dim);
225 
230  void elementFalagardStart(const XMLAttributes& attributes);
231 
236  void elementWidgetLookStart(const XMLAttributes& attributes);
237 
242  void elementChildStart(const XMLAttributes& attributes);
243 
248  void elementImagerySectionStart(const XMLAttributes& attributes);
249 
254  void elementStateImageryStart(const XMLAttributes& attributes);
255 
260  void elementLayerStart(const XMLAttributes& attributes);
261 
266  void elementSectionStart(const XMLAttributes& attributes);
267 
272  void elementImageryComponentStart(const XMLAttributes& attributes);
273 
278  void elementTextComponentStart(const XMLAttributes& attributes);
279 
284  void elementFrameComponentStart(const XMLAttributes& attributes);
285 
290  void elementAreaStart(const XMLAttributes& attributes);
291 
296  void elementImageStart(const XMLAttributes& attributes);
297 
302  void elementColoursStart(const XMLAttributes& attributes);
303 
308  void elementVertFormatStart(const XMLAttributes& attributes);
309 
314  void elementHorzFormatStart(const XMLAttributes& attributes);
315 
320  void elementVertAlignmentStart(const XMLAttributes& attributes);
321 
326  void elementHorzAlignmentStart(const XMLAttributes& attributes);
327 
332  void elementPropertyStart(const XMLAttributes& attributes);
333 
338  void elementDimStart(const XMLAttributes& attributes);
339 
344  void elementUnifiedDimStart(const XMLAttributes& attributes);
345 
350  void elementAbsoluteDimStart(const XMLAttributes& attributes);
351 
356  void elementImageDimStart(const XMLAttributes& attributes);
357 
362  void elementImagePropertyDimStart(const XMLAttributes& attributes);
363 
368  void elementWidgetDimStart(const XMLAttributes& attributes);
369 
374  void elementFontDimStart(const XMLAttributes& attributes);
375 
380  void elementPropertyDimStart(const XMLAttributes& attributes);
381 
386  void elementTextStart(const XMLAttributes& attributes);
387 
392  void elementColourRectPropertyStart(const XMLAttributes& attributes);
393 
398  void elementNamedAreaStart(const XMLAttributes& attributes);
399 
404  void elementPropertyDefinitionStart(const XMLAttributes& attributes);
405 
410  void elementPropertyLinkDefinitionStart(const XMLAttributes& attributes);
411 
416  void elementOperatorDimStart(const XMLAttributes& attributes);
417 
422  void elementVertFormatPropertyStart(const XMLAttributes& attributes);
423 
428  void elementHorzFormatPropertyStart(const XMLAttributes& attributes);
429 
434  void elementAreaPropertyStart(const XMLAttributes& attributes);
435 
440  void elementImagePropertyStart(const XMLAttributes& attributes);
441 
446  void elementTextPropertyStart(const XMLAttributes& attributes);
447 
452  void elementFontPropertyStart(const XMLAttributes& attributes);
453 
458  void elementColourStart(const XMLAttributes& attributes);
459 
461  void elementPropertyLinkTargetStart(const XMLAttributes& attributes);
462 
464  void elementAnimationDefinitionStart(const XMLAttributes& attributes);
465 
467  void elementEventLinkDefinitionStart(const XMLAttributes& attributes);
468 
470  void elementEventLinkTargetStart(const XMLAttributes& attributes);
471 
473  void elementNamedAreaSourceStart(const XMLAttributes& attributes);
475  void elementEventActionStart(const XMLAttributes& attributes);
476 
481  void elementFalagardEnd();
482 
487  void elementWidgetLookEnd();
488 
493  void elementChildEnd();
494 
499  void elementImagerySectionEnd();
500 
505  void elementStateImageryEnd();
506 
511  void elementLayerEnd();
512 
517  void elementSectionEnd();
518 
523  void elementImageryComponentEnd();
524 
529  void elementTextComponentEnd();
530 
535  void elementFrameComponentEnd();
536 
541  void elementAreaEnd();
542 
547  void elementNamedAreaEnd();
548 
553  void elementAnyDimEnd();
554 
556  void elementPropertyLinkDefinitionEnd();
557 
559  void elementEventLinkDefinitionEnd();
560 
565  void registerElementStartHandler(const String& element, ElementStartHandler handler);
566 
571  void registerElementEndHandler(const String& element, ElementEndHandler handler);
572 
574  void processEventLinkTarget(const String& widget, const String& event);
575 
576  /*************************************************************************
577  Implementation Data
578  *************************************************************************/
579  WidgetLookManager* d_manager;
580 
581  // these are used to implement the handler without using a huge
582  // if / else if /else construct, we just register the element name, and
583  // handler member function, and everything else is done using those
584  // mappings.
585  ElementStartHandlerMap d_startHandlersMap;
586  ElementEndHandlerMap d_endHandlersMap;
587 
588  // these hold pointers to various objects under construction.
589  WidgetLookFeel* d_widgetlook;
590  WidgetComponent* d_childcomponent;
591  ImagerySection* d_imagerysection;
592  StateImagery* d_stateimagery;
593  LayerSpecification* d_layer;
594  SectionSpecification* d_section;
595  ImageryComponent* d_imagerycomponent;
596  ComponentArea* d_area;
597  Dimension d_dimension;
598  TextComponent* d_textcomponent;
599  NamedArea* d_namedArea;
600  FrameComponent* d_framecomponent;
601 
602  std::vector<BaseDim*
603  CEGUI_VECTOR_ALLOC(BaseDim*)> d_dimStack;
604 
605  PropertyDefinitionBase* d_propertyLink;
606  EventLinkDefinition* d_eventLink;
607  };
608 
609 } // End of CEGUI namespace section
610 
611 
612 #endif // end of guard _CEGUIFalagard_xmlHandler_h_
613