UIMLView.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #pragma once
  2. #include "Zeichnung.h"
  3. #include "Trie.h"
  4. #include "Array.h"
  5. #include "UIInitialization.h"
  6. namespace Framework
  7. {
  8. class Text;
  9. class ObjTabelle;
  10. class Schrift;
  11. class Bildschirm;
  12. namespace XML
  13. {
  14. class Element;
  15. }
  16. /**
  17. KSG UIML Standart
  18. possible XML elements:
  19. - uimlview (the root element of uiml),
  20. - class (only as direct child of uimlview),
  21. - textfield,
  22. - button,
  23. - check, (KontrollKnopf)
  24. - text,
  25. - textarea,
  26. - table (allowed child elements: tr),
  27. - tr (allowed child elements: textfield, button, table, text, textarea, frame),
  28. - frame (allowed child elements: textfield, button, table, text, textarea, frame).
  29. possible global XML attributes:
  30. - id (string should be unique),
  31. - x (integer, optional % char at end),
  32. - y (integer, optional % char at end),
  33. - width (integer, optional % char at end),
  34. - height (integer, optional % char at end),
  35. - margin (integer, optional % char at end),
  36. - margin-left (integer, optional % char at end),
  37. - margin-top (integer, optional % char at end),
  38. - margin-right (integer, optional % char at end),
  39. - margin-bottom (integer, optional % char at end),
  40. - align-left (string (id values of other elements or keywords: start, end)),
  41. - align-top (string (id values of other elements or keywords: start, end)),
  42. - align-bottom ((string (id values of other elements or keywords: start, end)),
  43. - align-right (string (id values of other elements or keywords: start, end)),
  44. - tooltip (string),
  45. - style (hex __int64),
  46. - class (string (id of class element))
  47. attribute die sich gegenseitig ausschließen:
  48. - align-left / align-right
  49. - align-top / align-bottom
  50. spezific attributes:
  51. - font-size (textfield, text, textarea, button)
  52. - text-align (textfield, text, textarea)
  53. - text-align-horizontal (textfield, text, textarea)
  54. - text-align-vertical (textfield, text, textarea)
  55. example:
  56. \<view\>
  57. \<textfield id="element_at_top_left" align-left="start", align-top="start", margin-left="5", margin-top="5" width="90%" height="30"/\>
  58. \<table id="element_below_textfield" align-left="start", aliign-top="element_at_top_left", margin-left="5", margin-top="5" width="90%" height="300"\>
  59. \<tr\>
  60. \<button id="a_button_in_a_table"/\>
  61. \<textfield id="a_textfield_in_a_table"/\>
  62. \</tr\>
  63. \</table\>
  64. \</view\>
  65. */
  66. class UIMLView : public ZeichnungHintergrund
  67. {
  68. private:
  69. UIInit init;
  70. Trie< Zeichnung > *members;
  71. XML::Element *dom;
  72. int nextId;
  73. void parseTable( Iterator<XML::Element*> childs, ObjTabelle *table );
  74. void parseFrame( Iterator<XML::Element*> childs, Fenster *frame );
  75. Zeichnung *parseElement( XML::Element *e );
  76. void layout( XML::Element *e, int pWidth, int pHeight );
  77. //! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
  78. //! \param me Das Ereignis
  79. DLLEXPORT virtual void doMausEreignis( MausEreignis &me, bool userRet ) override;
  80. public:
  81. //! Erstellt eine UIML View
  82. DLLEXPORT UIMLView();
  83. //! Erstellt eine UIML View zu einem UIML Text
  84. //! \param uiml Ein xml element gemät des KSG UIML standarts
  85. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips angezeigt werden sollen
  86. //! \param schrift Die schrift mit der der Text gezeichnet werden soll
  87. DLLEXPORT UIMLView( XML::Element *uiml, UIInit &init );
  88. //! Erstellt eine UIML View zu einem UIML Text
  89. //! \param uiml Ein xml text gemät des KSG UIML standarts
  90. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips angezeigt werden sollen
  91. //! \param schrift Die schrift mit der der Text gezeichnet werden soll
  92. DLLEXPORT UIMLView( Text uiml, UIInit &init );
  93. DLLEXPORT ~UIMLView();
  94. //! setzt den inhalt der view
  95. //! \param uiml Ein xml element gemät des KSG UIML standarts
  96. DLLEXPORT void setUIML( XML::Element *uiml );
  97. //! setzt den inhalt der view
  98. //! \param uiml Ein xml text gemät des KSG UIML standarts
  99. DLLEXPORT void setUIML( Text uiml );
  100. //! aktualisiert größe und position aller Zeichnungen gemäß den spezifikationen in UIML
  101. DLLEXPORT void layout();
  102. //! fügt ein element hinzu
  103. //! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das neue Objekt darstellt
  104. //! \return id des neuen Elements
  105. DLLEXPORT Text addMember( Text uiml );
  106. //! fügt ein element zu einem Elternelement hinzu (funktioniert momentan nur mit frame Objekten)
  107. //! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das neue Objekt darstellt
  108. //! \return id des neuen Elements
  109. DLLEXPORT Text addMember( Text uiml, Text parentId );
  110. //! entfernt ein element
  111. //! \param id id des Elements
  112. DLLEXPORT void removeMember( Text id );
  113. //! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
  114. //! \param id die id der Zeichnung
  115. DLLEXPORT Zeichnung *zZeichnung( Text id );
  116. //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
  117. //! \param te Das Ereignis
  118. DLLEXPORT virtual void doTastaturEreignis( TastaturEreignis &te );
  119. //! Updated den Zeichenhintergrund
  120. //! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
  121. //! \return 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
  122. DLLEXPORT bool tick( double tickVal ) override;
  123. //! Zeichnet den Hintergrund eines Zeichnunges nach rObj
  124. DLLEXPORT void render( Bild &rObj ) override;
  125. //! Gibt den Dom Tree ohne erhöhten reference counter zurück
  126. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von attributen einzelner elemente sind erlaubt)
  127. DLLEXPORT XML::Element *zDom() const;
  128. //! Gibt den Dom Tree zurück
  129. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von attributen einzelner elemente sind erlaubt)
  130. DLLEXPORT XML::Element *getDom() const;
  131. };
  132. }