|
@@ -13,149 +13,445 @@
|
|
|
|
|
|
typedef GSL::GSLDateiV *( *GetGSLDatei )( );
|
|
|
|
|
|
+NLNachricht::NLNachricht( Schrift *zSchrift, Text *titel )
|
|
|
+{
|
|
|
+ rahmen = new LRahmen();
|
|
|
+ rahmen->setRamenBreite( 1 );
|
|
|
+ rahmen->setFarbe( 0xFFFFFFFF );
|
|
|
+ this->titel = initTextFeld( 1, 1, 208, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, titel->getText() );
|
|
|
+ titel = titel->release();
|
|
|
+ close = initKnopf( 208, 1, 20, 20, 0, 0, "" );
|
|
|
+ close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
|
|
|
+ Bild *closeBild = bilder->get( "chat.ltdb/entfernen.png" );
|
|
|
+ if( !closeBild )
|
|
|
+ {
|
|
|
+ LTDBDatei *datei = new LTDBDatei();
|
|
|
+ datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
|
|
|
+ datei->leseDaten( 0 );
|
|
|
+ closeBild = datei->laden( 0, new Text( "entfernen.png" ) );
|
|
|
+ datei->release();
|
|
|
+ bilder->add( "chat.ltdb/entfernen.png", closeBild->getThis() );
|
|
|
+ }
|
|
|
+ close->setHintergrundBildZ( closeBild );
|
|
|
+ initToolTip( close, "Nachricht ignorieren.", zSchrift->getThis(), hauptScreen );
|
|
|
+ maxHöhe = 20;
|
|
|
+ ref = 1;
|
|
|
+ animation = 1;
|
|
|
+ ausgewählt = 0;
|
|
|
+ tickVal = 0;
|
|
|
+ rend = 0;
|
|
|
+ höhe = 0;
|
|
|
+}
|
|
|
+
|
|
|
+NLNachricht::~NLNachricht()
|
|
|
+{
|
|
|
+ titel = titel->release();
|
|
|
+ close = close->release();
|
|
|
+ rahmen = rahmen->release();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void NLNachricht::entfernen()
|
|
|
+{
|
|
|
+ animation = 3;
|
|
|
+}
|
|
|
+
|
|
|
+void NLNachricht::setAusgewählt( bool ausgewählt )
|
|
|
+{
|
|
|
+ if( animation != 3 )
|
|
|
+ {
|
|
|
+ this->ausgewählt = ausgewählt;
|
|
|
+ if( ausgewählt )
|
|
|
+ animation = 2;
|
|
|
+ else
|
|
|
+ animation = 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void NLNachricht::doMausEreignis( MausEreignis &me )
|
|
|
+{
|
|
|
+ if( animation != 3 )
|
|
|
+ {
|
|
|
+ bool tmp = 0;
|
|
|
+ if( me.my > höhe || !ausgewählt )
|
|
|
+ {
|
|
|
+ tmp = me.verarbeitet;
|
|
|
+ me.verarbeitet = 1;
|
|
|
+ }
|
|
|
+ char aktion = me.verarbeitet ? 2 : 0;
|
|
|
+ close->doMausEreignis( me );
|
|
|
+ if( !aktion )
|
|
|
+ aktion = me.verarbeitet ? 1 : 0;
|
|
|
+ if( me.my > höhe || !ausgewählt )
|
|
|
+ {
|
|
|
+ me.verarbeitet = tmp;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( me.id != ME_RLinks )
|
|
|
+ return;
|
|
|
+ if( aktion == 1 )
|
|
|
+ entfernen();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+bool NLNachricht::tick( double tickVal )
|
|
|
+{
|
|
|
+ rend |= close->tick( tickVal );
|
|
|
+ if( !animation )
|
|
|
+ {
|
|
|
+ bool ret = rend;
|
|
|
+ rend = 0;
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ this->tickVal += tickVal * 100;
|
|
|
+ int val = (int)this->tickVal;
|
|
|
+ if( val < 1 )
|
|
|
+ {
|
|
|
+ bool ret = rend;
|
|
|
+ rend = 0;
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ if( val > 4 )
|
|
|
+ val = 4;
|
|
|
+ this->tickVal -= val;
|
|
|
+ switch( animation )
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ if( höhe != 20 )
|
|
|
+ {
|
|
|
+ if( höhe > 20 )
|
|
|
+ {
|
|
|
+ höhe -= val;
|
|
|
+ if( höhe < 20 )
|
|
|
+ höhe = 20;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ höhe += val;
|
|
|
+ if( höhe > 20 )
|
|
|
+ höhe = 20;
|
|
|
+ }
|
|
|
+ rend = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ animation = 0;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if( höhe != maxHöhe )
|
|
|
+ {
|
|
|
+ höhe += val;
|
|
|
+ if( höhe > maxHöhe )
|
|
|
+ höhe = maxHöhe;
|
|
|
+ rend = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ animation = 0;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ höhe -= val;
|
|
|
+ if( höhe <= 0 )
|
|
|
+ {
|
|
|
+ nachLogin->zNachrichtenListe()->removeNachricht( this ); // delete this
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ rend = 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ bool ret = rend;
|
|
|
+ rend = 0;
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+void NLNachricht::render( int y, Bild &zRObj )
|
|
|
+{
|
|
|
+ int br = 228;
|
|
|
+ int hö = höhe;
|
|
|
+ if( !zRObj.setDrawOptions( 0, y, br, hö ) )
|
|
|
+ return;
|
|
|
+ rahmen->setSize( br, hö );
|
|
|
+ rahmen->render( zRObj );
|
|
|
+ int rbr = rahmen->getRBreite();
|
|
|
+ if( !zRObj.setDrawOptions( rbr, rbr, br - rbr * 2, hö - rbr * 2 ) )
|
|
|
+ {
|
|
|
+ zRObj.releaseDrawOptions();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ titel->render( zRObj );
|
|
|
+ close->render( zRObj );
|
|
|
+ zRObj.releaseDrawOptions();
|
|
|
+ zRObj.releaseDrawOptions();
|
|
|
+}
|
|
|
+
|
|
|
+// contant
|
|
|
+bool NLNachricht::istAusgewählt() const
|
|
|
+{
|
|
|
+ return ausgewählt;
|
|
|
+}
|
|
|
+
|
|
|
+int NLNachricht::getHeight() const
|
|
|
+{
|
|
|
+ return höhe;
|
|
|
+}
|
|
|
+
|
|
|
+Text *NLNachricht::zTitel() const
|
|
|
+{
|
|
|
+ return titel->zText();
|
|
|
+}
|
|
|
+
|
|
|
+// Reference Counting
|
|
|
+NLNachricht *NLNachricht::getThis()
|
|
|
+{
|
|
|
+ ref++;
|
|
|
+ return this;
|
|
|
+}
|
|
|
+
|
|
|
+NLNachricht *NLNachricht::release()
|
|
|
+{
|
|
|
+ ref--;
|
|
|
+ if( !ref )
|
|
|
+ delete this;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+SpielUpdateNachricht::SpielUpdateNachricht( Schrift *zSchrift, Text *titel, Text *nachricht, int dgID, std::function<void()> posAk, std::function<void()> negAk )
|
|
|
+ : NLNachricht( zSchrift, titel )
|
|
|
+{
|
|
|
+ Text *result = new Text( nachricht->getText() );
|
|
|
+ int län = nachricht->getLength();
|
|
|
+ char *txt = nachricht->getText();
|
|
|
+ int x = 0;
|
|
|
+ int y = 0;
|
|
|
+ zSchrift->lock();
|
|
|
+ zSchrift->setSchriftSize( 12 );
|
|
|
+ Alphabet *tmp = zSchrift->getAlphabet( 12 );
|
|
|
+ int zeilenHöhe = tmp->getZeilenHeight() + tmp->getZeilenAbstand();
|
|
|
+ int lastPos = -1;
|
|
|
+ for( int i = 0; i < län; i++ )
|
|
|
+ {
|
|
|
+ char c = txt[ i ];
|
|
|
+ if( c == ' ' )
|
|
|
+ {
|
|
|
+ lastPos = i;
|
|
|
+ x += 6;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if( c == '\n' )
|
|
|
+ {
|
|
|
+ x = 0;
|
|
|
+ y += zeilenHöhe;
|
|
|
+ lastPos = -1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Buchstabe *b = tmp->getBuchstabe( (unsigned)c );
|
|
|
+ if( b )
|
|
|
+ {
|
|
|
+ x += b->getBreite();
|
|
|
+ if( x > 228 && lastPos > -1 )
|
|
|
+ {
|
|
|
+ result->ersetzen( lastPos, lastPos + 1, "\n" );
|
|
|
+ x = 0;
|
|
|
+ y += zeilenHöhe;
|
|
|
+ i = lastPos;
|
|
|
+ lastPos = -1;
|
|
|
+ }
|
|
|
+ b = b->release();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ y += zeilenHöhe;
|
|
|
+ tmp = tmp->release();
|
|
|
+ zSchrift->unlock();
|
|
|
+ nachricht = nachricht->release();
|
|
|
+ text = initTextFeld( 1, 22, 228, y, zSchrift, TextFeld::Style::Text, result->getText() );
|
|
|
+ result = result->release();
|
|
|
+ fortschritt = initFBalken( 5, y + 20, 215, 20, zSchrift, FBalken::Style::normal );
|
|
|
+ herunterladen = initKnopf( 10, 45 + y, 120, 20, zSchrift, Knopf::Style::Sichtbar, "herunterladen" );
|
|
|
+ abbrechen = initKnopf( 140, 45 + y, 80, 20, zSchrift, Knopf::Style::Sichtbar, "abbrechen" );
|
|
|
+ this->posAk = posAk;
|
|
|
+ this->negAk = negAk;
|
|
|
+ maxHöhe = 75 + y;
|
|
|
+ update = new Update( zSchrift, fortschritt->getThis(), dgID, [this]( bool ok )
|
|
|
+ {
|
|
|
+ this->animation = 3;
|
|
|
+ if( ok )
|
|
|
+ this->posAk();
|
|
|
+ else
|
|
|
+ this->negAk();
|
|
|
+ } );
|
|
|
+ if( !updateH->add( update->getThis() ) )
|
|
|
+ entfernen();
|
|
|
+}
|
|
|
+
|
|
|
+SpielUpdateNachricht::~SpielUpdateNachricht()
|
|
|
+{
|
|
|
+ text->release();
|
|
|
+ herunterladen->release();
|
|
|
+ abbrechen->release();
|
|
|
+ fortschritt->release();
|
|
|
+ updateH->remove( update->getDateiGruppe() );
|
|
|
+ update->release();
|
|
|
+}
|
|
|
+
|
|
|
+// nicht constant
|
|
|
+void SpielUpdateNachricht::entfernen()
|
|
|
+{
|
|
|
+ __super::entfernen();
|
|
|
+ negAk();
|
|
|
+}
|
|
|
+
|
|
|
+void SpielUpdateNachricht::doMausEreignis( MausEreignis &me )
|
|
|
+{
|
|
|
+ __super::doMausEreignis( me );
|
|
|
+ if( animation != 3 )
|
|
|
+ {
|
|
|
+ bool tmp = 0;
|
|
|
+ if( me.my > höhe || !ausgewählt )
|
|
|
+ {
|
|
|
+ tmp = me.verarbeitet;
|
|
|
+ me.verarbeitet = 1;
|
|
|
+ }
|
|
|
+ char aktion = me.verarbeitet ? 3 : 0;
|
|
|
+ herunterladen->doMausEreignis( me );
|
|
|
+ if( !aktion )
|
|
|
+ aktion = me.verarbeitet ? 1 : 0;
|
|
|
+ abbrechen->doMausEreignis( me );
|
|
|
+ if( !aktion )
|
|
|
+ aktion = me.verarbeitet ? 2 : 0;
|
|
|
+ if( me.my > höhe || !ausgewählt )
|
|
|
+ {
|
|
|
+ me.verarbeitet = tmp;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( me.id != ME_RLinks )
|
|
|
+ return;
|
|
|
+ switch( aktion )
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ // positiv
|
|
|
+ update->herunterladen();
|
|
|
+ herunterladen->removeStyle( Knopf::Style::Erlaubt | Knopf::Style::Sichtbar );
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ // negativ
|
|
|
+ update->abbrechen();
|
|
|
+ abbrechen->removeStyle( Knopf::Style::Erlaubt | Knopf::Style::Sichtbar );
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+bool SpielUpdateNachricht::tick( double tickVal )
|
|
|
+{
|
|
|
+ rend |= herunterladen->tick( tickVal );
|
|
|
+ rend |= fortschritt->tick( tickVal );
|
|
|
+ rend |= abbrechen->tick( tickVal );
|
|
|
+ rend |= text->tick( tickVal );
|
|
|
+ return __super::tick( tickVal );
|
|
|
+}
|
|
|
+
|
|
|
+void SpielUpdateNachricht::render( int y, Bild &zRObj )
|
|
|
+{
|
|
|
+ __super::render( y, zRObj );
|
|
|
+ int rbr = rahmen->getRBreite();
|
|
|
+ if( !zRObj.setDrawOptions( rbr, y + rbr, rahmen->getBreite() - rbr * 2, rahmen->getHeight() - rbr * 2 ) )
|
|
|
+ return;
|
|
|
+ text->render( zRObj );
|
|
|
+ fortschritt->render( zRObj );
|
|
|
+ herunterladen->render( zRObj );
|
|
|
+ abbrechen->render( zRObj );
|
|
|
+ zRObj.releaseDrawOptions();
|
|
|
+}
|
|
|
+
|
|
|
// Inhalt der Nachricht Klasse aus NachrichtListe.h
|
|
|
// Konstruktor
|
|
|
-Nachricht::Nachricht( Schrift *zSchrift, Text *titel, Text *nachricht, Text *positiv, Text *negativ, char type, void *param )
|
|
|
-{
|
|
|
- rahmen = new LRahmen();
|
|
|
- rahmen->setRamenBreite( 1 );
|
|
|
- rahmen->setFarbe( 0xFFFFFFFF );
|
|
|
- this->titel = initTextFeld( 1, 1, 208, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, titel->getText() );
|
|
|
- titel = titel->release();
|
|
|
- close = initKnopf( 208, 1, 20, 20, 0, 0, "" );
|
|
|
- close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
|
|
|
- Bild *closeBild = bilder->get( "chat.ltdb/entfernen.png" );
|
|
|
- if( !closeBild )
|
|
|
- {
|
|
|
- LTDBDatei *datei = new LTDBDatei();
|
|
|
- datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
|
|
|
- datei->leseDaten( 0 );
|
|
|
- closeBild = datei->laden( 0, new Text( "entfernen.png" ) );
|
|
|
- datei->release();
|
|
|
- bilder->add( "chat.ltdb/entfernen.png", closeBild->getThis() );
|
|
|
- }
|
|
|
- close->setHintergrundBildZ( closeBild );
|
|
|
- initToolTip( close, "Nachricht ignorieren.", zSchrift->getThis(), hauptScreen );
|
|
|
- Text *result = new Text( nachricht->getText() );
|
|
|
- int län = nachricht->getLength();
|
|
|
- char *txt = nachricht->getText();
|
|
|
- int x = 0;
|
|
|
- int y = 0;
|
|
|
- zSchrift->lock();
|
|
|
- zSchrift->setSchriftSize( 12 );
|
|
|
- Alphabet *tmp = zSchrift->getAlphabet( 12 );
|
|
|
- int zeilenHöhe = tmp->getZeilenHeight() + tmp->getZeilenAbstand();
|
|
|
- int lastPos = -1;
|
|
|
- for( int i = 0; i < län; i++ )
|
|
|
- {
|
|
|
- char c = txt[ i ];
|
|
|
- if( c == ' ' )
|
|
|
- {
|
|
|
- lastPos = i;
|
|
|
- x += 6;
|
|
|
- continue;
|
|
|
- }
|
|
|
- if( c == '\n' )
|
|
|
- {
|
|
|
- x = 0;
|
|
|
- y += zeilenHöhe;
|
|
|
- lastPos = -1;
|
|
|
- continue;
|
|
|
- }
|
|
|
- Buchstabe *b = tmp->getBuchstabe( (unsigned)c );
|
|
|
- if( b )
|
|
|
- {
|
|
|
- x += b->getBreite();
|
|
|
- if( x > 228 && lastPos > -1 )
|
|
|
- {
|
|
|
- result->ersetzen( lastPos, lastPos + 1, "\n" );
|
|
|
- x = 0;
|
|
|
- y += zeilenHöhe;
|
|
|
- i = lastPos;
|
|
|
- lastPos = -1;
|
|
|
- }
|
|
|
- b = b->release();
|
|
|
- }
|
|
|
- }
|
|
|
- y += zeilenHöhe;
|
|
|
- tmp = tmp->release();
|
|
|
- zSchrift->unlock();
|
|
|
- nachricht = nachricht->release();
|
|
|
- text = initTextFeld( 1, 22, 228, y, zSchrift, TextFeld::Style::Text, result->getText() );
|
|
|
- result = result->release();
|
|
|
- if( positiv )
|
|
|
- {
|
|
|
- this->positiv = initKnopf( 10, 20 + y, 100, 20, zSchrift, Knopf::Style::Sichtbar, positiv->getText() );
|
|
|
- positiv = positiv->release();
|
|
|
- }
|
|
|
- else
|
|
|
- this->positiv = 0;
|
|
|
- if( negativ )
|
|
|
- {
|
|
|
- this->negativ = initKnopf( 120, 20 + y, 100, 20, zSchrift, Knopf::Style::Sichtbar, negativ->getText() );
|
|
|
- negativ = negativ->release();
|
|
|
- }
|
|
|
- else
|
|
|
- this->negativ = 0;
|
|
|
- typ = type;
|
|
|
- this->param = param;
|
|
|
- maxHöhe = 50 + y;
|
|
|
- ref = 1;
|
|
|
- animation = 1;
|
|
|
- ausgewählt = 0;
|
|
|
- tickVal = 0;
|
|
|
- rend = 0;
|
|
|
- höhe = 0;
|
|
|
+Nachricht::Nachricht( Schrift *zSchrift, Text *titel, Text *nachricht, Text *positiv, Text *negativ, std::function<void()> posAk, std::function<void()> negAk )
|
|
|
+ : NLNachricht( zSchrift, titel )
|
|
|
+{
|
|
|
+
|
|
|
+ Text *result = new Text( nachricht->getText() );
|
|
|
+ int län = nachricht->getLength();
|
|
|
+ char *txt = nachricht->getText();
|
|
|
+ int x = 0;
|
|
|
+ int y = 0;
|
|
|
+ zSchrift->lock();
|
|
|
+ zSchrift->setSchriftSize( 12 );
|
|
|
+ Alphabet *tmp = zSchrift->getAlphabet( 12 );
|
|
|
+ int zeilenHöhe = tmp->getZeilenHeight() + tmp->getZeilenAbstand();
|
|
|
+ int lastPos = -1;
|
|
|
+ for( int i = 0; i < län; i++ )
|
|
|
+ {
|
|
|
+ char c = txt[ i ];
|
|
|
+ if( c == ' ' )
|
|
|
+ {
|
|
|
+ lastPos = i;
|
|
|
+ x += 6;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if( c == '\n' )
|
|
|
+ {
|
|
|
+ x = 0;
|
|
|
+ y += zeilenHöhe;
|
|
|
+ lastPos = -1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Buchstabe *b = tmp->getBuchstabe( (unsigned)c );
|
|
|
+ if( b )
|
|
|
+ {
|
|
|
+ x += b->getBreite();
|
|
|
+ if( x > 228 && lastPos > -1 )
|
|
|
+ {
|
|
|
+ result->ersetzen( lastPos, lastPos + 1, "\n" );
|
|
|
+ x = 0;
|
|
|
+ y += zeilenHöhe;
|
|
|
+ i = lastPos;
|
|
|
+ lastPos = -1;
|
|
|
+ }
|
|
|
+ b = b->release();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ y += zeilenHöhe;
|
|
|
+ tmp = tmp->release();
|
|
|
+ zSchrift->unlock();
|
|
|
+ nachricht = nachricht->release();
|
|
|
+ text = initTextFeld( 1, 22, 228, y, zSchrift, TextFeld::Style::Text, result->getText() );
|
|
|
+ result = result->release();
|
|
|
+ if( positiv )
|
|
|
+ {
|
|
|
+ this->positiv = initKnopf( 10, 20 + y, 100, 20, zSchrift, Knopf::Style::Sichtbar, positiv->getText() );
|
|
|
+ positiv = positiv->release();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ this->positiv = 0;
|
|
|
+ if( negativ )
|
|
|
+ {
|
|
|
+ this->negativ = initKnopf( 120, 20 + y, 100, 20, zSchrift, Knopf::Style::Sichtbar, negativ->getText() );
|
|
|
+ negativ = negativ->release();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ this->negativ = 0;
|
|
|
+ this->posAk = posAk;
|
|
|
+ this->negAk = negAk;
|
|
|
+ maxHöhe = 50 + y;
|
|
|
}
|
|
|
|
|
|
// Destruktor
|
|
|
Nachricht::~Nachricht()
|
|
|
{
|
|
|
- switch( typ )
|
|
|
- {
|
|
|
- case 1:
|
|
|
- delete ( (int*)param );
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- delete ( (int*)param );
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- delete ( (SpielEinladungParam*)param );
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- delete ( (ChatroomEinladungParam*)param );
|
|
|
- break;
|
|
|
- }
|
|
|
- titel = titel->release();
|
|
|
text = text->release();
|
|
|
- close = close->release();
|
|
|
if( positiv )
|
|
|
positiv = positiv->release();
|
|
|
if( negativ )
|
|
|
negativ = negativ->release();
|
|
|
- rahmen = rahmen->release();
|
|
|
}
|
|
|
|
|
|
-// nicht constant
|
|
|
void Nachricht::entfernen()
|
|
|
{
|
|
|
- animation = 3;
|
|
|
-}
|
|
|
-
|
|
|
-void Nachricht::setAusgewählt( bool ausw )
|
|
|
-{
|
|
|
- if( animation != 3 )
|
|
|
- {
|
|
|
- ausgewählt = ausw;
|
|
|
- if( ausw )
|
|
|
- animation = 2;
|
|
|
- else
|
|
|
- animation = 1;
|
|
|
- }
|
|
|
+ __super::entfernen();
|
|
|
+ negAk();
|
|
|
}
|
|
|
|
|
|
void Nachricht::doMausEreignis( MausEreignis &me )
|
|
|
{
|
|
|
+ __super::doMausEreignis( me );
|
|
|
if( animation != 3 )
|
|
|
{
|
|
|
bool tmp = 0;
|
|
@@ -164,17 +460,15 @@ void Nachricht::doMausEreignis( MausEreignis &me )
|
|
|
tmp = me.verarbeitet;
|
|
|
me.verarbeitet = 1;
|
|
|
}
|
|
|
- char aktion = 0;
|
|
|
+ char aktion = me.verarbeitet ? 3 : 0;
|
|
|
if( positiv )
|
|
|
positiv->doMausEreignis( me );
|
|
|
- aktion = me.verarbeitet ? 1 : 0;
|
|
|
+ if( !aktion )
|
|
|
+ aktion = me.verarbeitet ? 1 : 0;
|
|
|
if( negativ )
|
|
|
negativ->doMausEreignis( me );
|
|
|
if( !aktion )
|
|
|
aktion = me.verarbeitet ? 2 : 0;
|
|
|
- close->doMausEreignis( me );
|
|
|
- if( !aktion )
|
|
|
- aktion = me.verarbeitet ? 3 : 0;
|
|
|
if( me.my > höhe || !ausgewählt )
|
|
|
{
|
|
|
me.verarbeitet = tmp;
|
|
@@ -182,146 +476,17 @@ void Nachricht::doMausEreignis( MausEreignis &me )
|
|
|
}
|
|
|
if( me.id != ME_RLinks )
|
|
|
return;
|
|
|
- if( aktion )
|
|
|
- animation = 3;
|
|
|
+ if( aktion )
|
|
|
+ entfernen();
|
|
|
switch( aktion )
|
|
|
{
|
|
|
case 1:
|
|
|
- // positiv
|
|
|
- switch( typ )
|
|
|
- {
|
|
|
- case 1: // freund entfernen
|
|
|
- chatClient->freundschaftBeenden( *( (int*)param ) );
|
|
|
- break;
|
|
|
- case 2: // freund einladung
|
|
|
- chatClient->freundesAnfrageBeantworten( *( (int*)param ), 1 );
|
|
|
- break;
|
|
|
- case 3: // spiel einladung
|
|
|
- if( 1 )
|
|
|
- {
|
|
|
- int karteId = infoClient->getGruppenKarteId( ( (SpielEinladungParam*)param )->gruppeId );
|
|
|
- int spielArt = infoClient->getSpielId( karteId );
|
|
|
- KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
|
|
|
- dgt->laden();
|
|
|
- bool sak = 0;
|
|
|
- int dgSId = infoClient->getDateiGruppeIdVonSpiel( spielArt );
|
|
|
- bool sgf = 0;
|
|
|
- for( int i = 0; i < dgt->getZeilenAnzahl(); i++ )
|
|
|
- {
|
|
|
- if( dgt->zFeld( i, 0 ) && TextZuInt( dgt->zFeld( i, 0 )->getText(), 10 ) == dgSId )
|
|
|
- {
|
|
|
- sgf = 1;
|
|
|
- int lv = dgt->zFeld( i, 2 ) ? TextZuInt( dgt->zFeld( i, 2 )->getText(), 10 ) : 0;
|
|
|
- int ov = infoClient->getSpielVersion( spielArt );
|
|
|
- if( lv == ov )
|
|
|
- {
|
|
|
- sak = 1;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- dgt->release();
|
|
|
- if( !sak )
|
|
|
- {
|
|
|
- if( !anmeldungClient )
|
|
|
- anmeldungClient = mainClient->createAnmeldungServerClient();
|
|
|
- if( anmeldungClient && anmeldungClient->verbinde() )
|
|
|
- {
|
|
|
- anmeldungClient->gruppeEinladungAblehnen( ( (SpielEinladungParam*)param )->gruppeId );
|
|
|
- anmeldungClient->trenne( 0 );
|
|
|
- }
|
|
|
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Deine Spiel Version ist nicht aktuell. Sie wird beim nächsten Spielstart aktualisiert." ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
|
|
|
- if( !sgf )
|
|
|
- {
|
|
|
- Text *pfad = infoClient->getDateiGruppePfad( dgSId );
|
|
|
- Text *idT = new Text();
|
|
|
- idT->append( dgSId );
|
|
|
- if( pfad )
|
|
|
- {
|
|
|
- KSGTDatei *dg = new KSGTDatei( "data/dg.ksgt" );
|
|
|
- dg->laden();
|
|
|
- RCArray< Text > *zeile = new RCArray< Text >();
|
|
|
- zeile->add( idT );
|
|
|
- zeile->add( pfad );
|
|
|
- zeile->add( new Text( "0" ) );
|
|
|
- zeile->add( new Text( "0" ) );
|
|
|
- dg->addZeile( 4, zeile );
|
|
|
- zeile->release();
|
|
|
- dg->speichern();
|
|
|
- dg->release();
|
|
|
- }
|
|
|
- else
|
|
|
- idT->release();
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- MausEreignis me;
|
|
|
- me.verarbeitet = 0;
|
|
|
- me.id = ME_RLinks;
|
|
|
- nachLogin->zTitelLeiste()->druckSpielen( me );
|
|
|
- Array< int > *spieler = new Array< int >();
|
|
|
- int anzahl = 0;
|
|
|
- if( !anmeldungClient )
|
|
|
- anmeldungClient = mainClient->createAnmeldungServerClient();
|
|
|
- if( !anmeldungClient )
|
|
|
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
|
|
|
- if( anmeldungClient && anmeldungClient->verbinde() )
|
|
|
- {
|
|
|
- if( anmeldungClient->gruppeBetreten( ( (SpielEinladungParam*)param )->gruppeId, spieler, &anzahl ) )
|
|
|
- {
|
|
|
- nachLogin->zSpielenFenster()->gruppeBetreten( ( (SpielEinladungParam*)param )->gruppeId );
|
|
|
- for( int i = 0; i < anzahl; i++ )
|
|
|
- nachLogin->zSpielenFenster()->spielerBetrittGruppe( ( (SpielEinladungParam*)param )->gruppeId, spieler->hat( i ) ? spieler->get( i ) : 0 );
|
|
|
- }
|
|
|
- else
|
|
|
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
|
|
|
- anmeldungClient->trenne( 0 );
|
|
|
- } else if( anmeldungClient )
|
|
|
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case 4: // chatroom einladung
|
|
|
- nachLogin->zChatLeiste()->addChat( 0, ( (ChatroomEinladungParam*)param )->chatroomId );
|
|
|
- chatClient->chatroomBetreten( ( (ChatroomEinladungParam*)param )->chatroomId );
|
|
|
- break;
|
|
|
- case 5: // logout
|
|
|
- ::aktion = 3;
|
|
|
- break;
|
|
|
- case 6: // close
|
|
|
- nachLogin->zChatLeiste()->removeAll();
|
|
|
- if( loginClient && loginClient->verbinde() )
|
|
|
- {
|
|
|
- loginClient->logout();
|
|
|
- loginClient->trenne( 1 );
|
|
|
- }
|
|
|
- PostQuitMessage( 0 );
|
|
|
- break;
|
|
|
- }
|
|
|
+ // positiv
|
|
|
+ posAk();
|
|
|
break;
|
|
|
case 2:
|
|
|
- // schließn
|
|
|
- case 3:
|
|
|
// negativ
|
|
|
- switch( typ )
|
|
|
- {
|
|
|
- case 2:
|
|
|
- chatClient->freundesAnfrageBeantworten( *( (int*)param ), 0 );
|
|
|
- break;
|
|
|
- case 3: // spiel einladung
|
|
|
- if( !anmeldungClient )
|
|
|
- anmeldungClient = mainClient->createAnmeldungServerClient();
|
|
|
- if( anmeldungClient && anmeldungClient->verbinde() )
|
|
|
- {
|
|
|
- anmeldungClient->gruppeEinladungAblehnen( ( (SpielEinladungParam*)param )->gruppeId );
|
|
|
- anmeldungClient->trenne( 0 );
|
|
|
- }
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- chatClient->chatroomEinladungAblehnen( ( (ChatroomEinladungParam*)param )->vonAccount, ( (ChatroomEinladungParam*)param )->chatroomId );
|
|
|
- break;
|
|
|
- }
|
|
|
+ negAk();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -329,133 +494,33 @@ void Nachricht::doMausEreignis( MausEreignis &me )
|
|
|
|
|
|
bool Nachricht::tick( double tickVal )
|
|
|
{
|
|
|
- rend |= close->tick( tickVal );
|
|
|
rend |= positiv ? positiv->tick( tickVal ) : 0;
|
|
|
rend |= negativ ? negativ->tick( tickVal ) : 0;
|
|
|
rend |= text->tick( tickVal );
|
|
|
- if( !animation )
|
|
|
- {
|
|
|
- bool ret = rend;
|
|
|
- rend = 0;
|
|
|
- return ret;
|
|
|
- }
|
|
|
- this->tickVal += tickVal * 100;
|
|
|
- int val = ( int )this->tickVal;
|
|
|
- if( val < 1 )
|
|
|
- {
|
|
|
- bool ret = rend;
|
|
|
- rend = 0;
|
|
|
- return ret;
|
|
|
- }
|
|
|
- if( val > 4 )
|
|
|
- val = 4;
|
|
|
- this->tickVal -= val;
|
|
|
- switch( animation )
|
|
|
- {
|
|
|
- case 1:
|
|
|
- if( höhe != 20 )
|
|
|
- {
|
|
|
- if( höhe > 20 )
|
|
|
- {
|
|
|
- höhe -= val;
|
|
|
- if( höhe < 20 )
|
|
|
- höhe = 20;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- höhe += val;
|
|
|
- if( höhe > 20 )
|
|
|
- höhe = 20;
|
|
|
- }
|
|
|
- rend = 1;
|
|
|
- }
|
|
|
- else
|
|
|
- animation = 0;
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- if( höhe != maxHöhe )
|
|
|
- {
|
|
|
- höhe += val;
|
|
|
- if( höhe > maxHöhe )
|
|
|
- höhe = maxHöhe;
|
|
|
- rend = 1;
|
|
|
- }
|
|
|
- else
|
|
|
- animation = 0;
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- höhe -= val;
|
|
|
- if( höhe <= 0 )
|
|
|
- {
|
|
|
- nachLogin->zNachrichtenListe()->removeNachricht( this ); // delete this
|
|
|
- return 1;
|
|
|
- }
|
|
|
- rend = 1;
|
|
|
- break;
|
|
|
- }
|
|
|
- bool ret = rend;
|
|
|
- rend = 0;
|
|
|
- return ret;
|
|
|
+ return __super::tick( tickVal );
|
|
|
}
|
|
|
|
|
|
void Nachricht::render( int yPos, Bild &zRObj )
|
|
|
{
|
|
|
- int y = yPos;
|
|
|
- int br = 228;
|
|
|
- int hö = höhe;
|
|
|
- if( !zRObj.setDrawOptions( 0, y, br, hö ) )
|
|
|
- return;
|
|
|
- rahmen->setSize( br, hö );
|
|
|
- rahmen->render( zRObj );
|
|
|
+ __super::render( yPos, zRObj );
|
|
|
int rbr = rahmen->getRBreite();
|
|
|
- if( !zRObj.setDrawOptions( rbr, rbr, br - rbr * 2, hö - rbr * 2 ) )
|
|
|
- {
|
|
|
- zRObj.releaseDrawOptions();
|
|
|
+ if( !zRObj.setDrawOptions( rbr, yPos + rbr, rahmen->getBreite() - rbr * 2, rahmen->getHeight() - rbr * 2 ) )
|
|
|
return;
|
|
|
- }
|
|
|
- titel->render( zRObj );
|
|
|
text->render( zRObj );
|
|
|
- close->render( zRObj );
|
|
|
if( positiv )
|
|
|
positiv->render( zRObj );
|
|
|
if( negativ )
|
|
|
negativ->render( zRObj );
|
|
|
zRObj.releaseDrawOptions();
|
|
|
- zRObj.releaseDrawOptions();
|
|
|
}
|
|
|
|
|
|
-// contant
|
|
|
-bool Nachricht::istAusgewählt() const
|
|
|
-{
|
|
|
- return ausgewählt;
|
|
|
-}
|
|
|
-
|
|
|
-int Nachricht::getHeight() const
|
|
|
-{
|
|
|
- return höhe;
|
|
|
-}
|
|
|
-
|
|
|
-// Reference Counting
|
|
|
-Nachricht *Nachricht::getThis()
|
|
|
-{
|
|
|
- ref++;
|
|
|
- return this;
|
|
|
-}
|
|
|
-
|
|
|
-Nachricht *Nachricht::release()
|
|
|
-{
|
|
|
- ref--;
|
|
|
- if( !ref )
|
|
|
- delete this;
|
|
|
- return 0;
|
|
|
-}
|
|
|
|
|
|
// Inhalt der NachrichtenListeObj Klasse aus NachrichtListe.h
|
|
|
// Konstruktor
|
|
|
NachrichtenListeObj::NachrichtenListeObj( Schrift *zSchrift )
|
|
|
: Zeichnung()
|
|
|
{
|
|
|
- members = new RCArray< Nachricht >();
|
|
|
+ members = new RCArray< NLNachricht >();
|
|
|
schrift = zSchrift->getThis();
|
|
|
vsb = new VScrollBar();
|
|
|
vsb->setKlickScroll( 10 );
|
|
@@ -475,15 +540,14 @@ NachrichtenListeObj::~NachrichtenListeObj()
|
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
|
-void NachrichtenListeObj::addNachricht( Text *titel, Text *nachricht, Text *positiv, Text *negativ, char type, void *param )
|
|
|
+void NachrichtenListeObj::addNachricht( NLNachricht *nachricht )
|
|
|
{
|
|
|
- Nachricht *tmp = new Nachricht( schrift, titel, nachricht, positiv, negativ, type, param );
|
|
|
- members->add( tmp, anzahl );
|
|
|
+ members->add( nachricht, anzahl );
|
|
|
anzahl++;
|
|
|
rend = 1;
|
|
|
}
|
|
|
|
|
|
-void NachrichtenListeObj::removeNachricht( Nachricht *zNachricht )
|
|
|
+void NachrichtenListeObj::removeNachricht( NLNachricht *zNachricht )
|
|
|
{
|
|
|
for( int i = 0; i < anzahl; i++ )
|
|
|
{
|
|
@@ -513,7 +577,7 @@ bool NachrichtenListeObj::tick( double tickVal )
|
|
|
rend |= nachLogin->zNachrichtenListe()->tick( tickVal );
|
|
|
for( int i = 0; i < anzahl; i++ )
|
|
|
{
|
|
|
- Nachricht *tmp = members->z( i );
|
|
|
+ NLNachricht *tmp = members->z( i );
|
|
|
if( tmp )
|
|
|
rend |= tmp->tick( tickVal );
|
|
|
}
|
|
@@ -533,7 +597,7 @@ void NachrichtenListeObj::doMausEreignis( MausEreignis &me )
|
|
|
me.my += vsb->getScroll();
|
|
|
for( int i = 0; i < anzahl; i++ )
|
|
|
{
|
|
|
- Nachricht *tmp = members->z( i );
|
|
|
+ NLNachricht *tmp = members->z( i );
|
|
|
if( tmp )
|
|
|
{
|
|
|
if( me.my > 0 && me.my < tmp->getHeight() )
|
|
@@ -551,7 +615,7 @@ void NachrichtenListeObj::doMausEreignis( MausEreignis &me )
|
|
|
me.my += vsb->getScroll();
|
|
|
for( int i = 0; i < anzahl; i++ )
|
|
|
{
|
|
|
- Nachricht *tmp = members->z( i );
|
|
|
+ NLNachricht *tmp = members->z( i );
|
|
|
if( tmp )
|
|
|
{
|
|
|
tmp->setAusgewählt( 0 );
|
|
@@ -581,7 +645,7 @@ void NachrichtenListeObj::render( Bild &zrObj )
|
|
|
int höhe = 0;
|
|
|
for( int i = 0; i < anzahl; i++ )
|
|
|
{
|
|
|
- Nachricht *tmp = members->z( i );
|
|
|
+ NLNachricht *tmp = members->z( i );
|
|
|
tmp->render( höhe - ( vsb ? vsb->getScroll() : 0 ), zrObj );
|
|
|
höhe += tmp->getHeight();
|
|
|
}
|
|
@@ -615,6 +679,7 @@ NachrichtenListeObj *NachrichtenListeObj::release()
|
|
|
// Konstruktor
|
|
|
NachrichtenListe::NachrichtenListe( Schrift *zSchrift, Fenster *zNachLoginFenster )
|
|
|
{
|
|
|
+ schrift = zSchrift->getThis();
|
|
|
minimierenBild = bilder->get( "chat.ltdb/minimieren.png" );
|
|
|
if( !minimierenBild )
|
|
|
{
|
|
@@ -704,19 +769,28 @@ NachrichtenListe::~NachrichtenListe()
|
|
|
nachrichtenListe = nachrichtenListe->release();
|
|
|
minimierenBild = minimierenBild->release();
|
|
|
maximierenBild = maximierenBild->release();
|
|
|
+ schrift->release();
|
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
|
-void NachrichtenListe::addNachricht( Text *titel, Text *nachricht, Text *positiv, Text *negativ, char type, void *param )
|
|
|
+void NachrichtenListe::addNachricht( Text *titel, Text *nachricht, Text *positiv, Text *negativ, std::function<void()> posAk, std::function<void()> negAk )
|
|
|
{
|
|
|
if( titel && titel->hat( "Fehler" ) && errSound )
|
|
|
errSound->playSound();
|
|
|
else if( msgSound )
|
|
|
msgSound->playSound();
|
|
|
- nachrichtenListe->addNachricht( titel, nachricht, positiv, negativ, type, param );
|
|
|
+ nachrichtenListe->addNachricht( new Nachricht( schrift, titel, nachricht, positiv, negativ, posAk, negAk ) );
|
|
|
+}
|
|
|
+void NachrichtenListe::addNachricht( NLNachricht *nachricht )
|
|
|
+{
|
|
|
+ if( nachricht->zTitel() && nachricht->zTitel()->hat( "Fehler" ) && errSound )
|
|
|
+ errSound->playSound();
|
|
|
+ else if( msgSound )
|
|
|
+ msgSound->playSound();
|
|
|
+ nachrichtenListe->addNachricht( nachricht );
|
|
|
}
|
|
|
|
|
|
-void NachrichtenListe::removeNachricht( Nachricht *zNachricht )
|
|
|
+void NachrichtenListe::removeNachricht( NLNachricht *zNachricht )
|
|
|
{
|
|
|
nachrichtenListe->removeNachricht( zNachricht );
|
|
|
}
|
|
@@ -818,6 +892,10 @@ bool NachrichtenListe::tick( double tickVal )
|
|
|
}
|
|
|
|
|
|
// contant
|
|
|
+Schrift *NachrichtenListe::zSchrift() const
|
|
|
+{
|
|
|
+ return schrift;
|
|
|
+}
|
|
|
|
|
|
// Reference Counting
|
|
|
NachrichtenListe *NachrichtenListe::getThis()
|