Knopf.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  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. //! Legt fest, ob der Text des Knopfes mehrere
  24. //! Farben haben darf
  25. static const __int64 MehrfarbigText = 0x0010000;
  26. //! Legt fest, ob der Knopf während er gedrückt
  27. //! wird eine Hintergrund Farbe hat
  28. static const __int64 KlickFarbe = 0x0020000;
  29. //! Legt fest, ob der Knopf während er gedrückt
  30. //! wird ein Bild als Hintergrund hat
  31. static const __int64 KlickBild = 0x0040000;
  32. //! Legt fest, ob der Knopf während er gedrückt
  33. //! wird für das Zeichnen des Hintergrundes alpha
  34. //! blending verwendet
  35. static const __int64 KlickAlpha = 0x0080000;
  36. //! Legt fest, ob der Knopf während er gedrückt
  37. //! wird einen Farbübergang besitzt
  38. static const __int64 KlickBuffer = 0x0100000;
  39. //! Vereint di Flags Sichtbar, Erlaubt, Rahmen,
  40. //! Buffered, MehrfarbigText, KlickBuffer
  41. static const __int64 Normal = Sichtbar | Erlaubt | Rahmen | Buffered
  42. | 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. //! Legt fest, ob das Kästchen ausgewählt ist
  117. static const __int64 Selected = 0x1000000;
  118. //! Legt Fest, ob der Beschriftungs Text mehrfarbig
  119. //! sein kann
  120. static const __int64 MehrfarbigText = 0x001000;
  121. //! Legt fest, ob das Kästchen während ed gedrückt
  122. //! wird eine Hintergrund Farbe hat
  123. static const __int64 KlickFarbe = 0x002000;
  124. //! Legt fest, ob das Kästchen beim Klicken ein
  125. //! Hintergrund Bild hat
  126. static const __int64 KlickBild = 0x004000;
  127. //! Legt fest, ob für den Hintergrund des Kästchens
  128. //! beim Klicken alpha blending verwendet wird
  129. static const __int64 KlickAlpha = 0x008000;
  130. //! Legt fest, ob das Kästchen beim Klicken einen
  131. //! Farbübergang hat
  132. static const __int64 KlickBuffer = 0x010000;
  133. //! Legt fest, ob das Kästchen wärhend es ausgewählt
  134. //! ist eine Hintergrund Farbe hat
  135. static const __int64 SelectFarbe = 0x020000;
  136. //! Legt fest, ob das Kästchen wärhend es ausgewählt
  137. //! ist ein Hintergrund Bild hat
  138. static const __int64 SelectBild = 0x040000;
  139. //! Legt fest, ob das Kästchen wärhend es ausgewählt
  140. //! ist für den Hintergrund alpha blending verwendet
  141. static const __int64 SelectAlpha = 0x080000;
  142. //! Legt fest, ob das Kästchen wärhend es ausgewählt
  143. //! ist einen Farbübergang hat
  144. static const __int64 SelectBuffer = 0x100000;
  145. //! Legt fest, ob das Kästchen wärhend es ausgewählt
  146. //! ist eine andere Beschriftung hat
  147. static const __int64 SelectText = 0x200000;
  148. //! Legt fest, ob das Kästchen eine Mehrzeilige
  149. //! Beschriftung haben kann
  150. static const __int64 MehrzeiligText = 0x400000;
  151. //! Legt fest, ob gerade mit der Maus auf das
  152. //! Kästchen geklickt wird. (Wird vom Kästchen
  153. //! selbst verwaltet)
  154. static const __int64 MausKlick = 0x800000;
  155. //! Vereint die Flags Sichtbar, Erlaubt, Rahmen,
  156. //! KlickBuffer
  157. static const __int64 Normal
  158. = Sichtbar | Erlaubt | Rahmen | 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