#include "AccountSuchen.h" #include #include #include "../../../Global/Initialisierung.h" #include "../../../Global/Variablen.h" // Inhalt der AccountSuchen Klasse aud AccountSuchen.h // Konstruktor AccountSuchen::AccountSuchen() : Thread(), pos(810, 0), gr(800, 500), laden((Animation2D*)ladeAnimation->dublizieren()), accountName(initTextFeld( 10, 10, 200, 20, TextFeld::Style::TextFeld, "Spieler Suchen")), suchen(initKnopf(220, 10, 100, 20, Knopf::Style::Sichtbar, "Suchen")), sortSpalte(initAuswahlBox(330, 10, 150, 20, ABSTYLE, { "Name", "Zuletzt Online", "Letztes Spiel", "Letzte Karte", "Spielart Punkte" })), sortRichtung( initAuswahlBox(490, 10, 120, 20, ABSTYLE, {"Aufwärts", "Abwärts"})), zurück(initKnopf(620, 10, 20, 20, 0, "")), seite(initTextFeld(645, 10, 120, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Seite 0 von 0")), vor(initKnopf(770, 10, 20, 20, 0, "")), liste(initObjTabelle(10, 40, 780, 450, OTSTYLE, {{"Name", 158, 0, 0}, {"Zuletzt Online", 150, 0, 0}, {"Letztes Spiel", 145, 0, 0}, {"Letzte Karte", 150, 0, 0}, {"Spielart Punkte", 150, 0, 0}}, 30)), auswahl(0), tickVal(0), sichtbar(0), jetztSeite(0), maxSeite(0), alpha(255), rend(0) { initToolTip(accountName, "Gebe den Namen eines Spielers ein."); initToolTip(sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll."); initToolTip(sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll."); Bild* zurückB = bilder->get("data/client/bilder/shop.ltdb/zurück.png"); Bild* weiterB = bilder->get("data/client/bilder/shop.ltdb/weiter.png"); laden->setSichtbar(0); laden->setPosition(375, 225); zurück->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer); zurück->setHintergrundBildZ(zurückB); initToolTip(zurück, "Eine Seite zurück blättern."); vor->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer); vor->setHintergrundBildZ(weiterB); initToolTip(vor, "Eine Seite weiter blättern."); liste->addSpalte("Weiter"); liste->setSpaltenBreite("Weiter", 20); } // Destruktor AccountSuchen::~AccountSuchen() { laden->release(); accountName->release(); suchen->release(); sortSpalte->release(); sortRichtung->release(); zurück->release(); seite->release(); vor->release(); tabelleLehren(1); liste->release(); } // privat void AccountSuchen::lock() { cs.lock(); } void AccountSuchen::unlock() { cs.unlock(); } void AccountSuchen::tabelleLehren(bool überschrift) { lock(); int zAnz = liste->getZeilenAnzahl(); for (int i = !überschrift; i < zAnz; i++) liste->removeZeile(!überschrift); unlock(); } // nicht constant void AccountSuchen::setSichtbar(bool sichtbar) { this->sichtbar = sichtbar; } void AccountSuchen::thread() { laden->setSichtbar(1); tabelleLehren(0); Array info; int anz = infoClient->getSpielerListe(accountName->zText()->getText(), &jetztSeite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), &info); zurück->setStyle(Knopf::Style::Erlaubt, jetztSeite > 1); vor->setStyle(Knopf::Style::Erlaubt, jetztSeite < maxSeite); lock(); seite->setText("Seite "); seite->zText()->append(jetztSeite); seite->zText()->append(" von "); seite->zText()->append(maxSeite); unlock(); for (int i = 0; i < anz; i++) { KSGClient::AccountInfo inf = info.get(i); liste->addZeile(i + 1, Text() += inf.id); liste->setZeilenHeight(i + 1, 20); liste->setZeichnungZ(liste->getSpaltenNummer("Name"), i + 1, initTextFeld(0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.name)); if (inf.zuletztOnline.hat('.')) inf.zuletztOnline.setText(inf.zuletztOnline.getTeilText( 0, inf.zuletztOnline.positionVon('.'))); liste->setZeichnungZ(liste->getSpaltenNummer("Zuletzt Online"), i + 1, initTextFeld(0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.zuletztOnline)); liste->setZeichnungZ(liste->getSpaltenNummer("Letztes Spiel"), i + 1, initTextFeld(0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letztesSpiel)); liste->setZeichnungZ(liste->getSpaltenNummer("Letzte Karte"), i + 1, initTextFeld(0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letzteKarte)); liste->setZeichnungZ(liste->getSpaltenNummer("Spielart Punkte"), i + 1, initTextFeld(0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.punkte)); Knopf* details = initKnopf(0, 0, 20, 20, 0, ""); details->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::Erlaubt); details->setMausEreignisParameter(this); details->setMausEreignis(accountSuchenDetailsKlick); details->setHintergrundBildZ(vor->getHintergrundBild()); liste->setZeichnungZ(liste->getSpaltenNummer("Weiter"), i + 1, details); } laden->setSichtbar(0); run = 0; } bool AccountSuchen::detailsKlick(Knopf* zKnopf, MausEreignis& me) { if (me.id != ME_RLinks) return 1; int zAnz = liste->getZeilenAnzahl(); for (int i = 1; i < zAnz; i++) { if (liste->zZeichnung(liste->getSpaltenNummer("Weiter"), i) == zKnopf) { auswahl = (int)*liste->zZeilenName(i); break; } } return 1; } void AccountSuchen::doPublicMausEreignis(MausEreignis& me) { if (run) return; bool starten = 0; lock(); me.mx -= pos.x; me.my -= pos.y; int ausw = sortSpalte->getAuswahl(); sortSpalte->doPublicMausEreignis(me); if (ausw != sortSpalte->getAuswahl()) { sortSpalte->einklappen(); starten = 1; } ausw = sortRichtung->getAuswahl(); sortRichtung->doPublicMausEreignis(me); if (ausw != sortRichtung->getAuswahl()) { sortRichtung->einklappen(); starten = 1; } accountName->doPublicMausEreignis(me); bool vera = me.verarbeitet; suchen->doPublicMausEreignis(me); if (!vera && me.verarbeitet && me.id == ME_RLinks) { jetztSeite = 1; starten = 1; } vera = me.verarbeitet; zurück->doPublicMausEreignis(me); if (!vera && me.verarbeitet) { seite--; starten = 1; } vera = me.verarbeitet; vor->doPublicMausEreignis(me); if (!vera && me.verarbeitet) { seite++; starten = 1; } liste->doPublicMausEreignis(me); me.mx += pos.x; me.my += pos.y; unlock(); if (starten) start(); } void AccountSuchen::doTastaturEreignis(TastaturEreignis& te) { if (run) return; lock(); bool vera = te.verarbeitet; accountName->doTastaturEreignis(te); if (!vera && te.verarbeitet && te.virtualKey == T_Enter && te.id == TE_Release) { jetztSeite = 1; start(); } unlock(); } bool AccountSuchen::tick(double tickVal) { lock(); rend |= laden->tick(tickVal); rend |= accountName->tick(tickVal); rend |= suchen->tick(tickVal); rend |= sortSpalte->tick(tickVal); rend |= sortRichtung->tick(tickVal); rend |= zurück->tick(tickVal); rend |= seite->tick(tickVal); rend |= vor->tick(tickVal); rend |= liste->tick(tickVal); this->tickVal += tickVal; int valA = (int)(this->tickVal * 150); int valB = (int)(this->tickVal * 500); this->tickVal -= valA / 150.0; if (valA) { if (laden->istSichtbar() && alpha != 100) { if (alpha - valA < 100) alpha = 100; else alpha -= valA; rend = 1; } if (!laden->istSichtbar() && alpha != 255) { if (alpha + valA > 255) alpha = 255; else alpha += valA; rend = 1; } } if (valB) { if (sichtbar && pos.x != 0) { if (pos.x + valB > 0) pos.x = 0; else pos.x += valB; rend = 1; } else if (!sichtbar && pos.x != -810) { if (pos.x - valB < -810) pos.x = -810; else pos.x -= valB; rend = 1; } } unlock(); bool ret = rend; rend = 0; return ret; } void AccountSuchen::render(Bild& zRObj) { if (!zRObj.setDrawOptions(pos, gr)) return; lock(); laden->render(zRObj); accountName->render(zRObj); suchen->render(zRObj); zurück->render(zRObj); seite->render(zRObj); vor->render(zRObj); liste->render(zRObj); sortSpalte->render(zRObj); sortRichtung->render(zRObj); unlock(); zRObj.releaseDrawOptions(); } int AccountSuchen::getAuswahlAccountId() { int ret = auswahl; auswahl = 0; return ret; } // Nachrichten bool accountSuchenDetailsKlick(void* p, void* obj, MausEreignis me) { if (p) return ((AccountSuchen*)p)->detailsKlick((Knopf*)obj, me); return 1; }