UIMLView.h 27 KB

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