Diagramm.h 32 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. DLLEXPORT SLDiag();
  42. //! Destruktor
  43. DLLEXPORT virtual ~SLDiag();
  44. //! Setzt den verwendeten TextRenderer
  45. //! \param textRd Der Textrenderer
  46. DLLEXPORT void setTextRendererZ( TextRenderer *textRd );
  47. //! Setzt einen Zeiger zur verwendeten Schrift
  48. //! \param schrift Die Schrift
  49. 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. DLLEXPORT void setGSize( Punkt &gr );
  53. //! Setzt die Farbe der Raster Linien
  54. //! \param f Die Farbe im A8R8G8B8 Format
  55. 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. 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. 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. 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. DLLEXPORT void addPunkt( int lNum, int x, int h );
  71. //! Entfernt einen Graphen
  72. //! \param lNum Der Index des Graphen
  73. DLLEXPORT void removeLinie( int lNum );
  74. //! Zeichnet das Diagramm
  75. //! \param zRObj Das Bild, in das gezeichnet werden soll
  76. DLLEXPORT void render( Bild &zRObj ) override;
  77. //! Gibt die verwendete Schrift zurück
  78. DLLEXPORT Schrift *getSchrift() const;
  79. //! Gibt die verwendete Schrift ohne erhöhten Reference Counter zurück
  80. 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. DLLEXPORT const Punkt &getGSize() const;
  83. //! Gibt die Farbe des Gitters in A8R8G8B8 Format zurück
  84. DLLEXPORT int getGFarbe() const;
  85. //! Gibt den Index eines Graphen zurück
  86. //! \param name Der Name des Graphen
  87. DLLEXPORT int getLinienNummer( const char *name ) const;
  88. //! Gibt den Index eines Graphen zurück
  89. //! \param name Der Name des Graphen
  90. DLLEXPORT int getLinienNummer( Text *name ) const;
  91. //! Gibt den Namen eines Graphen zurück
  92. //! \param lNum Der Index des Graphen
  93. 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. DLLEXPORT Text *zLinienNamen( int lNum ) const;
  97. //! Gibt den Höchsten y Wert von allen Graphen zurück
  98. 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. 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. DLLEXPORT int getMedian( int lNum ) const;
  105. //! Gibt die Anzahl an Graphen zurück
  106. DLLEXPORT int getLAnzahl() const;
  107. //! Gibt den y Wert des letzten Punktes eines Graphen zurück
  108. //! \param lNum Der Index des Graphen
  109. DLLEXPORT int getLastValue( int lNum ) const;
  110. //! Erhöht den Reference Counting Zähler.
  111. //! \return this.
  112. 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. 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. DLLEXPORT DiagWert();
  150. //! Destruktor
  151. DLLEXPORT ~DiagWert();
  152. //! Erhöht den Reference Counting Zähler.
  153. //! \return this.
  154. 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. 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. DLLEXPORT DiagDaten();
  218. //! Destruktor
  219. DLLEXPORT ~DiagDaten();
  220. //! Erhöht den Reference Counting Zähler.
  221. //! \return this.
  222. 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. 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. DLLEXPORT BaseDiag( Critical *lock );
  241. //! Destruktor
  242. DLLEXPORT virtual ~BaseDiag();
  243. //! Setzt einen Zeiger auf die Daten des Diagramms
  244. //! \param dd Die Daten
  245. DLLEXPORT void setDiagDatenZ( DiagDaten *dd );
  246. //! Kopiert die Daten eines Diagramms
  247. //! \param dd Die Daten
  248. DLLEXPORT void setDiagDaten( DiagDaten *dd );
  249. //! Rasterdicke setzen
  250. //! \param d Die Breite einer Rasterlinie in Pixeln
  251. DLLEXPORT void setRasterDicke( int d );
  252. //! Rasterbreite setzen
  253. //! \param br Der Abstand zwischen zwei Vertikalen Rasterlinien in Pixeln
  254. DLLEXPORT void setRasterBreite( int br );
  255. //! Rasterhöhe setzen
  256. //! \param hi Der Abstand zwischen zwei Horizontalen Rasterlinien in Pixeln
  257. DLLEXPORT void setRasterHeight( int hi );
  258. //! Rasterfarbe setzen
  259. //! \param f Die Farbe im A8R8G8B8 Format
  260. 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. 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. DLLEXPORT void setVIntervallHeight( double hi );
  267. //! Setzt die Farbe der X Achse
  268. //! \param f Die Farbe im A8R8G8B8 Format
  269. DLLEXPORT void setHIntervallFarbe( int f );
  270. //! Setzt die Farbe der Y Achse
  271. //! \param f Die Farbe im A8R8G8B8 Formats
  272. DLLEXPORT void setVIntervallFarbe( int f );
  273. //! Setzt den Namen der X Achse
  274. //! \param name Der Name
  275. DLLEXPORT void setHIntervallName( char *name );
  276. //! Setzt den Namen der X Achse
  277. //! \param name Der Name
  278. DLLEXPORT void setHIntervallName( Text *name );
  279. //! Setzt den Namen der Y Achse
  280. //! \param name Der Name
  281. DLLEXPORT void setVIntervallName( char *name );
  282. //! Setzt den Namen der Y Achse
  283. //! \param name Der Name
  284. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. DLLEXPORT void removeVIntervallText( double vIntervall );
  331. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu
  332. //! \param w Der neue Wert
  333. 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. DLLEXPORT void addWert( DiagWert *w );
  337. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu
  338. //! \param name Der Name des Wertes
  339. DLLEXPORT void addWert( const char *name );
  340. //! Fügt einen im Diagramm dargestellten Wert (Graph) hinzu
  341. //! \param name Der Name des Wertes
  342. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. DLLEXPORT void removePunkt( int wNum, int pNum );
  400. //! entfernt einen Wert
  401. //! \param wNum Der Index des Wertes
  402. DLLEXPORT void removeWert( int wNum );
  403. //! entfernt einen Wert
  404. //! \param name Der Name des Wertes
  405. DLLEXPORT void removeWert( char *name );
  406. //! entfernt einen Wert
  407. //! \param name Der Name des Wertes
  408. DLLEXPORT void removeWert( Text *name );
  409. //! Fügt den DiagDaten bestimmte Styles hinzu
  410. //! \param style Die neuen Styles
  411. DLLEXPORT void addDatenStyle( int style );
  412. //! Setzt die Styles der DiagDaten
  413. //! \param style Die neuen Styles
  414. 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. DLLEXPORT void setDatenStyle( int style, bool addRemove );
  419. //! Entfernt Styles der DiagDaten
  420. //! \param style Die Styles, die entfernt werden sollen
  421. 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. 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. 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. 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. DLLEXPORT void removeWertStyle( int wNum, int style );
  439. //! Gibt die Daten des Diagramms zurück
  440. DLLEXPORT DiagDaten *getDiagDaten() const;
  441. //! Gibt die Daten des Diagramms ohne erhöhten Reference Counter zurück
  442. DLLEXPORT DiagDaten *zDiagDaten() const;
  443. //! Gibt die Daten eines Wertes zurück
  444. //! \param wNum Der Index des Wertes
  445. 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. DLLEXPORT DiagWert *zDiagWert( int wNum ) const;
  449. //! Gibt die Daten eines Wertes zurück
  450. //! \param name Der Name des Wertes
  451. 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. DLLEXPORT DiagWert *zDiagWert( char *name ) const;
  455. //! Gibt den Index eines Wertes zurück
  456. //! \param name Der Name des Wertes
  457. 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. 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. 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. 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. 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. 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. 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. DLLEXPORT void doMausEreignis( MausEreignis &me, bool userRet ) override;
  508. public:
  509. //! Konstruktor
  510. DLLEXPORT LDiag();
  511. //! Destruktor
  512. DLLEXPORT virtual ~LDiag();
  513. //! Setzt den verwendeten TextRenderer
  514. //! \param textRd Der Textrenderer
  515. DLLEXPORT void setTextRendererZ( TextRenderer *textRd );
  516. //! Setzt die Schrift
  517. //! \param schrift Die Schrift
  518. DLLEXPORT void setSchriftZ( Schrift *schrift );
  519. //! Setzt die größe der Schrift
  520. //! \param gr Die Höhe einer Zeile in Pixeln
  521. DLLEXPORT void setSchriftSize( int gr );
  522. //! Setzt den inneren Rahmen um das eigentliche Diagramm (Rahmen um die Daten)
  523. //! \param ram Der Rahmen
  524. 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. 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. 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. DLLEXPORT void setDatenRahmenFarbe( int fc );
  534. //! Setzt den Hintergrund des eigentlichen Diagramms
  535. DLLEXPORT void setDatenHintergrundFarbe( int fc );
  536. DLLEXPORT void setDatenHintergrundBildZ( Bild *b );
  537. DLLEXPORT void setDatenHintergrundBild( Bild *b );
  538. //! Setzt den Farbübergang des eigentlichen Diagramms (Farbübergang der Daten)
  539. //! \param af Der Farbübergang
  540. 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. 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. 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. 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. DLLEXPORT void render( Bild &zRObj ) override;
  553. //! Gibt die Schrift zurück
  554. DLLEXPORT Schrift *getSchrift() const;
  555. //! Gibt die Schrift ohne erhöhten Reference Counter zurück
  556. DLLEXPORT Schrift *zSchrift() const;
  557. //! Gibt den inneren Rahmen um das eigentliche Diagramm zurück (Rahmen um die Daten)
  558. 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. 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. DLLEXPORT int getDatenRahmenFarbe() const;
  563. //! Gibt die Breite des inneren Rahmens um das eigentliche Diagramm in Pixeln zurück (Rahmen um die Daten)
  564. DLLEXPORT int getDatenRahmenBreite() const;
  565. //! Gibt die Farbe des Hintergrunds des eigentlichen Diagramms im A8R8G8B8 Format zurück (Hintergrund der Daten)
  566. DLLEXPORT int getDatenHintergrundFarbe() const;
  567. //! Gibt das Hintergrund Bild des eigentlichen Diagramms zurück (Hintergrund Bild der Daten)
  568. DLLEXPORT Bild *getDatenHintergrundBild() const;
  569. //! Gibt das Hintergrund Bild des eigentlichen Diagramms ohne erhöhten Reference Counter zurück (Hintergrund Bild der Daten)
  570. DLLEXPORT Bild *zDatenHintergrundBild() const;
  571. //! Gibt den Farbübergang des eigentlichen Diagramms zurück (Farbübergang der Daten)
  572. DLLEXPORT AlphaFeld *getDatenAlphaFeld() const;
  573. //! Gibt den Farbübergang des eigentlichen Diagramms ohne erhöhten Reference Counter zurück (Farbübergang der Daten)
  574. DLLEXPORT AlphaFeld *zDatenAlphaFeld() const;
  575. //! Gibt die Farbe des Farbübergangs des eigentlichen Diagramms im A8R8G8B8 Format zurück (Farbübergang der Daten)
  576. DLLEXPORT int getDatenAlphaFeldFarbe() const;
  577. //! Gibt die Stärke des Farbübergangs des eigentlichen Diagramms zurück (Farbübergang der Daten)
  578. DLLEXPORT int getDatenAlphaFeldStrength() const;
  579. };
  580. }
  581. #endif