Knopf.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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; //! from this file
  13. class KontrollKnopf; //! from this file
  14. class TextRenderer;
  15. //! A 2D GUI Framework drawing that renders a button that the user can press
  16. class Knopf : public TextFeld
  17. {
  18. public:
  19. class Style : public ZeichnungHintergrund::Style
  20. {
  21. public:
  22. //! Specifies whether the button text may have multiple colors
  23. static const __int64 MehrfarbigText = 0x0010000;
  24. //! Specifies whether the button has a background color
  25. //! while being pressed
  26. static const __int64 KlickFarbe = 0x0020000;
  27. //! Specifies whether the button has a background image
  28. //! while being pressed
  29. static const __int64 KlickBild = 0x0040000;
  30. //! Specifies whether the button uses alpha blending
  31. //! for the background while being pressed
  32. static const __int64 KlickAlpha = 0x0080000;
  33. //! Specifies whether the button has a color gradient
  34. //! while being pressed
  35. static const __int64 KlickBuffer = 0x0100000;
  36. //! Combines flags Sichtbar, Erlaubt, Rahmen,
  37. //! Buffered, MehrfarbigText, KlickBuffer
  38. static const __int64 Normal = Sichtbar | Erlaubt | Rahmen | Buffered
  39. | MehrfarbigText | KlickBuffer;
  40. };
  41. private:
  42. int klickFarbe;
  43. Bild* klickBild;
  44. AlphaFeld* klickBuffer;
  45. int klickIndex;
  46. //! Processes mouse messages
  47. //! \param me The event triggered by the mouse input
  48. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  49. public:
  50. //! Constructor
  51. DLLEXPORT Knopf();
  52. //! Destructor
  53. DLLEXPORT virtual ~Knopf();
  54. //! Sets the color used as background when the button is pressed
  55. //! \param fc The color in A8R8G8B8 format
  56. DLLEXPORT void setKlickFarbe(int fc);
  57. //! Sets the background image by copying, used when the button is
  58. //! pressed
  59. //! \param bild The image to copy
  60. DLLEXPORT void setKlickBild(Bild* bild);
  61. //! Sets a pointer to the background image used when the button is
  62. //! pressed
  63. //! \param bild The new image
  64. DLLEXPORT void setKlickBildZ(Bild* bild);
  65. //! Sets a pointer to the color gradient used when the button is pressed
  66. //! \param af The new color gradient
  67. DLLEXPORT void setKBZ(AlphaFeld* af);
  68. //! Sets the strength of the color gradient used when the button is
  69. //! pressed
  70. //! \param st The strength
  71. DLLEXPORT void setKBStrength(int st);
  72. //! Sets the color of the color gradient used when the button is pressed
  73. //! \param fc The color in A8R8G8B8 format
  74. DLLEXPORT void setKBFarbe(int fc);
  75. //! Verarbeitet Maus Nachrichten
  76. //! \param te Das Ereignis, was durch die Tastatur Eingabe ausgeloesst
  77. //! wurde
  78. DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override;
  79. //! Draws the object to zRObj if it is visible
  80. //! \param zRObj The image to draw into
  81. DLLEXPORT void render(Bild& zRObj) override;
  82. //! Returns the background color in A8R8G8B8 format used when
  83. //! the button is pressed
  84. DLLEXPORT int getKlickFarbe() const;
  85. //! Returns the background image used when the button is pressed
  86. DLLEXPORT Bild* getKlickBild() const;
  87. //! Returns the background image without increased reference counter
  88. //! used when the button is pressed
  89. DLLEXPORT Bild* zKlickBild() const;
  90. //! Returns the color gradient used when the button is pressed
  91. DLLEXPORT AlphaFeld* getKB() const;
  92. //! Returns the color gradient without increased reference counter
  93. //! used when the button is pressed
  94. DLLEXPORT AlphaFeld* zKB() const;
  95. //! Returns the color of the color gradient in A8R8G8B8 format
  96. //! used when the button is pressed
  97. DLLEXPORT int getKBFarbe() const;
  98. //! Returns the strength of the color gradient used when the button
  99. //! is pressed
  100. DLLEXPORT int getKBStrength() const;
  101. //! Copies the button so it can be modified without affecting the
  102. //! original
  103. DLLEXPORT Zeichnung* dublizieren() const override;
  104. };
  105. //! A 2D GUI Framework drawing that renders a selectable checkbox
  106. //! with label
  107. class KontrollKnopf : public ZeichnungHintergrund
  108. {
  109. public:
  110. class Style : public ZeichnungHintergrund::Style
  111. {
  112. public:
  113. //! Specifies whether the checkbox is selected
  114. static const __int64 Selected = 0x1000000;
  115. //! Specifies whether the label text can be multicolored
  116. static const __int64 MehrfarbigText = 0x001000;
  117. //! Specifies whether the checkbox has a background color
  118. //! while being pressed
  119. static const __int64 KlickFarbe = 0x002000;
  120. //! Specifies whether the checkbox has a background image
  121. //! when clicked
  122. static const __int64 KlickBild = 0x004000;
  123. //! Specifies whether alpha blending is used for the
  124. //! checkbox background when clicked
  125. static const __int64 KlickAlpha = 0x008000;
  126. //! Specifies whether the checkbox has a color gradient
  127. //! when clicked
  128. static const __int64 KlickBuffer = 0x010000;
  129. //! Specifies whether the checkbox has a background color
  130. //! while selected
  131. static const __int64 SelectFarbe = 0x020000;
  132. //! Specifies whether the checkbox has a background image
  133. //! while selected
  134. static const __int64 SelectBild = 0x040000;
  135. //! Specifies whether alpha blending is used for the
  136. //! checkbox background while selected
  137. static const __int64 SelectAlpha = 0x080000;
  138. //! Specifies whether the checkbox has a color gradient
  139. //! while selected
  140. static const __int64 SelectBuffer = 0x100000;
  141. //! Specifies whether the checkbox has a different label
  142. //! while selected
  143. static const __int64 SelectText = 0x200000;
  144. //! Specifies whether the checkbox can have a multi-line label
  145. static const __int64 MehrzeiligText = 0x400000;
  146. //! Specifies whether the checkbox is currently being clicked
  147. //! with the mouse. (Managed by the checkbox itself)
  148. static const __int64 MausKlick = 0x800000;
  149. //! Combines the flags Sichtbar, Erlaubt, Rahmen,
  150. //! KlickBuffer
  151. static const __int64 Normal
  152. = Sichtbar | Erlaubt | Rahmen | KlickBuffer;
  153. };
  154. private:
  155. Text* txt;
  156. Text* sTxt;
  157. int sBgF;
  158. int kBgF;
  159. Bild* sBgB;
  160. Bild* kBgB;
  161. AlphaFeld* sAf;
  162. AlphaFeld* kAf;
  163. Bild* kasten;
  164. Bild* sKasten;
  165. TextRenderer* textRd;
  166. int sF;
  167. int sGr;
  168. //! Verarbeitet Maus Nachrichten
  169. //! \param me Das Ereignis, was durch die Mauseingabe ausgeloesst wurde
  170. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  171. public:
  172. //! Konstruktor
  173. DLLEXPORT KontrollKnopf();
  174. //! Destruktor
  175. DLLEXPORT virtual ~KontrollKnopf();
  176. //! Setzt den Zeiger auf den Beschriftungs Text
  177. //! \param txt Der Text
  178. DLLEXPORT void setTextZ(Text* txt);
  179. //! Setzt den Beschriftungs Text
  180. //! \param txt Der Text
  181. DLLEXPORT void setText(Text* txt);
  182. //! Setzt den Beschriftungs Text
  183. //! \param txt Der Text
  184. DLLEXPORT void setText(const char* txt);
  185. //! Setzt den Zeiger auf den Beschriftungs Text, der angezeigt wird,
  186. //! waehrend das Kaestchen ausgewaehlt ist \param txt Der Text
  187. DLLEXPORT void setSTextZ(Text* txt);
  188. //! Setzt den Beschriftungs Text, der angezeigt wird, waehrend das
  189. //! Kaestchen ausgewaehlt ist \param txt Der Text
  190. DLLEXPORT void setSText(Text* txt);
  191. //! Setzt den Beschriftungs Text, der angezeigt wird, waehrend das
  192. //! Kaestchen ausgewaehlt ist \param txt Der Text
  193. DLLEXPORT void setSText(const char* txt);
  194. //! Setzt den verwendeten TextRenderer
  195. //! \param textRd Der Textrenderer
  196. DLLEXPORT void setTextRendererZ(TextRenderer* textRd);
  197. //! Setzt die Schrift, die fuer die Beschriftung verwendet werden soll
  198. //! \param schrift Die Schrift
  199. DLLEXPORT void setSchriftZ(Schrift* schrift);
  200. //! Setzt die Farbe der Schrift, die fuer die Beschriftung verwendet
  201. //! werden soll \param f Die Farbe im A8R8G8B8 Format
  202. DLLEXPORT void setSFarbe(int f);
  203. //! Setzt die Groesse der Schrift, die fuer die Beschriftung verwendet
  204. //! werden soll \param f Die Hoehe einer Zeile in Pixeln
  205. DLLEXPORT void setSSize(int gr);
  206. //! Setzt die Hintergrund Farbe, die verwendet wird, waehrend das
  207. //! Kaestchen ausgewaehlt ist \param f Die Farbe im A8R8G8B8 Format
  208. DLLEXPORT void setSBgFarbe(int f);
  209. //! Setzt die Hintergrund Farbe, die verwendet wird, waehrend auf das
  210. //! Kaestchen geklickt wird \param f Die Farbe im A8R8G8B8 Format
  211. DLLEXPORT void setKBgFarbe(int f);
  212. //! Setzt einen Zeiger auf das Hintergrund Bild, das verwendet wird,
  213. //! waehrend das Kaestchen ausgewaehlt ist \param b Das Bild
  214. DLLEXPORT void setSBgBildZ(Bild* b);
  215. //! Setzt das Hintergrund Bild durch kopieren, das verwendet wird,
  216. //! waehrend das Kaestchen ausgewaehlt ist \param b Das Bild, das kopiert
  217. //! werden soll
  218. DLLEXPORT void setSBgBild(Bild* b);
  219. //! Setzt einen Zeiger auf das Hintergrund Bild, das verwendet wird,
  220. //! waehrend auf das Kaestchen geklickt wird \param b Das Bild
  221. DLLEXPORT void setKBgBildZ(Bild* b);
  222. //! Setzt das Hintergrund Bild durch kopieren, das verwendet wird,
  223. //! waehrend auf das Kaestchen geklickt wird \param b Das Bild, das
  224. //! kopiert werden soll
  225. DLLEXPORT void setKBgBild(Bild* b);
  226. //! Setzt einen Zeiger auf den Farbuebergang, der verwendet wird, waehrend
  227. //! das Kaestchen ausgewaehlt ist \param af Der Farbuebergang
  228. DLLEXPORT void setSAlphaFeldZ(AlphaFeld* af);
  229. //! Setzt die Farbe des Farbuebergangs, der verwendet wird, waehrend das
  230. //! Kaestchen ausgewaehlt ist \param f Die Farbe im A8R8G8B8 Format
  231. DLLEXPORT void setSAFFarbe(int f);
  232. //! Setzt die Staerke des Farbuebergangs, der verwendet wird, waehrend das
  233. //! Kaestchen ausgewaehlt ist \param st Die Staerke
  234. DLLEXPORT void setSAFStrength(int st);
  235. //! Setzt einen Zeiger auf den Farbuebergang, der verwendet wird, waehrend
  236. //! auf das Kaestchen geklickt wird \param af Der Farbuebergang
  237. DLLEXPORT void setKAlphaFeldZ(AlphaFeld* af);
  238. //! Setzt die Farbe des Farbuebergangs, der verwendet wird, waehrend auf
  239. //! das Kaestchen geklickt wird \param f Die Farbe im A8R8G8B8 Format
  240. DLLEXPORT void setKAFFarbe(int f);
  241. //! Setzt die Staerke des Farbuebergangs, der verwendet wird, waehrend auf
  242. //! das Kaestchen geklickt wird \param st Die Staerke
  243. DLLEXPORT void setKAFStrength(int st);
  244. //! Laedt die Bilder "kasten.gif" und "skasten.gif" aus einer LTDB Datei
  245. //! Das Bild kasten.gif wird gezeichnet, wenn das Kaestchen nicht
  246. //! ausgewaehlt ist. Das Bild skasten.gif wird gezeichnet, wenn das
  247. //! Kaestchen ausgewaehlt wird \param zDat Die LTDB Datei
  248. DLLEXPORT void loadData(LTDBDatei* zDat);
  249. //! Laedt die Bilder "kasten.gif" und "skasten.gif" aus einer LTDB Datei
  250. //! Das Bild kasten.gif wird gezeichnet, wenn das Kaestchen nicht
  251. //! ausgewaehlt ist. Das Bild skasten.gif wird gezeichnet, wenn das
  252. //! Kaestchen ausgewaehlt wird \param ltdb Der Pfad zur LTDB Datei
  253. DLLEXPORT void loadData(const char* ltdb);
  254. //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  255. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  256. DLLEXPORT void render(Bild& zRObj) override;
  257. //! Gibt die beschriftung zurueck
  258. DLLEXPORT Text* getText() const;
  259. //! Gibt die beschriftung ohne erhoehten Reference Counter zurueck
  260. DLLEXPORT Text* zText() const;
  261. //! Gibt die beschriftung zurueck, die verwendet wird, waehrend das
  262. //! Kaestchen ausgewaehlt ist
  263. DLLEXPORT Text* getSText() const;
  264. //! Gibt die beschriftung ohne erhoehten Reference Counter zurueck, die
  265. //! verwendet wird, waehrend das Kaestchen ausgewaehlt ist
  266. DLLEXPORT Text* zSText() const;
  267. //! Gibt die verwendete Schrift zurueck
  268. DLLEXPORT Schrift* getSchrift() const;
  269. //! Gibt die verwendete Schrift ohne Reference Counter zurueck
  270. DLLEXPORT Schrift* zSchrift() const;
  271. //! Gibt die Schrift Farbe im A8R8G8B8 Format zurueck
  272. DLLEXPORT int getSFarbe() const;
  273. //! Gibt die Schrift Groesse zurueck
  274. DLLEXPORT int getSSize() const;
  275. //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurueck, die verwendet
  276. //! wird, waehrend das Kaestchen ausgewaehlt ist
  277. DLLEXPORT int getSBgFarbe() const;
  278. //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurueck, die verwendet
  279. //! wird, waehrend auf das Kaestchen geklickt wird
  280. DLLEXPORT int getKBgFarbe() const;
  281. //! Gibt das Hintergrund Bild zurueck, das verwendet wird, waehrend das
  282. //! Kaestchen ausgewaehlt ist
  283. DLLEXPORT Bild* getSBgBild() const;
  284. //! Gibt das Hintergrund Bild ohne erhoehten Reference Counter zurueck,
  285. //! das verwendet wird, waehrend das Kaestchen ausgewaehlt ist
  286. DLLEXPORT Bild* zSBgBild() const;
  287. //! Gibt das Hintergrund Bild zurueck, das verwendet wird, waehrend auf
  288. //! das Kaestchen geklickt wird
  289. DLLEXPORT Bild* getKBgBild() const;
  290. //! Gibt das Hintergrund Bild ohne erhoehten Reference Counter zurueck,
  291. //! das verwendet wird, waehrend auf das Kaestchen geklickt wird
  292. DLLEXPORT Bild* zKBgBild() const;
  293. //! Gibt den Farbuebergang zurueck, der verwendet wird, waehrend das
  294. //! Kaestchen ausgewaehlt ist
  295. DLLEXPORT AlphaFeld* getSAlphaFeld() const;
  296. //! Gibt den Farbuebergang ohne erhoehten Reference COunter zurueck, der
  297. //! verwendet wird, waehrend das Kaestchen ausgewaehlt ist
  298. DLLEXPORT AlphaFeld* zSAlphaFeld() const;
  299. //! Gibt den Farbuebergang zurueck, der verwendet wird, waehrend auf das
  300. //! Kaestchen geklickt wird
  301. DLLEXPORT AlphaFeld* getKAlphaFeld() const;
  302. //! Gibt den Farbuebergang ohne erhoehten Reference COunter zurueck, der
  303. //! verwendet wird, waehrend auf das Kaestchen geklickt wird
  304. DLLEXPORT AlphaFeld* zKAlphaFeld() const;
  305. };
  306. } // namespace Framework
  307. #endif