#include "KEShopSeite.h" #include #include #include "../../../../Global/Variablen.h" #include "../../../../Global/Initialisierung.h" #include // Inhalt der KEShopSeite Klasse aus KEShopSeite.h // Konstruktor KEShopSeite::KEShopSeite( int karte, Schrift *zSchrift ) : Thread() { schrift = zSchrift->getThis(); Text *kName = infoKlient->getKarteName( karte ); Text titel = kName ? kName->getText() : ""; titel += " - Shop Seite"; 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 ); editor = new KESSEditor( zSchrift ); vorschau = new KESSVorschau( zSchrift ); laden = (Animation2D*)ladeAnimation->dublizieren(); laden->setPosition( 425, 275 ); laden->setSichtbar( 0 ); fenster->addMember( editor ); fenster->addMember( vorschau ); animation = 0; tickVal = 0; sichtbar = 0; rechts = 0; xStart = 0; breite = 0; aktion = 0; zeile = 0; this->karte = karte; alpha = 255; ref = 1; } // Destruktor KEShopSeite::~KEShopSeite() { if( run ) { warteAufThread( 5000 ); if( run ) ende(); } fenster->release(); editor->release(); vorschau->release(); laden->release(); schrift->release(); } // nicht constant void KEShopSeite::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 KEShopSeite::thread() { laden->setSichtbar( 1 ); switch( aktion ) { case 0: // Init { RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetDateiListe( list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setDateiListe( list ); break; } case 1: // Neue Datei { if( !editorKlient->ssDateiErstellen( editor->zNeuDateiName()->getText(), editor->getNeuDateiTyp() ) ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetDateiListe( list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setDateiListe( list ); break; } case 2: // Datei Auswählen { Text *zName = editor->zDateiAuswahl(); if( zName->hat( ".ltdb" ) ) { RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetBildListe( zName->getText(), list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setBildListe( list ); } else if( zName->hat( ".ksgs" ) ) { Text *txt = editorKlient->ssTextLaden( zName->getText() ); if( !txt ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } editor->setDateiText( txt ); } else { if( !editorKlient->ssOrdnerÖffnen(zName->getText() ) ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetDateiListe( list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setDateiListe( list ); } break; } case 3: // Bild Auswählen { Bild *b = editorKlient->ssBildLaden( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() ); if( !b ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } editor->setBild( b ); break; } case 4: // Datei Löschen { if( ( editor->zDateiAuswahl() && !editorKlient->ssDateiLöschen( editor->zDateiAuswahl()->getText() ) ) || ( !editor->zDateiAuswahl() && !editorKlient->ssDateiLöschen( "." ) ) ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetDateiListe( list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setDateiListe( list ); break; } case 5: // Text Speichern { if( !editorKlient->ssTextSpeichern( editor->zDateiAuswahl()->getText(), editor->zDateiText() ) ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } case 6: // Bild Löschen { if( !editorKlient->ssBildLöschen( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() ) ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setBildListe( list ); break; } case 7: // Importieren { Text *pfad = editor->zBildImportPfad(); pfad->ersetzen( "\\", "/" ); Text *n = pfad->getTeilText( pfad->positionVon( "/", pfad->anzahlVon( "/" ) - 1 ) + 1 ); Text name = n->getText(); n->release(); Text *err = new Text(); Bild *b = ladeBild( pfad->getText(), err ); if( !b ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ) ); break; } err->release(); if( !editorKlient->ssBildSpeichern( editor->zDateiAuswahl()->getText(), name, b ) ) { b->release(); nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } b->release(); RCArray< Text > *list = new RCArray< Text >(); int anz = editorKlient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list ); if( anz < 0 ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); list->release(); break; } editor->setBildListe( list ); break; } case 8: // Vorschau { editor->setSichtbar( 0 ); if( !editorKlient->ladeShopSeiteVorschau() ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); editor->setSichtbar( 1 ); break; } vorschau->ladeKarte( "data/tmp/ke/ssv" ); vorschau->setSichtbar( 1 ); break; } case 9: // Veröffentlichen { if( !editorKlient->shopSeiteVeröffentlichen() ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) ); break; } case 10: // Vorschau Beenden { vorschau->setSichtbar( 0 ); DateiRemove( "data/tmp/ke/ssv" ); editor->setSichtbar( 1 ); break; } } laden->setSichtbar( 0 ); run = 0; } void KEShopSeite::doMausEreignis( MausEreignis &me ) { if( !run ) fenster->doMausEreignis( me ); } void KEShopSeite::doTastaturEreignis( TastaturEreignis &te ) { if( !run ) fenster->doTastaturEreignis( te ); } bool KEShopSeite::tick( double z ) { aktion = vorschau->getAktion(); if( aktion ) aktion += 9; else aktion = editor->getAktion(); if( aktion && !run ) start(); 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( sichtbar && !run && alpha != 255 ) { if( alpha + val > 255 ) alpha = 255; else alpha += val; ret = 1; } val *= 3; if( sichtbar ) { if( alpha < 100 ) { if( alpha + val > 100 ) alpha = 100; else alpha += val; ret = 1; } if( xStart != 0 || breite != 900 ) { if( rechts ) { if( xStart - val <= 0 ) { xStart = 0; breite = 900; animation = 0; if( !editor->istSichtbar() && !vorschau->istSichtbar() ) editor->setSichtbar( 1 ); } else { xStart -= val; breite += val; } } else { if( breite + val >= 900 ) { breite = 900; animation = 0; if( !editor->istSichtbar() && !vorschau->istSichtbar() ) editor->setSichtbar( 1 ); } 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 KEShopSeite::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 KEShopSeite::istSichtbar() const { return sichtbar || animation; } // Reference Counting KEShopSeite *KEShopSeite::getThis() { ref++; return this; } KEShopSeite *KEShopSeite::release() { ref--; if( !ref ) delete this; return 0; }