UIMLView.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. \code
  57. <view>
  58. <textfield id="element_at_top_left" align-left="start", align-top="start", margin-left="5", margin-top="5" width="90%" height="30"/>
  59. <table id="element_below_textfield" align-left="start", aliign-top="element_at_top_left", margin-left="5", margin-top="5" width="90%" height="300">
  60. <tr>
  61. <button id="a_button_in_a_table"/>
  62. <textfield id="a_textfield_in_a_table"/>
  63. </tr>
  64. </table>
  65. </view>
  66. \endcode
  67. */
  68. class UIMLView : public ZeichnungHintergrund
  69. {
  70. private:
  71. UIInit init;
  72. Trie< Zeichnung > *members;
  73. XML::Element *dom;
  74. int nextId;
  75. void parseTable( Iterator<XML::Element*> childs, ObjTabelle *table );
  76. void parseFrame( Iterator<XML::Element*> childs, Fenster *frame );
  77. Zeichnung *parseElement( XML::Element *e );
  78. void layout( XML::Element *e, int pWidth, int pHeight );
  79. //! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
  80. //! \param me Das Ereignis
  81. DLLEXPORT virtual void doMausEreignis( MausEreignis &me, bool userRet ) override;
  82. public:
  83. //! Erstellt eine UIML View
  84. DLLEXPORT UIMLView();
  85. //! Erstellt eine UIML View zu einem UIML Text
  86. //! \param uiml Ein xml element gemät des KSG UIML standarts
  87. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips angezeigt werden sollen
  88. //! \param schrift Die schrift mit der der Text gezeichnet werden soll
  89. DLLEXPORT UIMLView( XML::Element *uiml, UIInit &init );
  90. //! Erstellt eine UIML View zu einem UIML Text
  91. //! \param uiml Ein xml text gemät des KSG UIML standarts
  92. //! \param screen Ein zeiger für den Belschirm auf dem die tooltips angezeigt werden sollen
  93. //! \param schrift Die schrift mit der der Text gezeichnet werden soll
  94. DLLEXPORT UIMLView( Text uiml, UIInit &init );
  95. DLLEXPORT ~UIMLView();
  96. //! setzt den inhalt der view
  97. //! \param uiml Ein xml element gemät des KSG UIML standarts
  98. DLLEXPORT void setUIML( XML::Element *uiml );
  99. //! setzt den inhalt der view
  100. //! \param uiml Ein xml text gemät des KSG UIML standarts
  101. DLLEXPORT void setUIML( Text uiml );
  102. //! aktualisiert größe und position aller Zeichnungen gemäß den spezifikationen in UIML
  103. DLLEXPORT void layout();
  104. //! fügt ein element hinzu
  105. //! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das neue Objekt darstellt
  106. //! \return id des neuen Elements
  107. DLLEXPORT Text addMember( Text uiml );
  108. //! fügt ein element zu einem Elternelement hinzu (funktioniert momentan nur mit frame Objekten)
  109. //! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das neue Objekt darstellt
  110. //! \return id des neuen Elements
  111. DLLEXPORT Text addMember( Text uiml, Text parentId );
  112. //! entfernt ein element
  113. //! \param id id des Elements
  114. DLLEXPORT void removeMember( Text id );
  115. //! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
  116. //! \param id die id der Zeichnung
  117. DLLEXPORT Zeichnung *zZeichnung( Text id );
  118. //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
  119. //! \param te Das Ereignis
  120. DLLEXPORT virtual void doTastaturEreignis( TastaturEreignis &te );
  121. //! Updated den Zeichenhintergrund
  122. //! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
  123. //! \return 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
  124. DLLEXPORT bool tick( double tickVal ) override;
  125. //! Zeichnet den Hintergrund eines Zeichnunges nach rObj
  126. DLLEXPORT void render( Bild &rObj ) override;
  127. //! Gibt den Dom Tree ohne erhöhten reference counter zurück
  128. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von attributen einzelner elemente sind erlaubt)
  129. DLLEXPORT XML::Element *zDom() const;
  130. //! Gibt den Dom Tree zurück
  131. //! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von attributen einzelner elemente sind erlaubt)
  132. DLLEXPORT XML::Element *getDom() const;
  133. };
  134. }