Liste.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  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 entries, 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. int ref;
  53. public:
  54. // Konstruktor
  55. __declspec( dllexport ) AuswahlListe();
  56. // Destruktor
  57. __declspec( dllexport ) virtual ~AuswahlListe();
  58. // Aktualisiert die Styles, größe und Position der Einträge
  59. __declspec( dllexport ) void update();
  60. // Fügt einen Eintrag hinzu
  61. // txt: Der Text des Eintrags
  62. __declspec( dllexport ) void addEintrag( Text *txt );
  63. // Fügt einen Eintrag hinzu
  64. // txt: Der Text des Eintrags
  65. __declspec( dllexport ) void addEintrag( const char *txt );
  66. // Fügt einen zeiger auf einen Eintrag hinzu
  67. // tf: Das TextFeld, mit dem der Eintrag gezeichnet wird
  68. __declspec( dllexport ) void addEintragZ( TextFeld *tf );
  69. // Fügt einen Eintrag an einer bestimmten Position hinzu
  70. // pos: Der Index des neuen Eintrags
  71. // txt: Der Text des Eintrags
  72. __declspec( dllexport ) void addEintrag( int pos, Text *txt );
  73. // Fügt einen Eintrag an einer bestimmten Position hinzu
  74. // pos: Der Index des neuen Eintrags
  75. // txt: Der Text des Eintrags
  76. __declspec( dllexport ) void addEintrag( int pos, const char *txt );
  77. // Fügt einen zeiger auf einen Eintrag an einer bestimmten Position hinzu
  78. // pos: Der Index des neuen Eintrags
  79. // tf: Das TextFeld, mit dem der Eintrag gezeichnet wird
  80. __declspec( dllexport ) void addEintragZ( int pos, TextFeld *tf );
  81. // Ändert einen Eintrag
  82. // pos: Der Index des Eintrags
  83. // txt: Der neue Text des Eintrags
  84. __declspec( dllexport ) void setEintrag( int pos, Text *txt );
  85. // Ändert einen Eintrag
  86. // pos: Der Index des Eintrags
  87. // txt: Der neue Text des Eintrags
  88. __declspec( dllexport ) void setEintrag( int pos, unsigned char *txt );
  89. // Ändert den Zeiger eines Eintrags
  90. // pos: Der Index des Eintrags
  91. // tf: Der neue Eintrag
  92. __declspec( dllexport ) void setEintragZ( int pos, TextFeld *tf );
  93. // Vertauscht die Positionen zweier Einträge
  94. // vpos: Der Index des ersten Eintrags
  95. // npos: Der Index des zweiten Eintrags
  96. __declspec( dllexport ) void tauschEintragPos( int vpos, int npos );
  97. // Löscht einen Eintrag
  98. // pos: Der Index des Eintrags
  99. __declspec( dllexport ) void removeEintrag( int pos );
  100. // Setzt die verwendete Schrift
  101. // schrift: Die Schrift
  102. __declspec( dllexport ) void setSchriftZ( Schrift *schrift );
  103. // Scrollt zu einem bestimmen Eintrag
  104. // eintrag: Der Index des Eintrags
  105. __declspec( dllexport ) void setVScrollZuEintrag( int eintrag );
  106. // Aktualisiert die maximale Scroll Höhe indem die Höhe aller Einträge addiert wird
  107. __declspec( dllexport ) void updateVScroll();
  108. // Setzt den Zeiger auf den Rahmen, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  109. // rahmen: Der Rahmen
  110. __declspec( dllexport ) void setALRZ( Rahmen *rahmen );
  111. // Setzt die Breite des Rahmens, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  112. // br: Die Breite in Pixeln
  113. __declspec( dllexport ) void setALRBreite( int br );
  114. // Setzt die Farbe des Rahmens, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  115. // fc: Die Farbe im A8R8G8B8 Format
  116. __declspec( dllexport ) void setALRFarbe( int fc );
  117. // Setzt den Zeiger auf den Farbübergnag, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  118. // buffer: Der Farbübergang
  119. __declspec( dllexport ) void setAAFZ( AlphaFeld *buffer );
  120. // Setzt die Stärke des Farbübergnags, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  121. // st: Die Stärke
  122. __declspec( dllexport ) void setAAFStrength( int st );
  123. // Setzt die Farbe des Farbübergnags, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  124. // fc: Die Farbe im A8R8G8B8 Format
  125. __declspec( dllexport ) void setAAFFarbe( int fc );
  126. // Setzt das Hintergrund Bild durch kopieren, das bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  127. // bild: Das Bild, das kopiert werden soll
  128. __declspec( dllexport ) void setAHBild( Bild *bild );
  129. // Setzt einen Zeiger auf das Hintergrund Bild, das bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  130. // bild: Das Bild, das kopiert werden soll
  131. __declspec( dllexport ) void setAHBildZ( Bild *bild );
  132. // Setzt die Hintergrund Farbe, die bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde
  133. // fc: Die Farbe im A8R8G8B8 Format
  134. __declspec( dllexport ) void setAHFarbe( int fc );
  135. // Setzt den Zeiger auf den Rahmen, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  136. // pos: Der Index des Eintrags
  137. // rahmen: Der Rahmen
  138. __declspec( dllexport ) void setALRZ( int pos, Rahmen *rahmen );
  139. // Setzt die Breite des Rahmens, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  140. // pos: Der Index des Eintrags
  141. // br: Die Breite in Pixeln
  142. __declspec( dllexport ) void setALRBreite( int pos, int br );
  143. // Setzt die Farbe des Rahmens, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  144. // pos: Der Index des Eintrags
  145. // fc: Die Farbe im A8R8G8B8 Format
  146. __declspec( dllexport ) void setALRFarbe( int pos, int fc );
  147. // Setzt den Zeiger auf den Farbübergnag, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  148. // pos: Der Index des Eintrags
  149. // buffer: Der Farbübergang
  150. __declspec( dllexport ) void setAAFZ( int pos, AlphaFeld *buffer );
  151. // Setzt die Stärke des Farbübergnags, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  152. // pos: Der Index des Eintrags
  153. // st: Die Stärke
  154. __declspec( dllexport ) void setAAFStrength( int pos, int st );
  155. // Setzt die Farbe des Farbübergnags, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  156. // pos: Der Index des Eintrags
  157. // fc: Die Farbe im A8R8G8B8 Format
  158. __declspec( dllexport ) void setAAFFarbe( int pos, int fc );
  159. // Setzt das Hintergrund Bild durch kopieren, das bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  160. // pos: Der Index des Eintrags
  161. // bild: Das Bild, das kopiert werden soll
  162. __declspec( dllexport ) void setAHBild( int pos, Bild *bild );
  163. // Setzt einen Zeiger auf das Hintergrund Bild, das bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  164. // pos: Der Index des Eintrags
  165. // bild: Das Bild, das kopiert werden soll
  166. __declspec( dllexport ) void setAHBildZ( int pos, Bild *bild );
  167. // Setzt die Hintergrund Farbe, die bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde
  168. // pos: Der Index des Eintrags
  169. // fc: Die Farbe im A8R8G8B8 Format
  170. __declspec( dllexport ) void setAHFarbe( int pos, int fc );
  171. // Setzt den Style eines Eintrags, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  172. // pos: Der Index des Eintrags
  173. // style: Der neue Style
  174. __declspec( dllexport ) void setMsStyle( int pos, __int64 style );
  175. // Ändert den Style eines Eintrags, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  176. // pos: Der Index des Eintrags
  177. // style: Der Style
  178. // add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll
  179. __declspec( dllexport ) void setMsStyle( int pos, __int64 style, bool add_remove );
  180. // Fügt Styles zu einem Eintrag hinzu, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  181. // pos: Der Index des Eintrags
  182. // style: Der Style, der hinzugefügt werden soll
  183. __declspec( dllexport ) void addMsStyle( int pos, __int64 style );
  184. // Entfernt Styles von einem Eintrag, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde
  185. // pos: Der Index des Eintrags
  186. // style: Der Style, der entfernt werden soll
  187. __declspec( dllexport ) void removeMsStyle( int pos, __int64 style );
  188. // Verarbeitet Tastatur Nachrichten
  189. // me: Das Ereignis, was durch die Tastatureingabe ausgelößt wurde
  190. __declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
  191. // Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
  192. // te: Das Ereignis
  193. __declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te ) override;
  194. // Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  195. // zRObj: Das Bild, in welches gezeichnet werden soll
  196. __declspec( dllexport ) void render( Bild &zRObj ) override;
  197. // Gibt den Index eines Eintrags zurück, auf den die Maus zeigt
  198. // my: Die Position der Maus auf der Y Achse basierend auf dem oberend Rand der Liste
  199. __declspec( dllexport ) int getKlickEintrag( int my );
  200. // Wählt einen Eintrag aus
  201. // ausw: Der Index des Eintrags
  202. __declspec( dllexport ) void setAuswahl( int ausw );
  203. // Wählt alle ausgewählten Einträge ab
  204. __declspec( dllexport ) void deSelect();
  205. // Gibt die Anzahl an Einträgen zurück
  206. __declspec( 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. __declspec( dllexport ) int getAuswahl() const;
  209. // Gibt den Index eines Eintrags zurück
  210. // eintragText: Der Text des Eintrags
  211. __declspec( dllexport ) int getEintragPos( Text *eintragText );
  212. // Gibt einen Eintrag zurück
  213. // pos: Der Index des Eintrags
  214. __declspec( dllexport ) TextFeld *getEintrag( int pos ) const;
  215. // Gibt einen Eintrag ohne erhöhten reference Counter zurück
  216. // pos: Der Index des Eintrags
  217. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( dllexport ) AlphaFeld *zABuffer() const;
  232. // Gibt den Rahmen zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
  233. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. __declspec( 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. // pos: Der Index des Eintrags
  248. // style: Die zu prüfenden Styles
  249. __declspec( 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. // pos: Der Index des Eintrags
  252. // style: Die zu prüfenden Styles
  253. __declspec( dllexport ) inline bool hatMsStyleNicht( int pos, __int64 style ) const;
  254. // Erhöht den Reference Counting Zähler.
  255. // return: this.
  256. __declspec( dllexport ) AuswahlListe *getThis();
  257. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  258. // return: 0.
  259. __declspec( dllexport ) AuswahlListe *release();
  260. };
  261. }
  262. #endif