Knopf.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. #ifndef Knopf_H
  2. #define Knopf_H
  3. #include "TextFeld.h"
  4. namespace Framework
  5. {
  6. class TextFeld; //! TextFeld.h
  7. class AlphaFeld; //! AlphaFeld.h
  8. class Text; //! Text.h
  9. class Schrift; //! Schrift.h
  10. class Rahmen; //! Rahmen.h
  11. class LTDBDatei; //! Dateisystem.h
  12. class Knopf; //! aus dieser Datei
  13. class KontrollKnopf; //! aus dieser Datei
  14. class TextRenderer;
  15. //! Eine Zeichnung des 2D GUI Frameworks, die einen Knopf zeichnet, den der
  16. //! Benutzer drücken kann
  17. class Knopf : public TextFeld
  18. {
  19. public:
  20. class Style : public ZeichnungHintergrund::Style
  21. {
  22. public:
  23. static const __int64 MehrfarbigText
  24. = 0x0010000; //! Legt fest, ob der Text des Knopfes mehrere
  25. //! Farben haben darf
  26. static const __int64 KlickFarbe
  27. = 0x0020000; //! Legt fest, ob der Knopf während er gedrückt
  28. //! wird eine Hintergrund Farbe hat
  29. static const __int64 KlickBild
  30. = 0x0040000; //! Legt fest, ob der Knopf während er gedrückt
  31. //! wird ein Bild als Hintergrund hat
  32. static const __int64 KlickAlpha
  33. = 0x0080000; //! Legt fest, ob der Knopf während er gedrückt
  34. //! wird für das Zeichnen des Hintergrundes alpha
  35. //! blending verwendet
  36. static const __int64 KlickBuffer
  37. = 0x0100000; //! Legt fest, ob der Knopf während er gedrückt
  38. //! wird einen Farbübergang besitzt
  39. static const __int64 Normal
  40. = Sichtbar | Erlaubt | Rahmen | Buffered | MehrfarbigText
  41. | KlickBuffer; //! Vereint di Flags Sichtbar, Erlaubt, Rahmen,
  42. //! Buffered, MehrfarbigText, KlickBuffer
  43. };
  44. private:
  45. int klickFarbe;
  46. Bild* klickBild;
  47. AlphaFeld* klickBuffer;
  48. int klickIndex;
  49. //! Verarbeitet Maus Nachrichten
  50. //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  51. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  52. public:
  53. //! Konstruktor
  54. DLLEXPORT Knopf();
  55. //! Destruktor
  56. DLLEXPORT virtual ~Knopf();
  57. //! Setzt die Farbe, die als Hintergrund verwendet wird, wenn der Knopf
  58. //! gedrückt wird \param fc Die Farbe im A8R8G8B8 Format
  59. DLLEXPORT void setKlickFarbe(int fc);
  60. //! Setzt das Hintergrund Bild durch kopieren, das verwendet wird, wenn
  61. //! der Knopf gedrückt wird \param bild Das Bild, das kopiert werden
  62. //! soll
  63. DLLEXPORT void setKlickBild(Bild* bild);
  64. //! Setzt einen Zeiger auf das Hintergrund Bild, das verwendet wird,
  65. //! wenn der Knopf gedrückt wird \param bild Das neue Bild
  66. DLLEXPORT void setKlickBildZ(Bild* bild);
  67. //! Setzt einen Zeiger auf den Farbübergang, der verwendet wird, wenn
  68. //! der Knopf gedrückt wird \param af Der neue Farbübergang
  69. DLLEXPORT void setKBZ(AlphaFeld* af);
  70. //! Setzt die Stärke des Farbübergangs, der verwendet wird, wenn der
  71. //! Knopf gedrückt wird \param st Die Stärke
  72. DLLEXPORT void setKBStrength(int st);
  73. //! Setzt die Farbe des Farbübergangs, der verwendet wird, wenn der
  74. //! Knopf gedrückt wird \param fc Die Farbe im A8R8G8B8 Format
  75. DLLEXPORT void setKBFarbe(int fc);
  76. //! Verarbeitet Maus Nachrichten
  77. //! \param te Das Ereignis, was durch die Tastatur Eingabe ausgelößt
  78. //! wurde
  79. DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override;
  80. //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  81. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  82. DLLEXPORT void render(Bild& zRObj) override;
  83. //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurück, die verwendet
  84. //! wird, wenn der Knopf gedrückt wird
  85. DLLEXPORT int getKlickFarbe() const;
  86. //! Gibt das Hintergrund Bild zurück, das verwendet wird, wenn der Knopf
  87. //! gedrückt wird
  88. DLLEXPORT Bild* getKlickBild() const;
  89. //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück,
  90. //! das verwendet wird, wenn der Knopf gedrückt wird
  91. DLLEXPORT Bild* zKlickBild() const;
  92. //! Gibt den Farbübergang zurück, der verwendet wird, wenn der Knopf
  93. //! gedrückt wird
  94. DLLEXPORT AlphaFeld* getKB() const;
  95. //! Gibt den Farbübergang ohne erhöhten Reference Counter zurück, der
  96. //! verwendet wird, wenn der Knopf gedrückt wird
  97. DLLEXPORT AlphaFeld* zKB() const;
  98. //! Gibt die Farbe des Farbübergangs im A8R8G8B8 Format zurück, der
  99. //! verwendet wird, wenn der Knopf gedrückt wird
  100. DLLEXPORT int getKBFarbe() const;
  101. //! Gibt die Stärke des Farbübergangs zurück, der verwendet wird, wenn
  102. //! der Knopf gedrückt wird
  103. DLLEXPORT int getKBStrength() const;
  104. //! Kopiert den Knopf, so das er ohne auswirkungen auf das Original
  105. //! verändert werden kann
  106. DLLEXPORT Zeichnung* dublizieren() const override;
  107. };
  108. //! Eine Zeichnung des 2D GUI Frameworks, die einen Auswählbares Kästchen
  109. //! mit beschriftung zeichnet
  110. class KontrollKnopf : public ZeichnungHintergrund
  111. {
  112. public:
  113. class Style : public ZeichnungHintergrund::Style
  114. {
  115. public:
  116. static const __int64 Selected
  117. = 0x1000000; //! Legt fest, ob das Kästchen ausgewählt ist
  118. static const __int64 MehrfarbigText
  119. = 0x001000; //! Legt Fest, ob der Beschriftungs Text mehrfarbig
  120. //! sein kann
  121. static const __int64 KlickFarbe
  122. = 0x002000; //! Legt fest, ob das Kästchen während ed gedrückt
  123. //! wird eine Hintergrund Farbe hat
  124. static const __int64 KlickBild
  125. = 0x004000; //! Legt fest, ob das Kästchen beim Klicken ein
  126. //! Hintergrund Bild hat
  127. static const __int64 KlickAlpha
  128. = 0x008000; //! Legt fest, ob für den Hintergrund des Kästchens
  129. //! beim Klicken alpha blending verwendet wird
  130. static const __int64 KlickBuffer
  131. = 0x010000; //! Legt fest, ob das Kästchen beim Klicken einen
  132. //! Farbübergang hat
  133. static const __int64 SelectFarbe
  134. = 0x020000; //! Legt fest, ob das Kästchen wärhend es ausgewählt
  135. //! ist eine Hintergrund Farbe hat
  136. static const __int64 SelectBild
  137. = 0x040000; //! Legt fest, ob das Kästchen wärhend es ausgewählt
  138. //! ist ein Hintergrund Bild hat
  139. static const __int64 SelectAlpha
  140. = 0x080000; //! Legt fest, ob das Kästchen wärhend es ausgewählt
  141. //! ist für den Hintergrund alpha blending verwendet
  142. static const __int64 SelectBuffer
  143. = 0x100000; //! Legt fest, ob das Kästchen wärhend es ausgewählt
  144. //! ist einen Farbübergang hat
  145. static const __int64 SelectText
  146. = 0x200000; //! Legt fest, ob das Kästchen wärhend es ausgewählt
  147. //! ist eine andere Beschriftung hat
  148. static const __int64 MehrzeiligText
  149. = 0x400000; //! Legt fest, ob das Kästchen eine Mehrzeilige
  150. //! Beschriftung haben kann
  151. static const __int64 MausKlick
  152. = 0x800000; //! Legt fest, ob gerade mit der Maus auf das
  153. //! Kästchen geklickt wird. (Wird vom Kästchen
  154. //! selbst verwaltet)
  155. static const __int64 Normal
  156. = Sichtbar | Erlaubt | Rahmen
  157. | KlickBuffer; //! Vereint die Flags Sichtbar, Erlaubt, Rahmen,
  158. //! KlickBuffer
  159. };
  160. private:
  161. Text* txt;
  162. Text* sTxt;
  163. int sBgF;
  164. int kBgF;
  165. Bild* sBgB;
  166. Bild* kBgB;
  167. AlphaFeld* sAf;
  168. AlphaFeld* kAf;
  169. Bild* kasten;
  170. Bild* sKasten;
  171. TextRenderer* textRd;
  172. int sF;
  173. int sGr;
  174. //! Verarbeitet Maus Nachrichten
  175. //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  176. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  177. public:
  178. //! Konstruktor
  179. DLLEXPORT KontrollKnopf();
  180. //! Destruktor
  181. DLLEXPORT virtual ~KontrollKnopf();
  182. //! Setzt den Zeiger auf den Beschriftungs Text
  183. //! \param txt Der Text
  184. DLLEXPORT void setTextZ(Text* txt);
  185. //! Setzt den Beschriftungs Text
  186. //! \param txt Der Text
  187. DLLEXPORT void setText(Text* txt);
  188. //! Setzt den Beschriftungs Text
  189. //! \param txt Der Text
  190. DLLEXPORT void setText(const char* txt);
  191. //! Setzt den Zeiger auf den Beschriftungs Text, der angezeigt wird,
  192. //! während das Kästchen ausgewählt ist \param txt Der Text
  193. DLLEXPORT void setSTextZ(Text* txt);
  194. //! Setzt den Beschriftungs Text, der angezeigt wird, während das
  195. //! Kästchen ausgewählt ist \param txt Der Text
  196. DLLEXPORT void setSText(Text* txt);
  197. //! Setzt den Beschriftungs Text, der angezeigt wird, während das
  198. //! Kästchen ausgewählt ist \param txt Der Text
  199. DLLEXPORT void setSText(const char* txt);
  200. //! Setzt den verwendeten TextRenderer
  201. //! \param textRd Der Textrenderer
  202. DLLEXPORT void setTextRendererZ(TextRenderer* textRd);
  203. //! Setzt die Schrift, die für die Beschriftung verwendet werden soll
  204. //! \param schrift Die Schrift
  205. DLLEXPORT void setSchriftZ(Schrift* schrift);
  206. //! Setzt die Farbe der Schrift, die für die Beschriftung verwendet
  207. //! werden soll \param f Die Farbe im A8R8G8B8 Format
  208. DLLEXPORT void setSFarbe(int f);
  209. //! Setzt die Größe der Schrift, die für die Beschriftung verwendet
  210. //! werden soll \param f Die Höhe einer Zeile in Pixeln
  211. DLLEXPORT void setSSize(int gr);
  212. //! Setzt die Hintergrund Farbe, die verwendet wird, während das
  213. //! Kästchen ausgewählt ist \param f Die Farbe im A8R8G8B8 Format
  214. DLLEXPORT void setSBgFarbe(int f);
  215. //! Setzt die Hintergrund Farbe, die verwendet wird, während auf das
  216. //! Kästchen geklickt wird \param f Die Farbe im A8R8G8B8 Format
  217. DLLEXPORT void setKBgFarbe(int f);
  218. //! Setzt einen Zeiger auf das Hintergrund Bild, das verwendet wird,
  219. //! während das Kästchen ausgewählt ist \param b Das Bild
  220. DLLEXPORT void setSBgBildZ(Bild* b);
  221. //! Setzt das Hintergrund Bild durch kopieren, das verwendet wird,
  222. //! während das Kästchen ausgewählt ist \param b Das Bild, das kopiert
  223. //! werden soll
  224. DLLEXPORT void setSBgBild(Bild* b);
  225. //! Setzt einen Zeiger auf das Hintergrund Bild, das verwendet wird,
  226. //! während auf das Kästchen geklickt wird \param b Das Bild
  227. DLLEXPORT void setKBgBildZ(Bild* b);
  228. //! Setzt das Hintergrund Bild durch kopieren, das verwendet wird,
  229. //! während auf das Kästchen geklickt wird \param b Das Bild, das
  230. //! kopiert werden soll
  231. DLLEXPORT void setKBgBild(Bild* b);
  232. //! Setzt einen Zeiger auf den Farbübergang, der verwendet wird, während
  233. //! das Kästchen ausgewählt ist \param af Der Farbübergang
  234. DLLEXPORT void setSAlphaFeldZ(AlphaFeld* af);
  235. //! Setzt die Farbe des Farbübergangs, der verwendet wird, während das
  236. //! Kästchen ausgewählt ist \param f Die Farbe im A8R8G8B8 Format
  237. DLLEXPORT void setSAFFarbe(int f);
  238. //! Setzt die Stärke des Farbübergangs, der verwendet wird, während das
  239. //! Kästchen ausgewählt ist \param st Die Stärke
  240. DLLEXPORT void setSAFStrength(int st);
  241. //! Setzt einen Zeiger auf den Farbübergang, der verwendet wird, während
  242. //! auf das Kästchen geklickt wird \param af Der Farbübergang
  243. DLLEXPORT void setKAlphaFeldZ(AlphaFeld* af);
  244. //! Setzt die Farbe des Farbübergangs, der verwendet wird, während auf
  245. //! das Kästchen geklickt wird \param f Die Farbe im A8R8G8B8 Format
  246. DLLEXPORT void setKAFFarbe(int f);
  247. //! Setzt die Stärke des Farbübergangs, der verwendet wird, während auf
  248. //! das Kästchen geklickt wird \param st Die Stärke
  249. DLLEXPORT void setKAFStrength(int st);
  250. //! Lädt die Bilder "kasten.gif" und "skasten.gif" aus einer LTDB Datei
  251. //! Das Bild kasten.gif wird gezeichnet, wenn das Kästchen nicht
  252. //! ausgewählt ist. Das Bild skasten.gif wird gezeichnet, wenn das
  253. //! Kästchen ausgewählt wird \param zDat Die LTDB Datei
  254. DLLEXPORT void loadData(LTDBDatei* zDat);
  255. //! Lädt die Bilder "kasten.gif" und "skasten.gif" aus einer LTDB Datei
  256. //! Das Bild kasten.gif wird gezeichnet, wenn das Kästchen nicht
  257. //! ausgewählt ist. Das Bild skasten.gif wird gezeichnet, wenn das
  258. //! Kästchen ausgewählt wird \param ltdb Der Pfad zur LTDB Datei
  259. DLLEXPORT void loadData(const char* ltdb);
  260. //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  261. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  262. DLLEXPORT void render(Bild& zRObj) override;
  263. //! Gibt die beschriftung zurück
  264. DLLEXPORT Text* getText() const;
  265. //! Gibt die beschriftung ohne erhöhten Reference Counter zurück
  266. DLLEXPORT Text* zText() const;
  267. //! Gibt die beschriftung zurück, die verwendet wird, während das
  268. //! Kästchen ausgewählt ist
  269. DLLEXPORT Text* getSText() const;
  270. //! Gibt die beschriftung ohne erhöhten Reference Counter zurück, die
  271. //! verwendet wird, während das Kästchen ausgewählt ist
  272. DLLEXPORT Text* zSText() const;
  273. //! Gibt die verwendete Schrift zurück
  274. DLLEXPORT Schrift* getSchrift() const;
  275. //! Gibt die verwendete Schrift ohne Reference Counter zurück
  276. DLLEXPORT Schrift* zSchrift() const;
  277. //! Gibt die Schrift Farbe im A8R8G8B8 Format zurück
  278. DLLEXPORT int getSFarbe() const;
  279. //! Gibt die Schrift Größe zurück
  280. DLLEXPORT int getSSize() const;
  281. //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurück, die verwendet
  282. //! wird, während das Kästchen ausgewählt ist
  283. DLLEXPORT int getSBgFarbe() const;
  284. //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurück, die verwendet
  285. //! wird, während auf das Kästchen geklickt wird
  286. DLLEXPORT int getKBgFarbe() const;
  287. //! Gibt das Hintergrund Bild zurück, das verwendet wird, während das
  288. //! Kästchen ausgewählt ist
  289. DLLEXPORT Bild* getSBgBild() const;
  290. //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück,
  291. //! das verwendet wird, während das Kästchen ausgewählt ist
  292. DLLEXPORT Bild* zSBgBild() const;
  293. //! Gibt das Hintergrund Bild zurück, das verwendet wird, während auf
  294. //! das Kästchen geklickt wird
  295. DLLEXPORT Bild* getKBgBild() const;
  296. //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück,
  297. //! das verwendet wird, während auf das Kästchen geklickt wird
  298. DLLEXPORT Bild* zKBgBild() const;
  299. //! Gibt den Farbübergang zurück, der verwendet wird, während das
  300. //! Kästchen ausgewählt ist
  301. DLLEXPORT AlphaFeld* getSAlphaFeld() const;
  302. //! Gibt den Farbübergang ohne erhöhten Reference COunter zurück, der
  303. //! verwendet wird, während das Kästchen ausgewählt ist
  304. DLLEXPORT AlphaFeld* zSAlphaFeld() const;
  305. //! Gibt den Farbübergang zurück, der verwendet wird, während auf das
  306. //! Kästchen geklickt wird
  307. DLLEXPORT AlphaFeld* getKAlphaFeld() const;
  308. //! Gibt den Farbübergang ohne erhöhten Reference COunter zurück, der
  309. //! verwendet wird, während auf das Kästchen geklickt wird
  310. DLLEXPORT AlphaFeld* zKAlphaFeld() const;
  311. };
  312. } // namespace Framework
  313. #endif