ubit
uclassImpl.hpp
1 /* ==================================================== ======== ======= *
2  *
3  * uclassImpl.hpp
4  * Ubit GUI Toolkit - Version 6
5  * (C) 2009 | Eric Lecolinet | TELECOM ParisTech | http://www.enst.fr/~elc/ubit
6  *
7  * ***********************************************************************
8  * COPYRIGHT NOTICE :
9  * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY AND WITHOUT EVEN THE
10  * IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
11  * YOU CAN REDISTRIBUTE IT AND/OR MODIFY IT UNDER THE TERMS OF THE GNU
12  * GENERAL PUBLIC LICENSE AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
13  * EITHER VERSION 2 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
14  * SEE FILES 'COPYRIGHT' AND 'COPYING' FOR MORE DETAILS.
15  * ***********************************************************************/
16 
17 #ifndef _uclassImpl_hpp_
18 #define _uclassImpl_hpp_ 1
19 #include <map>
20 #include <ubit/uattr.hpp>
21 #include <ubit/uelem.hpp>
22 #include <ubit/ubox.hpp>
23 #include <ubit/uclass.hpp>
24 namespace ubit {
25 
26  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
27 
28  class UDefaultAttribute : public UAttr {
29  public:
30  struct MetaClass : public UClass {
31  MetaClass(const UStr& classname) : UClass(classname) {}
32 
33  virtual bool isInstance(UObject& obj) const {
34  return dynamic_cast<UDefaultAttribute*>(&obj); // && test name ?
35  }
36  virtual UDefaultAttribute* newInstance() const {
37  return new UDefaultAttribute(*this);
38  }
39  };
40 
42 
43  static const UClass& Class() {
44  static MetaClass* c = new MetaClass("#attribute"); return *c;
45  }
46  virtual const UClass& getClass() const {return cid;}
47 
48  private:
49  const UClass& cid; // !!ATT aux destructions, un uptr<> serait preferable !!
50  };
51 
52  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
53 
54  class UDefaultInlineElement : public UElem {
55  public:
56  struct MetaClass : public UClass {
57  MetaClass(const UStr& classname) : UClass(classname) {}
58 
59  virtual bool isInstance(UObject& obj) const {
60  return dynamic_cast<UDefaultInlineElement*>(&obj); // && test name ?
61  }
63  return new UDefaultInlineElement(*this);
64  }
65  virtual UStyle* newStyle() const {return UDefaultInlineElement::createStyle();}
66  };
67 
69 
70  static const UClass& Class() {
71  static MetaClass* c = new MetaClass("#element"); return *c;
72  }
73  virtual const UClass& getClass() const {return cid;}
74 
75  private:
76  const UClass& cid; // !!ATT aux destructions, un uptr<> serait preferable !!
77  };
78 
79  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
80 
81  class UDefaultBlockElement : public UElem {
82  public:
83  struct MetaClass : public UClass {
84  MetaClass(const UStr& classname) : UClass(classname) {}
85 
86  virtual bool isInstance(UObject& obj) const {
87  return dynamic_cast<UDefaultBlockElement*>(&obj); // && test name ?
88  }
89  virtual UDefaultBlockElement* newInstance() const {
90  return new UDefaultBlockElement(*this);
91  }
92  virtual UStyle* newStyle() const {return UDefaultBlockElement::createStyle();}
93  };
94 
96 
97  static const UClass& Class() {
98  static MetaClass* c = new MetaClass("#element"); return *c;
99  }
100  virtual const UClass& getClass() const {return cid;}
101 
102  private:
103  const UClass& cid; // !!ATT aux destructions, un uptr<> serait preferable !!
104  };
105 
106  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
107 
109  public:
110  ~UAttrClassMap();
111 
112  void addClass(const UClass&);
114 
115  const UClass* findClass(const UStr& name) const;
117 
118  const UClass* obtainClass(const UStr& name);
120 
121  struct Comp {
123  bool operator()(const UStr*a,const UStr*b) const {return a->compare(*b,true) < 0;}
124  };
125 
126  typedef std::map<const UStr*, const UClass*, Comp> Map;
127  Map map;
128  };
129 
130  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
131 
133  public:
134  ~UElemClassMap();
135 
136  void addClass(const UClass&);
138 
139  const UClass* findClass(const UStr& name) const;
141 
142  const UClass* obtainClass(const UStr& name);
144 
145  struct Comp {
147  bool operator()(const UStr*a,const UStr*b) const {return a->compare(*b,true)<0;}
148  };
149  typedef std::map<const UStr*, const UClass*, Comp> Map;
150  Map map;
151  };
152 
153  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
154 
155  class UStyleSheet : public UElemClassMap {
156  public:
157  ~UStyleSheet();
158  };
159 
160 }
161 #endif
162 
Base class for attributes.
Definition: uattr.hpp:97
Definition: uclassImpl.hpp:54
static UStyle * createStyle()
static function that returns the style of this class.
Definition: uelem.cpp:58
Definition: uclassImpl.hpp:132
bool operator()(const UStr *a, const UStr *b) const
Attribute name comparator, case is ignored.
Definition: uclassImpl.hpp:123
Definition: uclassImpl.hpp:121
virtual bool isInstance(UObject &obj) const
returns true if this &#39;object&#39; derives from this class.
Definition: uclassImpl.hpp:86
Definition: uclassImpl.hpp:30
virtual const UClass & getClass() const
instance method that returns the metaclass of this object.
Definition: uclassImpl.hpp:46
virtual UStyle * newStyle() const
creates a new instance of the style of this class (if applicable).
Definition: uclassImpl.hpp:65
virtual UStyle * newStyle() const
creates a new instance of the style of this class (if applicable).
Definition: uclassImpl.hpp:92
Definition: uclassImpl.hpp:108
virtual const UClass & getClass() const
instance method that returns the metaclass of this object.
Definition: uclassImpl.hpp:100
lightweight general purpose container.
Definition: uelem.hpp:44
virtual UDefaultBlockElement * newInstance() const
creates a new instance of the corresponding class (if applicable).
Definition: uclassImpl.hpp:89
Ubit class.
Definition: uclass.hpp:74
virtual bool isInstance(UObject &obj) const
returns true if this &#39;object&#39; derives from this class.
Definition: uclassImpl.hpp:59
Definition: uclassImpl.hpp:155
virtual UDefaultInlineElement * newInstance() const
creates a new instance of the corresponding class (if applicable).
Definition: uclassImpl.hpp:62
Definition: uhardfont.hpp:31
Definition: uclassImpl.hpp:81
Definition: uclassImpl.hpp:56
virtual UDefaultAttribute * newInstance() const
creates a new instance of the corresponding class (if applicable).
Definition: uclassImpl.hpp:36
Definition: tstclass.hpp:5
Definition: uclassImpl.hpp:145
bool operator()(const UStr *a, const UStr *b) const
Element name comparator, case is ignored.
Definition: uclassImpl.hpp:147
Definition: uclassImpl.hpp:83
Compiled Object Style.
Definition: ustyle.hpp:44
virtual bool isInstance(UObject &obj) const
returns true if this &#39;object&#39; derives from this class.
Definition: uclassImpl.hpp:33
virtual int compare(const char *, bool ignore_case=false) const
compare strings lexicographically, ignores case if last argument is true.
Ubit String.
Definition: ustr.hpp:72
Base class of most Ubit objects (SEE DETAILS!).
Definition: uobject.hpp:113
Definition: uclassImpl.hpp:28
virtual const UClass & getClass() const
instance method that returns the metaclass of this object.
Definition: uclassImpl.hpp:73