UIMLView.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. #pragma once
  2. #include "Array.h"
  3. #include "Trie.h"
  4. #include "UIInitialization.h"
  5. #include "Zeichnung.h"
  6. namespace Framework
  7. {
  8. class Text;
  9. class ObjTabelle;
  10. class Schrift;
  11. class Bildschirm;
  12. class UIMLContainer;
  13. namespace XML
  14. {
  15. class Element;
  16. }
  17. class UIMLElement : public virtual ReferenceCounter
  18. {
  19. public:
  20. DLLEXPORT UIMLElement();
  21. DLLEXPORT virtual ~UIMLElement();
  22. //! prüft, ob dieses UIML Element für ein bestimmtes xml Element
  23. //! zuständig ist
  24. virtual bool isApplicableFor(XML::Element& element) = 0;
  25. //! erstellt eine neue Zeichnung zu einem gegebenen xml Element
  26. virtual Zeichnung* parseElement(
  27. XML::Element& element, UIMLContainer& generalFactory)
  28. = 0;
  29. //! wendet die layout parameter zu einer Zeichnung an
  30. DLLEXPORT virtual void layout(XML::Element& element,
  31. Zeichnung& z,
  32. int pWidth,
  33. int pHeight,
  34. UIMLContainer& generalLayouter);
  35. };
  36. class UIMLContainer : public UIMLElement
  37. {
  38. public:
  39. DLLEXPORT UIMLContainer();
  40. DLLEXPORT virtual ~UIMLContainer();
  41. virtual Zeichnung* zZeichnungById(const char* id) = 0;
  42. virtual Zeichnung* getZeichnungById(const char* id) = 0;
  43. virtual const UIInit& getFactory() = 0;
  44. };
  45. class UIMLTextField : public UIMLElement
  46. {
  47. public:
  48. DLLEXPORT UIMLTextField();
  49. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  50. DLLEXPORT Zeichnung* parseElement(
  51. XML::Element& element, UIMLContainer& generalFactory) override;
  52. DLLEXPORT void layout(XML::Element& element,
  53. Zeichnung& z,
  54. int pWidth,
  55. int pHeight,
  56. UIMLContainer& generalLayouter) override;
  57. };
  58. class UIMLButton : public UIMLElement
  59. {
  60. public:
  61. DLLEXPORT UIMLButton();
  62. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  63. DLLEXPORT Zeichnung* parseElement(
  64. XML::Element& element, UIMLContainer& generalFactory) override;
  65. DLLEXPORT void layout(XML::Element& element,
  66. Zeichnung& z,
  67. int pWidth,
  68. int pHeight,
  69. UIMLContainer& generalLayouter) override;
  70. };
  71. class UIMLCheck : public UIMLElement
  72. {
  73. public:
  74. DLLEXPORT UIMLCheck();
  75. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  76. DLLEXPORT Zeichnung* parseElement(
  77. XML::Element& element, UIMLContainer& generalFactory) override;
  78. DLLEXPORT void layout(XML::Element& element,
  79. Zeichnung& z,
  80. int pWidth,
  81. int pHeight,
  82. UIMLContainer& generalLayouter) override;
  83. };
  84. class UIMLText : public UIMLElement
  85. {
  86. public:
  87. DLLEXPORT UIMLText();
  88. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  89. DLLEXPORT Zeichnung* parseElement(
  90. XML::Element& element, UIMLContainer& generalFactory) override;
  91. DLLEXPORT void layout(XML::Element& element,
  92. Zeichnung& z,
  93. int pWidth,
  94. int pHeight,
  95. UIMLContainer& generalLayouter) override;
  96. };
  97. class UIMLTextArea : public UIMLElement
  98. {
  99. public:
  100. DLLEXPORT UIMLTextArea();
  101. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  102. DLLEXPORT Zeichnung* parseElement(
  103. XML::Element& element, UIMLContainer& generalFactory) override;
  104. DLLEXPORT void layout(XML::Element& element,
  105. Zeichnung& z,
  106. int pWidth,
  107. int pHeight,
  108. UIMLContainer& generalLayouter) override;
  109. };
  110. class UIMLTable : public UIMLElement
  111. {
  112. public:
  113. DLLEXPORT UIMLTable();
  114. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  115. DLLEXPORT Zeichnung* parseElement(
  116. XML::Element& element, UIMLContainer& generalFactory) override;
  117. DLLEXPORT void layout(XML::Element& element,
  118. Zeichnung& z,
  119. int pWidth,
  120. int pHeight,
  121. UIMLContainer& generalLayouter) override;
  122. };
  123. class UIMLFrame : public UIMLElement
  124. {
  125. public:
  126. DLLEXPORT UIMLFrame();
  127. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  128. DLLEXPORT Zeichnung* parseElement(
  129. XML::Element& element, UIMLContainer& generalFactory) override;
  130. DLLEXPORT void layout(XML::Element& element,
  131. Zeichnung& z,
  132. int pWidth,
  133. int pHeight,
  134. UIMLContainer& generalLayouter) override;
  135. };
  136. /**
  137. KSG UIML Standart
  138. possible XML elements:
  139. - uimlview (the root element of uiml),
  140. - class (only as direct child of uimlview),
  141. - textfield,
  142. - button,
  143. - check, (KontrollKnopf)
  144. - text,
  145. - textarea,
  146. - table (allowed child elements: tr),
  147. - tr (allowed child elements: textfield, button, table, text, textarea,
  148. frame),
  149. - frame (allowed child elements: textfield, button, table, text,
  150. textarea, frame). possible global XML attributes:
  151. - id (string should be unique),
  152. - x (integer, optional % char at end),
  153. - y (integer, optional % char at end),
  154. - width (integer, optional % char at end) or auto keyword,
  155. - height (integer, optional % char at end) or auto keyword,
  156. - margin (integer, optional % char at end),
  157. - margin-left (integer, optional % char at end),
  158. - margin-top (integer, optional % char at end),
  159. - margin-right (integer, optional % char at end),
  160. - margin-bottom (integer, optional % char at end),
  161. - align-left (string (id values of other elements or keywords: start,
  162. end, center)),
  163. - align-top (string (id values of other elements or keywords: start,
  164. end, center)),
  165. - align-bottom ((string (id values of other elements or keywords: start,
  166. end, center)),
  167. - align-right (string (id values of other elements or keywords: start,
  168. end, center)),
  169. - tooltip (string),
  170. - style (hex __int64),
  171. - class (string (id of class element))
  172. attribute die sich gegenseitig ausschließen:
  173. - align-left / align-right
  174. - align-top / align-bottom
  175. spezific attributes:
  176. - font-size (textfield, text, textarea, button)
  177. - text-align (textfield, text, textarea)
  178. - text-align-horizontal (textfield, text, textarea)
  179. - text-align-vertical (textfield, text, textarea)
  180. example:
  181. \code
  182. <view>
  183. <textfield id="element_at_top_left" align-left="start",
  184. align-top="start", margin-left="5", margin-top="5" width="90%"
  185. height="30"/> <table id="element_below_textfield" align-left="start",
  186. aliign-top="element_at_top_left", margin-left="5", margin-top="5"
  187. width="90%" height="300"> <tr> <button id="a_button_in_a_table"/>
  188. <textfield id="a_textfield_in_a_table"/>
  189. </tr>
  190. </table>
  191. </view>
  192. \endcode
  193. */
  194. class UIMLView : public ZeichnungHintergrund,
  195. public UIMLContainer
  196. {
  197. private:
  198. RCArray<UIMLElement> knownElements;
  199. UIInit init;
  200. Trie<Zeichnung>* members;
  201. XML::Element* dom;
  202. int nextId;
  203. //! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch
  204. //! aufgerufen. \param me Das Ereignis
  205. DLLEXPORT virtual void doMausEreignis(
  206. MausEreignis& me, bool userRet) override;
  207. public:
  208. //! Erstellt eine UIML View
  209. DLLEXPORT UIMLView();
  210. //! Erstellt eine UIML View zu einem UIML Text
  211. //! \param uiml Ein xml element gemät des KSG UIML standarts
  212. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips
  213. //! angezeigt werden sollen \param schrift Die schrift mit der der Text
  214. //! gezeichnet werden soll
  215. DLLEXPORT UIMLView(XML::Element* uiml, UIInit& init);
  216. //! Erstellt eine UIML View zu einem UIML Text
  217. //! \param uiml Ein xml text gemät des KSG UIML standarts
  218. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips
  219. //! angezeigt werden sollen \param schrift Die schrift mit der der Text
  220. //! gezeichnet werden soll
  221. DLLEXPORT UIMLView(Text uiml, UIInit& init);
  222. DLLEXPORT ~UIMLView();
  223. //! entfernt alle bekannten elemente, die im uiml verwendet werden
  224. //! können
  225. DLLEXPORT void removeAllKnownElements();
  226. //! fügt ein neues bekanntes element hinzu, dass danach im uiml
  227. //! verwendet werden kann.
  228. DLLEXPORT void addKnownElement(UIMLElement* element);
  229. //! prüft, ob ein xml Element ein bekanntes uiml Element ist;
  230. DLLEXPORT bool isKnownElement(XML::Element* zElement);
  231. //! setzt den inhalt der view
  232. //! \param uiml Ein xml element gemät des KSG UIML standarts
  233. DLLEXPORT void setUIML(XML::Element* uiml);
  234. //! setzt den inhalt der view
  235. //! \param uiml Ein xml text gemät des KSG UIML standarts
  236. DLLEXPORT void setUIML(Text uiml);
  237. //! aktualisiert größe und position aller Zeichnungen gemäß den
  238. //! spezifikationen in UIML
  239. DLLEXPORT void layout();
  240. //! fügt ein element hinzu
  241. //! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das
  242. //! neue Objekt darstellt \return id des neuen Elements
  243. DLLEXPORT Text addMember(Text uiml);
  244. //! fügt ein element zu einem Elternelement hinzu (funktioniert momentan
  245. //! nur mit frame Objekten) \param uiml Ein xml text gemät des KSG UIML
  246. //! standarts, welcher das neue Objekt darstellt \return id des neuen
  247. //! Elements
  248. DLLEXPORT Text addMember(Text uiml, Text parentId);
  249. //! entfernt ein element
  250. //! \param id id des Elements
  251. DLLEXPORT void removeMember(Text id);
  252. //! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
  253. //! \param id die id der Zeichnung
  254. DLLEXPORT Zeichnung* zZeichnungById(const char* id) override;
  255. //! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
  256. //! \param id die id der Zeichnung
  257. DLLEXPORT Zeichnung* getZeichnungById(const char* id) override;
  258. //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch
  259. //! aufgerufen \param te Das Ereignis
  260. DLLEXPORT virtual void doTastaturEreignis(TastaturEreignis& te);
  261. //! Updated den Zeichenhintergrund
  262. //! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten
  263. //! Aufruf dieser Funktion verstrichen ist \return 1, wenn das Bild neu
  264. //! gezeichnet werden muss. 0 sonnst
  265. DLLEXPORT bool tick(double tickVal) override;
  266. //! Zeichnet den Hintergrund eines Zeichnunges nach rObj
  267. DLLEXPORT void render(Bild& rObj) override;
  268. //! Gibt den Dom Tree ohne erhöhten reference counter zurück
  269. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von
  270. //! attributen einzelner elemente sind erlaubt)
  271. DLLEXPORT XML::Element* zDom() const;
  272. //! Gibt den Dom Tree zurück
  273. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von
  274. //! attributen einzelner elemente sind erlaubt)
  275. DLLEXPORT XML::Element* getDom() const;
  276. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  277. DLLEXPORT Zeichnung* parseElement(
  278. XML::Element& element, UIMLContainer& generalFactory) override;
  279. DLLEXPORT void layout(XML::Element& element,
  280. Zeichnung& z,
  281. int pWidth,
  282. int pHeight,
  283. UIMLContainer& generalLayouter) override;
  284. DLLEXPORT const UIInit& getFactory() override;
  285. //! calculates the needed size for all content elements to be visible
  286. DLLEXPORT Punkt calculateContentSize();
  287. };
  288. } // namespace Framework