00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _uclassImpl_hpp_
00020 #define _uclassImpl_hpp_ 1
00021
00022 #include <map>
00023 #include <ubit/uclass.hpp>
00024 #include <ubit/uprop.hpp>
00025 #include <ubit/ugroup.hpp>
00026 #include <ubit/ubox.hpp>
00027 namespace ubit {
00028
00029
00030
00031 class UDefaultAttribute : public UProp {
00032 public:
00033 struct Class : public UAttributeClass {
00034 Class(const UStr& classname) : UAttributeClass(classname) {initClass();}
00035
00036 virtual bool isInstance(UObject& obj) const {
00037 return dynamic_cast<UDefaultAttribute*>(&obj);
00038 }
00039 virtual UDefaultAttribute* newInstance() const {
00040 return new UDefaultAttribute(*this);
00041 }
00042 };
00043
00044 UDefaultAttribute(const UDefaultAttribute::Class& c) : cid(c) {}
00045
00046 virtual const UAttributeClass& getClass() const {return cid;}
00047 static const UAttributeClass& classid() {
00048 static Class* _cid_ = new Class("#attribute"); return *_cid_;
00049 }
00050
00051 private:
00052 const Class& cid;
00053 };
00054
00055
00056
00057 class UDefaultInlineElement : public UGroup {
00058 public:
00059 struct Class : public UElementClass {
00060 Class(const UStr& classname) : UElementClass(classname) {initClass();}
00061
00062 virtual bool isInstance(UObject& obj) const {
00063 return dynamic_cast<UDefaultInlineElement*>(&obj);
00064 }
00065 virtual UDefaultInlineElement* newInstance() const {
00066 return new UDefaultInlineElement(*this);
00067 }
00068 virtual UStyle* newStyle() const {return UDefaultInlineElement::createStyle();}
00069 };
00070
00071 UDefaultInlineElement(const UDefaultInlineElement::Class& c) : cid(c) {}
00072
00073 virtual const UElementClass& getClass() const {return cid;}
00074 static const UElementClass& classid() {
00075 static Class* _cid_ = new Class("#element"); return *_cid_;
00076 }
00077
00078 private:
00079 const Class& cid;
00080 };
00081
00082
00083
00084 class UDefaultBlockElement : public UGroup {
00085 public:
00086 struct Class : public UElementClass {
00087 Class(const UStr& classname) : UElementClass(classname) {initClass();}
00088
00089 virtual bool isInstance(UObject& obj) const {
00090 return dynamic_cast<UDefaultBlockElement*>(&obj);
00091 }
00092 virtual UDefaultBlockElement* newInstance() const {
00093 return new UDefaultBlockElement(*this);
00094 }
00095 virtual UStyle* newStyle() const {return UDefaultBlockElement::createStyle();}
00096 };
00097
00098 UDefaultBlockElement(const UDefaultBlockElement::Class& c) : cid(c) {}
00099
00100 virtual const UElementClass& getClass() const {return cid;}
00101 static const UElementClass& classid() {
00102 static Class* _cid_ = new Class("#element"); return *_cid_;
00103 }
00104
00105 private:
00106 const Class& cid;
00107 };
00108
00109
00110
00111
00112 class UAttributeClassMap {
00113 public:
00114 ~UAttributeClassMap();
00115
00116 void addClass(const UAttributeClass&);
00118
00119 const UAttributeClass* findClass(const UStr& name) const;
00121
00122 const UAttributeClass* obtainClass(const UStr& name);
00124
00125 struct Comp {
00127 bool operator()(const UStr*a,const UStr*b) const {return a->compare(*b,true) < 0;}
00128 };
00129
00130 typedef std::map<const UStr*, const UAttributeClass*, Comp> Map;
00131 Map map;
00132 };
00133
00134
00135
00136 class UElementClassMap {
00137 public:
00138 ~UElementClassMap();
00139
00140 void addClass(const UElementClass&);
00142
00143 const UElementClass* findClass(const UStr& name) const;
00145
00146 const UElementClass* obtainClass(const UStr& name);
00148
00149 struct Comp {
00151 bool operator()(const UStr*a,const UStr*b) const {return a->compare(*b,true)<0;}
00152 };
00153 typedef std::map<const UStr*, const UElementClass*, Comp> Map;
00154 Map map;
00155 };
00156
00157
00158
00159 class UStyleSheet : public UElementClassMap {
00160 public:
00161 ~UStyleSheet();
00162 };
00163
00164 }
00165 #endif
00166
00167
00168
00169
00170