Fortschritt.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. #include "Fortschritt.h"
  2. #include "Rahmen.h"
  3. #include "AlphaFeld.h"
  4. #include "Bild.h"
  5. #include "Schrift.h"
  6. #include "Scroll.h"
  7. #include "Text.h"
  8. using namespace Framework;
  9. // Inhalt der FBalken Klasse aus Fortschritt.h
  10. // Konstruktor
  11. FBalken::FBalken()
  12. : ZeichnungHintergrund(),
  13. maxAk( 0 ),
  14. ak( 0 ),
  15. fRahmen( 0 ),
  16. fBuffer( 0 ),
  17. fBgF( 0xFF000000 ),
  18. fBgBild( 0 ),
  19. schrift( 0 ),
  20. schriftFarbe( 0 ),
  21. schriftGröße( 0 ),
  22. ref( 1 )
  23. {
  24. style = 0;
  25. }
  26. // Destructor
  27. FBalken::~FBalken()
  28. {
  29. if( rahmen )
  30. rahmen->release();
  31. if( fRahmen )
  32. fRahmen->release();
  33. if( fBuffer )
  34. fBuffer->release();
  35. if( fBgBild )
  36. fBgBild->release();
  37. if( schrift )
  38. schrift->release();
  39. }
  40. // nicht constant
  41. void FBalken::setAktionAnzahl( __int64 ak ) // setzt die anzahl der Aktionen
  42. {
  43. maxAk = ak;
  44. rend = 1;
  45. }
  46. void FBalken::aktionPlus( __int64 aktionen ) // mehrere Aktionen sind fertig
  47. {
  48. ak += aktionen;
  49. if( ak > maxAk )
  50. ak = maxAk;
  51. rend = 1;
  52. }
  53. void FBalken::reset() // setzt die fertigen Aktionen zurück
  54. {
  55. ak = 0;
  56. rend = 1;
  57. }
  58. void FBalken::setFRahmenZ( LRahmen *ram ) // setzt einen Zeiger zum Fertig Rahmen
  59. {
  60. if( fRahmen )
  61. fRahmen->release();
  62. fRahmen = ram;
  63. rend = 1;
  64. }
  65. void FBalken::setFRFarbe( int f ) // setzt die Fertig Rahmen Farbe
  66. {
  67. if( !fRahmen )
  68. fRahmen = new LRahmen();
  69. fRahmen->setFarbe( f );
  70. rend = 1;
  71. }
  72. void FBalken::setFRBreite( int br ) // setzt die Fertig Rahmen Breite
  73. {
  74. if( !fRahmen )
  75. fRahmen = new LRahmen();
  76. fRahmen->setRamenBreite( br );
  77. rend = 1;
  78. }
  79. void FBalken::setFAlphaFeldZ( AlphaFeld *af ) // setzt einen Zeiger zum Fertig Alpha Feld
  80. {
  81. if( fBuffer )
  82. fBuffer->release();
  83. fBuffer = af;
  84. rend = 1;
  85. }
  86. void FBalken::setFAFFarbe( int f ) // setzt die Fertig Alpha Feld Farbe
  87. {
  88. if( !fBuffer )
  89. fBuffer = new AlphaFeld();
  90. fBuffer->setFarbe( f );
  91. rend = 1;
  92. }
  93. void FBalken::setFAFStärke( int st ) // setzt die Stärke des Fertig Alpha Feldes
  94. {
  95. if( !fBuffer )
  96. fBuffer = new AlphaFeld();
  97. fBuffer->setStärke( st );
  98. rend = 1;
  99. }
  100. void FBalken::setFBgFarbe( int f ) // setzt einen Zeiger zur Fertig Hintergrund Farbe
  101. {
  102. fBgF = f;
  103. rend = 1;
  104. }
  105. void FBalken::setFBgBildZ( Bild *b ) // setzt das Fertig Hintergrund Bild
  106. {
  107. if( fBgBild )
  108. fBgBild->release();
  109. fBgBild = b;
  110. rend = 1;
  111. }
  112. void FBalken::setFBgBild( Bild *b ) // kopiert in das Fertig Hintergrund Bild
  113. {
  114. if( !fBgBild )
  115. fBgBild = new Bild();
  116. fBgBild->neuBild( b->getBreite(), b->getHöhe(), 0 );
  117. fBgBild->drawBild( 0, 0, b->getBreite(), b->getHöhe(), *b );
  118. b->release();
  119. rend = 1;
  120. }
  121. void FBalken::setSchriftZ( Schrift *s ) // setzt die Schrift
  122. {
  123. if( schrift )
  124. schrift->release();
  125. schrift = s;
  126. rend = 1;
  127. }
  128. void FBalken::setSFarbe( int f ) // setzt die Schrift Farbe
  129. {
  130. schriftFarbe = f;
  131. rend = 1;
  132. }
  133. void FBalken::setSGröße( unsigned char gr ) // setzt die Schrift größe
  134. {
  135. schriftGröße = gr;
  136. rend = 1;
  137. }
  138. void FBalken::render( Bild &zRObj ) // zeichnet nach zRObj
  139. {
  140. if( !hatStyle( Style::Sichtbar ) )
  141. return;
  142. lockZeichnung();
  143. löscheStyle( Style::VScroll | Style::HScroll );
  144. __super::render( zRObj );
  145. if( !zRObj.setDrawOptions( pos, gr ) )
  146. {
  147. unlockZeichnung();
  148. return;
  149. }
  150. int xx = 0;
  151. int yy = 0;
  152. int b = gr.x;
  153. int h = gr.y;
  154. if( hatStyle( Style::L_R ) )
  155. b = (int)( ( gr.x / 100.0 ) * getProzent() );
  156. else if( hatStyle( Style::R_L ) )
  157. {
  158. b = (int)( ( gr.x / 100.0 ) * getProzent() );
  159. xx -= b;
  160. }
  161. else if( hatStyle( Style::O_U ) )
  162. h = (int)( ( gr.y / 100.0 ) * getProzent() );
  163. else if( hatStyle( Style::U_O ) )
  164. {
  165. h = (int)( ( gr.y / 100.0 ) * getProzent() );
  166. yy -= h;
  167. }
  168. if( maxAk == 0 )
  169. b = 0, h = 0;
  170. if( !zRObj.setDrawOptions( xx, yy, b, h ) )
  171. {
  172. zRObj.releaseDrawOptions();
  173. unlockZeichnung();
  174. return;
  175. }
  176. int rbr = 0;
  177. if( hatStyle( Style::FRahmen ) && fRahmen )
  178. {
  179. fRahmen->setGröße( b, h );
  180. fRahmen->render( zRObj );
  181. rbr = fRahmen->getRBreite();
  182. }
  183. if( hatStyle( Style::FFarbe ) )
  184. {
  185. if( hatStyle( Style::FAlpha ) )
  186. zRObj.alphaRegion( rbr, rbr, b - rbr * 2, h - rbr * 2, fBgF );
  187. else
  188. zRObj.füllRegion( rbr, rbr, b - rbr * 2, h - rbr * 2, fBgF );
  189. }
  190. if( hatStyle( Style::FBild ) && fBgBild )
  191. {
  192. if( hatStyle( Style::FAlpha ) )
  193. zRObj.alphaBildSkall( rbr, rbr, b - rbr * 2, h - rbr * 2, *fBgBild );
  194. else
  195. zRObj.drawBildSkall( rbr, rbr, b - rbr * 2, h - rbr * 2, *fBgBild );
  196. }
  197. if( hatStyle( Style::FBuffered ) && fBuffer )
  198. {
  199. fBuffer->setGröße( b - rbr * 2, h - rbr * 2 );
  200. fBuffer->render( zRObj );
  201. }
  202. zRObj.releaseDrawOptions();
  203. if( hatStyle( Style::Prozent ) && schrift )
  204. {
  205. schrift->setSchriftGröße( schriftGröße );
  206. Text txt;
  207. txt.anhängen( (int)getProzent() );
  208. txt.anhängen( "%" );
  209. schrift->setDrawPosition( rbr + ( gr.x - rbr * 2 ) / 2 - schrift->getTextBreite( &txt ) / 2, rbr + ( gr.y - rbr * 2 ) / 2 - schrift->getTextHöhe( &txt ) / 2 );
  210. schrift->renderText( &txt, zRObj, schriftFarbe );
  211. }
  212. zRObj.releaseDrawOptions();
  213. unlockZeichnung();
  214. }
  215. // constant
  216. __int64 FBalken::getAktionAnzahl() const // gibt die Anzahl der Aktionen zurück
  217. {
  218. return maxAk;
  219. }
  220. double FBalken::getProzent() const // gibt die momentane Prozentzahl zurück
  221. {
  222. if( !maxAk )
  223. return 0;
  224. return ak / ( maxAk / 100.0 );
  225. }
  226. __int64 FBalken::getAktion() const // gibt die fertigen Aktionen zurück
  227. {
  228. return ak;
  229. }
  230. LRahmen *FBalken::getFRahmen() const // gibt den Fertig Rahmen zurück
  231. {
  232. if( fRahmen )
  233. return fRahmen->getThis();
  234. return 0;
  235. }
  236. LRahmen *FBalken::zFRahmen() const
  237. {
  238. return fRahmen;
  239. }
  240. AlphaFeld *FBalken::getFAlphaFeld() const // gibt das Fertig Alpha Feld zurück
  241. {
  242. if( fBuffer )
  243. return fBuffer->getThis();
  244. return 0;
  245. }
  246. AlphaFeld *FBalken::zFAlphaFeld() const
  247. {
  248. return fBuffer;
  249. }
  250. int FBalken::getFBgFarbe() const // gibt die Fertig Hintergrund Farbe zurück
  251. {
  252. return fBgF;
  253. }
  254. Bild *FBalken::getFBgBild() const // gibt das Fertig Hintergrund Bild zurück
  255. {
  256. if( fBgBild )
  257. return fBgBild->getThis();
  258. return 0;
  259. }
  260. Bild *FBalken::zFBgBild() const
  261. {
  262. return fBgBild;
  263. }
  264. Schrift *FBalken::getSchrift() const // gibt die Schrift zurück
  265. {
  266. if( schrift )
  267. return schrift->getThis();
  268. return 0;
  269. }
  270. Schrift *FBalken::zSchrift() const
  271. {
  272. return schrift;
  273. }
  274. int FBalken::getSFarbe() const // gibt die Schrift Farbe zurück
  275. {
  276. return schriftFarbe;
  277. }
  278. // Reference Counting
  279. FBalken *FBalken::getThis()
  280. {
  281. ++ref;
  282. return this;
  283. }
  284. FBalken *FBalken::release()
  285. {
  286. --ref;
  287. if( ref == 0 )
  288. delete this;
  289. return 0;
  290. }