Diagramm.h 33 KB

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