#include "..\..\Global\Variablen.h" #include "Login.h" #include "..\..\Global\Initialisierung.h" #include #include // Inhalt der Login Klasse aus Login.h // Konstruktor Login::Login( Schrift *zSchrift, Fenster *vorLoginFenster ) { Punkt bildschirmGröße = BildschirmGröße(); login = initKnopf( 10, 50, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Login" ); login->setMausEreignisParameter( this ); login->setMausEreignis( loginLoginME ); initToolTip( login, "Einloggen.", zSchrift->getThis(), hauptScreen ); vorLoginFenster->addMember( login ); fenster = initFenster( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 75, 250, 150, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Login" ); name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" ); name->setTastaturEreignisParameter( this ); name->setTastaturEreignis( loginNameTE ); initToolTip( name, "Account Name.", zSchrift->getThis(), hauptScreen ); fenster->addMember( name ); passwort = initTextFeld( 20, 55, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" ); passwort->setTastaturEreignisParameter( this ); passwort->setTastaturEreignis( loginPasswortTE ); initToolTip( passwort, "Account Passwort.", zSchrift->getThis(), hauptScreen ); fenster->addMember( passwort ); weiter = initKnopf( 75, 90, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Login" ); weiter->setMausEreignisParameter( this ); weiter->setMausEreignis( loginWeiterME ); fenster->addMember( weiter ); nachricht = initTextFeld( 5, 5, 238, 50, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" ); fenster->addMember( nachricht ); geheimnis = initTextFeld( 20, 55, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimnis" ); geheimnis->removeStyle( TextFeld::Style::Sichtbar ); geheimnis->setTastaturEreignisParameter( this ); geheimnis->setTastaturEreignis( loginGeheimnisTE ); initToolTip( geheimnis, "Account Geheimnis.", zSchrift->getThis(), hauptScreen ); fenster->addMember( geheimnis ); abbrechen = initKnopf( 10, 98, 100, 20, zSchrift, 0, "Abbrechen" ); abbrechen->setMausEreignisParameter( this ); abbrechen->setMausEreignis( loginAbbrechenME ); fenster->addMember( abbrechen ); ok = initKnopf( 138, 98, 100, 20, zSchrift, 0, "Ok" ); ok->setMausEreignisParameter( this ); ok->setMausEreignis( loginOkME ); fenster->addMember( ok ); vorLoginFenster->addMember( fenster ); MausEreignis me; me.id = ME_RLinks; loginME( 0, me ); ref = 1; } // Destruktor Login::~Login() { if( fenster ) fenster = fenster->release(); if( name ) name = name->release(); if( passwort ) passwort = passwort->release(); if( nachricht ) nachricht = nachricht->release(); if( geheimnis ) geheimnis = geheimnis->release(); if( weiter ) weiter = weiter->release(); if( abbrechen ) abbrechen = abbrechen->release(); if( ok ) ok = ok->release(); if( login ) login = login->release(); } // Knopfdruck void Login::druckFremdKnopf() // Ein anderer Bereich des Programms wurde ausgewählt { fenster->removeStyle( Fenster::Style::Sichtbar ); loginKlient->trenne(); login->setLinienRahmenBreite( 2 ); login->setAlphaFeldFarbe( 0x5500FF00 ); login->setAlphaFeldStrength( -5 ); } bool Login::nameTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld name { if( te.id == TE_Press && te.taste == T_Enter ) return 0; if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) ) { name->removeStyle( TextFeld::Style::Fokus ); passwort->addStyle( TextFeld::Style::Fokus ); passwort->setAuswahl( passwort->zText()->getLength(), 0 ); } if( name->zText()->getLength() >= 25 && istSchreibbar( te.taste ) ) return 0; return 1; } bool Login::passwortTE( void *obj, TastaturEreignis te ) // TastaturEreignis im Textfeld passwort { if( te.id == TE_Press ) passwort->setSchowChar( '*' ); if( te.id == TE_Press && te.taste == T_Enter ) return 0; if( te.id == TE_Release && te.taste == T_Enter ) { passwort->removeStyle( TextFeld::Style::Fokus ); MausEreignis me; me.id = ME_RLinks; weiterME( 0, me ); } if( passwort->zText()->getLength() >= 25 && istSchreibbar( te.taste ) ) return 0; return 1; } bool Login::geheimnisTE( void *obj, TastaturEreignis te ) // TastaturEreignis im Textfeld geheimnis { if( te.id == TE_Press && te.taste == T_Enter ) return 0; if( te.id == TE_Press ) geheimnis->setSchowChar( '*' ); if( te.id == TE_Release && te.taste == T_Enter ) { geheimnis->removeStyle( TextFeld::Style::Fokus ); MausEreignis me; me.id = ME_RLinks; okME( 0, me ); } if( geheimnis->zText()->getLength() >= 50 && istSchreibbar( te.taste ) ) return 0; return 1; } bool Login::weiterME( void *obj, MausEreignis me ) // MausEreignis im Knopf weiter { if( me.id == ME_RLinks ) { if( name->zText()->getLength() == 0 ) { name->removeStyle( TextFeld::Style::Sichtbar ); passwort->removeStyle( TextFeld::Style::Sichtbar ); weiter->removeStyle( Knopf::Style::Sichtbar ); nachricht->setText( "Bitte trage deinen Accountnamen\nein." ); nachricht->addStyle( TextFeld::Style::Sichtbar ); ok->addStyle( Knopf::Style::Sichtbar ); return 1; } if( passwort->zText()->getLength() == 0 ) { name->removeStyle( TextFeld::Style::Sichtbar ); passwort->removeStyle( TextFeld::Style::Sichtbar ); weiter->removeStyle( Knopf::Style::Sichtbar ); nachricht->setText( "Bitte trage dein Passwort ein." ); nachricht->addStyle( TextFeld::Style::Sichtbar ); ok->addStyle( Knopf::Style::Sichtbar ); return 1; } new AktionsThread( 1, name->zText()->getText(), passwort->zText()->getText(), 0, 0, 0 ); } return 1; } bool Login::okME( void *obj, MausEreignis me ) // MausEreignis im Knopf ok { if( me.id == ME_RLinks ) { if( geheimnis->hatStyle( TextFeld::Style::Sichtbar ) ) new AktionsThread( 3, geheimnis->zText()->getText(), 0, 0, 0, 0 ); else { nachricht->removeStyle( TextFeld::Style::Sichtbar ); geheimnis->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); name->addStyle( TextFeld::Style::Sichtbar ); passwort->addStyle( TextFeld::Style::Sichtbar ); weiter->addStyle( TextFeld::Style::Sichtbar ); name->addStyle( TextFeld::Style::Fokus ); name->setAuswahl( name->zText()->getLength(), 0 ); } } return 1; } bool Login::abbrechenME( void *obj, MausEreignis me ) // MausEreignis im Knopf abbrechen { if( me.id == ME_RLinks ) { nachricht->removeStyle( TextFeld::Style::Sichtbar ); geheimnis->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); name->addStyle( TextFeld::Style::Sichtbar ); passwort->addStyle( TextFeld::Style::Sichtbar ); weiter->addStyle( TextFeld::Style::Sichtbar ); name->addStyle( TextFeld::Style::Fokus ); name->setAuswahl( name->zText()->getLength(), 0 ); } return 1; } bool Login::loginME( void *obj, MausEreignis me ) // MausEreignis im Knopf login { if( me.id == ME_RLinks ) { vorLogin->setLogin( 1 ); nachricht->removeStyle( TextFeld::Style::Sichtbar ); geheimnis->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); fenster->addStyle( Fenster::Style::Sichtbar ); name->addStyle( TextFeld::Style::Sichtbar ); passwort->addStyle( TextFeld::Style::Sichtbar ); weiter->addStyle( TextFeld::Style::Sichtbar ); login->setLinienRahmenBreite( 3 ); login->setAlphaFeldFarbe( 0xFF000000 ); login->setAlphaFeldStrength( 20 ); name->addStyle( TextFeld::Style::Fokus ); name->setAuswahl( name->zText()->getLength(), 0 ); } return 1; } void Login::setLoginReturn( int ret ) // setzt den Returnwert vom login { if( ret == 1 ) new AktionsThread( 2, 0, 0, 0, 0, 0 ); else if( ret == 2 ) { name->removeStyle( TextFeld::Style::Sichtbar ); passwort->removeStyle( TextFeld::Style::Sichtbar ); weiter->removeStyle( Knopf::Style::Sichtbar ); nachricht->setText( "Der Account ist bereits online.\nGebe dein Account Geheimnis ein,\num den anderen Benutzer zu kicken." ); nachricht->addStyle( TextFeld::Style::Sichtbar ); geheimnis->addStyle( TextFeld::Style::Sichtbar ); ok->addStyle( Knopf::Style::Sichtbar ); abbrechen->addStyle( Knopf::Style::Sichtbar ); geheimnis->addStyle( TextFeld::Style::Fokus ); geheimnis->setAuswahl( geheimnis->zText()->getLength(), 0 ); } else if( !ret && loginKlient->getLetzterFehler() ) { name->removeStyle( TextFeld::Style::Sichtbar ); passwort->removeStyle( TextFeld::Style::Sichtbar ); weiter->removeStyle( Knopf::Style::Sichtbar ); nachricht->setText( loginKlient->getLetzterFehler() ); if( nachricht->zText()->getLength() > 30 ) { int pos = -1; bool set = 0; int lastp = 0; for( int i = 20; i < nachricht->zText()->getLength(); ) { char *tmp = &nachricht->zText()->getText()[ i ]; while( *tmp != ' ' && i < nachricht->zText()->getLength() ) { tmp++; i++; if( i - 30 >= lastp ) { if( set ) { lastp = pos; set = 0; nachricht->zText()->getText()[ pos ] = '\n'; } else lastp += 5; } } if( i < nachricht->zText()->getLength() ) { pos = i; set = 1; tmp++; i++; } } } nachricht->addStyle( TextFeld::Style::Sichtbar ); ok->addStyle( Knopf::Style::Sichtbar ); } } void Login::setKickReturn( int ret ) // setzt den returnwert vom kick { if( ret == 1 ) new AktionsThread( 2, 0, 0, 0, 0, 0 ); else if( ret == 2 ) { nachricht->setText( loginKlient->getLetzterFehler() ); if( nachricht->zText()->getLength() > 30 ) { int pos = -1; bool set = 0; int lastp = 0; for( int i = 20; i < nachricht->zText()->getLength(); ) { char *tmp = &nachricht->zText()->getText()[ i ]; while( *tmp != ' ' && i < nachricht->zText()->getLength() ) { tmp++; i++; if( i - 30 >= lastp ) { if( set ) { lastp = pos; set = 0; nachricht->zText()->getText()[ pos ] = '\n'; } else lastp += 5; } } if( i < nachricht->zText()->getLength() ) { pos = i; set = 1; tmp++; i++; } } } geheimnis->removeStyle( TextFeld::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); } else if( !ret ) { nachricht->setText( "Das Geheimnis stimmt nicht mit dem des Accounts\nüberein. Achte auf Groß - und Kleinschreibung." ); geheimnis->removeStyle( TextFeld::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); } } // Reference Counting Login *Login::getThis() { ref++; return this; } Login *Login::release() { ref--; if( !ref ) delete this; return 0; } // Ereignisse bool loginNameTE( void *p, void *obj, TastaturEreignis te ) { if( !p ) return 0; return ( (Login*)p )->nameTE( obj, te ); } bool loginPasswortTE( void *p, void *obj, TastaturEreignis te ) { if( !p ) return 0; return ( (Login*)p )->passwortTE( obj, te ); } bool loginGeheimnisTE( void *p, void *obj, TastaturEreignis te ) { if( !p ) return 0; return ( (Login*)p )->geheimnisTE( obj, te ); } bool loginWeiterME( void *p, void *obj, MausEreignis me ) { if( !p ) return 0; return ( (Login*)p )->weiterME( obj, me ); } bool loginAbbrechenME( void *p, void *obj, MausEreignis me ) { if( !p ) return 0; return ( (Login*)p )->abbrechenME( obj, me ); } bool loginOkME( void *p, void *obj, MausEreignis me ) { if( !p ) return 0; return ( (Login*)p )->okME( obj, me ); } bool loginLoginME( void *p, void *obj, MausEreignis me ) { if( !p ) return 0; return ( (Login*)p )->loginME( obj, me ); }