Auswahl.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. #include "Auswahl.h"
  2. #include "../../../Global/Initialisierung.h"
  3. #include "../../../Global/Variablen.h"
  4. #include <DateiSystem.h>
  5. #include <KSGTDatei.h>
  6. // Inhalt der Auswahl Klasse aus Auswahl.h
  7. // Konstruktor
  8. Auswahl::Auswahl( Schrift *zSchrift, KartenEditor *kEditor )
  9. : Thread()
  10. {
  11. this->kEditor = kEditor;
  12. alpha = 255;
  13. sichtbar = 0;
  14. suchFilterT = initTextFeld( 10, 10, 70, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Suchfilter:" );
  15. suchFilter = initTextFeld( 90, 10, 210, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  16. initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.", zSchrift->getThis(), hauptScreen );
  17. suchen = initKnopf( 310, 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
  18. sortSpalte = initAuswahlBox( 640, 10, 120, 20, zSchrift, ABSTYLE,
  19. { "Name", "Spielart", "Preis (Kupfer)", "Verkauft", "Spieleranzahl" } );
  20. sortRichtung = initAuswahlBox( 770, 10, 120, 20, zSchrift, ABSTYLE, { "Aufsteigend", "Absteigend" } );
  21. karten = initObjTabelle( 10, 40, 880, 520, zSchrift, OTSTYLE, { { "Name", 220, 220, 220 }, { "Spielart", 220, 220, 220 },
  22. { "Kupfer", 130, 130, 130 }, { "Verkauft", 125, 125, 125 }, { "Spieleranzahl", 140, 140, 140 },
  23. { "", 20, 20, 20 } }, 20 );
  24. neuKarteName = initTextFeld( 10, 570, 195, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  25. initToolTip( neuKarteName, "Name einer neuen Karte", zSchrift->getThis(), hauptScreen );
  26. neuKarteSpielArt = initAuswahlBox( 215, 570, 195, 20, zSchrift, ABSTYLE, {} );
  27. neuKarte = initKnopf( 420, 570, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Karte Erstellen" );
  28. laden = ( Framework::Animation2D* )ladeAnimation->dublizieren();
  29. laden->setPosition( 425, 275 );
  30. laden->setSichtbar( 0 );
  31. schrift = zSchrift->getThis();
  32. aktion = 0;
  33. tickVal = 0;
  34. rend = 0;
  35. ref = 1;
  36. }
  37. // Destruktor
  38. Auswahl::~Auswahl()
  39. {
  40. if( run )
  41. warteAufThread( 1000 );
  42. if( run )
  43. ende();
  44. int anz = karten->getZeilenAnzahl();
  45. for( int i = 0; i < anz; i++ )
  46. {
  47. ( (TextFeld*)karten->zZeichnung( 0, i ) )->release();
  48. ( (TextFeld*)karten->zZeichnung( 1, i ) )->release();
  49. ( (TextFeld*)karten->zZeichnung( 2, i ) )->release();
  50. ( (TextFeld*)karten->zZeichnung( 3, i ) )->release();
  51. ( (TextFeld*)karten->zZeichnung( 4, i ) )->release();
  52. if( !i )
  53. ( (TextFeld*)karten->zZeichnung( 5, i ) )->release();
  54. else
  55. ( (Knopf*)karten->zZeichnung( 5, i ) )->release();
  56. }
  57. laden->release();
  58. suchFilterT->release();
  59. suchFilter->release();
  60. suchen->release();
  61. sortSpalte->release();
  62. sortRichtung->release();
  63. karten->release();
  64. neuKarteName->release();
  65. neuKarteSpielArt->release();
  66. neuKarte->release();
  67. schrift->release();
  68. kEditor->release();
  69. }
  70. // nicht constant
  71. void Auswahl::setSichtbar( bool sicht )
  72. {
  73. sichtbar = sicht;
  74. if( sichtbar )
  75. {
  76. MausEreignis me;
  77. me.id = ME_RLinks;
  78. me.verarbeitet = 0;
  79. me.mx = suchen->getX() + 1;
  80. me.my = suchen->getY() + 1;
  81. doMausEreignis( me );
  82. }
  83. }
  84. void Auswahl::thread()
  85. {
  86. laden->setSichtbar( 1 );
  87. if( aktion < 0 )
  88. {
  89. int port = 0;
  90. Text ip = "";
  91. KSGClient::EditorServerClient *editorClient = infoClient->createEditorServerClient( 0 );
  92. if( !editorClient )
  93. {
  94. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ), new Text( "Ok" ) );
  95. aktion = 0;
  96. laden->setSichtbar( 0 );
  97. run = 0;
  98. return;
  99. }
  100. bool ok = 0;
  101. if( editorClient->verbinde() )
  102. {
  103. if( editorClient->karteErstellen( neuKarteName->zText()->getText(), infoClient->getSpielId( neuKarteSpielArt->zEintrag( neuKarteSpielArt->getAuswahl() )->zText()->getText() ) ) )
  104. ok = 1;
  105. editorClient->trenne( 1 );
  106. }
  107. if( !ok )
  108. {
  109. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
  110. aktion = 0;
  111. laden->setSichtbar( 0 );
  112. run = 0;
  113. editorClient->release();
  114. return;
  115. }
  116. aktion = 0;
  117. laden->setSichtbar( 0 );
  118. run = 0;
  119. editorClient->release();
  120. return;
  121. }
  122. if( aktion )
  123. {
  124. int port = 0;
  125. Text ip = "";
  126. if( editorClient )
  127. editorClient = editorClient->release();
  128. editorClient = infoClient->createEditorServerClient( aktion );
  129. if( !editorClient )
  130. {
  131. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ), new Text( "Ok" ) );
  132. aktion = 0;
  133. laden->setSichtbar( 0 );
  134. run = 0;
  135. return;
  136. }
  137. bool ok = 0;
  138. if( editorClient->verbinde() )
  139. {
  140. if( editorClient->ladeKarte( aktion ) )
  141. ok = 1;
  142. }
  143. if( !ok )
  144. {
  145. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
  146. aktion = 0;
  147. laden->setSichtbar( 0 );
  148. run = 0;
  149. return;
  150. }
  151. kEditor->setKarte( aktion );
  152. aktion = 0;
  153. setSichtbar( 0 );
  154. while( alpha != 0 )
  155. Sleep( 100 );
  156. laden->setSichtbar( 0 );
  157. run = 0;
  158. return;
  159. }
  160. Array< int > *saList = infoClient->getAccountSpielArtListe();
  161. if( saList )
  162. {
  163. RCArray< Text > *saNamen = new RCArray< Text >();
  164. int anz = saList->getEintragAnzahl();
  165. for( int i = 0; i < anz; i++ )
  166. {
  167. if( !saList->hat( i ) )
  168. continue;
  169. Text *name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
  170. if( name )
  171. saNamen->add( name );
  172. }
  173. neuKarteSpielArt->lockZeichnung();
  174. neuKarteSpielArt->setAuswahl( 0 );
  175. anz = neuKarteSpielArt->getEintragAnzahl();
  176. for( int i = 0; i < anz; i++ )
  177. neuKarteSpielArt->removeEintrag( 0 );
  178. anz = saNamen->getEintragAnzahl();
  179. for( int i = 0; i < anz; i++ )
  180. {
  181. if( saNamen->z( i ) )
  182. neuKarteSpielArt->addEintrag( saNamen->z( i )->getText() );
  183. }
  184. neuKarteSpielArt->unlockZeichnung();
  185. saNamen->release();
  186. saList->release();
  187. }
  188. karten->lockZeichnung();
  189. int anz = karten->getZeilenAnzahl();
  190. for( int i = 1; i < anz; i++ )
  191. {
  192. ( (TextFeld*)karten->zZeichnung( 0, 1 ) )->release();
  193. ( (TextFeld*)karten->zZeichnung( 1, 1 ) )->release();
  194. ( (TextFeld*)karten->zZeichnung( 2, 1 ) )->release();
  195. ( (TextFeld*)karten->zZeichnung( 3, 1 ) )->release();
  196. ( (TextFeld*)karten->zZeichnung( 4, 1 ) )->release();
  197. ( (Knopf*)karten->zZeichnung( 5, 1 ) )->release();
  198. karten->removeZeile( 1 );
  199. }
  200. karten->unlockZeichnung();
  201. Bild *shopWeiter = bilder->get( "shop.ltdb/weiter.png" );
  202. if( !shopWeiter )
  203. {
  204. LTDBDatei *datei = new LTDBDatei();
  205. datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
  206. datei->leseDaten( 0 );
  207. shopWeiter = datei->laden( 0, new Text( "weiter.png" ) );
  208. datei->release();
  209. bilder->add( "shop.ltdb/weiter.png", shopWeiter->getThis() );
  210. }
  211. Array< int > *kId = new Array< int >();
  212. RCArray< Text > *kName = new RCArray< Text >();
  213. RCArray< Text > *saName = new RCArray< Text >();
  214. Array< int > *kupfer = new Array< int >();
  215. Array< int > *verkauft = new Array< int >();
  216. Array< int > *maxSpieler = new Array< int >();
  217. int kAnz = infoClient->getKartenListe( suchFilter->zText()->getText(), (char)sortSpalte->getAuswahl(), (char)sortRichtung->getAuswahl(),
  218. kId, kName, saName, kupfer, verkauft, maxSpieler );
  219. for( int i = 0; i < kAnz; i++ )
  220. {
  221. Text zeile;
  222. zeile = kId->get( i );
  223. karten->addZeile( zeile );
  224. karten->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, kName->z( i )->getText() ) );
  225. karten->setZeichnungZ( 1, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, saName->z( i )->getText() ) );
  226. karten->setZeichnungZ( 2, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += kupfer->get( i ) ) );
  227. karten->setZeichnungZ( 3, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += verkauft->get( i ) ) );
  228. karten->setZeichnungZ( 4, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += maxSpieler->get( i ) ) );
  229. Knopf *weiter = initKnopf( 0, 0, 0, 0, schrift, 0, "" );
  230. weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  231. weiter->setHintergrundBildZ( shopWeiter->getThis() );
  232. weiter->setMausEreignisParameter( this );
  233. weiter->setMausEreignis( auswahlWeiterME );
  234. karten->setZeichnungZ( 5, i + 1, weiter );
  235. }
  236. kId->release();
  237. kName->release();
  238. saName->release();
  239. kupfer->release();
  240. verkauft->release();
  241. maxSpieler->release();
  242. shopWeiter->release();
  243. laden->setSichtbar( 0 );
  244. run = 0;
  245. }
  246. bool Auswahl::weiterME( Zeichnung *obj, MausEreignis &me )
  247. {
  248. if( me.id != ME_RLinks )
  249. return 1;
  250. karten->lockZeichnung();
  251. int anz = karten->getZeilenAnzahl();
  252. for( int i = 1; i < anz; i++ )
  253. {
  254. if( karten->zZeichnung( 5, i ) == obj )
  255. {
  256. aktion = *karten->zZeilenName( i );
  257. start();
  258. }
  259. }
  260. karten->unlockZeichnung();
  261. return 1;
  262. }
  263. void Auswahl::doMausEreignis( MausEreignis &me )
  264. {
  265. if( !sichtbar || run )
  266. return;
  267. suchFilter->doMausEreignis( me );
  268. bool vera = me.verarbeitet;
  269. suchen->doMausEreignis( me );
  270. if( !vera && me.verarbeitet && me.id == ME_RLinks )
  271. {
  272. aktion = 0;
  273. start();
  274. }
  275. int ausw = sortSpalte->getAuswahl();
  276. sortSpalte->doMausEreignis( me );
  277. if( ausw != sortSpalte->getAuswahl() )
  278. {
  279. aktion = 0;
  280. start();
  281. sortSpalte->einklappen();
  282. }
  283. ausw = sortRichtung->getAuswahl();
  284. sortRichtung->doMausEreignis( me );
  285. if( ausw != sortRichtung->getAuswahl() )
  286. {
  287. aktion = 0;
  288. start();
  289. sortRichtung->einklappen();
  290. }
  291. karten->doMausEreignis( me );
  292. neuKarteName->doMausEreignis( me );
  293. neuKarteSpielArt->doMausEreignis( me );
  294. vera = me.verarbeitet;
  295. neuKarte->doMausEreignis( me );
  296. if( !vera && me.verarbeitet && me.id == ME_RLinks )
  297. {
  298. aktion = -1;
  299. start();
  300. }
  301. }
  302. void Auswahl::doTastaturEreignis( TastaturEreignis &te )
  303. {
  304. if( !sichtbar || run )
  305. return;
  306. bool vera = te.verarbeitet;
  307. suchFilter->doTastaturEreignis( te );
  308. if( !vera && te.verarbeitet && te.taste == T_Enter && te.id == TE_Release )
  309. {
  310. MausEreignis me;
  311. me.id = ME_RLinks;
  312. me.verarbeitet = 0;
  313. me.mx = suchen->getX() + 1;
  314. me.my = suchen->getY() + 1;
  315. doMausEreignis( me );
  316. }
  317. neuKarteName->doTastaturEreignis( te );
  318. }
  319. bool Auswahl::tick( double zeit )
  320. {
  321. tickVal += zeit * 250;
  322. int val = (int)tickVal;
  323. if( val < 1 )
  324. {
  325. bool ret = rend;
  326. rend = 0;
  327. return ret;
  328. }
  329. if( val > 10 )
  330. val = 10;
  331. rend |= sortSpalte->tick( zeit );
  332. rend |= sortRichtung->tick( zeit );
  333. rend |= neuKarteSpielArt->tick( zeit );
  334. rend |= laden->tick( zeit );
  335. rend |= suchFilterT->tick( zeit );
  336. rend |= suchFilter->tick( zeit );
  337. rend |= suchen->tick( zeit );
  338. rend |= karten->tick( zeit );
  339. rend |= neuKarteName->tick( zeit );
  340. rend |= neuKarte->tick( zeit );
  341. if( sichtbar && alpha != 255 && !run )
  342. {
  343. if( alpha + val > 255 )
  344. alpha = 255;
  345. else
  346. alpha += val;
  347. rend = 1;
  348. }
  349. if( sichtbar && alpha != 125 && run )
  350. {
  351. if( alpha > 125 )
  352. {
  353. if( alpha - val < 125 )
  354. alpha = 125;
  355. else
  356. alpha -= val;
  357. rend = 1;
  358. }
  359. else
  360. {
  361. if( alpha + val > 125 )
  362. alpha = 125;
  363. else
  364. alpha += 125;
  365. rend = 1;
  366. }
  367. }
  368. if( !sichtbar && alpha != 0 )
  369. {
  370. if( alpha - val < 0 )
  371. alpha = 0;
  372. else
  373. alpha -= val;
  374. rend = 1;
  375. }
  376. bool ret = rend;
  377. rend = 0;
  378. return ret;
  379. }
  380. void Auswahl::render( Bild &zRObj )
  381. {
  382. if( !alpha )
  383. return;
  384. zRObj.setAlpha( alpha );
  385. suchFilterT->render( zRObj );
  386. suchFilter->render( zRObj );
  387. suchen->render( zRObj );
  388. karten->render( zRObj );
  389. neuKarteName->render( zRObj );
  390. neuKarte->render( zRObj );
  391. neuKarteSpielArt->render( zRObj );
  392. sortSpalte->render( zRObj );
  393. sortRichtung->render( zRObj );
  394. zRObj.releaseAlpha();
  395. laden->render( zRObj );
  396. }
  397. // constant
  398. bool Auswahl::istSichtbar() const
  399. {
  400. return sichtbar;
  401. }
  402. // Reference Counting
  403. Auswahl *Auswahl::getThis()
  404. {
  405. ref++;
  406. return this;
  407. }
  408. Auswahl *Auswahl::release()
  409. {
  410. ref--;
  411. if( !ref )
  412. delete this;
  413. return 0;
  414. }
  415. // Ereignisse
  416. bool auswahlWeiterME( void *p, void *obj, MausEreignis me )
  417. {
  418. if( p )
  419. return ( (Auswahl*)p )->weiterME( (Zeichnung*)obj, me );
  420. return 1;
  421. }