#include "KERelease.h" #include "../../../../Global/Initialisierung.h" #include "../../../../Global/Variablen.h" #include #include bool kEReleaseHerstellenME( void *p, void *obj, MausEreignis me ) { if( p ) return ( (KERelease*)p )->herstellenME( (Knopf*)obj, me ); return 1; } bool kEReleaseLöschenME( void *p, void *obj, MausEreignis me ) { if( p ) return ( (KERelease*)p )->removeME( (Knopf*)obj, me ); return 1; } bool kEReleaseVeröffME( void *p, void *obj, MausEreignis me ) { if( p ) return ( (KERelease*)p )->veröffentlichenME( me ); return 1; } bool kEReleaseAbbildErstellenME( void *p, void *obj, MausEreignis me ) { if( p ) return ( (KERelease*)p )->abbildErstellenME( me ); return 1; } bool kEReleaseShopÜbernehmenME( void *p, void *obj, MausEreignis me ) { if( p ) return ( (KERelease*)p )->shopÜbernehmenME( me ); return 1; } // Inhalt der KERelease Klasse aus KERelease.h // Konstruktor KERelease::KERelease( int karte, Schrift *zSchrift ) : Thread() { schrift = zSchrift->getThis(); Text *kName = infoClient->getKarteName( karte ); Text titel = kName ? kName->getText() : ""; titel += " - Release"; if( kName ) kName->release(); fenster = initFenster( 10, 40, 880, 550, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel ); abbilder = initObjTabelle( 10, 10, 700, 510, zSchrift, OTSTYLE, { { "Name", 270, 270, 270 }, { "Datum", 200, 200, 200 }, { "Herstellen", 100, 100, 100 }, { "Löschen", 100, 100, 100 } }, 20 ); veröff = initKnopf( 720, 10, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Veröffentlichen" ); veröff->setMausEreignisParameter( this ); veröff->setMausEreignis( kEReleaseVeröffME ); initToolTip( veröff, "Veröffentlicht die momentane Version der Karte.\nDieser Vorgang kann einiege Minuten dauern.\nWährend dieses Vorgangs können keine Änderungen\nan der Karte vorgenommen werden.", schrift->getThis(), hauptScreen ); abbildName = initTextFeld( 720, 40, 150, 20, zSchrift, TextFeld::Style::TextFeld, "Abbild Name" ); initToolTip( abbildName, "Name eines neu zu erstellenen Kartenabbilds.", schrift->getThis(), hauptScreen ); abbildErstellen = initKnopf( 720, 70, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Abbild Erstellen" ); abbildErstellen->setMausEreignisParameter( this ); abbildErstellen->setMausEreignis( kEReleaseAbbildErstellenME ); initToolTip( abbildErstellen, "Erstellt ein Abbild von der aktuellen Kartenversion,\ndas zu einem späteren Zeitpunkt wiederhergestellt werden kann.", schrift->getThis(), hauptScreen ); shopT = initTextFeld( 720, 350, 150, 20, zSchrift, TextFeld::Style::Text, "Im Shop zu kaufen:" ); testVersionErwerbbar = initAuswahlBox( 720, 375, 150, 20, zSchrift, ABSTYLE, { "Testversion ja", "Testversion nein" } ); vollVersionErwerbbar = initAuswahlBox( 720, 400, 150, 20, zSchrift, ABSTYLE, { "Vollversion ja","Vollversion nein" } ); preisT = initTextFeld( 720, 425, 150, 20, zSchrift, TextFeld::Style::Text, "Preis in Kupfer:" ); testVersionPreisT = initTextFeld( 720, 450, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Testversion:" ); vollVersionPreisT = initTextFeld( 720, 475, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Vollversion:" ); testVersionPreis = initTextFeld( 820, 450, 50, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" ); testVersionPreis->setTastaturEreignis( _nurNummernTE ); vollVersionPreis = initTextFeld( 820, 475, 50, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" ); vollVersionPreis->setTastaturEreignis( _nurNummernTE ); shopÜbernehmen = initKnopf( 745, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Übernehmen" ); shopÜbernehmen->setMausEreignis( kEReleaseShopÜbernehmenME ); shopÜbernehmen->setMausEreignisParameter( this ); laden = (Animation2D*)ladeAnimation->dublizieren(); laden->setPosition( 425, 275 ); laden->setSichtbar( 0 ); fenster->addMember( abbilder->getThis() ); fenster->addMember( veröff->getThis() ); fenster->addMember( abbildName->getThis() ); fenster->addMember( abbildErstellen->getThis() ); fenster->addMember( shopT->getThis() ); fenster->addMember( preisT->getThis() ); fenster->addMember( testVersionPreisT->getThis() ); fenster->addMember( vollVersionPreisT->getThis() ); fenster->addMember( testVersionPreis->getThis() ); fenster->addMember( vollVersionPreis->getThis() ); fenster->addMember( shopÜbernehmen->getThis() ); fenster->addMember( vollVersionErwerbbar->getThis() ); fenster->addMember( testVersionErwerbbar->getThis() ); animation = 0; tickVal = 0; sichtbar = 0; rechts = 0; xStart = 0; breite = 0; aktion = 0; zeile = 0; this->karte = karte; alpha = 255; } // Destruktor KERelease::~KERelease() { if( run ) { warteAufThread( 5000 ); if( run ) ende(); } fenster->release(); abbilder->release(); veröff->release(); abbildName->release(); abbildErstellen->release(); laden->release(); schrift->release(); shopT->release(); testVersionErwerbbar->release(); vollVersionErwerbbar->release(); preisT->release(); testVersionPreisT->release(); vollVersionPreisT->release(); testVersionPreis->release(); vollVersionPreis->release(); shopÜbernehmen->release(); } // nicht constant bool KERelease::herstellenME( Knopf *obj, MausEreignis &me ) { if( me.id == ME_RLinks ) { int anz = abbilder->getZeilenAnzahl(); for( int i = 1; i < anz; i++ ) { if( obj == (Knopf*)abbilder->zZeichnung( 2, i ) ) { if( !run ) { zeile = i; aktion = 1; start(); } break; } } } return 1; } bool KERelease::removeME( Knopf *obj, MausEreignis &me ) { if( me.id == ME_RLinks ) { int anz = abbilder->getZeilenAnzahl(); for( int i = 1; i < anz; i++ ) { if( obj == (Knopf*)abbilder->zZeichnung( 3, i ) ) { if( !run ) { zeile = i; aktion = 2; start(); } break; } } } return 1; } bool KERelease::veröffentlichenME( MausEreignis &me ) { if( me.id == ME_RLinks ) { if( !run ) { aktion = 3; start(); } } return 1; } bool KERelease::abbildErstellenME( MausEreignis &me ) { if( me.id == ME_RLinks ) { if( !run ) { aktion = 4; start(); } } return 1; } bool KERelease::shopÜbernehmenME( MausEreignis &me ) { if( me.id == ME_RLinks ) { if( !run ) { aktion = 5; start(); } } return 1; } void KERelease::setSichtbar( bool s, bool vr ) { animation = 1; sichtbar = s; rechts = vr; if( sichtbar ) { if( vr ) { xStart = 900; breite = 0; } else { xStart = 0; breite = 0; } if( !run ) { aktion = 0; start(); } } } void KERelease::thread() { laden->setSichtbar( 1 ); if( aktion == 1 && zeile ) { if( !editorClient->abbildHerstellen( abbilder->zZeilenName( zeile )->getText() ) ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) ); zeile = 0; run = 0; laden->setSichtbar( 0 ); return; } if( aktion == 2 && zeile ) { if( !editorClient->abbildLöschen( abbilder->zZeilenName( zeile )->getText() ) ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) ); zeile = 0; } if( aktion == 3 ) { if( !editorClient->veröffentlichen() ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) ); run = 0; laden->setSichtbar( 0 ); return; } if( aktion == 4 ) { if( !editorClient->abbildErstellen( abbildName->zText()->getText() ) ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) ); } if( aktion == 0 ) { int es = 0, tp = 0, vp = 0; if( editorClient->getShopDaten( es, tp, vp ) ) { if( ( es | 1 ) == es ) testVersionErwerbbar->setAuswahl( 0 ); else testVersionErwerbbar->setAuswahl( 1 ); if( ( es | 2 ) == es ) vollVersionErwerbbar->setAuswahl( 0 ); else vollVersionErwerbbar->setAuswahl( 1 ); testVersionPreis->setText( Text() += tp ); vollVersionPreis->setText( Text() += vp ); } else nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) ); } if( aktion == 5 ) { int es = 0; if( !testVersionErwerbbar->getAuswahl() ) es |= 1; if( !vollVersionErwerbbar->getAuswahl() ) es |= 2; int tp = (int)*testVersionPreis->zText(); int vp = (int)*vollVersionPreis->zText(); if( !editorClient->setShopDaten( es, tp, vp ) ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) ); run = 0; laden->setSichtbar( 0 ); return; } int anz = abbilder->getZeilenAnzahl(); for( int i = 1; i < anz; i++ ) { abbilder->removeZeile( 1 ); hauptScreen->unlock(); } RCArray< Text > *name = new RCArray< Text >(); RCArray< Zeit > *datum = new RCArray< Zeit >(); anz = editorClient->getAbbildListe( name, datum ); for( int i = 0; i < anz; i++ ) { hauptScreen->lock(); abbilder->addZeile( name->z( i )->getText() ); abbilder->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text, name->z( i )->getText() ) ); Text *d = datum->z( i )->getZeit( "h:i:s d.m.y" ); abbilder->setZeichnungZ( 1, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text, d->getText() ) ); d->release(); Knopf *k = initKnopf( 0, 0, 100, 20, schrift, Knopf::Style::Sichtbar, "Herstellen" ); initToolTip( k, "Stellt die abgespeicherte Version der Karte wiederher.", schrift->getThis(), hauptScreen ); k->setMausEreignisParameter( this ); k->setMausEreignis( kEReleaseHerstellenME ); abbilder->setZeichnungZ( 2, i + 1, k ); k = initKnopf( 0, 0, 100, 20, schrift, Knopf::Style::Sichtbar, "Löschen" ); initToolTip( k, "Löscht die abgespeicherte Version der Karte.", schrift->getThis(), hauptScreen ); k->setMausEreignisParameter( this ); k->setMausEreignis( kEReleaseLöschenME ); abbilder->setZeichnungZ( 3, i + 1, k ); hauptScreen->unlock(); } name->release(); datum->release(); run = 0; laden->setSichtbar( 0 ); } void KERelease::doMausEreignis( MausEreignis &me ) { if( !run ) fenster->doMausEreignis( me ); } void KERelease::doTastaturEreignis( TastaturEreignis &te ) { if( !run ) fenster->doTastaturEreignis( te ); } bool KERelease::tick( double z ) { bool ret = laden->tick( z ); tickVal += z * 150; int val = (int)tickVal; tickVal -= val; if( val ) { if( run && alpha != 100 ) { if( alpha - val < 100 ) alpha = 100; else alpha -= val; ret = 1; } if( !run && alpha != 255 ) { if( alpha + val > 255 ) alpha = 255; else alpha += val; ret = 1; } val *= 3; if( sichtbar ) { if( xStart != 0 || breite != 900 ) { if( rechts ) { if( xStart - val <= 0 ) { xStart = 0; breite = 900; animation = 0; } else { xStart -= val; breite += val; } } else { if( breite + val >= 900 ) { breite = 900; animation = 0; } else breite += val; } ret = 1; } } else { if( breite != 0 ) { if( rechts ) { if( breite - val <= 0 ) { breite = 0; animation = 0; } else breite -= val; } else { if( breite - val <= 0 ) { breite = 0; xStart = 900; animation = 0; } else { breite -= val; xStart += val; } } ret = 1; } } } return ret || fenster->tick( z ); } void KERelease::render( Bild &zRObj ) { if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) ) return; zRObj.setAlpha( alpha ); fenster->render( zRObj ); zRObj.releaseAlpha(); laden->render( zRObj ); zRObj.releaseDrawOptions(); } // constant bool KERelease::istSichtbar() const { return sichtbar || animation; }