#include "AccountSuchen.h" #include #include "../../../Global/Variablen.h" #include "../../../Global/Initialisierung.h" #include // Inhalt der AccountSuchen Klasse aud AccountSuchen.h // Konstruktor AccountSuchen::AccountSuchen( Schrift *schrift ) : Thread(), schrift( schrift ), pos( 810, 0 ), gr( 800, 500 ), laden( (Animation2D*)ladeAnimation->dublizieren() ), accountName( initTextFeld( 10, 10, 200, 20, schrift, TextFeld::Style::TextFeld, "Spieler Suchen" ) ), suchen( initKnopf( 220, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Suchen" ) ), sortSpalte( initAuswahlBox( 330, 10, 150, 20, schrift, ABSTYLE, { "Name", "Zuletzt Online", "Letztes Spiel", "Letzte Karte", "Spielart Punkte" } ) ), sortRichtung( initAuswahlBox( 490, 10, 120, 20, schrift, ABSTYLE, { "Aufwärts", "Abwärts" } ) ), zurück( initKnopf( 620, 10, 20, 20, 0, 0, "" ) ), seite( initTextFeld( 645, 10, 120, 20, schrift, TextFeld::Style::Text | TextFeld::Style::Center, "Seite 0 von 0" ) ), vor( initKnopf( 770, 10, 20, 20, 0, 0, "" ) ), liste( initObjTabelle( 10, 40, 780, 450, schrift, 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 ), ref( 1 ) { initToolTip( accountName, "Gebe den Namen eines Spielers ein.", schrift->getThis(), hauptScreen ); initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", schrift->getThis(), hauptScreen ); initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll.", schrift->getThis(), hauptScreen ); Bild *zurückB = bilder->get( "shop.ltdb/zurück.png" ); if( !zurückB ) { LTDBDatei *datei = new LTDBDatei(); datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) ); datei->leseDaten( 0 ); zurückB = datei->laden( 0, new Text( "zurück.png" ) ); datei->release(); bilder->add( "shop.ltdb/zurück.png", zurückB->getThis() ); } Bild *weiterB = bilder->get( "shop.ltdb/weiter.png" ); if( !weiterB ) { LTDBDatei *datei = new LTDBDatei(); datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) ); datei->leseDaten( 0 ); weiterB = datei->laden( 0, new Text( "weiter.png" ) ); datei->release(); bilder->add( "shop.ltdb/weiter.png", weiterB->getThis() ); } 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.", schrift->getThis(), hauptScreen ); vor->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer ); vor->setHintergrundBildZ( weiterB ); initToolTip( vor, "Eine Seite weiter blättern.", schrift->getThis(), hauptScreen ); liste->addSpalte( "Weiter" ); liste->setSpaltenBreite( "Weiter", 20 ); } // Destruktor AccountSuchen::~AccountSuchen() { if( run ) warteAufThread( 1000 ); if( run ) ende(); schrift->release(); 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(); int sAnz = liste->getSpaltenAnzahl(); for( int i = !überschrift; i < zAnz; i++ ) { for( int j = 0; j < sAnz; j++ ) { if( !liste->zZeichnung( j, !überschrift ) ) continue; if( liste->zSpaltenName( j )->istGleich( "Weiter" ) ) ( (Knopf*)liste->zZeichnung( j, !überschrift ) )->release(); else ( (TextFeld*)liste->zZeichnung( j, !überschrift ) )->release(); } liste->removeZeile( !überschrift ); } unlock(); } // nicht constant void AccountSuchen::setSichtbar( bool sichtbar ) { this->sichtbar = sichtbar; } void AccountSuchen::thread() { laden->setSichtbar( 1 ); tabelleLehren( 0 ); Array< int > *accounts = new Array< int >(); RCArray< Text > *namen = new RCArray< Text >(); RCArray< Text > *zuletztOnline = new RCArray< Text >(); RCArray< Text > *letztesSpiel = new RCArray< Text >(); RCArray< Text > *letzteKarte = new RCArray< Text >(); RCArray< Text > *punkte = new RCArray< Text >(); int anz = infoKlient->getSpielerListe( accountName->zText()->getText(), &jetztSeite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), accounts, namen, zuletztOnline, letztesSpiel, letzteKarte, punkte ); 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++ ) { liste->addZeile( i + 1, Text() += accounts->get( i ) ); liste->setZeilenHeight( i + 1, 20 ); liste->setZeichnungZ( liste->getSpaltenNummer( "Name" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, namen->z( i )->getText() ) ); if( zuletztOnline->z( i )->hat( '.' ) ) zuletztOnline->z( i )->setText( zuletztOnline->z( i )->getTeilText( 0, zuletztOnline->z( i )->positionVon( '.' ) ) ); liste->setZeichnungZ( liste->getSpaltenNummer( "Zuletzt Online" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, zuletztOnline->z( i )->getText() ) ); liste->setZeichnungZ( liste->getSpaltenNummer( "Letztes Spiel" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, letztesSpiel->z( i )->getText() ) ); liste->setZeichnungZ( liste->getSpaltenNummer( "Letzte Karte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, letzteKarte->z( i )->getText() ) ); liste->setZeichnungZ( liste->getSpaltenNummer( "Spielart Punkte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, punkte->z( i )->getText() ) ); Knopf *details = initKnopf( 0, 0, 20, 20, 0, 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 ); } accounts->release(); namen->release(); zuletztOnline->release(); letztesSpiel->release(); letzteKarte->release(); punkte->release(); 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 = *liste->zZeilenName( i ); break; } } return 1; } void AccountSuchen::doMausEreignis( MausEreignis &me ) { if( run ) return; bool starten = 0; lock(); me.mx -= pos.x; me.my -= pos.y; int ausw = sortSpalte->getAuswahl(); sortSpalte->doMausEreignis( me ); if( ausw != sortSpalte->getAuswahl() ) { sortSpalte->einklappen(); starten = 1; } ausw = sortRichtung->getAuswahl(); sortRichtung->doMausEreignis( me ); if( ausw != sortRichtung->getAuswahl() ) { sortRichtung->einklappen(); starten = 1; } accountName->doMausEreignis( me ); bool vera = me.verarbeitet; suchen->doMausEreignis( me ); if( !vera && me.verarbeitet && me.id == ME_RLinks ) { jetztSeite = 1; starten = 1; } vera = me.verarbeitet; zurück->doMausEreignis( me ); if( !vera && me.verarbeitet ) { seite--; starten = 1; } vera = me.verarbeitet; vor->doMausEreignis( me ); if( !vera && me.verarbeitet ) { seite++; starten = 1; } liste->doMausEreignis( 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.taste == 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; } // constant // Reference Counting AccountSuchen *AccountSuchen::getThis() { ref++; return this; } AccountSuchen *AccountSuchen::release() { ref--; if( !ref ) delete this; return 0; } // Nachrichten bool accountSuchenDetailsKlick( void *p, void *obj, MausEreignis me ) { if( p ) return ( (AccountSuchen*)p )->detailsKlick( (Knopf*)obj, me ); return 1; }