UIMLView.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. #pragma once
  2. #include "Array.h"
  3. #include "Trie.h"
  4. #include "UIInitialization.h"
  5. #include "XML.h"
  6. #include "Zeichnung.h"
  7. namespace Framework
  8. {
  9. class Text;
  10. class ObjTabelle;
  11. class Schrift;
  12. class Bildschirm;
  13. class UIMLContainer;
  14. /**
  15. creates a Zeichnung that views an element of the uiml
  16. tag: defined by subclasses;
  17. basic attributes:
  18. - (__int64) style: sets the style. Default: TextField::Style::TextField
  19. + 0x...: will be interpreted as hex
  20. # ...: will be interpreted as normal __int64
  21. - (string) text-align-horizontal:
  22. + center: adds the style TextFeld::Style::HCenter
  23. - (string) text-align-vertical:
  24. + center: adds the style TextFeld::Style::VCenter
  25. - (int) font-size: sets the font size
  26. - (int) text-color: sets the text color format: 0xAARRGGBB
  27. - disabled: removes the style TextFeld::Style::Editierbar
  28. - (string) width: sets the with
  29. + (int)%: specifies the width in % of the parent element
  30. + (int): specifies the width in pixel
  31. + (expression): calculates the width from an expression that contains
  32. values concatenated by the operators +, -, / or *
  33. + auto: attribute will be ignored here and may be handled by the
  34. subclasses
  35. - (string) height: sets the with
  36. + (int)%: specifies the width in % of the parent element
  37. + (int): specifies the width in pixel
  38. + (expression): calculates the width from an expression that contains
  39. values concatenated by the operators +, -, / or *
  40. + auto: attribute will be ignored here and may be handled by the
  41. subclasses
  42. - (string) align-x: sets the x coordinate of the view. The value of
  43. margin-x will be added
  44. + start: 0
  45. + end: parentWidth
  46. + center: parentWidth / 2 - width / 2
  47. + id of other element: other element x
  48. - (string) margin-x: only available if align-x is specified.
  49. + (int)%: specifies the distance to its x aligned coordinate in
  50. percentage of parentWidth
  51. + (int): specifies the distance to its x aligned coordinate in pixel
  52. + (expression): calculates the distance from an expression that
  53. contains values concatenated by the operators +, -, / or *
  54. - (string) align-y: sets the y coordinate of the view. The value of
  55. margin-y will be added
  56. + start: 0
  57. + end: parentWidth
  58. + center: parentHeight / 2 - height / 2
  59. + id of other element: other element y
  60. - (string) margin-y: only available if align-y is specified.
  61. + (int)%: specifies the distance to its y aligned coordinate in
  62. percentage of parentHeight
  63. + (int): specifies the distance to its y aligned coordinate in pixel
  64. + (expression): calculates the distance from an expression that
  65. contains values concatenated by the operators +, -, / or *
  66. - (string) align-left: sets the x coordinate of the view. The value of
  67. margin-left will be added. Will be ignored when align-x is present.
  68. + start: 0
  69. + end: parentWidth
  70. + center: parentWidth / 2 - width / 2
  71. + id of other element: other element x + other element width
  72. - (string) margin-left: only available if align-left is specified.
  73. + (int)%: specifies the distance to its left aligned coordinate in
  74. percentage of parentWidth
  75. + (int): specifies the distance to its left aligned coordinate in
  76. pixel
  77. + (expression): calculates the distance from an expression that
  78. contains values concatenated by the operators +, -, / or *
  79. - (string) align-right: sets the x coordinate of the view. The value of
  80. margin-right will be subtracted. Will be ignored when align-x or
  81. align-left is present.
  82. + start: -width
  83. + end: parentWidth - width
  84. + center: parentWidth / 2 - width / 2
  85. + id of other element: other element x - width
  86. - (string) margin-right: only available if align-right is specified.
  87. + (int)%: specifies the distance to its right aligned coordinate in
  88. percentage of parentWidth
  89. + (int): specifies the distance to its right aligned coordinate in
  90. pixel
  91. + (expression): calculates the distance from an expression that
  92. contains values concatenated by the operators +, -, / or *
  93. - (string) align-top: sets the y coordinate of the view. The value of
  94. margin-top will be added. Will be ignored when align-y is present.
  95. + start: 0
  96. + end: parentHeight
  97. + center: parentHeight / 2 - height / 2
  98. + id of other element: other element y + other element height
  99. - (string) margin-top: only available if align-top is specified.
  100. + (int)%: specifies the distance to its top aligned coordinate in
  101. percentage of parentHeight
  102. + (int): specifies the distance to its top aligned coordinate in pixel
  103. + (expression): calculates the distance from an expression that
  104. contains values concatenated by the operators +, -, / or *
  105. - (string) align-bottom: sets the y coordinate of the view. The value of
  106. margin-bottom will be subtracted. Will be ignored when align-y or
  107. align-top is present.
  108. + start: -height
  109. + end: parentHeight - height
  110. + center: parentHeight / 2 - height / 2
  111. + id of other element: other element y - height
  112. - (string) margin-bottom: only available if align-bottom is specified.
  113. + (int)%: specifies the distance to its bottom aligned coordinate in
  114. percentage of parentHeight
  115. + (int): specifies the distance to its bottom aligned coordinate in
  116. pixel
  117. + (expression): calculates the distance from an expression that
  118. contains values concatenated by the operators +, -, / or *
  119. - (string) x: sets the x coordinate of the view. overwrites align-left
  120. and align-right and align-x
  121. + (int)%: specifies the x coordinate in percentage of parentWidth
  122. + (int): specifies the x coordinate in pixel
  123. + (expression): calculates the x coordinate from an expression that
  124. contains values concatenated by the operators +, -, / or *
  125. - (string) y: sets the y coordinate of the view. overwrites align-top
  126. and align-bottom and align-y
  127. + (int)%: specifies the y coordinate in percentage of parentHeight
  128. + (int): specifies the y coordinate in pixel
  129. + (expression): calculates the y from an expression that contains
  130. values concatenated by the operators +, -, / or *
  131. additional attributes if the created view is an instance of
  132. ZeichnungHintergrund:
  133. - (int) border: width of the border in pixel
  134. - (int) border-color: color of the border format: 0xAARRGGBB
  135. */
  136. class UIMLElement : public virtual ReferenceCounter
  137. {
  138. public:
  139. DLLEXPORT UIMLElement();
  140. DLLEXPORT virtual ~UIMLElement();
  141. //! prüft, ob dieses UIML Element für ein bestimmtes xml Element
  142. //! zuständig ist
  143. virtual bool isApplicableFor(XML::Element& element) = 0;
  144. //! erstellt eine neue Zeichnung zu einem gegebenen xml Element
  145. virtual Zeichnung* parseElement(
  146. XML::Element& element, UIMLContainer& generalFactory)
  147. = 0;
  148. //! aktualisiert eine Zeichnung mit den Daten eines xml Elements. Gibt
  149. //! false zurück, wenn die Zeichnung nicht aktualisiert werden konnte
  150. //! und neu erstellt werden muss
  151. virtual bool updateElement(
  152. XML::Element& element, Zeichnung& z, UIMLContainer& generalFactory)
  153. = 0;
  154. //! wendet die layout parameter zu einer Zeichnung an
  155. DLLEXPORT virtual void layout(XML::Element& element,
  156. Zeichnung& z,
  157. int pWidth,
  158. int pHeight,
  159. UIMLContainer& generalLayouter);
  160. /// <summary>
  161. /// calculates the size based on a given attribute value. Allowed values
  162. /// are expression with +, -, * or / operators and percentages of
  163. /// parentSize. uses 0 for each invalid part of the expression
  164. /// </summary>
  165. /// <param name="attributeValue">the expression that should be
  166. /// evaluated</param> <param name="parentSize">the size of the parent in
  167. /// pixel</param> <returns>the resulting size in pixel</returns>
  168. DLLEXPORT int calculateSize(Text attributeValue, int parentSize);
  169. // returns an iterator for all children that are elements and need to be
  170. // layouted
  171. // \param element the current element
  172. virtual XML::Editor getChildren(XML::Element& element);
  173. };
  174. class UIMLContainer : public UIMLElement
  175. {
  176. public:
  177. DLLEXPORT UIMLContainer();
  178. DLLEXPORT virtual ~UIMLContainer();
  179. virtual Zeichnung* zZeichnungById(const char* id) = 0;
  180. virtual Zeichnung* getZeichnungById(const char* id) = 0;
  181. virtual Text getZeichnungId(Zeichnung& z) = 0;
  182. virtual void removeZeichnung(Zeichnung& z) = 0;
  183. virtual bool registerZeichnung(const char* id, Zeichnung* z) = 0;
  184. virtual const UIInit& getFactory() = 0;
  185. };
  186. /**
  187. creates a TextFeld instance with style TextField::Style::TextField
  188. tag: &lt;textfield&gt;
  189. additional attributes to UIMLElement:
  190. - (__int64) style: sets the style. Default: TextField::Style::TextField
  191. - (string) text-align-horizontal:
  192. + center: adds the style TextFeld::Style::HCenter
  193. - (string) text-align-vertical:
  194. + center: adds the style TextFeld::Style::VCenter
  195. - (int) font-size: sets the font size
  196. - (int) text-color: sets the text color. format: 0xAARRGGBB
  197. - disabled: removes the style TextFeld::Style::Editierbar
  198. - (string) width: sets the with
  199. + auto: setzt the width to the calculated needed width
  200. - (string) height: sets the height
  201. + auto: setzt the height to the calculated needed height
  202. - (string) vScroll: adds a vertical scroll bar
  203. + auto: the max vertical scroll size is set to the needed text height
  204. and the click scroll per pixel will be set to font size
  205. - (int) hScroll: adds a hotizontal scroll bar
  206. + auto: the max horizontal scroll size is set to the needed text width
  207. and the click scroll per pixel will be set to font size
  208. */
  209. class UIMLTextField : public UIMLElement
  210. {
  211. public:
  212. DLLEXPORT UIMLTextField();
  213. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  214. DLLEXPORT Zeichnung* parseElement(
  215. XML::Element& element, UIMLContainer& generalFactory) override;
  216. DLLEXPORT bool updateElement(XML::Element& element,
  217. Zeichnung& z,
  218. UIMLContainer& generalFactory) override;
  219. DLLEXPORT void layout(XML::Element& element,
  220. Zeichnung& z,
  221. int pWidth,
  222. int pHeight,
  223. UIMLContainer& generalLayouter) override;
  224. };
  225. class UIMLButton : public UIMLElement
  226. {
  227. public:
  228. DLLEXPORT UIMLButton();
  229. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  230. DLLEXPORT Zeichnung* parseElement(
  231. XML::Element& element, UIMLContainer& generalFactory) override;
  232. DLLEXPORT bool updateElement(XML::Element& element,
  233. Zeichnung& z,
  234. UIMLContainer& generalFactory) override;
  235. DLLEXPORT void layout(XML::Element& element,
  236. Zeichnung& z,
  237. int pWidth,
  238. int pHeight,
  239. UIMLContainer& generalLayouter) override;
  240. };
  241. class UIMLCheck : public UIMLElement
  242. {
  243. public:
  244. DLLEXPORT UIMLCheck();
  245. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  246. DLLEXPORT Zeichnung* parseElement(
  247. XML::Element& element, UIMLContainer& generalFactory) override;
  248. DLLEXPORT bool updateElement(XML::Element& element,
  249. Zeichnung& z,
  250. UIMLContainer& generalFactory) override;
  251. DLLEXPORT void layout(XML::Element& element,
  252. Zeichnung& z,
  253. int pWidth,
  254. int pHeight,
  255. UIMLContainer& generalLayouter) override;
  256. };
  257. /**
  258. creates a TextFeld instance with style TextField::Style::Text
  259. tag: &lt;text&gt;
  260. additional attributes to UIMLElement:
  261. - (__int64) style: sets the style. Default: TextField::Style::Text
  262. - (string) text-align-horizontal:
  263. + center: adds the style TextFeld::Style::HCenter
  264. - (string) text-align-vertical:
  265. + center: adds the style TextFeld::Style::VCenter
  266. - (int) font-size: sets the font size
  267. - (int) text-color: sets the text color. format: 0xAARRGGBB
  268. - disabled: removes the style TextFeld::Style::Editierbar
  269. - (string) width: sets the with
  270. + auto: setzt the width to the calculated needed width
  271. - (string) height: sets the height
  272. + auto: setzt the height to the calculated needed height
  273. - (string) vScroll: adds a vertical scroll bar
  274. + auto: the max vertical scroll size is set to the needed text height
  275. and the click scroll per pixel will be set to font size
  276. - (int) hScroll: adds a hotizontal scroll bar
  277. + auto: the max horizontal scroll size is set to the needed text width
  278. and the click scroll per pixel will be set to font size
  279. */
  280. class UIMLText : public UIMLElement
  281. {
  282. public:
  283. DLLEXPORT UIMLText();
  284. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  285. DLLEXPORT Zeichnung* parseElement(
  286. XML::Element& element, UIMLContainer& generalFactory) override;
  287. DLLEXPORT bool updateElement(XML::Element& element,
  288. Zeichnung& z,
  289. UIMLContainer& generalFactory) override;
  290. DLLEXPORT void layout(XML::Element& element,
  291. Zeichnung& z,
  292. int pWidth,
  293. int pHeight,
  294. UIMLContainer& generalLayouter) override;
  295. };
  296. /**
  297. creates a TextFeld instance with style TextField::Style::TextGebiet
  298. tag: &lt;textarea&gt;
  299. additional attributes to UIMLElement:
  300. - (__int64) style: sets the style. Default: TextField::Style::TextGebiet
  301. - (string) text-align-horizontal:
  302. + center: adds the style TextFeld::Style::HCenter
  303. - (string) text-align-vertical:
  304. + center: adds the style TextFeld::Style::VCenter
  305. - (int) font-size: sets the font size
  306. - (int) text-color: sets the text color. format: 0xAARRGGBB
  307. - disabled: removes the style TextFeld::Style::Editierbar
  308. - (string) width: sets the with
  309. + auto: setzt the width to the calculated needed width
  310. - (string) height: sets the height
  311. + auto: setzt the height to the calculated needed height
  312. - (string) vScroll: adds a vertical scroll bar
  313. + auto: the max vertical scroll size is set to the needed text height
  314. and the click scroll per pixel will be set to font size
  315. - (int) hScroll: adds a hotizontal scroll bar
  316. + auto: the max horizontal scroll size is set to the needed text width
  317. and the click scroll per pixel will be set to font size
  318. */
  319. class UIMLTextArea : public UIMLElement
  320. {
  321. public:
  322. DLLEXPORT UIMLTextArea();
  323. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  324. DLLEXPORT Zeichnung* parseElement(
  325. XML::Element& element, UIMLContainer& generalFactory) override;
  326. DLLEXPORT bool updateElement(XML::Element& element,
  327. Zeichnung& z,
  328. UIMLContainer& generalFactory) override;
  329. DLLEXPORT void layout(XML::Element& element,
  330. Zeichnung& z,
  331. int pWidth,
  332. int pHeight,
  333. UIMLContainer& generalLayouter) override;
  334. };
  335. class UIMLTable : public UIMLElement
  336. {
  337. public:
  338. DLLEXPORT UIMLTable();
  339. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  340. DLLEXPORT Zeichnung* parseElement(
  341. XML::Element& element, UIMLContainer& generalFactory) override;
  342. DLLEXPORT bool updateElement(XML::Element& element,
  343. Zeichnung& z,
  344. UIMLContainer& generalFactory) override;
  345. DLLEXPORT void layout(XML::Element& element,
  346. Zeichnung& z,
  347. int pWidth,
  348. int pHeight,
  349. UIMLContainer& generalLayouter) override;
  350. virtual XML::Editor getChildren(XML::Element& element) override;
  351. };
  352. /**
  353. creates a Fenster instance
  354. tag: &lt;frame&gt;
  355. additional attributes to UIMLElement:
  356. - (string) title: the title of the window
  357. - (int) title-height: sets the height of the title
  358. - (int) title-font-size: sets the font size of the title
  359. - (int) title-text-color: sets the color of the title. format:
  360. 0xAARRGGBB
  361. - (string) display: specifies the position of child elements
  362. + column: sets the position of child elements vertically below each
  363. other. any align attribute will overwrite this behaviour.
  364. + row: sets the position of the child elements horizontally beneath
  365. each other. any align attribute will overwrite this behaviour.
  366. - (int) gap: the space between each child element. Only valid if display
  367. is specified.
  368. + (int)%: specifies the y coordinate in percentage of parentHeight
  369. + (int): specifies the y coordinate in pixel
  370. + (expression): calculates the width from an expression that contains
  371. values concatenated by the operators +, -, / or *
  372. - (string) vScroll: adds a vertical scroll bar
  373. + auto: the max vertical scroll size is set to the needed child
  374. elements height
  375. - (int) hScroll: adds a hotizontal scroll bar
  376. + auto: the max horizontal scroll size is set to the needed child
  377. elements width
  378. - (string) width: sets the with
  379. + auto: setzt the width to the calculated needed width
  380. - (string) height: sets the height
  381. + auto: setzt the height to the calculated needed height
  382. */
  383. class UIMLFrame : public UIMLElement
  384. {
  385. public:
  386. DLLEXPORT UIMLFrame();
  387. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  388. DLLEXPORT Zeichnung* parseElement(
  389. XML::Element& element, UIMLContainer& generalFactory) override;
  390. DLLEXPORT bool updateElement(XML::Element& element,
  391. Zeichnung& z,
  392. UIMLContainer& generalFactory) override;
  393. DLLEXPORT void layout(XML::Element& element,
  394. Zeichnung& z,
  395. int pWidth,
  396. int pHeight,
  397. UIMLContainer& generalLayouter) override;
  398. };
  399. /**
  400. Converts uiml views to Zeichnung implementations and renders them.
  401. The attribute id of each element has to be unique or absent.
  402. All implementations of UIMLElement in the framework are supported by
  403. default. Custom elements can be added by calling addKnownElement with a
  404. custom UIMLElement implementation. Look at the documentation of specific
  405. UIMLElement implementations to view all supported attributes.
  406. example:
  407. \code
  408. <view>
  409. <textfield id="element_at_top_left" align-left="start",
  410. align-top="start", margin-left="5", margin-top="5" width="90%"
  411. height="30"/>
  412. <table id="element_below_textfield" align-left="start",
  413. aliign-top="element_at_top_left", margin-left="5", margin-top="5"
  414. width="90%" height="300">
  415. <tr>
  416. <button id="a_button_in_a_table"/>
  417. <textfield id="a_textfield_in_a_table"/>
  418. </tr>
  419. </table>
  420. </view>
  421. \endcode
  422. */
  423. class UIMLView : public ZeichnungHintergrund,
  424. public UIMLContainer
  425. {
  426. public:
  427. class Style : public ZeichnungHintergrund::Style
  428. {
  429. public:
  430. /// <summary>
  431. /// if this style is set, then the mause event action will be
  432. /// overwritten for all member views. The onMemberMouseEvent
  433. /// function will be executed instead. The style needs to be set
  434. /// before the uiml is parsed
  435. /// </summary>
  436. static const int GlobalMouseEvent = 0x01000;
  437. /// <summary>
  438. /// if this style is set, then the keyvord event action will be
  439. /// overwritten for all member views. The onMemberKeybordEvent
  440. /// function will be executed instead. The style needs to be set
  441. /// before the uiml is parsed
  442. /// </summary>
  443. static const int GlobalTastaturEvent = 0x01000;
  444. };
  445. private:
  446. RCArray<UIMLElement> knownElements;
  447. UIInit init;
  448. RCTrie<Zeichnung>* members;
  449. Array<Zeichnung*> memberList;
  450. RCArray<Text> idList;
  451. XML::Element* dom;
  452. int nextId;
  453. std::function<bool(
  454. XML::Element& element, Zeichnung& member, MausEreignis me)>
  455. onMemberMouseEvent;
  456. std::function<bool(
  457. XML::Element& element, Zeichnung& member, TastaturEreignis te)>
  458. onMemberKeyboardEvent;
  459. //! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch
  460. //! aufgerufen. \param me Das Ereignis
  461. DLLEXPORT virtual void doMausEreignis(
  462. MausEreignis& me, bool userRet) override;
  463. public:
  464. //! Erstellt eine UIML View
  465. DLLEXPORT UIMLView();
  466. //! Erstellt eine UIML View zu einem UIML Text
  467. //! \param uiml Ein xml element gemät des KSG UIML standarts
  468. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips
  469. //! angezeigt werden sollen \param schrift Die schrift mit der der Text
  470. //! gezeichnet werden soll
  471. DLLEXPORT UIMLView(XML::Element* uiml, UIInit& init);
  472. //! Erstellt eine UIML View zu einem UIML Text
  473. //! \param uiml Ein xml text gemät des KSG UIML standarts
  474. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips
  475. //! angezeigt werden sollen \param schrift Die schrift mit der der Text
  476. //! gezeichnet werden soll
  477. DLLEXPORT UIMLView(Text uiml, UIInit& init);
  478. DLLEXPORT ~UIMLView();
  479. /// <summary>
  480. /// sets a function that is executed if a mouse event on a member view
  481. /// occures and the style Style::GlobalMouseEvent is set.
  482. /// The mouse event will be ignored by the view if false is returned.
  483. /// </summary>
  484. /// <param name="onEventAction">the function to execute if a mouse event
  485. /// occures</param>
  486. DLLEXPORT void setOnMemberMouseEvent(std::function<bool(
  487. XML::Element& element, Zeichnung& member, MausEreignis me)>
  488. onEventAction);
  489. /// <summary>
  490. /// sets a function that is executed if a mouse event on a member view
  491. /// occures and the style Style::GlobalTastaturEvent is set.
  492. /// The mouse event will be ignored by the view if false is returned.
  493. /// </summary>
  494. /// <param name="onEventAction">the function to execute if a mouse event
  495. /// occures</param>
  496. DLLEXPORT void setOnMemberKeyboardEvent(std::function<bool(
  497. XML::Element& element, Zeichnung& member, TastaturEreignis te)>
  498. onEventAction);
  499. //! entfernt alle bekannten elemente, die im uiml verwendet werden
  500. //! können
  501. DLLEXPORT void removeAllKnownElements();
  502. //! fügt ein neues bekanntes element hinzu, dass danach im uiml
  503. //! verwendet werden kann.
  504. DLLEXPORT void addKnownElement(UIMLElement* element);
  505. //! prüft, ob ein xml Element ein bekanntes uiml Element ist;
  506. DLLEXPORT bool isKnownElement(XML::Element* zElement);
  507. //! setzt den inhalt der view
  508. //! \param uiml Ein xml element gemät des KSG UIML standarts
  509. DLLEXPORT void setUIML(XML::Element* uiml);
  510. //! setzt den inhalt der view
  511. //! \param uiml Ein xml text gemät des KSG UIML standarts
  512. DLLEXPORT void setUIML(Text uiml);
  513. //! aktualisiert alles zeichnungen gemäß den spezifikationen in UIML.
  514. //! Zeichnungen von entfernten elementen werden entfernt und neue
  515. //! Zeichnungen für neue Elemente werden erstellt
  516. DLLEXPORT void update();
  517. //! aktualisiert größe und position aller Zeichnungen gemäß den
  518. //! spezifikationen in UIML
  519. DLLEXPORT void layout();
  520. //! fügt ein element hinzu
  521. //! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das
  522. //! neue Objekt darstellt \return id des neuen Elements
  523. DLLEXPORT Text addMember(Text uiml);
  524. //! fügt ein element zu einem Elternelement hinzu (funktioniert momentan
  525. //! nur mit frame Objekten) \param uiml Ein xml text gemät des KSG UIML
  526. //! standarts, welcher das neue Objekt darstellt \return id des neuen
  527. //! Elements
  528. DLLEXPORT Text addMember(Text uiml, Text parentId);
  529. //! entfernt ein element
  530. //! \param id id des Elements
  531. DLLEXPORT void removeMember(Text id);
  532. //! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
  533. //! \param id die id der Zeichnung
  534. DLLEXPORT Zeichnung* zZeichnungById(const char* id) override;
  535. //! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
  536. //! \param id die id der Zeichnung
  537. DLLEXPORT Zeichnung* getZeichnungById(const char* id) override;
  538. //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch
  539. //! aufgerufen \param te Das Ereignis
  540. DLLEXPORT virtual void doTastaturEreignis(TastaturEreignis& te);
  541. //! Updated den Zeichenhintergrund
  542. //! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten
  543. //! Aufruf dieser Funktion verstrichen ist \return 1, wenn das Bild neu
  544. //! gezeichnet werden muss. 0 sonnst
  545. DLLEXPORT bool tick(double tickVal) override;
  546. //! Zeichnet den Hintergrund eines Zeichnunges nach rObj
  547. DLLEXPORT void render(Bild& rObj) override;
  548. //! Gibt den Dom Tree ohne erhöhten reference counter zurück
  549. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von
  550. //! attributen einzelner elemente sind erlaubt)
  551. DLLEXPORT XML::Element* zDom() const;
  552. //! Gibt den Dom Tree zurück
  553. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von
  554. //! attributen einzelner elemente sind erlaubt)
  555. DLLEXPORT XML::Element* getDom() const;
  556. DLLEXPORT bool isApplicableFor(XML::Element& element) override;
  557. DLLEXPORT Zeichnung* parseElement(
  558. XML::Element& element, UIMLContainer& generalFactory) override;
  559. DLLEXPORT bool updateElement(XML::Element& element,
  560. Zeichnung& z,
  561. UIMLContainer& generalFactory) override;
  562. DLLEXPORT void layout(XML::Element& element,
  563. Zeichnung& z,
  564. int pWidth,
  565. int pHeight,
  566. UIMLContainer& generalLayouter) override;
  567. DLLEXPORT Text getZeichnungId(Zeichnung& z) override;
  568. DLLEXPORT void removeZeichnung(Zeichnung& z) override;
  569. DLLEXPORT bool registerZeichnung(const char* id, Zeichnung* z) override;
  570. DLLEXPORT const UIInit& getFactory() override;
  571. //! calculates the needed size for all content elements to be visible
  572. DLLEXPORT Punkt calculateContentSize();
  573. };
  574. } // namespace Framework