AccountStatistik.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. #include "AccountStatistik.h"
  2. #include "../../../Global/Initialisierung.h"
  3. #include "../../../Global/Variablen.h"
  4. #include <DateiSystem.h>
  5. // Inhalt der AccountStatistik Klasse aus AccountStatistik.h
  6. // Konstruktor
  7. AccountStatistik::AccountStatistik( Schrift *zSchrift )
  8. : Thread(),
  9. schrift( zSchrift->getThis() ),
  10. statistikF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Statistik von " ) ),
  11. sortSpalte( initAuswahlBox( 10, 10, 150, 20, zSchrift, ABSTYLE, { "Name", "Spiele", "Gewonnen", "Verloren", "Punkte", "BW0", "BW1", "BW2", "BW3", "BW4", "BW5" } ) ),
  12. sortRichtung( initAuswahlBox( 170, 10, 150, 20, zSchrift, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
  13. zurück( initKnopf( 590, 10, 20, 20, 0, 0, "" ) ),
  14. vor( initKnopf( 750, 10, 20, 20, 0, 0, "" ) ),
  15. seiteTF( initTextFeld( 620, 10, 120, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Seite 0 von 0" ) ),
  16. tabelle( initObjTabelle( 10, 40, 760, 400, zSchrift, OTSTYLE, { { "Name", 108, 0, 0 }, { "Spiele", 70, 0, 0 }, { "Gewonnen", 70, 0, 0 },
  17. { "Verloren", 70, 0, 0 }, { "Punkte", 70, 0, 0 }, { "BW0", 60, 0, 0 }, { "BW1", 60, 0, 0 }, { "BW2", 60, 0, 0 }, { "BW3", 60, 0, 0 },
  18. { "BW4", 60, 0, 0 }, { "BW5", 60, 0, 0 } }, 20 ) ),
  19. laden( (Animation2D*)ladeAnimation->dublizieren() ),
  20. seite( 0 ),
  21. maxSeite( 0 ),
  22. status( 0 ),
  23. accId( 0 ),
  24. animation( 0 ),
  25. alpha( 255 ),
  26. tickVal( 0 ),
  27. rend( 0 )
  28. {
  29. initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", zSchrift->getThis(), hauptScreen );
  30. initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll.", zSchrift->getThis(), hauptScreen );
  31. Bild *zurückB = bilder->get( "shop.ltdb/zurück.png" );
  32. if( !zurückB )
  33. {
  34. LTDBDatei *datei = new LTDBDatei();
  35. datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
  36. datei->leseDaten( 0 );
  37. zurückB = datei->laden( 0, new Text( "zurück.png" ) );
  38. datei->release();
  39. bilder->add( "shop.ltdb/zurück.png", zurückB->getThis() );
  40. }
  41. Bild *weiterB = bilder->get( "shop.ltdb/weiter.png" );
  42. if( !weiterB )
  43. {
  44. LTDBDatei *datei = new LTDBDatei();
  45. datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
  46. datei->leseDaten( 0 );
  47. weiterB = datei->laden( 0, new Text( "weiter.png" ) );
  48. datei->release();
  49. bilder->add( "shop.ltdb/weiter.png", weiterB->getThis() );
  50. }
  51. laden->setSichtbar( 0 );
  52. laden->setPosition( 365, 200 );
  53. zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  54. zurück->setHintergrundBildZ( zurückB );
  55. initToolTip( zurück, "Eine Seite zurück blättern.", zSchrift->getThis(), hauptScreen );
  56. vor->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  57. vor->setHintergrundBildZ( weiterB );
  58. initToolTip( vor, "Eine Seite weiter blättern.", zSchrift->getThis(), hauptScreen );
  59. statistikF->addMember( tabelle->getThis() );
  60. statistikF->addMember( zurück->getThis() );
  61. statistikF->addMember( seiteTF->getThis() );
  62. statistikF->addMember( vor->getThis() );
  63. statistikF->addMember( sortSpalte->getThis() );
  64. statistikF->addMember( sortRichtung->getThis() );
  65. statistikF->setMausEreignis( _ret1ME );
  66. vor->setMausEreignis( accountStatistikVorME );
  67. zurück->setMausEreignis( accountStatistikZurückME );
  68. }
  69. // Destruktor
  70. AccountStatistik::~AccountStatistik()
  71. {
  72. reset( 1 );
  73. statistikF->release();
  74. sortSpalte->release();
  75. sortRichtung->release();
  76. zurück->release();
  77. vor->release();
  78. seiteTF->release();
  79. tabelle->release();
  80. laden->release();
  81. schrift->release();
  82. }
  83. // nicht constant
  84. void AccountStatistik::reset( bool überschrift )
  85. {
  86. statistikF->lockZeichnung();
  87. int zAnz = tabelle->getZeilenAnzahl();
  88. for( int i = !überschrift; i < zAnz; i++ )
  89. tabelle->removeZeile( !überschrift );
  90. statistikF->unlockZeichnung();
  91. }
  92. void AccountStatistik::ladeStatistik( int accId )
  93. {
  94. if( this->accId == accId )
  95. return;
  96. this->status = 0;
  97. if( run )
  98. {
  99. warteAufThread( 1000 );
  100. ende();
  101. }
  102. if( ( animation | 0x1 ) == animation )
  103. {
  104. animation |= 0x4;
  105. this->accId = accId;
  106. this->status = 1;
  107. return;
  108. }
  109. this->accId = accId;
  110. start();
  111. this->status = 1;
  112. }
  113. void AccountStatistik::thread()
  114. {
  115. laden->setSichtbar( 1 );
  116. reset();
  117. Text *name = infoClient->getSpielerName( accId );
  118. if( name )
  119. {
  120. name->insert( 0, "Statistik von " );
  121. statistikF->setTitel( *name );
  122. name->release();
  123. }
  124. RCArray< Array< int > > *values = new RCArray< Array< int > >();
  125. RCArray< Text > *namen = new RCArray< Text >();
  126. if( infoClient->getStatistikListe( accId, &seite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), values, namen ) )
  127. {
  128. statistikF->lockZeichnung();
  129. seiteTF->setText( "Seite " );
  130. seiteTF->zText()->append( seite );
  131. seiteTF->zText()->append( " von " );
  132. seiteTF->zText()->append( maxSeite );
  133. statistikF->unlockZeichnung();
  134. zurück->setStyle( Knopf::Style::Erlaubt, seite > 1 );
  135. vor->setStyle( Knopf::Style::Erlaubt, seite < maxSeite );
  136. int zAnz = values->getEintragAnzahl();
  137. if( zAnz )
  138. {
  139. int sAnz = values->z( 0 )->getEintragAnzahl();
  140. for( int i = 0; i < zAnz; i++ )
  141. {
  142. if( sAnz )
  143. {
  144. tabelle->addZeile( Text() += values->z( i )->get( 0 ) );
  145. Text *name = namen->z( i );
  146. if( name )
  147. {
  148. TextFeld *tf = initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::Center, *name );
  149. tabelle->setZeichnungZ( 0, i + 1, tf );
  150. }
  151. }
  152. for( int j = 1; j < sAnz; j++ )
  153. {
  154. if( j < 1 )
  155. {
  156. TextFeld *tf = initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  157. tf->zText()->append( values->z( i )->get( j ) );
  158. tabelle->setZeichnungZ( j, i + 1, tf );
  159. }
  160. if( j > 1 )
  161. {
  162. TextFeld *tf = initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  163. tf->zText()->append( values->z( i )->get( j ) );
  164. tabelle->setZeichnungZ( j - 1, i + 1, tf );
  165. }
  166. }
  167. }
  168. }
  169. }
  170. else
  171. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Statistiken dieses Spielers konnten nicht abgerufen werden." ), new Text( "Ok" ) );
  172. values->release();
  173. namen->release();
  174. laden->setSichtbar( 0 );
  175. animation &= ~0x4;
  176. status = 2;
  177. run = 0;
  178. }
  179. void AccountStatistik::setSichtbar( bool sichtbar, bool nachRechts )
  180. {
  181. if( sichtbar )
  182. {
  183. if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
  184. {
  185. if( nachRechts )
  186. statistikF->setPosition( -810, 40 );
  187. else
  188. statistikF->setPosition( 810, 40 );
  189. }
  190. animation |= 0x1;
  191. }
  192. else
  193. animation &= ~0x1;
  194. if( nachRechts )
  195. animation |= 0x2;
  196. else
  197. animation &= ~0x2;
  198. }
  199. bool AccountStatistik::vorME( MausEreignis &me )
  200. {
  201. if( me.id == ME_RLinks )
  202. {
  203. seite++;
  204. start();
  205. }
  206. return 1;
  207. }
  208. bool AccountStatistik::zurückME( MausEreignis &me )
  209. {
  210. if( me.id == ME_RLinks )
  211. {
  212. seite--;
  213. start();
  214. }
  215. return 1;
  216. }
  217. bool AccountStatistik::tick( double zeit )
  218. {
  219. statistikF->lockZeichnung();
  220. rend |= statistikF->tick( zeit );
  221. statistikF->unlockZeichnung();
  222. rend |= laden->tick( zeit );
  223. tickVal += zeit;
  224. int valA = (int)( tickVal * 150 );
  225. int valB = (int)( tickVal * 500 );
  226. tickVal -= valA / 150.0;
  227. if( valA )
  228. {
  229. if( ( animation | 0x4 ) == animation && alpha )
  230. {
  231. if( alpha - valA <= 0 )
  232. alpha = 0;
  233. else
  234. alpha -= valA;
  235. rend = 1;
  236. if( !alpha )
  237. {
  238. reset();
  239. start();
  240. }
  241. }
  242. if( ( animation | 0x4 ) != animation && alpha != 255 )
  243. {
  244. if( alpha + valA >= 255 )
  245. alpha = 255;
  246. else
  247. alpha += valA;
  248. rend = 1;
  249. }
  250. }
  251. if( valB )
  252. {
  253. if( ( animation | 0x1 ) == animation )
  254. { // Sichtbar
  255. if( ( animation | 0x2 ) == animation )
  256. { // Nach Rechts
  257. if( statistikF->getX() != 10 )
  258. {
  259. if( statistikF->getX() + valB > 10 )
  260. statistikF->setPosition( 10, statistikF->getY() );
  261. else
  262. statistikF->setPosition( statistikF->getX() + valB, statistikF->getY() );
  263. rend = 1;
  264. }
  265. }
  266. else
  267. { // Nach Links
  268. if( statistikF->getX() != 10 )
  269. {
  270. if( statistikF->getX() - valB < 10 )
  271. statistikF->setPosition( 10, statistikF->getY() );
  272. else
  273. statistikF->setPosition( statistikF->getX() - valB, statistikF->getY() );
  274. rend = 1;
  275. }
  276. }
  277. }
  278. else
  279. { // Unsichtbar
  280. if( ( animation | 0x2 ) == animation )
  281. { // Nach Rechts
  282. if( statistikF->getX() != 810 )
  283. {
  284. if( statistikF->getX() + valB > 810 )
  285. statistikF->setPosition( 810, statistikF->getY() );
  286. else
  287. statistikF->setPosition( statistikF->getX() + valB, statistikF->getY() );
  288. rend = 1;
  289. }
  290. }
  291. else
  292. { // Nach Links
  293. if( statistikF->getX() != -810 )
  294. {
  295. if( statistikF->getX() - valB < -810 )
  296. statistikF->setPosition( -810, statistikF->getY() );
  297. else
  298. statistikF->setPosition( statistikF->getX() - valB, statistikF->getY() );
  299. rend = 1;
  300. }
  301. }
  302. }
  303. }
  304. bool ret = rend;
  305. rend = 0;
  306. return ret;
  307. }
  308. void AccountStatistik::doMausEreignis( MausEreignis &me )
  309. {
  310. if( run )
  311. return;
  312. bool starten = 0;
  313. int sortSpalteS = sortSpalte->getAuswahl();
  314. int sortRichtungS = sortRichtung->getAuswahl();
  315. statistikF->lockZeichnung();
  316. statistikF->doMausEreignis( me );
  317. statistikF->unlockZeichnung();
  318. if( sortSpalte->getAuswahl() != sortSpalteS )
  319. {
  320. sortSpalte->einklappen();
  321. starten = 1;
  322. }
  323. if( sortRichtung->getAuswahl() != sortRichtungS )
  324. {
  325. sortRichtung->einklappen();
  326. starten = 1;
  327. }
  328. if( starten )
  329. start();
  330. }
  331. void AccountStatistik::render( Bild &zRObj )
  332. {
  333. zRObj.setAlpha( alpha );
  334. statistikF->lockZeichnung();
  335. statistikF->render( zRObj );
  336. statistikF->unlockZeichnung();
  337. if( !zRObj.setDrawOptions( statistikF->getPosition(), statistikF->getSize() ) )
  338. {
  339. zRObj.releaseAlpha();
  340. return;
  341. }
  342. laden->render( zRObj );
  343. zRObj.releaseAlpha();
  344. zRObj.releaseDrawOptions();
  345. }
  346. // constant
  347. int AccountStatistik::getStatus() const
  348. {
  349. return status;
  350. }
  351. // Ereignisse
  352. bool accountStatistikVorME( void *p, void *o, MausEreignis me )
  353. {
  354. if( p )
  355. return ( (AccountStatistik*)p )->vorME( me );
  356. return 1;
  357. }
  358. bool accountStatistikZurückME( void *p, void *o, MausEreignis me )
  359. {
  360. if( p )
  361. return ( (AccountStatistik*)p )->zurückME( me );
  362. return 1;
  363. }