Auswahl.cpp 13 KB

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