Liste.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. #ifndef Liste_H
  2. #define Liste_H
  3. #include "Zeichnung.h"
  4. #include "Array.h"
  5. namespace Framework
  6. {
  7. class Rahmen; //! Rahmen.h
  8. class AlphaFeld; //! AlphaFeld.h
  9. class Bild; //! Bild.h
  10. class Text; //! Text.h
  11. class TextFeld; //! TextFeld.h
  12. class VScrollBar; //! Scroll.h
  13. struct TastaturEreignis; //! TastaturEreignis.h
  14. struct MausEreignis; //! MausEreignis.h
  15. class Schrift; //! Schrift.h
  16. class AuswahlListe; //! aus dieser datei
  17. //! Eine Zeichnung des 2D GUI Frameworks, die eine Liste darstellt, aus der der Benutzer Elemente aus und abwählen kann
  18. class AuswahlListe : public ZeichnungHintergrund
  19. {
  20. public:
  21. class Style : public ZeichnungHintergrund::Style
  22. {
  23. public:
  24. const static __int64 FeldRahmen = 0x0001000; //! Legt fest, ob die Einträge der Liste einen Rahmen haben
  25. const static __int64 FeldHintergrund = 0x0002000; //! Legt fest, ob die Einträge einen Hintergrund haben
  26. const static __int64 FeldHBild = 0x0004000; //! Legt fest, ob die Einträge ein Hintergrund Bild haben
  27. const static __int64 FeldHAlpha = 0x0008000; //! Legt fest, ob beim zeichnen der Eintrag Hintergründe alpha blending verwendet werden soll
  28. const static __int64 FeldBuffer = 0x0010000; //! Legt fest, ob die Einträge einen Farbübergang besitzen
  29. const static __int64 AuswahlHintergrund = 0x0020000; //! Legt fest, ob die ausgewählten Einträge einen Hintergrund haben
  30. const static __int64 AuswahlHBild = 0x0040000; //! Legt fest, ob die ausgewählten einträge ein Bild als Hintergrund haben
  31. const static __int64 AuswahlHAlpha = 0x0080000; //! Legt fest, ob für das Zeichnen der Hintergründe der ausgewählten Einträge alpha blending verwendet wird
  32. const static __int64 AuswahlBuffer = 0x0100000; //! Legt fest, ob die ausgewählten Einträge einen Farbübergang besitzen
  33. const static __int64 AuswahlRahmen = 0x0200000; //! Legt fest, ob die ausgewählten Einträge einen Rahmen besitzen
  34. const static __int64 MultiStyled = 0x0400000; //! Legt fest, ob jeder Eintrag seine eigenen Hintergrund, Farbübergang und Rahmen hat, fals er ausgewählt ist
  35. const static __int64 MultiSelect = 0x0800000; //! Legt fest, das mehrere Einträge gleichzeitig ausgewählt sein können
  36. const static __int64 Selected = 0x1000000; //! Legt fest, ob ein bestimmter Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde.
  37. const static __int64 Normal = Sichtbar | Erlaubt | Rahmen | FeldHAlpha | FeldHintergrund | FeldRahmen | AuswahlBuffer | AuswahlRahmen; //! Vereint die Flags Sichtbar, Erlaubt, Rahmen, FeldHAlpha, FeldHintergrund, FeldRahmen, AuswahlBuffer, AuswahlRahmen
  38. };
  39. private:
  40. RCArray< TextFeld >* tfListe;
  41. int auswahl;
  42. int ahFarbe;
  43. Bild* ahBild;
  44. AlphaFeld* aBuffer;
  45. Rahmen* aRahmen;
  46. Array< __int64 >* styles;
  47. Array< int >* ahFarbeListe;
  48. RCArray< Bild >* ahBildListe;
  49. RCArray< AlphaFeld >* aBufferListe;
  50. RCArray< Rahmen >* aRahmenListe;
  51. Schrift* schrift;
  52. //! Verarbeitet Tastatur Nachrichten
  53. //! \param me Das Ereignis, was durch die Tastatureingabe ausgelößt wurde
  54. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  55. DLLEXPORT bool hatStyle(int styleSet, int styleCheck) const;
  56. public:
  57. //! Konstruktor
  58. DLLEXPORT AuswahlListe();
  59. //! Destruktor
  60. DLLEXPORT virtual ~AuswahlListe();
  61. //! Aktualisiert die Styles, größe und Position der Einträge
  62. DLLEXPORT void update();
  63. //! Fügt einen Eintrag hinzu
  64. //! \param txt Der Text des Eintrags
  65. DLLEXPORT void addEintrag(Text* txt);
  66. //! Fügt einen Eintrag hinzu
  67. //! \param txt Der Text des Eintrags
  68. DLLEXPORT void addEintrag(const char* txt);
  69. //! Fügt einen zeiger auf einen Eintrag hinzu
  70. //! \param tf Das TextFeld, mit dem der Eintrag gezeichnet wird
  71. DLLEXPORT void addEintragZ(TextFeld* tf);
  72. //! Fügt einen Eintrag an einer bestimmten Position hinzu
  73. //! \param pos Der Index des neuen Eintrags
  74. //! \param txt Der Text des Eintrags
  75. DLLEXPORT void addEintrag(int pos, Text* txt);
  76. //! Fügt einen Eintrag an einer bestimmten Position hinzu
  77. //! \param pos Der Index des neuen Eintrags
  78. //! \param txt Der Text des Eintrags
  79. DLLEXPORT void addEintrag(int pos, const char* txt);
  80. //! Fügt einen zeiger auf einen Eintrag an einer bestimmten Position hinzu
  81. //! \param pos Der Index des neuen Eintrags
  82. //! \param tf Das TextFeld, mit dem der Eintrag gezeichnet wird
  83. DLLEXPORT void addEintragZ(int pos, TextFeld* tf);
  84. //! Ändert einen Eintrag
  85. //! \param pos Der Index des Eintrags
  86. //! \param txt Der neue Text des Eintrags
  87. DLLEXPORT void setEintrag(int pos, Text* txt);
  88. //! Ändert einen Eintrag
  89. //! \param pos Der Index des Eintrags
  90. //! \param txt Der neue Text des Eintrags
  91. DLLEXPORT void setEintrag(int pos, const char* txt);
  92. //! Ändert den Zeiger eines Eintrags
  93. //! \param pos Der Index des Eintrags
  94. //! \param tf Der neue Eintrag
  95. DLLEXPORT void setEintragZ(int pos, TextFeld* tf);
  96. //! Vertauscht die Positionen zweier Einträge
  97. //! \param vpos Der Index des ersten Eintrags
  98. //! \param npos Der Index des zweiten Eintrags
  99. DLLEXPORT void tauschEintragPos(int vpos, int npos);
  100. //! Löscht einen Eintrag
  101. //! pos: Der Index des Eintrags
  102. DLLEXPORT void removeEintrag(int pos);
  103. //! Setzt die verwendete Schrift
  104. //! \param schrift Die Schrift
  105. DLLEXPORT void setSchriftZ(Schrift* schrift);
  106. //! Scrollt zu einem bestimmen Eintrag
  107. //! \param eintrag Der Index des Eintrags
  108. DLLEXPORT void setVScrollZuEintrag(int eintrag);
  109. //! Aktualisiert die maximale Scroll Höhe indem die Höhe aller Einträge addiert wird
  110. DLLEXPORT void updateVScroll();
  111. //! Setzt den Zeiger auf den Rahmen, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  112. //! \param rahmen Der Rahmen
  113. DLLEXPORT void setALRZ(Rahmen* rahmen);
  114. //! Setzt die Breite des Rahmens, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  115. //! \param br Die Breite in Pixeln
  116. DLLEXPORT void setALRBreite(int br);
  117. //! Setzt die Farbe des Rahmens, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  118. //! \param fc Die Farbe im A8R8G8B8 Format
  119. DLLEXPORT void setALRFarbe(int fc);
  120. //! Setzt den Zeiger auf den Farbübergnag, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  121. //! \param buffer Der Farbübergang
  122. DLLEXPORT void setAAFZ(AlphaFeld* buffer);
  123. //! Setzt die Stärke des Farbübergnags, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  124. //! \param st Die Stärke
  125. DLLEXPORT void setAAFStrength(int st);
  126. //! Setzt die Farbe des Farbübergnags, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  127. //! \param fc Die Farbe im A8R8G8B8 Format
  128. DLLEXPORT void setAAFFarbe(int fc);
  129. //! Setzt das Hintergrund Bild durch kopieren, das bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  130. //! \param bild Das Bild, das kopiert werden soll
  131. DLLEXPORT void setAHBild(Bild* bild);
  132. //! Setzt einen Zeiger auf das Hintergrund Bild, das bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  133. //! \param bild Das Bild, das kopiert werden soll
  134. DLLEXPORT void setAHBildZ(Bild* bild);
  135. //! Setzt die Hintergrund Farbe, die bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  136. //! \param fc Die Farbe im A8R8G8B8 Format
  137. DLLEXPORT void setAHFarbe(int fc);
  138. //! Setzt den Zeiger auf den Rahmen, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  139. //! \param pos Der Index des Eintrags
  140. //! \param rahmen Der Rahmen
  141. DLLEXPORT void setALRZ(int pos, Rahmen* rahmen);
  142. //! Setzt die Breite des Rahmens, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  143. //! \param pos Der Index des Eintrags
  144. //! \param br Die Breite in Pixeln
  145. DLLEXPORT void setALRBreite(int pos, int br);
  146. //! Setzt die Farbe des Rahmens, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  147. //! \param pos Der Index des Eintrags
  148. //! \param fc Die Farbe im A8R8G8B8 Format
  149. DLLEXPORT void setALRFarbe(int pos, int fc);
  150. //! Setzt den Zeiger auf den Farbübergnag, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  151. //! \param pos Der Index des Eintrags
  152. //! \param buffer Der Farbübergang
  153. DLLEXPORT void setAAFZ(int pos, AlphaFeld* buffer);
  154. //! Setzt die Stärke des Farbübergnags, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  155. //! \param pos Der Index des Eintrags
  156. //! \param st Die Stärke
  157. DLLEXPORT void setAAFStrength(int pos, int st);
  158. //! Setzt die Farbe des Farbübergnags, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  159. //! \param pos Der Index des Eintrags
  160. //! \param fc Die Farbe im A8R8G8B8 Format
  161. DLLEXPORT void setAAFFarbe(int pos, int fc);
  162. //! Setzt das Hintergrund Bild durch kopieren, das bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  163. //! \param pos Der Index des Eintrags
  164. //! \param bild Das Bild, das kopiert werden soll
  165. DLLEXPORT void setAHBild(int pos, Bild* bild);
  166. //! Setzt einen Zeiger auf das Hintergrund Bild, das bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  167. //! \param pos Der Index des Eintrags
  168. //! \param bild Das Bild, das kopiert werden soll
  169. DLLEXPORT void setAHBildZ(int pos, Bild* bild);
  170. //! Setzt die Hintergrund Farbe, die bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  171. //! \param pos Der Index des Eintrags
  172. //! \param fc Die Farbe im A8R8G8B8 Format
  173. DLLEXPORT void setAHFarbe(int pos, int fc);
  174. //! Setzt den Style eines Eintrags, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  175. //! \param pos Der Index des Eintrags
  176. //! \param style Der neue Style
  177. DLLEXPORT void setMsStyle(int pos, __int64 style);
  178. //! Ändert den Style eines Eintrags, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  179. //! \param pos Der Index des Eintrags
  180. //! \param style Der Style
  181. //! add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll
  182. DLLEXPORT void setMsStyle(int pos, __int64 style, bool add_remove);
  183. //! Fügt Styles zu einem Eintrag hinzu, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  184. //! \param pos Der Index des Eintrags
  185. //! \param style Der Style, der hinzugefügt werden soll
  186. DLLEXPORT void addMsStyle(int pos, __int64 style);
  187. //! Entfernt Styles von einem Eintrag, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  188. //! \param pos Der Index des Eintrags
  189. //! \param style Der Style, der entfernt werden soll
  190. DLLEXPORT void removeMsStyle(int pos, __int64 style);
  191. //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
  192. //! \param te Das Ereignis
  193. DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override;
  194. //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  195. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  196. DLLEXPORT void render(Bild& zRObj) override;
  197. //! Gibt den Index eines Eintrags zurück, auf den die Maus zeigt
  198. //! \param my Die Position der Maus auf der Y Achse basierend auf dem oberend Rand der Liste
  199. DLLEXPORT int getKlickEintrag(int my);
  200. //! Wählt einen Eintrag aus
  201. //! \param ausw Der Index des Eintrags
  202. DLLEXPORT void setAuswahl(int ausw);
  203. //! Wählt alle ausgewählten Einträge ab
  204. DLLEXPORT void deSelect();
  205. //! Gibt die Anzahl an Einträgen zurück
  206. DLLEXPORT int getEintragAnzahl() const;
  207. //! Gibt den Index des ausgewählten Eintrags zurück, fals MultiSelect nicht gesetzt ist. Wenn MultiSelect gesetzt wurde, kann die Auswahl eines Eintrags mit hatMsStyle( Eintrag Index, AuswahlListe::Style::Ausgewählt ) geprüft werden
  208. DLLEXPORT int getAuswahl() const;
  209. //! Gibt den Index eines Eintrags zurück
  210. //! \param eintragText Der Text des Eintrags
  211. DLLEXPORT int getEintragPos(Text* eintragText);
  212. //! Gibt einen Eintrag zurück
  213. //! \param pos Der Index des Eintrags
  214. DLLEXPORT TextFeld* getEintrag(int pos) const;
  215. //! Gibt einen Eintrag ohne erhöhten reference Counter zurück
  216. //! \param pos Der Index des Eintrags
  217. DLLEXPORT TextFeld* zEintrag(int pos) const;
  218. //! Gibt den Rahmen zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  219. DLLEXPORT Rahmen* getARahmen() const;
  220. //! Gibt den Rahmen ohne erhöhten Reference Counter zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  221. DLLEXPORT Rahmen* zARahmen() const;
  222. //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurück, die für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  223. DLLEXPORT int getAHFarbe() const;
  224. //! Gibt das Hintergrund Bild zurück, das für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  225. DLLEXPORT Bild* getAHBild() const;
  226. //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück, das für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  227. DLLEXPORT Bild* zAHBild() const;
  228. //! Gibt den Farbverlauf zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  229. DLLEXPORT AlphaFeld* getABuffer() const;
  230. //! Gibt den Farbverlauf ohne erhöhten Reference Counter zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde
  231. DLLEXPORT AlphaFeld* zABuffer() const;
  232. //! Gibt den Rahmen zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  233. DLLEXPORT Rahmen* getARahmen(int pos) const;
  234. //! Gibt den Rahmen ohne erhöhten Reference Counter zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  235. DLLEXPORT Rahmen* zARahmen(int pos) const;
  236. //! Gibt die Hintegrrund Farbe im A8R8G8B8 Format zurück, die für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  237. DLLEXPORT int getAHFarbe(int pos) const;
  238. //! Gibt das Hintergrund Bild zurück, das für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  239. DLLEXPORT Bild* getAHBild(int pos) const;
  240. //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück, das für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  241. DLLEXPORT Bild* zAHBild(int pos) const;
  242. //! Gibt den Farbübergang zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  243. DLLEXPORT AlphaFeld* getABuffer(int pos) const;
  244. //! Gibt den Farbübergang ohne erhöhten Reference Counter zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  245. DLLEXPORT AlphaFeld* zABuffer(int pos) const;
  246. //! Überprüft, ob für einen Bestimmten Eintarg betimmte Styles gesetzt wurden, falls MultiStyled gesetzt wurde. Überprüft auch, ob ein Eintrag ausgewählt wurde, falls MultiSelect gesetzt wurde
  247. //! \param pos Der Index des Eintrags
  248. //! \param style Die zu prüfenden Styles
  249. DLLEXPORT inline bool hatMsStyle(int pos, __int64 style) const;
  250. //! Überprüft, ob für einen Bestimmten Eintarg betimmte Styles nicht gesetzt wurden, falls MultiStyled gesetzt wurde. Überprüft auch, ob ein Eintrag nicht ausgewählt wurde, falls MultiSelect gesetzt wurde
  251. //! \param pos Der Index des Eintrags
  252. //! \param style Die zu prüfenden Styles
  253. DLLEXPORT inline bool hatMsStyleNicht(int pos, __int64 style) const;
  254. };
  255. }
  256. #endif