AccountSuchen.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. #include "AccountSuchen.h"
  2. #include <DateiSystem.h>
  3. #include <Punkt.h>
  4. #include "../../../Global/Initialisierung.h"
  5. #include "../../../Global/Variablen.h"
  6. // Inhalt der AccountSuchen Klasse aud AccountSuchen.h
  7. // Konstruktor
  8. AccountSuchen::AccountSuchen()
  9. : Thread(),
  10. pos(810, 0),
  11. gr(800, 500),
  12. laden((Animation2D*)ladeAnimation->dublizieren()),
  13. accountName(initTextFeld(
  14. 10, 10, 200, 20, TextFeld::Style::TextFeld, "Spieler Suchen")),
  15. suchen(initKnopf(220, 10, 100, 20, Knopf::Style::Sichtbar, "Suchen")),
  16. sortSpalte(initAuswahlBox(330,
  17. 10,
  18. 150,
  19. 20,
  20. ABSTYLE,
  21. {
  22. "Name",
  23. "Zuletzt Online",
  24. "Letztes Spiel",
  25. "Letzte Karte",
  26. "Spielart Punkte"
  27. })),
  28. sortRichtung(
  29. initAuswahlBox(490, 10, 120, 20, ABSTYLE, {"Aufwärts", "Abwärts"})),
  30. zurück(initKnopf(620, 10, 20, 20, 0, "")),
  31. seite(initTextFeld(645,
  32. 10,
  33. 120,
  34. 20,
  35. TextFeld::Style::Text | TextFeld::Style::Center,
  36. "Seite 0 von 0")),
  37. vor(initKnopf(770, 10, 20, 20, 0, "")),
  38. liste(initObjTabelle(10,
  39. 40,
  40. 780,
  41. 450,
  42. OTSTYLE,
  43. {{"Name", 158, 0, 0},
  44. {"Zuletzt Online", 150, 0, 0},
  45. {"Letztes Spiel", 145, 0, 0},
  46. {"Letzte Karte", 150, 0, 0},
  47. {"Spielart Punkte", 150, 0, 0}},
  48. 30)),
  49. auswahl(0), tickVal(0), sichtbar(0), jetztSeite(0), maxSeite(0),
  50. alpha(255), rend(0)
  51. {
  52. initToolTip(accountName, "Gebe den Namen eines Spielers ein.");
  53. initToolTip(sortSpalte,
  54. "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.");
  55. initToolTip(sortRichtung,
  56. "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll.");
  57. Bild* zurückB = bilder->get("data/client/bilder/shop.ltdb/zurück.png");
  58. Bild* weiterB = bilder->get("data/client/bilder/shop.ltdb/weiter.png");
  59. laden->setSichtbar(0);
  60. laden->setPosition(375, 225);
  61. zurück->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund
  62. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  63. zurück->setHintergrundBildZ(zurückB);
  64. initToolTip(zurück, "Eine Seite zurück blättern.");
  65. vor->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund
  66. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  67. vor->setHintergrundBildZ(weiterB);
  68. initToolTip(vor, "Eine Seite weiter blättern.");
  69. liste->addSpalte("Weiter");
  70. liste->setSpaltenBreite("Weiter", 20);
  71. }
  72. // Destruktor
  73. AccountSuchen::~AccountSuchen()
  74. {
  75. laden->release();
  76. accountName->release();
  77. suchen->release();
  78. sortSpalte->release();
  79. sortRichtung->release();
  80. zurück->release();
  81. seite->release();
  82. vor->release();
  83. tabelleLehren(1);
  84. liste->release();
  85. }
  86. // privat
  87. void AccountSuchen::lock()
  88. {
  89. cs.lock();
  90. }
  91. void AccountSuchen::unlock()
  92. {
  93. cs.unlock();
  94. }
  95. void AccountSuchen::tabelleLehren(bool überschrift)
  96. {
  97. lock();
  98. int zAnz = liste->getZeilenAnzahl();
  99. for (int i = !überschrift; i < zAnz; i++)
  100. liste->removeZeile(!überschrift);
  101. unlock();
  102. }
  103. // nicht constant
  104. void AccountSuchen::setSichtbar(bool sichtbar)
  105. {
  106. this->sichtbar = sichtbar;
  107. }
  108. void AccountSuchen::thread()
  109. {
  110. laden->setSichtbar(1);
  111. tabelleLehren(0);
  112. Array<KSGClient::AccountInfo> info;
  113. int anz = infoClient->getSpielerListe(accountName->zText()->getText(),
  114. &jetztSeite,
  115. &maxSeite,
  116. sortSpalte->getAuswahl(),
  117. sortRichtung->getAuswahl(),
  118. &info);
  119. zurück->setStyle(Knopf::Style::Erlaubt, jetztSeite > 1);
  120. vor->setStyle(Knopf::Style::Erlaubt, jetztSeite < maxSeite);
  121. lock();
  122. seite->setText("Seite ");
  123. seite->zText()->append(jetztSeite);
  124. seite->zText()->append(" von ");
  125. seite->zText()->append(maxSeite);
  126. unlock();
  127. for (int i = 0; i < anz; i++)
  128. {
  129. KSGClient::AccountInfo inf = info.get(i);
  130. liste->addZeile(i + 1, Text() += inf.id);
  131. liste->setZeilenHeight(i + 1, 20);
  132. liste->setZeichnungZ(liste->getSpaltenNummer("Name"),
  133. i + 1,
  134. initTextFeld(0,
  135. 0,
  136. 0,
  137. 0,
  138. TextFeld::Style::Text | TextFeld::Style::VCenter,
  139. inf.name));
  140. if (inf.zuletztOnline.hat('.'))
  141. inf.zuletztOnline.setText(inf.zuletztOnline.getTeilText(
  142. 0, inf.zuletztOnline.positionVon('.')));
  143. liste->setZeichnungZ(liste->getSpaltenNummer("Zuletzt Online"),
  144. i + 1,
  145. initTextFeld(0,
  146. 0,
  147. 0,
  148. 0,
  149. TextFeld::Style::Text | TextFeld::Style::VCenter,
  150. inf.zuletztOnline));
  151. liste->setZeichnungZ(liste->getSpaltenNummer("Letztes Spiel"),
  152. i + 1,
  153. initTextFeld(0,
  154. 0,
  155. 0,
  156. 0,
  157. TextFeld::Style::Text | TextFeld::Style::VCenter,
  158. inf.letztesSpiel));
  159. liste->setZeichnungZ(liste->getSpaltenNummer("Letzte Karte"),
  160. i + 1,
  161. initTextFeld(0,
  162. 0,
  163. 0,
  164. 0,
  165. TextFeld::Style::Text | TextFeld::Style::VCenter,
  166. inf.letzteKarte));
  167. liste->setZeichnungZ(liste->getSpaltenNummer("Spielart Punkte"),
  168. i + 1,
  169. initTextFeld(0,
  170. 0,
  171. 0,
  172. 0,
  173. TextFeld::Style::Text | TextFeld::Style::VCenter,
  174. inf.punkte));
  175. Knopf* details = initKnopf(0, 0, 20, 20, 0, "");
  176. details->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund
  177. | Knopf::Style::HBild | Knopf::Style::KlickBuffer
  178. | Knopf::Style::Erlaubt);
  179. details->setMausEreignisParameter(this);
  180. details->setMausEreignis(accountSuchenDetailsKlick);
  181. details->setHintergrundBildZ(vor->getHintergrundBild());
  182. liste->setZeichnungZ(liste->getSpaltenNummer("Weiter"), i + 1, details);
  183. }
  184. laden->setSichtbar(0);
  185. run = 0;
  186. }
  187. bool AccountSuchen::detailsKlick(Knopf* zKnopf, MausEreignis& me)
  188. {
  189. if (me.id != ME_RLinks) return 1;
  190. int zAnz = liste->getZeilenAnzahl();
  191. for (int i = 1; i < zAnz; i++)
  192. {
  193. if (liste->zZeichnung(liste->getSpaltenNummer("Weiter"), i) == zKnopf)
  194. {
  195. auswahl = (int)*liste->zZeilenName(i);
  196. break;
  197. }
  198. }
  199. return 1;
  200. }
  201. void AccountSuchen::doPublicMausEreignis(MausEreignis& me)
  202. {
  203. if (run) return;
  204. bool starten = 0;
  205. lock();
  206. me.mx -= pos.x;
  207. me.my -= pos.y;
  208. int ausw = sortSpalte->getAuswahl();
  209. sortSpalte->doPublicMausEreignis(me);
  210. if (ausw != sortSpalte->getAuswahl())
  211. {
  212. sortSpalte->einklappen();
  213. starten = 1;
  214. }
  215. ausw = sortRichtung->getAuswahl();
  216. sortRichtung->doPublicMausEreignis(me);
  217. if (ausw != sortRichtung->getAuswahl())
  218. {
  219. sortRichtung->einklappen();
  220. starten = 1;
  221. }
  222. accountName->doPublicMausEreignis(me);
  223. bool vera = me.verarbeitet;
  224. suchen->doPublicMausEreignis(me);
  225. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  226. {
  227. jetztSeite = 1;
  228. starten = 1;
  229. }
  230. vera = me.verarbeitet;
  231. zurück->doPublicMausEreignis(me);
  232. if (!vera && me.verarbeitet)
  233. {
  234. seite--;
  235. starten = 1;
  236. }
  237. vera = me.verarbeitet;
  238. vor->doPublicMausEreignis(me);
  239. if (!vera && me.verarbeitet)
  240. {
  241. seite++;
  242. starten = 1;
  243. }
  244. liste->doPublicMausEreignis(me);
  245. me.mx += pos.x;
  246. me.my += pos.y;
  247. unlock();
  248. if (starten) start();
  249. }
  250. void AccountSuchen::doTastaturEreignis(TastaturEreignis& te)
  251. {
  252. if (run) return;
  253. lock();
  254. bool vera = te.verarbeitet;
  255. accountName->doTastaturEreignis(te);
  256. if (!vera && te.verarbeitet && te.virtualKey == T_Enter
  257. && te.id == TE_Release)
  258. {
  259. jetztSeite = 1;
  260. start();
  261. }
  262. unlock();
  263. }
  264. bool AccountSuchen::tick(double tickVal)
  265. {
  266. lock();
  267. rend |= laden->tick(tickVal);
  268. rend |= accountName->tick(tickVal);
  269. rend |= suchen->tick(tickVal);
  270. rend |= sortSpalte->tick(tickVal);
  271. rend |= sortRichtung->tick(tickVal);
  272. rend |= zurück->tick(tickVal);
  273. rend |= seite->tick(tickVal);
  274. rend |= vor->tick(tickVal);
  275. rend |= liste->tick(tickVal);
  276. this->tickVal += tickVal;
  277. int valA = (int)(this->tickVal * 150);
  278. int valB = (int)(this->tickVal * 500);
  279. this->tickVal -= valA / 150.0;
  280. if (valA)
  281. {
  282. if (laden->istSichtbar() && alpha != 100)
  283. {
  284. if (alpha - valA < 100)
  285. alpha = 100;
  286. else
  287. alpha -= valA;
  288. rend = 1;
  289. }
  290. if (!laden->istSichtbar() && alpha != 255)
  291. {
  292. if (alpha + valA > 255)
  293. alpha = 255;
  294. else
  295. alpha += valA;
  296. rend = 1;
  297. }
  298. }
  299. if (valB)
  300. {
  301. if (sichtbar && pos.x != 0)
  302. {
  303. if (pos.x + valB > 0)
  304. pos.x = 0;
  305. else
  306. pos.x += valB;
  307. rend = 1;
  308. }
  309. else if (!sichtbar && pos.x != -810)
  310. {
  311. if (pos.x - valB < -810)
  312. pos.x = -810;
  313. else
  314. pos.x -= valB;
  315. rend = 1;
  316. }
  317. }
  318. unlock();
  319. bool ret = rend;
  320. rend = 0;
  321. return ret;
  322. }
  323. void AccountSuchen::render(Bild& zRObj)
  324. {
  325. if (!zRObj.setDrawOptions(pos, gr)) return;
  326. lock();
  327. laden->render(zRObj);
  328. accountName->render(zRObj);
  329. suchen->render(zRObj);
  330. zurück->render(zRObj);
  331. seite->render(zRObj);
  332. vor->render(zRObj);
  333. liste->render(zRObj);
  334. sortSpalte->render(zRObj);
  335. sortRichtung->render(zRObj);
  336. unlock();
  337. zRObj.releaseDrawOptions();
  338. }
  339. int AccountSuchen::getAuswahlAccountId()
  340. {
  341. int ret = auswahl;
  342. auswahl = 0;
  343. return ret;
  344. }
  345. // Nachrichten
  346. bool accountSuchenDetailsKlick(void* p, void* obj, MausEreignis me)
  347. {
  348. if (p) return ((AccountSuchen*)p)->detailsKlick((Knopf*)obj, me);
  349. return 1;
  350. }