Diagramm.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. #ifndef Diagramm_H
  2. #define Diagramm_H
  3. #include "Zeichnung.h"
  4. #include "Array.h"
  5. #include "Critical.h"
  6. namespace Framework
  7. {
  8. class Rahmen; //! Rahmen.h
  9. class AlphaFeld; //! AlphaFeld.h
  10. class Text; //! Text.h
  11. class Schrift; //! Schrift.h
  12. class HScrollBar; //! Scroll.h
  13. class VScrollBar; //! Scroll.h
  14. class SLDiag; //! aus dieser Datei
  15. class LDiag; //! aus dieser Datei
  16. class TextRenderer;
  17. //! Eine Zeichnung de 2D GUI Frameworks, die ein live Diagramm von werten zeichnet
  18. class SLDiag : public ZeichnungHintergrund
  19. {
  20. public:
  21. class Style : public ZeichnungHintergrund::Style
  22. {
  23. public:
  24. const static __int64 Gitter = 0x01000; //! Es wird ein Gitter im Diagramm zur Orientierung gezeichnet
  25. const static __int64 LinienName = 0x02000; //! Es werden die Namen der Graphen angezeigt
  26. const static __int64 normal = Sichtbar | Hintergrund | Rahmen | Gitter | LinienName; //! Vereinigung der Flags Sichtbar, Hintergrund, Rahmen, Gitter, LinienName
  27. };
  28. private:
  29. int gF;
  30. Array< int >* lFarbe;
  31. RCArray< Text >* lName;
  32. RCArray< Array< int > >* ph;
  33. RCArray< Array< int > >* pb;
  34. Array< int >* lastValue;
  35. TextRenderer* textRd;
  36. Punkt gitterGr;
  37. int lines;
  38. public:
  39. //! Konstruktor
  40. DLLEXPORT SLDiag();
  41. //! Destruktor
  42. DLLEXPORT virtual ~SLDiag();
  43. //! Setzt den verwendeten TextRenderer
  44. //! \param textRd Der Textrenderer
  45. DLLEXPORT void setTextRendererZ(TextRenderer* textRd);
  46. //! Setzt einen Zeiger zur verwendeten Schrift
  47. //! \param schrift Die Schrift
  48. DLLEXPORT void setSchriftZ(Schrift* schrift);
  49. //! Setzt die Abstände zwischen den Linien des Gitters
  50. //! \param gr Für x den Abstand zwischen jeder vertikalen Linie in Pixeln und für y den Abstand zwischen jeder Horizontalen Linie in den dargestellen y Werten
  51. DLLEXPORT void setGSize(Punkt& gr);
  52. //! Setzt die Farbe der Raster Linien
  53. //! \param f Die Farbe im A8R8G8B8 Format
  54. DLLEXPORT void setGFarbe(int f);
  55. //! Fügt dem Diagramm einen neuen Graphen hinzu
  56. //! \param name Der Name des Graphen. Er wird bei dem Flag LinienName im Diagramm angezeigt
  57. DLLEXPORT void addLinie(const char* name);
  58. //! Fügt dem Diagramm einen neuen Graphen hinzu
  59. //! \param name Der Name des Graphen. Er wird bei dem Flag LinienName im Diagramm angezeigt
  60. DLLEXPORT void addLinie(Text* txt);
  61. //! Setzt die Farbe eines Graphen
  62. //! \param lNum Der Index des Graphen
  63. //! \param f Die Farbe im A8R8G8B8 Format
  64. DLLEXPORT void setLFarbe(int lNum, int f);
  65. //! Fügt einem Graphen einen Punkt hinzu. Hierdurch verschieben sich alle Punkte des Graphen so weit nach Links, dass der neue Punkt rechts auftaucht. Geht ein Punkt links aus dem Diagramm raus, wird er gelöscht.
  66. //! Auf diese Weise erscheint das Diagramm wie eine Abbildung einer Live Messung
  67. //! \param x Der Abstand zum Letzten Punkt in Pixeln
  68. //! \param y Den Wert der abgebildeten Funktion in dem Punkt
  69. DLLEXPORT void addPunkt(int lNum, int x, int h);
  70. //! Entfernt einen Graphen
  71. //! \param lNum Der Index des Graphen
  72. DLLEXPORT void removeLinie(int lNum);
  73. //! Zeichnet das Diagramm
  74. //! \param zRObj Das Bild, in das gezeichnet werden soll
  75. DLLEXPORT void render(Bild& zRObj) override;
  76. //! Gibt die verwendete Schrift zurück
  77. DLLEXPORT Schrift* getSchrift() const;
  78. //! Gibt die verwendete Schrift ohne erhöhten Reference Counter zurück
  79. DLLEXPORT Schrift* zSchrift() const;
  80. //! Gibt die Größe eines Quadrats des Gitters zurück, wobei die Braite in Pixeln und die Höhe in Werten der y Achse ist
  81. DLLEXPORT const Punkt& getGSize() const;
  82. //! Gibt die Farbe des Gitters in A8R8G8B8 Format zurück
  83. DLLEXPORT int getGFarbe() const;
  84. //! Gibt den Index eines Graphen zurück
  85. //! \param name Der Name des Graphen
  86. DLLEXPORT int getLinienNummer(const char* name) const;
  87. //! Gibt den Index eines Graphen zurück
  88. //! \param name Der Name des Graphen
  89. DLLEXPORT int getLinienNummer(Text* name) const;
  90. //! Gibt den Namen eines Graphen zurück
  91. //! \param lNum Der Index des Graphen
  92. DLLEXPORT Text* getLinienName(int lNum) const;
  93. //! Gibt den Namen eines Graphen ohne erhöhten Reference Counter zurück
  94. //! \param lNum Der Index des Graphen
  95. DLLEXPORT Text* zLinienNamen(int lNum) const;
  96. //! Gibt den Höchsten y Wert von allen Graphen zurück
  97. DLLEXPORT int getHighestValue() const;
  98. //! Gibt den Höchsten y Wert von einem Bestimmten Graphen zurück
  99. //! \param lNum Der Index des Graphen
  100. DLLEXPORT int getHighestValue(int lNum) const;
  101. //! Gibt den Durchschnittswert aller im Diagramm gespeicherten Punkten eines Graphen zurück
  102. //! \param lNum Der Index des Graphen
  103. DLLEXPORT int getMedian(int lNum) const;
  104. //! Gibt die Anzahl an Graphen zurück
  105. DLLEXPORT int getLAnzahl() const;
  106. //! Gibt den y Wert des letzten Punktes eines Graphen zurück
  107. //! \param lNum Der Index des Graphen
  108. DLLEXPORT int getLastValue(int lNum) const;
  109. };
  110. //! Punkt eines Wertes eines Diagramms
  111. struct DiagPunkt
  112. {
  113. //! Position des Punktes auf dem Horizontalen Intervall des Diagramms
  114. double hIntervall;
  115. //! Position des punktes auf dem Vertikalen Intervall des Diagramms
  116. double vIntervall;
  117. };
  118. //! Wert der in einem Diagramm visualisiert wird
  119. struct DiagWert : public virtual ReferenceCounter
  120. {
  121. //! Style eines Diagramm Wertes
  122. class Style
  123. {
  124. public:
  125. const static int Sichtbar = 0x01; //! Legt fest, ob der Wert angezeigt werden soll
  126. const static int Alpha = 0x02; //! Legt fest, ob beim zeichnen des Wertes Alphablending verwendet werden soll
  127. const static int Hintergrund = 0x04; //! Legt fest, ob der Wert einen Hintergrund hat
  128. const static int HAlpha = 0x08; //! Legt fest, ob beim zeichnen des Hintergrundes Alphablending verwendet werden soll
  129. const static int Name = 0x10; //! Legt fest, ob der Name des Wertes gezeichnet werden soll
  130. };
  131. //! Style des Wertes
  132. int style;
  133. //! Farbe des Wertes
  134. int farbe;
  135. //! Hintergrundfarbe des Wertes
  136. int hintergrund;
  137. //! Name des Wertes
  138. Text* name;
  139. //! Punkte des Wertes
  140. Array< DiagPunkt* >* punkte;
  141. //! Konstruktor
  142. DLLEXPORT DiagWert();
  143. //! Destruktor
  144. DLLEXPORT ~DiagWert();
  145. };
  146. //! Daten für ein Diagramm
  147. struct DiagDaten : public virtual ReferenceCounter
  148. {
  149. class Style
  150. {
  151. public:
  152. const static int Sichtbar = 0x0001; //! Legt Fest, ob die Daten sichtbar sein sollen
  153. const static int Raster = 0x0002; //! Legt fest, ob ein Raster zur Orientierung angezeigt werden soll
  154. const static int RasterAlpha = 0x0004; //! Legt fest, ob zum Zeichnen des Rasters Alphablending verwendet werden soll
  155. const static int AutoIntervallHeight = 0x0008; //! Legt fest, dass alle Werte automatisch so auf der y Achse Skalliert werden, dass immer die komplette Höhe des Diagramms genutzt wird
  156. const static int AutoIntervallBreite = 0x0010; //! Legt fest, dass alle Wert automatisch so auf der x Achse Skalliert werden, dass immer die komplette Breite des Diagramms genutzt wird
  157. const static int HIntervall = 0x0020; //! Legt fest, ob die X Achse gezeichnet werden soll
  158. const static int VIntervall = 0x0040; //! Legt fest, ob die Y Achse gezeichnet werden soll
  159. const static int HIntervallTexte = 0x0200; //! Legt fest, ob spezielle Texte für die Werte der X Achse gezeichnet werden sollen
  160. const static int VIntervallTexte = 0x0400; //! Left fest, ob spezielle Texte für die Werte der Y Achse gezeichnet werden sollen
  161. const static int AutoRasterBreite = 0x0800; //! Legt fest, ob der Abstand zwischen den Vertikalen Linien des Rasters automatisch gewählt werden soll
  162. const static int AutoRasterHeight = 0x1000; //! Legt fest, ob der Abstand zwischen den Horizontalen Rasterlinien automatisch gewählt werden soll
  163. const static int intervalle = HIntervall | VIntervall; //! Vereiniegt die Flags HIntervall, VIntervall
  164. const static int intervallTexte = HIntervallTexte | VIntervallTexte; //! Vereint die Flags HIntervallTexte, VIntervallTexte
  165. const static int autoRaster = AutoRasterHeight | AutoRasterBreite | Raster; //! Vereint die Flags AutoRasterHöhe, AutoRasterBreite, Raster
  166. const static int autoIntervall = AutoIntervallHeight | AutoIntervallBreite; //! Vereint die Flags AutoIntervallHöhe, AutoIntervallBreite
  167. };
  168. //! Style eines Diagramms
  169. int style;
  170. //! Breite einer Rasterlinie
  171. int rasterDicke;
  172. //! Breite eines Rasterkästchens
  173. double rasterBreite;
  174. //! Höhe eines Rasterkästchens
  175. double rasterHeight;
  176. //! Farbe des Rasters
  177. int rasterFarbe;
  178. //! Schriftfarbe des Horizontalen Intervalls
  179. int hIntervallFarbe;
  180. //! Schriftfarbe des Vertikalen Intervalls
  181. int vIntervallFarbe;
  182. //! Name des Horizontalen Intervalls
  183. Text* hIntervallName;
  184. //! Name des Vertikalen Intervalls
  185. Text* vIntervallName;
  186. //! Anzeigen des Horizontalen Intervalls
  187. RCArray< Text >* hIntervallTexte;
  188. //! Anzeigen des Vertikalen Intervalls
  189. RCArray< Text >* vIntervallTexte;
  190. //! einzelne Horizontale Intervalle
  191. Array< double >* hIntervallWerte;
  192. //! einzelne Vertikale Intervalle
  193. Array< double >* vIntervallWerte;
  194. //! Breite des Wertes 1 in Pixeln bei dem horizontalen Intervall ( wird durch das setzen von AutoIntervallBreite überschrieben )
  195. double hIntervallBreite;
  196. //! Höhe des Wertes 1 in Pixeln bei dem vertikalen Intervall ( wird durch das setzen von AutoIntervallHöhe überschrieben )
  197. double vIntervallHeight;
  198. //! Werte, die in dem Diagramm visualisiert werden
  199. RCArray< DiagWert >* werte;
  200. //! Konstruktor
  201. DLLEXPORT DiagDaten();
  202. //! Destruktor
  203. DLLEXPORT ~DiagDaten();
  204. };
  205. //! Basisklasse der verschiedenen Diagramm Arten
  206. class BaseDiag
  207. {
  208. protected:
  209. DiagDaten* daten;
  210. bool changed;
  211. Critical* lock;
  212. public:
  213. //! Konstruktor
  214. //! \param lock Ein Zeiger zur Critical, mit der die Diagramm Klasse, die von dieser Klasse erbt Multithread sicher gemacht wird
  215. DLLEXPORT BaseDiag(Critical* lock);
  216. //! Destruktor
  217. DLLEXPORT virtual ~BaseDiag();
  218. //! Setzt einen Zeiger auf die Daten des Diagramms
  219. //! \param dd Die Daten
  220. DLLEXPORT void setDiagDatenZ(DiagDaten* dd);
  221. //! Kopiert die Daten eines Diagramms
  222. //! \param dd Die Daten
  223. DLLEXPORT void setDiagDaten(DiagDaten* dd);
  224. //! Rasterdicke setzen
  225. //! \param d Die Breite einer Rasterlinie in Pixeln
  226. DLLEXPORT void setRasterDicke(int d);
  227. //! Rasterbreite setzen
  228. //! \param br Der Abstand zwischen zwei Vertikalen Rasterlinien in Pixeln
  229. DLLEXPORT void setRasterBreite(int br);
  230. //! Rasterhöhe setzen
  231. //! \param hi Der Abstand zwischen zwei Horizontalen Rasterlinien in Pixeln
  232. DLLEXPORT void setRasterHeight(int hi);
  233. //! Rasterfarbe setzen
  234. //! \param f Die Farbe im A8R8G8B8 Format
  235. DLLEXPORT void setRasterFarbe(int f);
  236. //! Setzt die Intervall Breite
  237. //! \param br Der Abstand zwischen den Werten 0 und 1 auf der X Achse in Pixeln
  238. DLLEXPORT void setHIntervallBreite(double br);
  239. //! Setzt die Intervall Höhe
  240. //! \param hi Der Abstand zwischen den Werten 0 und 1 auf der Y Achse in Pixeln
  241. DLLEXPORT void setVIntervallHeight(double hi);
  242. //! Setzt die Farbe der X Achse
  243. //! \param f Die Farbe im A8R8G8B8 Format
  244. DLLEXPORT void setHIntervallFarbe(int f);
  245. //! Setzt die Farbe der Y Achse
  246. //! \param f Die Farbe im A8R8G8B8 Formats
  247. DLLEXPORT void setVIntervallFarbe(int f);
  248. //! Setzt den Namen der X Achse
  249. //! \param name Der Name
  250. DLLEXPORT void setHIntervallName(const char* name);
  251. //! Setzt den Namen der X Achse
  252. //! \param name Der Name
  253. DLLEXPORT void setHIntervallName(Text* name);
  254. //! Setzt den Namen der Y Achse
  255. //! \param name Der Name
  256. DLLEXPORT void setVIntervallName(const char* name);
  257. //! Setzt den Namen der Y Achse
  258. //! \param name Der Name
  259. DLLEXPORT void setVIntervallName(Text* name);
  260. //! Beschriftet einen Betimmten Wert der X Achse, falls der Flag HIntervallTexte in den DiagDaten gesetzt wurde
  261. //! \param hIntervall Der Wert, der beschriftet werden soll
  262. //! \param text Die Beschriftung
  263. DLLEXPORT void addHIntervallText(double hIntervall, const char* text);
  264. //! Beschriftet einen Betimmten Wert der X Achse, falls der Flag HIntervallTexte in den DiagDaten gesetzt wurde
  265. //! \param hIntervall Der Wert, der beschriftet werden soll
  266. //! \param text Die Beschriftung
  267. DLLEXPORT void addHIntervallText(double hIntervall, Text* text);
  268. //! setzt den Zeiger auf eine Beschriftung in einen Betimmten Wert der X Achse, falls der Flag HIntervallTexte in den DiagDaten gesetzt wurde
  269. //! \param hIntervall Der Wert, der beschriftet werden soll
  270. //! \param text Die Beschriftung
  271. DLLEXPORT void setHIntervallTextZ(double hIntervall, Text* text);
  272. //! Ändert eine Beschriftung in einen Betimmten Wert der X Achse, falls der Flag HIntervallTexte in den DiagDaten gesetzt wurde
  273. //! \param hIntervall Der Wert, der beschriftet werden soll
  274. //! \param text Die Beschriftung
  275. DLLEXPORT void setHIntervallText(double hIntervall, Text* text);
  276. //! Ändert eine Beschriftung in einen Betimmten Wert der X Achse, falls der Flag HIntervallTexte in den DiagDaten gesetzt wurde
  277. //! \param hIntervall Der Wert, der beschriftet werden soll
  278. //! \param text Die Beschriftung
  279. DLLEXPORT void setHIntervallText(double hIntervall, const char* text);
  280. //! Entfernt eine Beschriftung in einen Betimmten Wert der X Achse, falls der Flag HIntervallTexte in den DiagDaten gesetzt wurde
  281. //! \param hIntervall Der Wert, der nicht mehr beschriftet sein soll
  282. DLLEXPORT void removeHIntervallText(double hIntervall);
  283. //! Beschriftet einen Betimmten Wert der Y Achse, falls der Flag VIntervallTexte in den DiagDaten gesetzt wurde
  284. //! \param vIntervall Der Wert, der beschriftet werden soll
  285. //! \param text Die Beschriftung
  286. DLLEXPORT void addVIntervallText(double vIntervall, const char* text);
  287. //! Beschriftet einen Betimmten Wert der Y Achse, falls der Flag VIntervallTexte in den DiagDaten gesetzt wurde
  288. //! \param vIntervall Der Wert, der beschriftet werden soll
  289. //! \param text Die Beschriftung
  290. DLLEXPORT void addVIntervallText(double vIntervall, Text* text);
  291. //! setzt den Zeiger auf eine Beschriftung in einen Betimmten Wert der Y Achse, falls der Flag VIntervallTexte in den DiagDaten gesetzt wurde
  292. //! \param vIntervall Der Wert, der beschriftet werden soll
  293. //! \param text Die Beschriftung
  294. DLLEXPORT void setVIntervallTextZ(double vIntervall, Text* text);
  295. //! Ändert eine Beschriftung in einen Betimmten Wert der Y Achse, falls der Flag VIntervallTexte in den DiagDaten gesetzt wurde
  296. //! \param vIntervall Der Wert, der beschriftet werden soll
  297. //! \param text Die Beschriftung
  298. DLLEXPORT void setVIntervallText(double vIntervall, Text* text);
  299. //! Ändert eine Beschriftung in einen Betimmten Wert der Y Achse, falls der Flag VIntervallTexte in den DiagDaten gesetzt wurde
  300. //! \param vIntervall Der Wert, der beschriftet werden soll
  301. //! \param text Die Beschriftung
  302. DLLEXPORT void setVIntervallText(double vIntervall, const char* text);
  303. //! Entfernt eine Beschriftung in einen Betimmten Wert der Y Achse, falls der Flag VIntervallTexte in den DiagDaten gesetzt wurde
  304. //! \param vIntervall Der Wert, der nicht mehr beschriftet sein soll
  305. DLLEXPORT void removeVIntervallText(double vIntervall);
  306. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu
  307. //! \param w Der neue Wert
  308. DLLEXPORT void addWertZ(DiagWert* w);
  309. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu, indem ein anderer Kopiert wird
  310. //! \param w Der Wert, der Kopiert werden soll
  311. DLLEXPORT void addWert(DiagWert* w);
  312. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu
  313. //! \param name Der Name des Wertes
  314. DLLEXPORT void addWert(const char* name);
  315. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu
  316. //! \param name Der Name des Wertes
  317. DLLEXPORT void addWert(Text* txt);
  318. //! setzt die Farbe eines Wertes
  319. //! \param wNum Der Index des Wertes
  320. //! \param fc Die Farbe im A8R8G8B8 Format
  321. DLLEXPORT void setWertFarbe(int wNum, int fc);
  322. //! fügt einem Wert einen Punkt hinzu
  323. //! \param wNum Der Index des Wertes
  324. //! \param p Der neue Punkt
  325. DLLEXPORT void addPunktZ(int wNum, DiagPunkt* p);
  326. //! fügt einem Wert einen Punkt hinzu, indem ein Punkt kopiert wird
  327. //! \param wNum Der Index des Wertes
  328. //! \param p Der Punkt, der kopiert werden soll
  329. DLLEXPORT void addPunkt(int wNum, DiagPunkt* p);
  330. //! Fügt einem Wert einen Punkt hinzu
  331. //! \param wNum Der Index des Wertes
  332. //! \param hI Der Wert des Punktes auf der X Achse
  333. //! \param vI Der Wert des Punktes auf der Y Achse
  334. DLLEXPORT void addPunkt(int wNum, double hI, double vI);
  335. //! Setzt einen Zeiger auf einen vorhandenen Punkt eines Wertes
  336. //! \param wNum Der Index des Wertes
  337. //! \param hI Der Wert des Punktes auf der X Achse, der ersetzt werden soll
  338. //! \param p Der neue Punkt
  339. DLLEXPORT void setPunktZ(int wNum, double hI, DiagPunkt* p);
  340. //! Setzt einen vorhandenen Punkt eines Wertes, indem ein Punkt kopiert wird
  341. //! \param wNum Der Index des Wertes
  342. //! \param hI Der Wert des Punktes auf der X Achse, der ersetzt werden soll
  343. //! \param p Der neue Punkt
  344. DLLEXPORT void setPunkt(int wNum, double hI, DiagPunkt* p);
  345. //! Setzt einen vorhandenen Punkt eines Wertes
  346. //! \param wNum Der Index des Wertes
  347. //! \param hI Der Wert des Punktes auf der X Achse, der ersetzt werden soll
  348. //! \param h Der Wert auf der X Achse des neuen Punktes
  349. //! \param v Der Wert auf der Y Achse des neuen Punktes
  350. DLLEXPORT void setPunkt(int wNum, double hI, double h, double v);
  351. //! Setzt einen Zeiger auf einen vorhandenen Punkt eines Wertes
  352. //! \param wNum Der Index des Wertes
  353. //! \param pNum Der Index des Punktes im Wert
  354. //! \param p Der neue Punkt
  355. DLLEXPORT void setPunktZ(int wNum, int pNum, DiagPunkt* p);
  356. //! Setzt einen vorhandenen Punkt eines Wertes, indem ein Punkt kopiert wird
  357. //! \param wNum Der Index des Wertes
  358. //! \param pNum Der Index des Punktes im Wert
  359. //! \param p Der neue Punkt
  360. DLLEXPORT void setPunkt(int wNum, int pNum, DiagPunkt* p);
  361. //! Setzt einen vorhandenen Punkt eines Wertes
  362. //! \param wNum Der Index des Wertes
  363. //! \param pNum Der Index des Punktes im Wert
  364. //! \param h Der Wert auf der X Achse des neuen Punktes
  365. //! \param v Der Wert auf der Y Achse des neuen Punktes
  366. DLLEXPORT void setPunkt(int wNum, int pNum, double h, double v);
  367. //! Löscht einen vorhandenen Punkt
  368. //! \param wNum Der Index des Wertes
  369. //! \param hI Der Wert auf der X Achse des Punktes, der gelöscht werden soll
  370. DLLEXPORT void removePunkt(int wNum, double hI);
  371. //! Löscht einen vorhandenen Punkt
  372. //! \param wNum Der Index des Wertes
  373. //! \param pNum Der Index des Punktes im Wert
  374. DLLEXPORT void removePunkt(int wNum, int pNum);
  375. //! entfernt einen Wert
  376. //! \param wNum Der Index des Wertes
  377. DLLEXPORT void removeWert(int wNum);
  378. //! entfernt einen Wert
  379. //! \param name Der Name des Wertes
  380. DLLEXPORT void removeWert(const char* name);
  381. //! entfernt einen Wert
  382. //! \param name Der Name des Wertes
  383. DLLEXPORT void removeWert(Text* name);
  384. //! Fügt den DiagDaten bestimmte Styles hinzu
  385. //! \param style Die neuen Styles
  386. DLLEXPORT void addDatenStyle(int style);
  387. //! Setzt die Styles der DiagDaten
  388. //! \param style Die neuen Styles
  389. DLLEXPORT void setDatenStyle(int style);
  390. //! Setzt die Styles der DiagDaten
  391. //! \param style Die Styles
  392. //! \param addRemove 1, falls die Styles hinzugefügt werden sollem. 0, falls die Styles entfernt werden sollen
  393. DLLEXPORT void setDatenStyle(int style, bool addRemove);
  394. //! Entfernt Styles der DiagDaten
  395. //! \param style Die Styles, die entfernt werden sollen
  396. DLLEXPORT void removeDatenStyle(int style);
  397. //! Fügt einem bestimmten Wert bestimmte Styles hinzu
  398. //! \param wNum Der Index des Wertes
  399. //! \param style Die neuen Styles
  400. DLLEXPORT void addWertStyle(int wNum, int style);
  401. //! Setzt die Styles eines Bestimmten Wertes
  402. //! \param wNum Der Index des Wertes
  403. //! \param style Die neuen Styles
  404. DLLEXPORT void setWertStyle(int wNum, int style);
  405. //! Setzt die Styles eines Bestimmten Wertes
  406. //! \param wNum Der Index des Wertes
  407. //! \param style Die Styles
  408. //! \param addRemove 1, falls die Styles hinzugefügt werden sollem. 0, falls die Styles entfernt werden sollen
  409. DLLEXPORT void setWertStyle(int wNum, int style, bool addRemove);
  410. //! Entfernt Styles eines Bestimmten Wertes
  411. //! \param wNum Der Index des Wertes
  412. //! \param style Die Styles, die entfernt werden sollen
  413. DLLEXPORT void removeWertStyle(int wNum, int style);
  414. //! Gibt die Daten des Diagramms zurück
  415. DLLEXPORT DiagDaten* getDiagDaten() const;
  416. //! Gibt die Daten des Diagramms ohne erhöhten Reference Counter zurück
  417. DLLEXPORT DiagDaten* zDiagDaten() const;
  418. //! Gibt die Daten eines Wertes zurück
  419. //! \param wNum Der Index des Wertes
  420. DLLEXPORT DiagWert* getDiagWert(int wNum) const;
  421. //! Gibt die Daten eines Wertes ohne erhöhten Reference Counter zurück
  422. //! \param wNum Der Index des Wertes
  423. DLLEXPORT DiagWert* zDiagWert(int wNum) const;
  424. //! Gibt die Daten eines Wertes zurück
  425. //! \param name Der Name des Wertes
  426. DLLEXPORT DiagWert* getDiagWert(const char* name) const;
  427. //! Gibt die Daten eines Wertes ohne erhöhten Reference Counter zurück
  428. //! \param name Der Name des Wertes
  429. DLLEXPORT DiagWert* zDiagWert(const char* name) const;
  430. //! Gibt den Index eines Wertes zurück
  431. //! \param name Der Name des Wertes
  432. DLLEXPORT int getDiagWertPos(const char* name) const;
  433. //! Gibt den Index eines Punktes von einem Wert zurück
  434. //! \param wNum Der Index des Wertes
  435. //! \param hI Der Wert auf der X Achse des Punktes
  436. DLLEXPORT int getDiagPunktPos(int wNum, double hI) const;
  437. //! Gibt den Index eines Punktes von einem Wert zurück
  438. //! \param wName Der Name des Wertes
  439. //! \param hI Der Wert auf der X Achse des Punktes
  440. DLLEXPORT int getDiagPunktPos(char* wName, double hI) const;
  441. //! Prüft, ob bestimmte Styles in den DiagDaten gesetzt wurden
  442. //! \param style Die Styles
  443. DLLEXPORT inline bool hatDatenStyle(int style) const;
  444. //! Prüft, ob bestimmte Styles in den DiagDaten nicht gesetzt wurden
  445. //! \param style Die Styles
  446. DLLEXPORT inline bool hatDatenStyleNicht(int style) const;
  447. //! Prüft, ob bestimmte Styles für einen bestimmten Wert gesetzt wurden
  448. //! \param wNum Der Index des Wertes
  449. //! \param style Die Styles
  450. DLLEXPORT inline bool hatWertStyle(int wNum, int style) const;
  451. //! Prüft, ob bestimmte Styles für einen bestimmten Wert nicht gesetzt wurden
  452. //! \param wNum Der Index des Wertes
  453. //! \param style Die Styles
  454. DLLEXPORT inline bool hatWertStyleNicht(int wNum, int style) const;
  455. };
  456. //! Eine Zeichnung des 2D GUI Frameworks, die die Diagrammdaten als Liniengraphen darstellt
  457. class LDiag : public ZeichnungHintergrund, public BaseDiag
  458. {
  459. public:
  460. class Style : public ZeichnungHintergrund::Style
  461. {
  462. public:
  463. const static __int64 DatenRahmen = 0x0001000; //! Legt fest, ob um die daten ein Rahmen gezeichnet wird
  464. const static __int64 DatenHintergrund = 0x02000; //! legt fest, ob die Daten einen Hintergrund haben
  465. const static __int64 DatenHAlpha = 0x04000; //! legt fest, ob beim zeichnen des Hintergrunds der Daten alpha blending benutzt wird
  466. const static __int64 DatenHBild = 0x008000; //! Legt fest, ob für den Hintergrund der Daten ein Bild verwendet werden soll
  467. const static __int64 DatenBuffered = 0x010000; //! Legt fest, ob die Daten einen Farbübergang haben
  468. const static __int64 scroll = VScroll | HScroll; //! Vereint die Flags VScroll und HScroll
  469. const static __int64 normal = Hintergrund | scroll | DatenRahmen; //! Vereint die Flags Hintergrund, scroll, DatenRahmen
  470. };
  471. private:
  472. TextRenderer* textRd;
  473. Rahmen* dRam;
  474. int dBgF;
  475. Bild* dBgB;
  476. AlphaFeld* dAf;
  477. Bild* vIntervallRB;
  478. Bild* hIntervallRB;
  479. int schriftGr;
  480. //! Verarbeitet Maus Nachrichten
  481. //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  482. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  483. public:
  484. //! Konstruktor
  485. DLLEXPORT LDiag();
  486. //! Destruktor
  487. DLLEXPORT virtual ~LDiag();
  488. //! Setzt den verwendeten TextRenderer
  489. //! \param textRd Der Textrenderer
  490. DLLEXPORT void setTextRendererZ(TextRenderer* textRd);
  491. //! Setzt die Schrift
  492. //! \param schrift Die Schrift
  493. DLLEXPORT void setSchriftZ(Schrift* schrift);
  494. //! Setzt die größe der Schrift
  495. //! \param gr Die Höhe einer Zeile in Pixeln
  496. DLLEXPORT void setSchriftSize(int gr);
  497. //! Setzt den inneren Rahmen um das eigentliche Diagramm (Rahmen um die Daten)
  498. //! \param ram Der Rahmen
  499. DLLEXPORT void setDatenRahmenZ(Rahmen* ram);
  500. //! Setzt den inneren Rahmen um das eigentliche Diagramm (Rahmen um die Daten), indem ein Rahmen kopiert wird
  501. //! \param ram Der Rahmen, der kopiert werden soll
  502. DLLEXPORT void setDatenRahmen(Rahmen* ram);
  503. //! Setzt die Breite des inneren Rahmen um das eigentliche Diagramm (Rahmen um die Daten)
  504. //! \param br Die Breite in Pixeln
  505. DLLEXPORT void setDatenRahmenBreite(int br);
  506. //! Setzt die Farbe des inneren Rahmen um das eigentliche Diagramm (Rahmen um die Daten)
  507. //! \param fc Die Farbe im A8R8G8B8 Format
  508. DLLEXPORT void setDatenRahmenFarbe(int fc);
  509. //! Setzt den Hintergrund des eigentlichen Diagramms
  510. DLLEXPORT void setDatenHintergrundFarbe(int fc);
  511. DLLEXPORT void setDatenHintergrundBildZ(Bild* b);
  512. DLLEXPORT void setDatenHintergrundBild(Bild* b);
  513. //! Setzt den Farbübergang des eigentlichen Diagramms (Farbübergang der Daten)
  514. //! \param af Der Farbübergang
  515. DLLEXPORT void setDatenAlphaFeldZ(AlphaFeld* af);
  516. //! Setzt den Farbübergang des eigentlichen Diagramms (Farbübergang der Daten), indem ein Farbübergang kopiert wird
  517. //! \param af Der Farbübergang, der Kopiert werden soll
  518. DLLEXPORT void setDatenAlphaFeld(AlphaFeld* af);
  519. //! Setzt die Farbe des Farbübergangs des eigentlichen Diagramms (Farbübergang der Daten)
  520. //! \param fc Die Farbe im A8R8G8B8 Format
  521. DLLEXPORT void setDatenAlphaFeldFarbe(int fc);
  522. //! Setzt die FaStärkerbe des Farbübergangs des eigentlichen Diagramms (Farbübergang der Daten)
  523. //! \param st Die Stärke
  524. DLLEXPORT void setDatenAlphaFeldStrength(int st);
  525. //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  526. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  527. DLLEXPORT void render(Bild& zRObj) override;
  528. //! Gibt die Schrift zurück
  529. DLLEXPORT Schrift* getSchrift() const;
  530. //! Gibt die Schrift ohne erhöhten Reference Counter zurück
  531. DLLEXPORT Schrift* zSchrift() const;
  532. //! Gibt den inneren Rahmen um das eigentliche Diagramm zurück (Rahmen um die Daten)
  533. DLLEXPORT Rahmen* getDatenRahmen() const;
  534. //! Gibt den inneren Rahmen um das eigentliche Diagramm ohne erhöhten Reference Counter zurück (Rahmen um die Daten)
  535. DLLEXPORT Rahmen* zDatenRahmen() const;
  536. //! Gibt die Farbe des inneren Rahmens um das eigentliche Diagramm im A8R8G8B8 Format zurück (Rahmen um die Daten)
  537. DLLEXPORT int getDatenRahmenFarbe() const;
  538. //! Gibt die Breite des inneren Rahmens um das eigentliche Diagramm in Pixeln zurück (Rahmen um die Daten)
  539. DLLEXPORT int getDatenRahmenBreite() const;
  540. //! Gibt die Farbe des Hintergrunds des eigentlichen Diagramms im A8R8G8B8 Format zurück (Hintergrund der Daten)
  541. DLLEXPORT int getDatenHintergrundFarbe() const;
  542. //! Gibt das Hintergrund Bild des eigentlichen Diagramms zurück (Hintergrund Bild der Daten)
  543. DLLEXPORT Bild* getDatenHintergrundBild() const;
  544. //! Gibt das Hintergrund Bild des eigentlichen Diagramms ohne erhöhten Reference Counter zurück (Hintergrund Bild der Daten)
  545. DLLEXPORT Bild* zDatenHintergrundBild() const;
  546. //! Gibt den Farbübergang des eigentlichen Diagramms zurück (Farbübergang der Daten)
  547. DLLEXPORT AlphaFeld* getDatenAlphaFeld() const;
  548. //! Gibt den Farbübergang des eigentlichen Diagramms ohne erhöhten Reference Counter zurück (Farbübergang der Daten)
  549. DLLEXPORT AlphaFeld* zDatenAlphaFeld() const;
  550. //! Gibt die Farbe des Farbübergangs des eigentlichen Diagramms im A8R8G8B8 Format zurück (Farbübergang der Daten)
  551. DLLEXPORT int getDatenAlphaFeldFarbe() const;
  552. //! Gibt die Stärke des Farbübergangs des eigentlichen Diagramms zurück (Farbübergang der Daten)
  553. DLLEXPORT int getDatenAlphaFeldStrength() const;
  554. };
  555. }
  556. #endif