Fortschritt.cpp 7.7 KB

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