Diagramm.h 32 KB

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