Diagramm.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. #ifndef Diagramm_H
  2. #define Diagramm_H
  3. #include "Zeichnung.h"
  4. #include "Array.h"
  5. namespace Framework
  6. {
  7. class LRahmen; // Rahmen.h
  8. class AlphaFeld; // AlphaFeld.h
  9. class Text; // Text.h
  10. class Schrift; // Schrift.h
  11. class HScrollBar; // Scroll.h
  12. class VScrollBar; // Scroll.h
  13. class SLDiag; // aus dieser Datei
  14. class LDiag; // aus dieser Datei
  15. class SLDiag : public ZeichnungHintergrund
  16. {
  17. public:
  18. class Style : public ZeichnungHintergrund::Style
  19. {
  20. public:
  21. const static __int64 Gitter = 0x01000;
  22. const static __int64 LinienName = 0x02000;
  23. const static __int64 normal = Sichtbar | Hintergrund | Rahmen | Gitter | LinienName;
  24. };
  25. private:
  26. int gF;
  27. Array< int > *lFarbe;
  28. RCArray< Text > *lName;
  29. RCArray< Array< int > > *ph;
  30. RCArray< Array< int > > *pb;
  31. Array< int > *lastValue;
  32. Schrift *schrift;
  33. Punkt gitterGr;
  34. int lines;
  35. int ref;
  36. public:
  37. // Konstruktor
  38. __declspec( dllexport ) SLDiag();
  39. // Destruktor
  40. __declspec( dllexport ) ~SLDiag();
  41. // nicht constant
  42. __declspec( dllexport ) void setSchriftZ( Schrift *schrift ); // setzt die Schrift
  43. __declspec( dllexport ) void setGGröße( Punkt &gr ); // setzt die Größe des Gitters
  44. __declspec( dllexport ) void setGFarbe( int f ); // setzt die Gitter Farbe
  45. __declspec( dllexport ) void addLinie( const char *name ); // fügt eine Linie hinzu
  46. __declspec( dllexport ) void addLinie( Text *txt );
  47. __declspec( dllexport ) void setLFarbe( int lNum, int f ); // setzt die Linienfarbe
  48. __declspec( dllexport ) void addPunkt( int lNum, int x, int h ); // fügt einen Punkt hinzu
  49. __declspec( dllexport ) void removeLinie( int lNum ); // entfernt eine Linie
  50. __declspec( dllexport ) void render( Bild &zRObj ) override; // zeichnet nach zRObj
  51. // constant
  52. __declspec( dllexport ) Schrift *getSchrift() const; // gibt die Schrift zurück
  53. __declspec( dllexport ) Schrift *zSchrift() const;
  54. __declspec( dllexport ) const Punkt &getGGröße() const; // gibt die Gitter Größe zurück
  55. __declspec( dllexport ) int getGFarbe() const; // gibt die Gitter Farbe zurück
  56. __declspec( dllexport ) int getLinienNummer( const char *name ) const; // gibt die Linien Nummer zurück
  57. __declspec( dllexport ) int getLinienNummer( Text *name ) const;
  58. __declspec( dllexport ) Text *getLinienName( int lNum ) const; // gibt den Linien Namen zurück
  59. __declspec( dllexport ) Text *zLinienNamen( int lNum ) const;
  60. __declspec( dllexport ) int getHöchstValue() const; // gibt den Höchsten Wert zurück
  61. __declspec( dllexport ) int getHöchstValue( int lNum ) const;
  62. __declspec( dllexport ) int getMedian( int lNum ) const; // gibt den durchschnittswert zurück
  63. __declspec( dllexport ) int getLAnzahl() const; // gibt die Linien Anzahl zurück
  64. __declspec( dllexport ) int getLastValue( int lNum ) const; // gibt den letzten Wert zurück
  65. // Reference Counting
  66. __declspec( dllexport ) SLDiag *getThis();
  67. __declspec( dllexport ) SLDiag *release();
  68. };
  69. // Punkt eines Wertes eines Diagramms
  70. struct DiagPunkt
  71. {
  72. // Position des Punktes auf dem Horizontalen Intervall des Diagramms
  73. double hIntervall;
  74. // Position des punktes auf dem Vertikalen Intervall des Diagramms
  75. double vIntervall;
  76. };
  77. // Wert der in einem Diagramm visualisiert wird
  78. struct DiagWert
  79. {
  80. // Style eines Diagramm Wertes
  81. class Style
  82. {
  83. public:
  84. const static int Sichtbar = 0x01;
  85. const static int Alpha = 0x02;
  86. const static int Hintergrund = 0x04;
  87. const static int HAlpha = 0x08;
  88. const static int Name = 0x10;
  89. };
  90. // Style des Wertes
  91. int style;
  92. // Farbe des Wertes
  93. int farbe;
  94. // Hintergrundfarbe des Wertes
  95. int hintergrund;
  96. // Name des Wertes
  97. Text *name;
  98. // Punkte des Wertes
  99. Array< DiagPunkt* > *punkte;
  100. // Konstruktor
  101. __declspec( dllexport ) DiagWert();
  102. // Destruktor
  103. __declspec( dllexport ) ~DiagWert();
  104. // Referenc Counting
  105. __declspec( dllexport ) DiagWert *getThis();
  106. __declspec( dllexport ) DiagWert *release();
  107. private:
  108. // Reference Counting
  109. int ref;
  110. };
  111. // Daten für ein Diagramm
  112. struct DiagDaten
  113. {
  114. class Style
  115. {
  116. public:
  117. const static int Sichtbar = 0x0001;
  118. const static int Raster = 0x0002;
  119. const static int RasterAlpha = 0x0004;
  120. const static int AutoIntervallHöhe = 0x0008;
  121. const static int AutoIntervallBreite = 0x0010;
  122. const static int HIntervall = 0x0020;
  123. const static int VIntervall = 0x0040;
  124. const static int HIntervallTexte = 0x0200;
  125. const static int VIntervallTexte = 0x0400;
  126. const static int AutoRasterBreite = 0x0800;
  127. const static int AutoRasterHöhe = 0x1000;
  128. const static int intervalle = 0x0060;
  129. const static int intervallTexte = 0x0600;
  130. const static int autoRaster = 0x1802;
  131. const static int autoIntervall = 0x0018;
  132. };
  133. // Style eines Diagramms
  134. int style;
  135. // Breite einer Rasterlinie
  136. int rasterDicke;
  137. // Breite eines Rasterkästchens
  138. double rasterBreite;
  139. // Höhe eines Rasterkästchens
  140. double rasterHöhe;
  141. // Farbe des Rasters
  142. int rasterFarbe;
  143. // Schriftfarbe des Horizontalen Intervalls
  144. int hIntervallFarbe;
  145. // Schriftfarbe des Vertikalen Intervalls
  146. int vIntervallFarbe;
  147. // Name des Horizontalen Intervalls
  148. Text *hIntervallName;
  149. // Name des Vertikalen Intervalls
  150. Text *vIntervallName;
  151. // Anzeigen des Horizontalen Intervalls
  152. RCArray< Text > *hIntervallTexte;
  153. // Anzeigen des Vertikalen Intervalls
  154. RCArray< Text > *vIntervallTexte;
  155. // einzelne Horizontale Intervalle
  156. Array< double > *hIntervallWerte;
  157. // einzelne Vertikale Intervalle
  158. Array< double > *vIntervallWerte;
  159. // Breite des Wertes 1 in Pixeln bei dem horizontalen Intervall ( wird durch das setzen von AutoIntervallBreite überschrieben )
  160. double hIntervallBreite;
  161. // Höhe des Wertes 1 in Pixeln bei dem vertikalen Intervall ( wird durch das setzen von AutoIntervallHöhe überschrieben )
  162. double vIntervallHöhe;
  163. // Werte, die in dem Diagramm visualisiert werden
  164. RCArray< DiagWert > *werte;
  165. // Konstruktor
  166. __declspec( dllexport ) DiagDaten();
  167. // Destruktor
  168. __declspec( dllexport ) ~DiagDaten();
  169. // Referenc Counting
  170. __declspec( dllexport ) DiagDaten *getThis();
  171. __declspec( dllexport ) DiagDaten *release();
  172. private:
  173. // Reference Counting
  174. int ref;
  175. };
  176. // Basisklasse der verschiedenen Diagramm Arten
  177. class BaseDiag
  178. {
  179. protected:
  180. DiagDaten *daten;
  181. bool changed;
  182. CRITICAL_SECTION *lock;
  183. int ref;
  184. public:
  185. // Konstruktor
  186. __declspec( dllexport ) BaseDiag( CRITICAL_SECTION *lock );
  187. // Destruktor
  188. __declspec( dllexport ) ~BaseDiag();
  189. // nicht constant
  190. // Setzt einen Zeiger auf die Daten des Diagramms
  191. __declspec( dllexport ) void setDiagDatenZ( DiagDaten *dd );
  192. // Kopiert die Daten eines Diagramms
  193. __declspec( dllexport ) void setDiagDaten( DiagDaten *dd );
  194. // Rasterdicke setzen
  195. __declspec( dllexport ) void setRasterDicke( int d );
  196. // Rasterbreite setzen
  197. __declspec( dllexport ) void setRasterBreite( int br );
  198. // Rasterhöhe setzen
  199. __declspec( dllexport ) void setRasterHöhe( int hö );
  200. // Rasterfarbe setzen
  201. __declspec( dllexport ) void setRasterFarbe( int f );
  202. // Intervall Breite
  203. __declspec( dllexport ) void setHIntervallBreite( double br );
  204. // Intervall Höhe
  205. __declspec( dllexport ) void setVIntervallHöhe( double hö );
  206. // Farbe des Horizontalen Intervalls
  207. __declspec( dllexport ) void setHIntervallFarbe( int f );
  208. // Farbe des Vertikalen Intervalls
  209. __declspec( dllexport ) void setVIntervallFarbe( int f );
  210. // Setzt den Namen des Horizontalen Intervalls
  211. __declspec( dllexport ) void setHIntervallName( char *name );
  212. __declspec( dllexport ) void setHIntervallName( Text *name );
  213. // Setzt den Namen des Vertikalen Intervalls
  214. __declspec( dllexport ) void setVIntervallName( char *name );
  215. __declspec( dllexport ) void setVIntervallName( Text *name );
  216. // Text eines Horizontalen Intervalls hinzufügen
  217. __declspec( dllexport ) void addHIntervallText( double hIntervall, char *text );
  218. __declspec( dllexport ) void addHIntervallText( double hIntervall, Text *text );
  219. // Setzt den Text eines Horizontalen Intervalls
  220. __declspec( dllexport ) void setHIntervallTextZ( double hIntervall, Text *text );
  221. __declspec( dllexport ) void setHIntervallText( double hIntervall, Text *text );
  222. __declspec( dllexport ) void setHIntervallText( double hIntervall, char *text );
  223. // Text eines Horizontalen Intervalls entfernen
  224. __declspec( dllexport ) void löscheHIntervallText( double hIntervall );
  225. // Text eines Vertikalen Intervalls hinzufügen
  226. __declspec( dllexport ) void addVIntervallText( double vIntervall, char *text );
  227. __declspec( dllexport ) void addVIntervallText( double vIntervall, Text *text );
  228. // Setzt den Text eines Vertikalen Intervalls
  229. __declspec( dllexport ) void setVIntervallTextZ( double vIntervall, Text *text );
  230. __declspec( dllexport ) void setVIntervallText( double vIntervall, Text *text );
  231. __declspec( dllexport ) void setVIntervallText( double vIntervall, char *text );
  232. // Text eines Vertikalen Intervalls entfernen
  233. __declspec( dllexport ) void löscheVIntervallText( double vIntervall );
  234. // Fügt einen Wert hinzu
  235. __declspec( dllexport ) void addWertZ( DiagWert *w );
  236. __declspec( dllexport ) void addWert( DiagWert *w );
  237. __declspec( dllexport ) void addWert( const char *name );
  238. __declspec( dllexport ) void addWert( Text *txt );
  239. // setzt die Farbe eines Wertes
  240. __declspec( dllexport ) void setWertFarbe( int wNum, int fc );
  241. // fügt einem Wert einen Punkt hinzu
  242. __declspec( dllexport ) void addPunktZ( int wNum, DiagPunkt *p );
  243. __declspec( dllexport ) void addPunkt( int wNum, DiagPunkt *p );
  244. __declspec( dllexport ) void addPunkt( int wNum, double hI, double vI );
  245. // Ändert einen vorhandenen Punkt eines Wertes
  246. __declspec( dllexport ) void setPunktZ( int wNum, double hI, DiagPunkt *p );
  247. __declspec( dllexport ) void setPunkt( int wNum, double hI, DiagPunkt *p );
  248. __declspec( dllexport ) void setPunkt( int wNum, double hI, double h, double v );
  249. __declspec( dllexport ) void setPunktZ( int wNum, int pNum, DiagPunkt *p );
  250. __declspec( dllexport ) void setPunkt( int wNum, int pNum, DiagPunkt *p );
  251. __declspec( dllexport ) void setPunkt( int wNum, int pNum, double h, double v );
  252. // Löscht einen vorhandenen Punkt
  253. __declspec( dllexport ) void löschePunkt( int wNum, double hI );
  254. __declspec( dllexport ) void löschePunkt( int wNum, int pNum );
  255. // entfernt einen Wert
  256. __declspec( dllexport ) void removeWert( int wNum );
  257. __declspec( dllexport ) void removeWert( char *name );
  258. __declspec( dllexport ) void removeWert( Text *name );
  259. // Setzt den Style der Daten
  260. __declspec( dllexport ) void addDatenStyle( int style );
  261. __declspec( dllexport ) void setDatenStyle( int style );
  262. __declspec( dllexport ) void setDatenStyle( int style, bool addRemove );
  263. __declspec( dllexport ) void löscheDatenStyle( int style );
  264. // Setzt den Style eines Wertes
  265. __declspec( dllexport ) void addWertStyle( int wNum, int style );
  266. __declspec( dllexport ) void setWertStyle( int wNum, int style );
  267. __declspec( dllexport ) void setWertStyle( int wNum, int style, bool addRemove );
  268. __declspec( dllexport ) void löscheWertStyle( int wNum, int style );
  269. // constant
  270. // Gibt die Daten des Diagramms zurück
  271. __declspec( dllexport ) DiagDaten *getDiagDaten() const;
  272. __declspec( dllexport ) DiagDaten *zDiagDaten() const;
  273. // Gibt die Daten eines Wertes zurück
  274. __declspec( dllexport ) DiagWert *getDiagWert( int wNum ) const;
  275. __declspec( dllexport ) DiagWert *zDiagWert( int wNum ) const;
  276. __declspec( dllexport ) DiagWert *getDiagWert( char *name ) const;
  277. __declspec( dllexport ) DiagWert *zDiagWert( char *name ) const;
  278. // Gibt die Position eines Wertes zurück
  279. __declspec( dllexport ) int getDiagWertPos( char *name ) const;
  280. // Gibt die Position eines Punktes von einem Wert zurück
  281. __declspec( dllexport ) int getDiagPunktPos( int wNum, double hI ) const;
  282. __declspec( dllexport ) int getDiagPunktPos( char *wName, double hI ) const;
  283. // Prüft den Style der Daten
  284. __declspec( dllexport ) inline bool hatDatenStyle( int style ) const;
  285. __declspec( dllexport ) inline bool hatDatenStyleNicht( int style ) const;
  286. // Prüft den Style eines Wertes
  287. __declspec( dllexport ) inline bool hatWertStyle( int wNum, int style ) const;
  288. __declspec( dllexport ) inline bool hatWertStyleNicht( int wNum, int style ) const;
  289. // Reference Counting
  290. __declspec( dllexport ) BaseDiag *getThis();
  291. __declspec( dllexport ) virtual BaseDiag *release();
  292. };
  293. // Linien Diagramm
  294. class LDiag : public ZeichnungHintergrund, public BaseDiag
  295. {
  296. public:
  297. class Style : public ZeichnungHintergrund::Style
  298. {
  299. public:
  300. const static __int64 DatenRahmen = 0x0001000;
  301. const static __int64 DatenHintergrund = 0x02000;
  302. const static __int64 DatenHAlpha = 0x04000;
  303. const static __int64 DatenHBild = 0x008000;
  304. const static __int64 DatenBuffered = 0x010000;
  305. const static __int64 scroll = VScroll | HScroll;
  306. const static __int64 normal = Hintergrund | scroll | DatenRahmen;
  307. };
  308. private:
  309. Schrift *schrift;
  310. LRahmen *dRam;
  311. int dBgF;
  312. Bild *dBgB;
  313. AlphaFeld *dAf;
  314. Bild *vIntervallRB;
  315. Bild *hIntervallRB;
  316. int schriftGr;
  317. public:
  318. // Konstruktor
  319. __declspec( dllexport ) LDiag();
  320. // Destruktor
  321. __declspec( dllexport ) ~LDiag();
  322. // nicht constant
  323. // Setzt die Schrift
  324. __declspec( dllexport ) void setSchriftZ( Schrift *schrift );
  325. __declspec( dllexport ) void setSchriftGröße( int gr );
  326. // Setzt den inneren Rahmen um das eigentliche Diagramm
  327. __declspec( dllexport ) void setDatenRahmenZ( LRahmen *ram );
  328. __declspec( dllexport ) void setDatenRahmen( LRahmen *ram );
  329. __declspec( dllexport ) void setDatenRahmenBreite( int br );
  330. __declspec( dllexport ) void setDatenRahmenFarbe( int fc );
  331. // Setzt den Hintergrund des eigentlichen Diagramms
  332. __declspec( dllexport ) void setDatenHintergrundFarbe( int fc );
  333. __declspec( dllexport ) void setDatenHintergrundBildZ( Bild *b );
  334. __declspec( dllexport ) void setDatenHintergrundBild( Bild *b );
  335. // Setzt das AlphaFeld des eigentlichen Diagramms
  336. __declspec( dllexport ) void setDatenAlphaFeldZ( AlphaFeld *af );
  337. __declspec( dllexport ) void setDatenAlphaFeld( AlphaFeld *af );
  338. __declspec( dllexport ) void setDatenAlphaFeldFarbe( int fc );
  339. __declspec( dllexport ) void setDatenAlphaFeldStärke( int st );
  340. __declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
  341. __declspec( dllexport ) void render( Bild &zRObj ) override;
  342. // constant
  343. // Gibt die Schrift zurück
  344. __declspec( dllexport ) Schrift *getSchrift() const;
  345. __declspec( dllexport ) Schrift *zSchrift() const;
  346. // Gibt den inneren Rahmen um das eigentliche Diagramm zurück
  347. __declspec( dllexport ) LRahmen *getDatenRahmen() const;
  348. __declspec( dllexport ) LRahmen *zDatenRahmen() const;
  349. __declspec( dllexport ) int getDatenRahmenFarbe() const;
  350. __declspec( dllexport ) int getDatenRahmenBreite() const;
  351. // Gibt den Hintergrund des eigentlichen Diagramms zurück
  352. __declspec( dllexport ) int getDatenHintergrundFarbe() const;
  353. __declspec( dllexport ) Bild *getDatenHintergrundBild() const;
  354. __declspec( dllexport ) Bild *zDatenHintergrundBild() const;
  355. // Gibt das AlphaFeld des eigentlichen Diagramms zurück
  356. __declspec( dllexport ) AlphaFeld *getDatenAlphaFeld() const;
  357. __declspec( dllexport ) AlphaFeld *zDatenAlphaFeld() const;
  358. __declspec( dllexport ) int getDatenAlphaFeldFarbe() const;
  359. __declspec( dllexport ) int getDatenAlphaFeldStärke() const;
  360. // Reference Counting
  361. __declspec( dllexport ) BaseDiag *release() override;
  362. };
  363. }
  364. #endif