Kaynağa Gözat

use framework ui initialisation and reference counting

Kolja Strohm 4 yıl önce
ebeveyn
işleme
be8b34fba4
125 değiştirilmiş dosya ile 10721 ekleme ve 12619 silme
  1. 106 106
      KSGClient/Aktionen/AktionsThread.cpp
  2. 2 15
      KSGClient/Global/Bilder.cpp
  3. 5 8
      KSGClient/Global/Bilder.h
  4. 42 61
      KSGClient/Global/Fps.cpp
  5. 29 32
      KSGClient/Global/Fps.h
  6. 24 203
      KSGClient/Global/Initialisierung.cpp
  7. 14 14
      KSGClient/Global/Initialisierung.h
  8. 24 50
      KSGClient/Global/Render.cpp
  9. 14 19
      KSGClient/Global/Render.h
  10. 18 20
      KSGClient/Global/Variablen.cpp
  11. 6 4
      KSGClient/Global/Variablen.h
  12. 4 20
      KSGClient/Leser/KartenLeser.cpp
  13. 18 22
      KSGClient/Leser/KartenLeser.h
  14. 601 596
      KSGClient/NachLogin/Account/AccountAnsehen.cpp
  15. 47 47
      KSGClient/NachLogin/Account/AccountAnsehen.h
  16. 244 256
      KSGClient/NachLogin/Account/Aktivität/AccountAktivität.cpp
  17. 24 26
      KSGClient/NachLogin/Account/Aktivität/AccountAktivität.h
  18. 1024 1107
      KSGClient/NachLogin/Account/Historie/AccountHistorie.cpp
  19. 181 206
      KSGClient/NachLogin/Account/Historie/AccountHistorie.h
  20. 879 896
      KSGClient/NachLogin/Account/SpielPartner/AccountSpielPartner.cpp
  21. 88 93
      KSGClient/NachLogin/Account/SpielPartner/AccountSpielPartner.h
  22. 632 663
      KSGClient/NachLogin/Account/Spiele_Karten/AccountSpieleUndKarten.cpp
  23. 113 122
      KSGClient/NachLogin/Account/Spiele_Karten/AccountSpieleUndKarten.h
  24. 292 294
      KSGClient/NachLogin/Account/Statistik/AccountStatistik.cpp
  25. 32 33
      KSGClient/NachLogin/Account/Statistik/AccountStatistik.h
  26. 231 245
      KSGClient/NachLogin/Account/Suchen/AccountSuchen.cpp
  27. 36 39
      KSGClient/NachLogin/Account/Suchen/AccountSuchen.h
  28. 74 138
      KSGClient/NachLogin/Chat/ChatLeiste.cpp
  29. 122 140
      KSGClient/NachLogin/Chat/ChatLeiste.h
  30. 86 101
      KSGClient/NachLogin/Chat/FreundesListe.cpp
  31. 117 120
      KSGClient/NachLogin/Chat/FreundesListe.h
  32. 72 108
      KSGClient/NachLogin/Chat/NachrichtenListe.cpp
  33. 52 63
      KSGClient/NachLogin/Chat/NachrichtenListe.h
  34. 35 49
      KSGClient/NachLogin/Editor/Auswahl/Auswahl.cpp
  35. 30 33
      KSGClient/NachLogin/Editor/Auswahl/Auswahl.h
  36. 160 157
      KSGClient/NachLogin/Editor/Editor.cpp
  37. 32 33
      KSGClient/NachLogin/Editor/Editor.h
  38. 22 22
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBEditor.cpp
  39. 1 1
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBEditor.h
  40. 23 25
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBVorschau.cpp
  41. 2 3
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBVorschau.h
  42. 23 37
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBeschreibung.cpp
  43. 1 4
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBeschreibung.h
  44. 99 141
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDEditor.cpp
  45. 7 19
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDEditor.h
  46. 76 122
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDModel2DEditor.cpp
  47. 7 21
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDModel2DEditor.h
  48. 6 20
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDateien.cpp
  49. 1 4
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDateien.h
  50. 5 15
      KSGClient/NachLogin/Editor/Karte/Dateien/WAVDatei.cpp
  51. 0 3
      KSGClient/NachLogin/Editor/Karte/Dateien/WAVDatei.h
  52. 49 63
      KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.cpp
  53. 23 26
      KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.h
  54. 70 36
      KSGClient/NachLogin/Editor/Karte/KartenEditor.cpp
  55. 26 29
      KSGClient/NachLogin/Editor/Karte/KartenEditor.h
  56. 14 28
      KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.cpp
  57. 1 4
      KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.h
  58. 66 93
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSEditor.cpp
  59. 5 13
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSEditor.h
  60. 54 72
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSVorschau.cpp
  61. 4 9
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSVorschau.h
  62. 8 22
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KEShopSeite.cpp
  63. 1 4
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KEShopSeite.h
  64. 37 51
      KSGClient/NachLogin/Editor/Karte/Teams/KETeams.cpp
  65. 1 4
      KSGClient/NachLogin/Editor/Karte/Teams/KETeams.h
  66. 27 42
      KSGClient/NachLogin/Einstellungen/Einstellungen.cpp
  67. 11 15
      KSGClient/NachLogin/Einstellungen/Einstellungen.h
  68. 150 149
      KSGClient/NachLogin/ImSpiel/ImSpiel.cpp
  69. 28 29
      KSGClient/NachLogin/ImSpiel/ImSpiel.h
  70. 384 427
      KSGClient/NachLogin/ImSpiel/Laden/SpielLaden.cpp
  71. 88 99
      KSGClient/NachLogin/ImSpiel/Laden/SpielLaden.h
  72. 227 242
      KSGClient/NachLogin/MiniGames/MiniGame.cpp
  73. 31 35
      KSGClient/NachLogin/MiniGames/MiniGame.h
  74. 23 25
      KSGClient/NachLogin/MiniGames/Minigames.cpp
  75. 58 59
      KSGClient/NachLogin/MiniGames/Minigames.h
  76. 47 51
      KSGClient/NachLogin/NachLogin.cpp
  77. 47 49
      KSGClient/NachLogin/NachLogin.h
  78. 22 20
      KSGClient/NachLogin/Neuigkeiten/Neuigkeiten.cpp
  79. 44 44
      KSGClient/NachLogin/Neuigkeiten/Neuigkeiten.h
  80. 73 138
      KSGClient/NachLogin/Shop/Karten/KartenKaufen.cpp
  81. 92 105
      KSGClient/NachLogin/Shop/Karten/KartenKaufen.h
  82. 201 196
      KSGClient/NachLogin/Shop/Shop.cpp
  83. 32 32
      KSGClient/NachLogin/Shop/Shop.h
  84. 69 124
      KSGClient/NachLogin/Shop/Spiele/SpieleKaufen.cpp
  85. 90 103
      KSGClient/NachLogin/Shop/Spiele/SpieleKaufen.h
  86. 15 30
      KSGClient/NachLogin/Spiele/Angemeldet/Angemeldet.cpp
  87. 39 43
      KSGClient/NachLogin/Spiele/Angemeldet/Angemeldet.h
  88. 102 246
      KSGClient/NachLogin/Spiele/Gruppe/Gruppe.cpp
  89. 271 316
      KSGClient/NachLogin/Spiele/Gruppe/Gruppe.h
  90. 20 60
      KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.cpp
  91. 4 13
      KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.h
  92. 60 100
      KSGClient/NachLogin/Spiele/Spiel Auswahl/SpielAuswahl.cpp
  93. 4 13
      KSGClient/NachLogin/Spiele/Spiel Auswahl/SpielAuswahl.h
  94. 654 649
      KSGClient/NachLogin/Spiele/Spiele.cpp
  95. 84 84
      KSGClient/NachLogin/Spiele/Spiele.h
  96. 159 177
      KSGClient/NachLogin/Spiele/Statistik/SpielStatistik.cpp
  97. 31 36
      KSGClient/NachLogin/Spiele/Statistik/SpielStatistik.h
  98. 61 166
      KSGClient/NachLogin/Spiele/Team Auswahl/TeamAuswahl.cpp
  99. 154 184
      KSGClient/NachLogin/Spiele/Team Auswahl/TeamAuswahl.h
  100. 64 72
      KSGClient/NachLogin/Titel/TitelLeiste.cpp
  101. 45 47
      KSGClient/NachLogin/Titel/TitelLeiste.h
  102. 44 75
      KSGClient/NachLogin/Update/Update.cpp
  103. 26 32
      KSGClient/NachLogin/Update/Update.h
  104. 83 83
      KSGClient/Netzwerk/ChatMessageProcessor.cpp
  105. 20 20
      KSGClient/Netzwerk/KSGServer.cpp
  106. 2 17
      KSGClient/Netzwerk/Patcher.cpp
  107. 13 17
      KSGClient/Netzwerk/Patcher.h
  108. 7 7
      KSGClient/Netzwerk/SpielMessageProcessor.cpp
  109. 13 14
      KSGClient/Start/Start.cpp
  110. 52 82
      KSGClient/VorLogin/Account verwalten/EMail.cpp
  111. 44 52
      KSGClient/VorLogin/Account verwalten/EMail.h
  112. 48 78
      KSGClient/VorLogin/Account verwalten/Geheimnis.cpp
  113. 42 50
      KSGClient/VorLogin/Account verwalten/Geheimnis.h
  114. 21 36
      KSGClient/VorLogin/Account verwalten/Name.cpp
  115. 19 23
      KSGClient/VorLogin/Account verwalten/Name.h
  116. 51 81
      KSGClient/VorLogin/Account verwalten/Passwort.cpp
  117. 44 52
      KSGClient/VorLogin/Account verwalten/Passwort.h
  118. 41 80
      KSGClient/VorLogin/Account verwalten/Registrierung.cpp
  119. 28 32
      KSGClient/VorLogin/Account verwalten/Registrierung.h
  120. 25 40
      KSGClient/VorLogin/Account verwalten/Unregistrierung.cpp
  121. 22 26
      KSGClient/VorLogin/Account verwalten/Unregistrierung.h
  122. 303 318
      KSGClient/VorLogin/Login/Login.cpp
  123. 25 29
      KSGClient/VorLogin/Login/Login.h
  124. 44 68
      KSGClient/VorLogin/VorLogin.cpp
  125. 51 57
      KSGClient/VorLogin/VorLogin.h

+ 106 - 106
KSGClient/Aktionen/AktionsThread.cpp

@@ -26,8 +26,8 @@ void AktionsThread::thread()
         // arg2 = char* -- Account Passwort
         // arg2 = char* -- Account Passwort
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !loginClient )
             if( !loginClient )
@@ -90,34 +90,34 @@ void AktionsThread::thread()
                 loginClient->trenne( 0 );
                 loginClient->trenne( 0 );
             } while( 0 );
             } while( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zLogin()->setLoginReturn( ret );
             vorLogin->zLogin()->setLoginReturn( ret );
         }
         }
         break;
         break;
     case 2: // Login Erfolgreich
     case 2: // Login Erfolgreich
-        hauptScreen->setdeckFarbe( 0x00000000 );
-        hauptScreen->setOnTop( 1 );
+        uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+        uiFactory.initParam.bildschirm->setOnTop( 1 );
         ladeAnimation->setSichtbar( 1 );
         ladeAnimation->setSichtbar( 1 );
         for( unsigned char deckAlpha = 0; deckAlpha < 255; )
         for( unsigned char deckAlpha = 0; deckAlpha < 255; )
         {
         {
-            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
             Sleep( 40 );
             Sleep( 40 );
             deckAlpha += 15;
             deckAlpha += 15;
         }
         }
-        hauptScreen->setdeckFarbe( 255 << 24 );
-        hauptScreen->setRenderZeichnungen( 0 );
+        uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
+        uiFactory.initParam.bildschirm->setRenderZeichnungen( 0 );
         vorLogin->setSichtbar( 0 );
         vorLogin->setSichtbar( 0 );
         nachLogin->setAnzeige( NLANormal );
         nachLogin->setAnzeige( NLANormal );
-        hauptScreen->setRenderZeichnungen( 1 );
+        uiFactory.initParam.bildschirm->setRenderZeichnungen( 1 );
         ladeAnimation->setSichtbar( 0 );
         ladeAnimation->setSichtbar( 0 );
         for( unsigned char deckAlpha = 255; deckAlpha > 0; )
         for( unsigned char deckAlpha = 255; deckAlpha > 0; )
         {
         {
-            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
             Sleep( 40 );
             Sleep( 40 );
             deckAlpha -= 15;
             deckAlpha -= 15;
         }
         }
-        hauptScreen->setdeckFarbe( 0 << 24 );
-        hauptScreen->setOnTop( 0 );
+        uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+        uiFactory.initParam.bildschirm->setOnTop( 0 );
         break;
         break;
     case 3: // Kick
     case 3: // Kick
         // arg1 = char* -- Account Name
         // arg1 = char* -- Account Name
@@ -125,8 +125,8 @@ void AktionsThread::thread()
         // arg3 = char* -- Account Geheimnis
         // arg3 = char* -- Account Geheimnis
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !loginClient )
             if( !loginClient )
@@ -188,15 +188,15 @@ void AktionsThread::thread()
                 loginClient->trenne( 0 );
                 loginClient->trenne( 0 );
             } while( 0 );
             } while( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zLogin()->setKickReturn( ret );
             vorLogin->zLogin()->setKickReturn( ret );
         }
         }
         break;
         break;
     case 4: // Logout
     case 4: // Logout
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             if( loginClient )
             if( loginClient )
             {
             {
@@ -205,17 +205,17 @@ void AktionsThread::thread()
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                     ladeAnimation->setSichtbar( 0 );
                     ladeAnimation->setSichtbar( 0 );
-                    hauptScreen->setOnTop( 0 );
+                    uiFactory.initParam.bildschirm->setOnTop( 0 );
                     break;
                     break;
                 }
                 }
                 bool ret = loginClient->logout();
                 bool ret = loginClient->logout();
                 if( ret )
                 if( ret )
                 {
                 {
-                    hauptScreen->lock();
+                    uiFactory.initParam.bildschirm->lock();
                     nachLogin->zChatLeiste()->removeAll();
                     nachLogin->zChatLeiste()->removeAll();
                     nachLogin->zFreundesListe()->removeAll();
                     nachLogin->zFreundesListe()->removeAll();
                     nachLogin->zNachrichtenListe()->removeAll();
                     nachLogin->zNachrichtenListe()->removeAll();
-                    hauptScreen->unlock();
+                    uiFactory.initParam.bildschirm->unlock();
                     if( infoClient )
                     if( infoClient )
                         infoClient->trenne( 0 );
                         infoClient->trenne( 0 );
                     if( spielClient )
                     if( spielClient )
@@ -234,39 +234,39 @@ void AktionsThread::thread()
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                     ladeAnimation->setSichtbar( 0 );
                     ladeAnimation->setSichtbar( 0 );
-                    hauptScreen->setOnTop( 0 );
+                    uiFactory.initParam.bildschirm->setOnTop( 0 );
                     break;
                     break;
                 }
                 }
             }
             }
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
         }
         }
     case 5: // Logout Erfolgreich
     case 5: // Logout Erfolgreich
-        hauptScreen->setdeckFarbe( 0x00000000 );
-        hauptScreen->setOnTop( 1 );
+        uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+        uiFactory.initParam.bildschirm->setOnTop( 1 );
         ladeAnimation->setSichtbar( 1 );
         ladeAnimation->setSichtbar( 1 );
         for( unsigned char deckAlpha = 0; deckAlpha < 255; )
         for( unsigned char deckAlpha = 0; deckAlpha < 255; )
         {
         {
-            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
             Sleep( 40 );
             Sleep( 40 );
             deckAlpha += 15;
             deckAlpha += 15;
         }
         }
-        hauptScreen->setdeckFarbe( 255 << 24 );
+        uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
         _render = 0;
         _render = 0;
-        hauptScreen->lock();
+        uiFactory.initParam.bildschirm->lock();
         nachLogin->setAnzeige( NLALogin );
         nachLogin->setAnzeige( NLALogin );
         vorLogin->setSichtbar( 1 );
         vorLogin->setSichtbar( 1 );
-        hauptScreen->unlock();
+        uiFactory.initParam.bildschirm->unlock();
         _render = 1;
         _render = 1;
         ladeAnimation->setSichtbar( 0 );
         ladeAnimation->setSichtbar( 0 );
         for( unsigned char deckAlpha = 255; deckAlpha > 0; )
         for( unsigned char deckAlpha = 255; deckAlpha > 0; )
         {
         {
-            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
             Sleep( 40 );
             Sleep( 40 );
             deckAlpha -= 15;
             deckAlpha -= 15;
         }
         }
-        hauptScreen->setdeckFarbe( 0 << 24 );
-        hauptScreen->setOnTop( 0 );
+        uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+        uiFactory.initParam.bildschirm->setOnTop( 0 );
         break;
         break;
     case 8: // Account E-Mail ändern
     case 8: // Account E-Mail ändern
         // arg1 = char* -- Account Name
         // arg1 = char* -- Account Name
@@ -275,8 +275,8 @@ void AktionsThread::thread()
         // arg4 = char* -- Neue E-Mail
         // arg4 = char* -- Neue E-Mail
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -302,7 +302,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zEMailÄndern()->setReturn( ret );
             vorLogin->zEMailÄndern()->setReturn( ret );
         }
         }
         break;
         break;
@@ -312,8 +312,8 @@ void AktionsThread::thread()
         // arg3 = char* -- Account Geheimnis
         // arg3 = char* -- Account Geheimnis
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             char *eMail = 0;
             char *eMail = 0;
             char **pEMail = &eMail;
             char **pEMail = &eMail;
@@ -341,7 +341,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zEMailVergessen()->setReturn( ret, *pEMail );
             vorLogin->zEMailVergessen()->setReturn( ret, *pEMail );
         }
         }
         break;
         break;
@@ -352,8 +352,8 @@ void AktionsThread::thread()
         // arg4 = char* -- Neues Geheimnis
         // arg4 = char* -- Neues Geheimnis
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -379,7 +379,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zGeheimnisÄndern()->setResult( ret );
             vorLogin->zGeheimnisÄndern()->setResult( ret );
         }
         }
         break;
         break;
@@ -388,8 +388,8 @@ void AktionsThread::thread()
         // arg2 = char* -- Account Passwort
         // arg2 = char* -- Account Passwort
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -415,7 +415,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zGeheimnisVergessen()->setResult( ret );
             vorLogin->zGeheimnisVergessen()->setResult( ret );
         }
         }
         break;
         break;
@@ -424,8 +424,8 @@ void AktionsThread::thread()
         // arg2 = char* -- Account Geheimnis
         // arg2 = char* -- Account Geheimnis
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -451,7 +451,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zNameVergessen()->setResult( ret );
             vorLogin->zNameVergessen()->setResult( ret );
         }
         }
         break;
         break;
@@ -462,8 +462,8 @@ void AktionsThread::thread()
         // arg4 = char* -- Neues Passwort
         // arg4 = char* -- Neues Passwort
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -489,7 +489,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zPasswortÄndern()->setResult( ret );
             vorLogin->zPasswortÄndern()->setResult( ret );
         }
         }
         break;
         break;
@@ -498,8 +498,8 @@ void AktionsThread::thread()
         // arg2 = char* -- Account Geheimnis
         // arg2 = char* -- Account Geheimnis
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -525,7 +525,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zPasswortVergessen()->setResult( ret );
             vorLogin->zPasswortVergessen()->setResult( ret );
         }
         }
         break;
         break;
@@ -537,8 +537,8 @@ void AktionsThread::thread()
         // arg5 = Datum* -- Geburtsdatum
         // arg5 = Datum* -- Geburtsdatum
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -556,7 +556,7 @@ void AktionsThread::thread()
                     continue;
                     continue;
                 }
                 }
                 ret = registerClient->accountErstellen( (const char *)arg1,
                 ret = registerClient->accountErstellen( (const char *)arg1,
-                    (const char *)arg2,
+                                                        (const char *)arg2,
                                                         (const char *)arg3,
                                                         (const char *)arg3,
                                                         (const char *)arg4,
                                                         (const char *)arg4,
                                                         (unsigned short)( (Datum *)arg5 )->getJahr(),
                                                         (unsigned short)( (Datum *)arg5 )->getJahr(),
@@ -570,7 +570,7 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zRegistrierung()->setWeiterReturn( ret );
             vorLogin->zRegistrierung()->setWeiterReturn( ret );
             ( (Datum *)arg5 )->release();
             ( (Datum *)arg5 )->release();
         }
         }
@@ -581,8 +581,8 @@ void AktionsThread::thread()
         // arg3 = char* -- Account Geheimnis
         // arg3 = char* -- Account Geheimnis
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             int ret = 0;
             int ret = 0;
             if( !registerClient )
             if( !registerClient )
@@ -608,159 +608,159 @@ void AktionsThread::thread()
             } while( 0 );
             } while( 0 );
             registerClient->trenne( 0 );
             registerClient->trenne( 0 );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
             vorLogin->zUnregistrierung()->setWeiterReturn( ret );
             vorLogin->zUnregistrierung()->setWeiterReturn( ret );
         }
         }
         break;
         break;
     case 19: // Spiel Laden
     case 19: // Spiel Laden
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha += 15;
                 deckAlpha += 15;
             }
             }
-            hauptScreen->setdeckFarbe( 255 << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
             _render = 0;
             _render = 0;
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             int karteId = nachLogin->zSpielenFenster()->getKarteId();
             int karteId = nachLogin->zSpielenFenster()->getKarteId();
-            SpielerTeamStruktur * sts = nachLogin->zSpielenFenster()->getSTS();
+            SpielerTeamStruktur *sts = nachLogin->zSpielenFenster()->getSTS();
             nachLogin->setAnzeige( NLAImSpiel );
             nachLogin->setAnzeige( NLAImSpiel );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             _render = 1;
             _render = 1;
             nachLogin->zImSpiel()->beginnLaden( karteId, sts );
             nachLogin->zImSpiel()->beginnLaden( karteId, sts );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha -= 15;
                 deckAlpha -= 15;
             }
             }
-            hauptScreen->setdeckFarbe( 0 << 24 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
         }
         }
         break;
         break;
     case 20: // Spiel Statistik laden
     case 20: // Spiel Statistik laden
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha += 15;
                 deckAlpha += 15;
             }
             }
-            hauptScreen->setdeckFarbe( 255 << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
             _render = 0;
             _render = 0;
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             int karteId = nachLogin->zImSpiel()->getKarteId();
             int karteId = nachLogin->zImSpiel()->getKarteId();
             nachLogin->setAnzeige( NLANormal );
             nachLogin->setAnzeige( NLANormal );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             _render = 1;
             _render = 1;
-            if( spielClient &&spielClient->istVerbunden() )
+            if( spielClient && spielClient->istVerbunden() )
                 nachLogin->zSpielenFenster()->ladeSpielStatistik( karteId );
                 nachLogin->zSpielenFenster()->ladeSpielStatistik( karteId );
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha -= 15;
                 deckAlpha -= 15;
             }
             }
-            hauptScreen->setdeckFarbe( 0 << 24 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
         }
         }
         break;
         break;
     case 21: // Spiel Aufzeichnung betreten
     case 21: // Spiel Aufzeichnung betreten
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha += 15;
                 deckAlpha += 15;
             }
             }
-            hauptScreen->setdeckFarbe( 255 << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
             _render = 0;
             _render = 0;
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             nachLogin->setAnzeige( NLASpielVideo );
             nachLogin->setAnzeige( NLASpielVideo );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             _render = 1;
             _render = 1;
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha -= 15;
                 deckAlpha -= 15;
             }
             }
-            hauptScreen->setdeckFarbe( 0 << 24 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
         }
         }
         break;
         break;
     case 22: // Spiel Aufzeichnung / Editor verlassen
     case 22: // Spiel Aufzeichnung / Editor verlassen
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha += 15;
                 deckAlpha += 15;
             }
             }
-            hauptScreen->setdeckFarbe( 255 << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
             _render = 0;
             _render = 0;
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             nachLogin->setAnzeige( NLANormal );
             nachLogin->setAnzeige( NLANormal );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             _render = 1;
             _render = 1;
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha -= 15;
                 deckAlpha -= 15;
             }
             }
-            hauptScreen->setdeckFarbe( 0 << 24 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
         }
         }
         break;
         break;
     case 23: // Editor betreten
     case 23: // Editor betreten
         if( 1 )
         if( 1 )
         {
         {
-            hauptScreen->setdeckFarbe( 0x00000000 );
-            hauptScreen->setOnTop( 1 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0x00000000 );
+            uiFactory.initParam.bildschirm->setOnTop( 1 );
             ladeAnimation->setSichtbar( 1 );
             ladeAnimation->setSichtbar( 1 );
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             for( unsigned char deckAlpha = 0; deckAlpha < 255; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha += 15;
                 deckAlpha += 15;
             }
             }
-            hauptScreen->setdeckFarbe( 255 << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 255 << 24 );
             _render = 0;
             _render = 0;
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             nachLogin->setAnzeige( NLAEditor );
             nachLogin->setAnzeige( NLAEditor );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             _render = 1;
             _render = 1;
             ladeAnimation->setSichtbar( 0 );
             ladeAnimation->setSichtbar( 0 );
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             for( unsigned char deckAlpha = 255; deckAlpha > 0; )
             {
             {
-                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
                 Sleep( 40 );
                 Sleep( 40 );
                 deckAlpha -= 15;
                 deckAlpha -= 15;
             }
             }
-            hauptScreen->setdeckFarbe( 0 << 24 );
-            hauptScreen->setOnTop( 0 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( 0 << 24 );
+            uiFactory.initParam.bildschirm->setOnTop( 0 );
         }
         }
         break;
         break;
     }
     }

+ 2 - 15
KSGClient/Global/Bilder.cpp

@@ -4,10 +4,10 @@
 // Inhalt der Bilder Klasse aus Bilder.h
 // Inhalt der Bilder Klasse aus Bilder.h
 // Konstruktor
 // Konstruktor
 Bilder::Bilder()
 Bilder::Bilder()
+    : ReferenceCounter()
 {
 {
     bilder = new RCArray< Bild >();
     bilder = new RCArray< Bild >();
     paths = new RCArray< Text >();
     paths = new RCArray< Text >();
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -42,20 +42,7 @@ Bild *Bilder::get( const char *path )
         return 0;
         return 0;
     }
     }
     paths->add( new Text( path ) );
     paths->add( new Text( path ) );
-    bilder->add( b->getThis() );
+    bilder->add( dynamic_cast<Bild *>( b->getThis() ) );
     c.unlock();
     c.unlock();
     return b;
     return b;
-}
-
-BilderV *Bilder::getThis()
-{
-    ref++;
-    return this;
-}
-
-BilderV *Bilder::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }
 }

+ 5 - 8
KSGClient/Global/Bilder.h

@@ -15,17 +15,14 @@ private:
     RCArray< Bild > *bilder;
     RCArray< Bild > *bilder;
     RCArray< Text > *paths;
     RCArray< Text > *paths;
     Critical c;
     Critical c;
-    int ref;
 
 
 public:
 public:
-	// Konstruktor
-	Bilder();
-	// Destruktor
-	~Bilder();
-	// nicht constant
+    // Konstruktor
+    Bilder();
+    // Destruktor
+    ~Bilder();
+    // nicht constant
     virtual Bild *get( const char *path ) override;
     virtual Bild *get( const char *path ) override;
-    virtual BilderV *getThis() override;
-	virtual BilderV *release() override;
 };
 };
 
 
 #endif
 #endif

+ 42 - 61
KSGClient/Global/Fps.cpp

@@ -3,6 +3,7 @@
 #include <Prozess.h>
 #include <Prozess.h>
 #include <Schrift.h>
 #include <Schrift.h>
 #include <Text.h>
 #include <Text.h>
+#include "Variablen.h"
 
 
 using namespace Framework;
 using namespace Framework;
 
 
@@ -11,101 +12,81 @@ using namespace Framework;
 Fps::Fps()
 Fps::Fps()
     : Zeichnung()
     : Zeichnung()
 {
 {
-	pr = new Prozess();
-	i = 0;
-	fpsCount = 0;
-	nowFps = 0;
-	nowCpu = 0;
-	nowMem = 0;
-    textRd = 0;
-	sFarbe = 0;
+    pr = new Prozess();
+    i = 0;
+    fpsCount = 0;
+    nowFps = 0;
+    nowCpu = 0;
+    nowMem = 0;
+    textRd = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
+    textRd->setSchriftSize( 12 );
+    sFarbe = 0;
 }
 }
 
 
 // Destruktor 
 // Destruktor 
 Fps::~Fps()
 Fps::~Fps()
 {
 {
-	delete pr;
-	if( textRd )
-		textRd->release();
+    delete pr;
+    textRd->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
-void Fps::setSchriftZ( Schrift *schrift ) // setzt die Schrift
-{
-    if( !this->textRd )
-        textRd = new TextRenderer( schrift );
-    else
-        textRd->setSchriftZ( schrift );
-    textRd->setSchriftSize( 12 );
-	rend = 1;
-}
-
 void Fps::setSFarbe( int f ) // setzt die Schrift Farbe
 void Fps::setSFarbe( int f ) // setzt die Schrift Farbe
 {
 {
-	sFarbe = f;
-	rend = 1;
+    sFarbe = f;
+    rend = 1;
 }
 }
 
 
 bool Fps::tick( double tickval ) // tick
 bool Fps::tick( double tickval ) // tick
 {
 {
-	i += tickval * 60;
-	if( i >= 60 )
-	{
-		nowFps = fpsCount;
-		nowCpu = (int)pr->getCPU();
-		nowMem = (int)(pr->getMem() / 1024);
-		fpsCount = 0;
-		i -= 60;
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    i += tickval * 60;
+    if( i >= 60 )
+    {
+        nowFps = fpsCount;
+        nowCpu = (int)pr->getCPU();
+        nowMem = (int)( pr->getMem() / 1024 );
+        fpsCount = 0;
+        i -= 60;
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void Fps::render( Bild &zrObj ) // zeichnet nach zrObj
 void Fps::render( Bild &zrObj ) // zeichnet nach zrObj
 {
 {
-	fpsCount++;
-	if( textRd && sFarbe )
-	{
-		Text renderT( "FPS: " );
-		renderT.append( nowFps );
-		renderT.append( "\nCPU: " );
-		renderT.append( nowCpu );
-		renderT.append( "%\nMem: " );
-		renderT.append( nowMem );
-		renderT.append( "kb" );
+    fpsCount++;
+    if( textRd && sFarbe )
+    {
+        Text renderT( "FPS: " );
+        renderT.append( nowFps );
+        renderT.append( "\nCPU: " );
+        renderT.append( nowCpu );
+        renderT.append( "%\nMem: " );
+        renderT.append( nowMem );
+        renderT.append( "kb" );
         textRd->renderText( 10, 10, renderT, zrObj, sFarbe );
         textRd->renderText( 10, 10, renderT, zrObj, sFarbe );
-	}
+    }
 }
 }
 
 
 // constant
 // constant
 int Fps::getFps() const // gibt fps zurück
 int Fps::getFps() const // gibt fps zurück
 {
 {
-	return nowFps;
+    return nowFps;
 }
 }
 
 
 int Fps::getCpu() const // gibt die Cpu zurück
 int Fps::getCpu() const // gibt die Cpu zurück
 {
 {
-	return nowCpu;
+    return nowCpu;
 }
 }
 
 
 int Fps::getMem() const // gibt den Arbeitsspeicher zurück
 int Fps::getMem() const // gibt den Arbeitsspeicher zurück
 {
 {
-	return nowMem;
-}
-
-Schrift *Fps::getSchrift() const // gibt die Schrift zurück
-{
-	return textRd ? textRd->getSchrift() : 0;
-}
-
-Schrift *Fps::zSchrift() const
-{
-	return textRd ? textRd->zSchrift() : 0;
+    return nowMem;
 }
 }
 
 
 int Fps::getFarbe() const // gibt die Farbe zurück
 int Fps::getFarbe() const // gibt die Farbe zurück
 {
 {
-	return sFarbe;
+    return sFarbe;
 }
 }

+ 29 - 32
KSGClient/Global/Fps.h

@@ -5,42 +5,39 @@
 
 
 namespace Framework
 namespace Framework
 {
 {
-	class Prozess; // Prozess.h
-	class Bild; // Bild.h
-	class Schrift; // Schrift.h
-	class Fps; // aus dieser Datei
+    class Prozess; // Prozess.h
+    class Bild; // Bild.h
+    class Schrift; // Schrift.h
+    class Fps; // aus dieser Datei
     class TextRenderer;
     class TextRenderer;
 
 
-	class Fps : public Zeichnung
-	{
-	private:
-		Prozess *pr;
-		double i;
-		int fpsCount;
-		int nowFps;
-		int nowCpu;
-		int nowMem;
+    class Fps : public Zeichnung
+    {
+    private:
+        Prozess *pr;
+        double i;
+        int fpsCount;
+        int nowFps;
+        int nowCpu;
+        int nowMem;
         TextRenderer *textRd;
         TextRenderer *textRd;
-		int sFarbe;
+        int sFarbe;
 
 
-	public:
-		// Konstruktor 
-		Fps();
-		// Destruktor 
-		~Fps();
-		// nicht constant
-		void setSchriftZ( Schrift *schrift ); // setzt die Schrift
-		void setSFarbe( int f ); // setzt die Schrift Farbe
-		bool tick( double tickval ) override; // tick
-		void render( Bild &zRObj ) override; // zeichnet nach zrObj
-		// constant
-		Schrift *getSchrift() const; // gibt die Schrift zurück
-		Schrift *zSchrift() const;
-		int getFarbe() const; // gibt die Farbe zurück
-		int getFps() const; // gibt fps zurück
-		int getCpu() const; // gibt die Cpu zurück
-		int getMem() const; // gibt den Arbeitsspeicher zurück
-	};
+    public:
+        // Konstruktor 
+        Fps();
+        // Destruktor 
+        ~Fps();
+        // nicht constant
+        void setSFarbe( int f ); // setzt die Schrift Farbe
+        bool tick( double tickval ) override; // tick
+        void render( Bild &zRObj ) override; // zeichnet nach zrObj
+        // constant
+        int getFarbe() const; // gibt die Farbe zurück
+        int getFps() const; // gibt fps zurück
+        int getCpu() const; // gibt die Cpu zurück
+        int getMem() const; // gibt den Arbeitsspeicher zurück
+    };
 }
 }
 
 
 #endif
 #endif

+ 24 - 203
KSGClient/Global/Initialisierung.cpp

@@ -5,188 +5,78 @@
 #include <DateiSystem.h>
 #include <DateiSystem.h>
 #include "Variablen.h"
 #include "Variablen.h"
 
 
-Knopf *initKnopf( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, char *titel )
+Knopf *initKnopf( int x, int y, int br, int hö, __int64 style, char *titel )
 {
 {
-    Knopf *ret = new Knopf();
+    Knopf *ret = uiFactory.createKnopf( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    if( zSchrift )
-        ret->setSchriftZ( zSchrift->getThis() );
     ret->setText( titel );
     ret->setText( titel );
     return ret;
     return ret;
 }
 }
 
 
-KontrollKnopf *initKontrollKnopf( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, char *txt )
+KontrollKnopf *initKontrollKnopf( int x, int y, int br, int hö, __int64 style, char *txt )
 {
 {
-    KontrollKnopf *ret = new KontrollKnopf();
-    ret->setMausEreignis( _ret1ME );
+    KontrollKnopf *ret = uiFactory.createKontrollKnopf( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
-    ret->setSchriftZ( zSchrift->getThis() );
     ret->setText( txt );
     ret->setText( txt );
     ret->setSText( txt );
     ret->setSText( txt );
-    ret->setSFarbe( 0xFFFFFFFF );
-    ret->setSSize( 12 );
-    if( ret->hatStyle( TextFeld::Style::Buffered ) )
-    {
-        ret->setAlphaFeldFarbe( 0x5500FF00 );
-        ret->setAlphaFeldStrength( -5 );
-    }
-    if( ret->hatStyle( TextFeld::Style::Rahmen ) )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFF00FF00 );
-    }
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    ret->loadData( "data/bilder/system.ltdb" );
     return ret;
     return ret;
 }
 }
 
 
-Fenster *initFenster( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, char *titel )
+Fenster *initFenster( int x, int y, int br, int hö, __int64 style, char *titel )
 {
 {
-    Fenster *ret = new Fenster();
-    ret->setMausEreignis( _ret1ME );
-    ret->setTastaturEreignis( _ret1TE );
+    Fenster *ret = uiFactory.createFenster( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    if( ret->hatStyle( Fenster::Style::Rahmen ) )
-    {
-        ret->setRBreite( 1 );
-        ret->setRFarbe( 0xFFFFFFFF );
-    }
     if( ret->hatStyle( Fenster::Style::Titel ) )
     if( ret->hatStyle( Fenster::Style::Titel ) )
     {
     {
         ret->setTitel( titel );
         ret->setTitel( titel );
-        ret->setTSchriftZ( zSchrift->getThis() );
-        ret->setTSFarbe( 0xFFFFFFFF );
-        ret->zTTextFeld()->setSize( 0, 20 );
-        ret->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
-        ret->setTRFarbe( 0xFF00FF00 );
-        ret->setTRBreite( 1 );
-        if( ret->hatStyle( Fenster::Style::TitelBuffered ) )
-        {
-            ret->setTAfFarbe( 0x1000FF00 );
-            ret->setTAfStrength( -15 );
-        }
-    }
-    if( ret->hatStyle( Fenster::Style::Closable ) )
-    {
-        if( ret->hatStyle( Fenster::Style::ClosingKlickBuffer ) )
-        {
-            ret->setSKAfFarbe( 0xFF00FF00 );
-            ret->setSKAfStrength( 30 );
-        }
     }
     }
     return ret;
     return ret;
 }
 }
 
 
-TextFeld *initTextFeld( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, char *txt )
+TextFeld *initTextFeld( int x, int y, int br, int hö, __int64 style, char *txt )
 {
 {
-    TextFeld *ret = new TextFeld();
+    TextFeld *ret = uiFactory.createTextFeld( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
-    ret->setSchriftZ( zSchrift->getThis() );
     ret->setText( txt );
     ret->setText( txt );
-    ret->setSchriftFarbe( 0xFFFFFFFF );
-    ret->setSchriftSize( 12 );
-    if( ret->hatStyle( TextFeld::Style::Buffered ) )
-    {
-        ret->setAlphaFeldFarbe( 0x5500FF00 );
-        ret->setAlphaFeldStrength( -5 );
-    }
-    if( ret->hatStyle( TextFeld::Style::Rahmen ) )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFF00FF00 );
-    }
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
     return ret;
     return ret;
 }
 }
 
 
-BildZ *initBildZ( int x, int y, int br, int hö, __int64 style, Bild * b )
+BildZ *initBildZ( int x, int y, int br, int hö, __int64 style, Bild *b )
 {
 {
-    BildZ *ret = new BildZ();
+    BildZ *ret = uiFactory.createBildZ( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
     if( b )
     if( b )
         ret->setBildZ( b );
         ret->setBildZ( b );
-    if( ( style | BildZ::Style::Rahmen ) == style )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFFFFFFFF );
-    }
     return ret;
     return ret;
 }
 }
 
 
-AuswahlBox *initAuswahlBox( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, std::initializer_list< char * > values )
+AuswahlBox *initAuswahlBox( int x, int y, int br, int hö, __int64 style, std::initializer_list< char * > values )
 {
 {
-    AuswahlBox *ret = new AuswahlBox();
+    AuswahlBox *ret = uiFactory.createAuswahlBox( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    if( ( style | AuswahlBox::Style::Hintergrund ) == style )
-        ret->setHintergrundFarbe( 0xFF000000 );
-    if( ( style | AuswahlBox::Style::Erlaubt ) == style )
-        ret->setMausEreignis( _ret1ME );
-    if( zSchrift )
-        ret->setSchriftZ( zSchrift->getThis() );
-    if( ( style | AuswahlBox::Style::Rahmen ) == style )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFFFFFFFF );
-    }
-    if( ( style | AuswahlBox::Style::MaxHeight ) == style )
-        ret->setMaxAuskappHeight( 100 );
-    if( ( style | AuswahlBox::Style::MausRahmen ) == style )
-    {
-        ret->setMausRahmenBreite( 1 );
-        ret->setMausRahmenFarbe( 0xFF005500 );
-    }
-    if( ( style | AuswahlBox::Style::MausBuffer ) == style )
-    {
-        ret->setMausAlphaFeldFarbe( 0x00008700 );
-        ret->setMausAlphaFeldStrength( -8 );
-    }
-    if( ( style | AuswahlBox::Style::AuswahlRahmen ) == style )
-    {
-        ret->setAuswRahmenBreite( 1 );
-        ret->setAuswRahmenFarbe( 0xFF00FF00 );
-    }
-    if( ( style | AuswahlBox::Style::AuswahlBuffer ) == style )
-    {
-        ret->setAuswAlphaFeldFarbe( 0x0000FF00 );
-        ret->setAuswAlphaFeldStrength( -8 );
-    }
     for( auto i = values.begin(); i != values.end(); i++ )
     for( auto i = values.begin(); i != values.end(); i++ )
         ret->addEintrag( *i );
         ret->addEintrag( *i );
     return ret;
     return ret;
 }
 }
 
 
-ObjTabelle *initObjTabelle( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, std::initializer_list< OBJTabelleSpalteIni > spalten, int überschriftHöhe )
+ObjTabelle *initObjTabelle( int x, int y, int br, int hö, __int64 style, std::initializer_list< OBJTabelleSpalteIni > spalten, int überschriftHöhe )
 {
 {
-    ObjTabelle *ret = new ObjTabelle();
+    ObjTabelle *ret = uiFactory.createObjTabelle( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    if( ( style | ObjTabelle::Style::Erlaubt ) == style )
-        ret->setMausEreignis( _ret1ME );
-    if( ( style | ObjTabelle::Style::Rahmen ) == style )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFFFFFFFF );
-    }
-    if( ( style | ObjTabelle::Style::Raster ) == style )
-    {
-        ret->setRasterBreite( 1 );
-        ret->setRasterFarbe( 0xFFFFFFFF );
-    }
-    if( ( style | ObjTabelle::Style::VScroll ) == style )
-        ret->setVertikalKlickScroll( 5 );
-    if( ( style | ObjTabelle::Style::HScroll ) == style )
-        ret->setHorizontalKlickScroll( 5 );
     for( auto i = spalten.begin(); i != spalten.end(); i++ )
     for( auto i = spalten.begin(); i != spalten.end(); i++ )
     {
     {
         ret->addSpalte( i->name );
         ret->addSpalte( i->name );
@@ -202,105 +92,38 @@ ObjTabelle *initObjTabelle( int x, int y, int br, int h
                 ret->addZeile( 0, "Überschrift" );
                 ret->addZeile( 0, "Überschrift" );
                 ret->setZeilenHeight( 0, 20 );
                 ret->setZeilenHeight( 0, 20 );
             }
             }
-            ret->setZeichnungZ( i->name, "Überschrift", initTextFeld( 0, 0, i->breite, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, i->name ) );
+            ret->setZeichnungZ( i->name, "Überschrift", initTextFeld( 0, 0, i->breite, 20, TextFeld::Style::Text | TextFeld::Style::Center, i->name ) );
         }
         }
     }
     }
     return ret;
     return ret;
 }
 }
 
 
-LDiag *initLinienDiagramm( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, DiagDaten * data )
+LDiag *initLinienDiagramm( int x, int y, int br, int hö, __int64 style, DiagDaten *data )
 {
 {
-    LDiag *ret = new LDiag();
+    LDiag *ret = uiFactory.createLDiag( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    if( zSchrift )
-    {
-        ret->setSchriftZ( zSchrift->getThis() );
-        ret->setSchriftSize( 12 );
-    }
     if( data )
     if( data )
         ret->setDiagDatenZ( data );
         ret->setDiagDatenZ( data );
-    if( ret->hatStyle( LDiag::Style::Rahmen ) )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFFFFFFFF );
-    }
-    if( ret->hatStyle( LDiag::Style::DatenRahmen ) )
-    {
-        ret->setDatenRahmenBreite( 1 );
-        ret->setDatenRahmenFarbe( 0xFFFFFFFF );
-    }
-    if( ret->hatStyle( LDiag::Style::Hintergrund ) )
-        ret->setHintergrundFarbe( 0xFF000000 );
-    if( ret->hatStyle( LDiag::Style::DatenHintergrund ) )
-        ret->setHintergrundFarbe( 0xFF000000 );
     return ret;
     return ret;
 }
 }
 
 
-FBalken * initFBalken( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style )
+FBalken *initFBalken( int x, int y, int br, int hö, __int64 style )
 {
 {
-    FBalken *ret = new FBalken();
+    FBalken *ret = uiFactory.createFBalken( uiFactory.initParam );
     ret->addStyle( style );
     ret->addStyle( style );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
-    if( zSchrift )
-    {
-        ret->setSchriftZ( zSchrift->getThis() );
-        ret->setSFarbe( 0xFFFFFFFF );
-        ret->setSSize( 12 );
-    }
-    if( ret->hatStyle( FBalken::Style::Rahmen ) )
-    {
-        ret->setRahmenFarbe( 0xFFFFFFFF );
-        ret->setRahmenBreite( 1 );
-    }
-    if( ret->hatStyle( FBalken::Style::HBild ) )
-    {
-        Bild *fbhb = bilder->get( "data/bilder/system.ltdb/fortschrittleh" );
-        ret->setHintergrundBildZ( fbhb );
-    }
-    if( ret->hatStyle( FBalken::Style::FBild ) )
-    {
-        Bild *fbfhb = bilder->get( "data/bilder/system.ltdb/fortschrittvol" );
-        ret->setFBgBildZ( fbfhb );
-    }
-    else if( ret->hatStyle( FBalken::Style::FFarbe ) )
-        ret->setFBgFarbe( 0xFF00FF00 );
     return ret;
     return ret;
 }
 }
 
 
-AuswahlListe *initAuswahlListe( int x, int y, int br, int hö, Schrift * zSchrift, __int64 style, std::initializer_list< char * > values )
+AuswahlListe *initAuswahlListe( int x, int y, int br, int hö, __int64 style, std::initializer_list< char * > values )
 {
 {
-    AuswahlListe *ret = new AuswahlListe();
+    AuswahlListe *ret = uiFactory.createAuswahlListe( uiFactory.initParam );
     ret->setPosition( x, y );
     ret->setPosition( x, y );
     ret->setSize( br, hö );
     ret->setSize( br, hö );
     ret->addStyle( style );
     ret->addStyle( style );
-    ret->setSchriftZ( zSchrift->getThis() );
-    if( ret->hatStyle( AuswahlListe::Style::Buffered ) )
-    {
-        ret->setAlphaFeldFarbe( 0x5500FF00 );
-        ret->setAlphaFeldStrength( -5 );
-    }
-    if( ret->hatStyle( AuswahlListe::Style::Rahmen ) )
-    {
-        ret->setRahmenBreite( 1 );
-        ret->setRahmenFarbe( 0xFFFFFFFF );
-    }
-    if( ( style | AuswahlListe::Style::Hintergrund ) == style )
-        ret->setHintergrundFarbe( 0xFF000000 );
-    if( ( style | AuswahlListe::Style::Erlaubt ) == style )
-        ret->setMausEreignis( _ret1ME );
-    if( ( style | AuswahlListe::Style::AuswahlRahmen ) == style )
-    {
-        ret->setALRBreite( 1 );
-        ret->setALRFarbe( 0xFF00FF00 );
-    }
-    if( ( style | AuswahlListe::Style::AuswahlBuffer ) == style )
-    {
-        ret->setAAFFarbe( 0x0000FF00 );
-        ret->setAAFStrength( -8 );
-    }
     for( auto i = values.begin(); i != values.end(); i++ )
     for( auto i = values.begin(); i != values.end(); i++ )
         ret->addEintrag( *i );
         ret->addEintrag( *i );
     ret->update();
     ret->update();
@@ -322,10 +145,8 @@ ZeichnungHintergrund *initZeichnungHintergrund( int x, int y, int br, int h
     return ret;
     return ret;
 }
 }
 
 
-void initToolTip( Zeichnung * obj, const char *txt, Schrift * zSchrift, Bildschirm * zBs )
+void initToolTip( Zeichnung *obj, const char *txt )
 {
 {
-    obj->setToolTipText( txt, zBs, zSchrift );
-    obj->zToolTip()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha | TextFeld::Style::Mehrzeilig );
-    obj->zToolTip()->setHintergrundFarbe( 0xA0000000 );
-    obj->zToolTip()->setRahmenFarbe( 0xFFFFFFFF );
+    obj->setToolTipText( txt, uiFactory.initParam.bildschirm, uiFactory.initParam.schrift );
+    obj->zToolTip()->addStyle( TextFeld::Style::Mehrzeilig );
 }
 }

+ 14 - 14
KSGClient/Global/Initialisierung.h

@@ -17,26 +17,26 @@ using namespace Framework;
 
 
 struct OBJTabelleSpalteIni
 struct OBJTabelleSpalteIni
 {
 {
-	char *name;
-	int breite;
-	int minBreite;
-	int maxBreite;
+    char *name;
+    int breite;
+    int minBreite;
+    int maxBreite;
 };
 };
 
 
 #define ABSTYLE AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::Hintergrund | AuswahlBox::Style::VScroll
 #define ABSTYLE AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::Hintergrund | AuswahlBox::Style::VScroll
 #define OTSTYLE ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::Rahmen | ObjTabelle::Style::Raster
 #define OTSTYLE ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::Rahmen | ObjTabelle::Style::Raster
 
 
-Knopf *initKnopf( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, char *titel );
-KontrollKnopf *initKontrollKnopf( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, char *txt );
-Fenster *initFenster( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, char *titel );
-TextFeld *initTextFeld( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, char *txt );
+Knopf *initKnopf( int x, int y, int br, int hö, __int64 style, char *titel );
+KontrollKnopf *initKontrollKnopf( int x, int y, int br, int hö, __int64 style, char *txt );
+Fenster *initFenster( int x, int y, int br, int hö, __int64 style, char *titel );
+TextFeld *initTextFeld( int x, int y, int br, int hö, __int64 style, char *txt );
 BildZ *initBildZ( int x, int y, int br, int hö, __int64 style, Bild *b );
 BildZ *initBildZ( int x, int y, int br, int hö, __int64 style, Bild *b );
-AuswahlBox *initAuswahlBox( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, std::initializer_list< char * > values );
-ObjTabelle *initObjTabelle( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, std::initializer_list< OBJTabelleSpalteIni > spalten, int überschriftHöhe );
-LDiag *initLinienDiagramm( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, DiagDaten *data );
-FBalken *initFBalken( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style );
-AuswahlListe *initAuswahlListe( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, std::initializer_list< char * > values );
+AuswahlBox *initAuswahlBox( int x, int y, int br, int hö, __int64 style, std::initializer_list< char * > values );
+ObjTabelle *initObjTabelle( int x, int y, int br, int hö, __int64 style, std::initializer_list< OBJTabelleSpalteIni > spalten, int überschriftHöhe );
+LDiag *initLinienDiagramm( int x, int y, int br, int hö, __int64 style, DiagDaten *data );
+FBalken *initFBalken( int x, int y, int br, int hö, __int64 style );
+AuswahlListe *initAuswahlListe( int x, int y, int br, int hö, __int64 style, std::initializer_list< char * > values );
 ZeichnungHintergrund *initZeichnungHintergrund( int x, int y, int br, int hö, __int64 style, int farbe );
 ZeichnungHintergrund *initZeichnungHintergrund( int x, int y, int br, int hö, __int64 style, int farbe );
-void initToolTip( Zeichnung *obj, const char *txt, Schrift *zSchrift, Bildschirm *zBs );
+void initToolTip( Zeichnung *obj, const char *txt );
 
 
 #endif
 #endif

+ 24 - 50
KSGClient/Global/Render.cpp

@@ -7,15 +7,13 @@
 
 
 // Inhalt der Render Klasse aus Render.h
 // Inhalt der Render Klasse aus Render.h
 // Konstruktor 
 // Konstruktor 
-Render::Render( Schrift *schrift )
+Render::Render()
     : Thread()
     : Thread()
 {
 {
     exit = 0;
     exit = 0;
-    bildschirm = 0;
     time = new ZeitMesser();
     time = new ZeitMesser();
     tickval = 1.0 / 60;
     tickval = 1.0 / 60;
     fps = new Fps();
     fps = new Fps();
-    fps->setSchriftZ( schrift );
     fps->setSFarbe( 0xFFFFFFFF );
     fps->setSFarbe( 0xFFFFFFFF );
     deckAlpha = 0;
     deckAlpha = 0;
     inAnimation = 0;
     inAnimation = 0;
@@ -25,18 +23,10 @@ Render::Render( Schrift *schrift )
 // Destruktor 
 // Destruktor 
 Render::~Render()
 Render::~Render()
 {
 {
-    if( bildschirm )
-        bildschirm = bildschirm->release();
-    time = time->release();
+    time->release();
     fps = (Fps *)fps->release();
     fps = (Fps *)fps->release();
 }
 }
 
 
-// nicht constant 
-void Render::setBildschirm( Bildschirm * bildschirm ) // setzt den Bildschirm
-{
-    this->bildschirm = bildschirm;
-}
-
 void Render::thread() // Render Schleife
 void Render::thread() // Render Schleife
 {
 {
     bool fpsAdd = 0;
     bool fpsAdd = 0;
@@ -45,38 +35,33 @@ void Render::thread() // Render Schleife
     int maxFPS = 0;
     int maxFPS = 0;
     while( !exit )
     while( !exit )
     {
     {
-        if( bildschirm )
+        if( Framework::getTastenStand( T_F1 ) )
         {
         {
-            if( Framework::getTastenStand( T_F1 ) )
+            if( !fpsAdd )
             {
             {
-                if( !fpsAdd )
-                {
-                    bildschirm->addMember( fps->getThis() );
-                    fpsAdd = 1;
-                }
+                uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( fps->getThis() ) );
+                fpsAdd = 1;
             }
             }
-            else
+        }
+        else
+        {
+            if( fpsAdd )
             {
             {
-                if( fpsAdd )
-                {
-                    bildschirm->removeMember( fps );
-                    fpsAdd = 0;
+                uiFactory.initParam.bildschirm->removeMember( fps );
+                fpsAdd = 0;
 
 
-                }
             }
             }
-            if( _render == 1 )
-            {
-                bildschirm->render();
-                bildschirm->tick( tickval );
-            }
-            else
-                Sleep( 100 );
-            bildschirm->lock();
-            maxFPS = userOptions->wertExistiert( "MaxFPS" ) ? *userOptions->zWert( "MaxFPS" ) : 30;
-            bildschirm->unlock();
+        }
+        if( _render == 1 )
+        {
+            uiFactory.initParam.bildschirm->render();
+            uiFactory.initParam.bildschirm->tick( tickval );
         }
         }
         else
         else
             Sleep( 100 );
             Sleep( 100 );
+        uiFactory.initParam.bildschirm->lock();
+        maxFPS = userOptions->wertExistiert( "MaxFPS" ) ? *userOptions->zWert( "MaxFPS" ) : 30;
+        uiFactory.initParam.bildschirm->unlock();
         ausgleich += 1.0 / maxFPS - tickval;
         ausgleich += 1.0 / maxFPS - tickval;
         if( ausgleich > 0 )
         if( ausgleich > 0 )
             Sleep( (int)( ausgleich * 1000 ) );
             Sleep( (int)( ausgleich * 1000 ) );
@@ -104,8 +89,8 @@ void Render::thread() // Render Schleife
             if( !inAnimation )
             if( !inAnimation )
             {
             {
                 deckAlpha = 250;
                 deckAlpha = 250;
-                bildschirm->setdeckFarbe( deckAlpha << 24 );
-                bildschirm->setOnTop( 1 );
+                uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
+                uiFactory.initParam.bildschirm->setOnTop( 1 );
                 vorLogin->setSichtbar( 1 );
                 vorLogin->setSichtbar( 1 );
                 inAnimation = 1;
                 inAnimation = 1;
                 aktion = 0;
                 aktion = 0;
@@ -143,10 +128,10 @@ void Render::thread() // Render Schleife
         if( inAnimation )
         if( inAnimation )
         {
         {
             deckAlpha -= 25;
             deckAlpha -= 25;
-            bildschirm->setdeckFarbe( deckAlpha << 24 );
+            uiFactory.initParam.bildschirm->setdeckFarbe( deckAlpha << 24 );
             if( deckAlpha == 0 )
             if( deckAlpha == 0 )
             {
             {
-                bildschirm->setOnTop( 0 );
+                uiFactory.initParam.bildschirm->setOnTop( 0 );
                 inAnimation = 0;
                 inAnimation = 0;
             }
             }
         }
         }
@@ -164,15 +149,4 @@ void Render::beenden() // exit = 1;
 {
 {
     exit = 1;
     exit = 1;
     WaitForSingleObject( threadHandle, 5000 );
     WaitForSingleObject( threadHandle, 5000 );
-}
-
-// constant
-Bildschirm *Render::getBildschirm() // gibt den Bildschirm zurück
-{
-    return bildschirm ? bildschirm->getThis() : 0;
-}
-
-Bildschirm *Render::zBildschirm()
-{
-    return bildschirm;
 }
 }

+ 14 - 19
KSGClient/Global/Render.h

@@ -12,27 +12,22 @@ using namespace Framework;
 class Render : public Thread
 class Render : public Thread
 {
 {
 private:
 private:
-	bool exit;
-	Bildschirm *bildschirm;
-	ZeitMesser *time;
-	double tickval;
-	Fps *fps;
-	unsigned char deckAlpha;
-	bool inAnimation;
+    bool exit;
+    ZeitMesser *time;
+    double tickval;
+    Fps *fps;
+    unsigned char deckAlpha;
+    bool inAnimation;
 
 
 public:
 public:
-	// Konstruktor 
-	Render( Schrift *schrift );
-	// Destruktor 
-	~Render();
-	// nicht constant 
-	void setBildschirm( Bildschirm *bildschirm ); // setzt den Bildschirm
-	virtual void thread(); // Render Schleife
-	void beginn(); // beginnt rendering
-	void beenden(); // exit = 1;
-	// constant
-	Bildschirm *getBildschirm(); // gibt den Bildschirm zurück
-	Bildschirm *zBildschirm();
+    // Konstruktor 
+    Render();
+    // Destruktor 
+    ~Render();
+    // nicht constant 
+    virtual void thread(); // Render Schleife
+    void beginn(); // beginnt rendering
+    void beenden(); // exit = 1;
 };
 };
 
 
 #endif
 #endif

+ 18 - 20
KSGClient/Global/Variablen.cpp

@@ -21,9 +21,9 @@ void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm )
     editorClient = 0;
     editorClient = 0;
     minigameClient = 0;
     minigameClient = 0;
     cmProcessor = 0;
     cmProcessor = 0;
-    hauptScreen = zBildschirm->getThis();
-    vorLogin = new VorLogin( zSchrift, zBildschirm );
-    nachLogin = new NachLogin( zSchrift, zBildschirm );
+    uiFactory = Framework::defaultUI( zSchrift, zBildschirm );
+    vorLogin = new VorLogin();
+    nachLogin = new NachLogin();
     Animation2DData *lad = new Animation2DData();
     Animation2DData *lad = new Animation2DData();
     LTDBDatei *ladd = new LTDBDatei();
     LTDBDatei *ladd = new LTDBDatei();
     ladd->setDatei( new Text( "data/bilder/ladeanimation.ltdb" ) );
     ladd->setDatei( new Text( "data/bilder/ladeanimation.ltdb" ) );
@@ -31,14 +31,14 @@ void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm )
     lad->setFPS( 30 );
     lad->setFPS( 30 );
     lad->setWiederhohlend( 1 );
     lad->setWiederhohlend( 1 );
     ladeAnimation = new Animation2D();
     ladeAnimation = new Animation2D();
-    ladeAnimation->setPosition( hauptScreen->getBackBufferSize() / 2 - Punkt( 25, 25 ) );
+    ladeAnimation->setPosition( zBildschirm->getBackBufferSize() / 2 - Punkt( 25, 25 ) );
     ladeAnimation->setSize( 50, 50 );
     ladeAnimation->setSize( 50, 50 );
     ladeAnimation->setAPS( 450 );
     ladeAnimation->setAPS( 450 );
     ladeAnimation->setAnimationDataZ( lad );
     ladeAnimation->setAnimationDataZ( lad );
     ladeAnimation->setRahmen( 1 );
     ladeAnimation->setRahmen( 1 );
     ladeAnimation->setRahmenBreite( 1 );
     ladeAnimation->setRahmenBreite( 1 );
     ladeAnimation->setRahmenFarbe( 0xFFFFFFFF );
     ladeAnimation->setRahmenFarbe( 0xFFFFFFFF );
-    zBildschirm->setOnTopZeichnung( ladeAnimation->getThis() );
+    zBildschirm->setOnTopZeichnung( dynamic_cast<Zeichnung *>( ladeAnimation->getThis() ) );
     bilder = new Bilder();
     bilder = new Bilder();
     updateH = new UpdateHandler();
     updateH = new UpdateHandler();
     keepAliveTh = new KeepAliveTh();
     keepAliveTh = new KeepAliveTh();
@@ -49,7 +49,7 @@ void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm )
         WMessageBox( 0, new Text( "Fehler" ), new Text( "Die DLL Datei 'data/bin/KSGNetwork.dll' konnte nicht geladen werden. Fallst diese Datei nicht existiert muss das Spiel neu Installiert werden." ), MB_ICONERROR );
         WMessageBox( 0, new Text( "Fehler" ), new Text( "Die DLL Datei 'data/bin/KSGNetwork.dll' konnte nicht geladen werden. Fallst diese Datei nicht existiert muss das Spiel neu Installiert werden." ), MB_ICONERROR );
         exit( 0 );
         exit( 0 );
     }
     }
-    KSGClient::KSGNetworkCreateRegisterdMain getMainClient = ( KSGClient::KSGNetworkCreateRegisterdMain )GetProcAddress( networkDLL, KSGNETWORK_CREATE_REGISTERD_MAIN );
+    KSGClient::KSGNetworkCreateRegisterdMain getMainClient = (KSGClient::KSGNetworkCreateRegisterdMain)GetProcAddress( networkDLL, KSGNETWORK_CREATE_REGISTERD_MAIN );
     if( !getMainClient )
     if( !getMainClient )
     {
     {
         WMessageBox( 0, new Text( "Fehler" ), new Text( "Der Einstiegspunkt '" KSGNETWORK_CREATE_REGISTERD_MAIN "' wurde in der DLL Datei 'data/bin/KSGNetwork.dll' nicht gefunden. Fallst dieses Problem weiterhin auftritt muss das Spiel neu Installiert werden." ), MB_ICONERROR );
         WMessageBox( 0, new Text( "Fehler" ), new Text( "Der Einstiegspunkt '" KSGNETWORK_CREATE_REGISTERD_MAIN "' wurde in der DLL Datei 'data/bin/KSGNetwork.dll' nicht gefunden. Fallst dieses Problem weiterhin auftritt muss das Spiel neu Installiert werden." ), MB_ICONERROR );
@@ -80,15 +80,15 @@ void releaseVariables()
     delete keepAliveTh;
     delete keepAliveTh;
     keepAliveTh = 0;
     keepAliveTh = 0;
     if( vorLogin )
     if( vorLogin )
-        vorLogin = vorLogin->release();
+        vorLogin = (VorLogin *)vorLogin->release();
     if( nachLogin )
     if( nachLogin )
         nachLogin = (NachLogin *)nachLogin->release();
         nachLogin = (NachLogin *)nachLogin->release();
     if( loginClient )
     if( loginClient )
-        loginClient = loginClient->release();
+        loginClient = (KSGClient::LoginServerClient *)loginClient->release();
     if( registerClient )
     if( registerClient )
-        registerClient = registerClient->release();
+        registerClient = (KSGClient::RegisterServerClient *)registerClient->release();
     if( infoClient )
     if( infoClient )
-        infoClient = infoClient->release();
+        infoClient = (KSGClient::InformationServerClient *)infoClient->release();
     if( chatClient )
     if( chatClient )
         chatClient->trenne( 1 );
         chatClient->trenne( 1 );
     if( cmProcessor )
     if( cmProcessor )
@@ -98,9 +98,9 @@ void releaseVariables()
         cmProcessor = (ChatMessageProcessor *)cmProcessor->release();
         cmProcessor = (ChatMessageProcessor *)cmProcessor->release();
     }
     }
     if( chatClient )
     if( chatClient )
-        chatClient = chatClient->release();
+        chatClient = (KSGClient::ChatServerClient *)chatClient->release();
     if( anmeldungClient )
     if( anmeldungClient )
-        anmeldungClient = anmeldungClient->release();
+        anmeldungClient = (KSGClient::AnmeldungServerClient *)anmeldungClient->release();
     if( spielClient )
     if( spielClient )
         spielClient->trenne();
         spielClient->trenne();
     if( smProcessor )
     if( smProcessor )
@@ -110,21 +110,19 @@ void releaseVariables()
         smProcessor = (SpielMessageProcessor *)smProcessor->release();
         smProcessor = (SpielMessageProcessor *)smProcessor->release();
     }
     }
     if( spielClient )
     if( spielClient )
-        spielClient = spielClient->release();
+        spielClient = (KSGClient::SpielServerClient *)spielClient->release();
     if( shopClient )
     if( shopClient )
-        shopClient = shopClient->release();
+        shopClient = (KSGClient::ShopServerClient *)shopClient->release();
     if( newsClient )
     if( newsClient )
-        newsClient = newsClient->release();
+        newsClient = (KSGClient::NewsServerClient *)newsClient->release();
     if( editorClient )
     if( editorClient )
-        editorClient = editorClient->release();
+        editorClient = (KSGClient::EditorServerClient *)editorClient->release();
     if( minigameClient )
     if( minigameClient )
-        minigameClient = minigameClient->release();
+        minigameClient = (KSGClient::MinigameServerClient *)minigameClient->release();
     if( ladeAnimation )
     if( ladeAnimation )
         ladeAnimation = (Animation2D *)ladeAnimation->release();
         ladeAnimation = (Animation2D *)ladeAnimation->release();
-    if( hauptScreen )
-        hauptScreen = hauptScreen->release();
     if( mainClient )
     if( mainClient )
-        mainClient = mainClient->release();
+        mainClient = (KSGClient::MainServerClient *)mainClient->release();
     KartenLeser::cleanUp();
     KartenLeser::cleanUp();
     if( bilder )
     if( bilder )
     {
     {

+ 6 - 4
KSGClient/Global/Variablen.h

@@ -6,14 +6,16 @@
 #endif
 #endif
 
 
 #include <KSGNetwork.h>
 #include <KSGNetwork.h>
+#include "Bilder.h"
+#include <DLLRegister.h>
+#include <Animation.h>
+#include <UIInitialization.h>
+
 #include "../Netzwerk/KeepAlive.h"
 #include "../Netzwerk/KeepAlive.h"
 #include "..\VorLogin\Login\Login.h"
 #include "..\VorLogin\Login\Login.h"
 #include "..\VorLogin\VorLogin.h"
 #include "..\VorLogin\VorLogin.h"
 #include "..\NachLogin\NachLogin.h"
 #include "..\NachLogin\NachLogin.h"
 #include "..\NachLogin\Update\Update.h"
 #include "..\NachLogin\Update\Update.h"
-#include "Bilder.h"
-#include <DLLRegister.h>
-#include <Animation.h>
 #include "../Netzwerk/ChatMessageProcessor.h"
 #include "../Netzwerk/ChatMessageProcessor.h"
 #include "../Netzwerk/SpielMessageProcessor.h"
 #include "../Netzwerk/SpielMessageProcessor.h"
 
 
@@ -35,12 +37,12 @@ variable VorLogin *vorLogin;
 variable NachLogin *nachLogin;
 variable NachLogin *nachLogin;
 variable int aktion;
 variable int aktion;
 variable Framework::Animation2D *ladeAnimation;
 variable Framework::Animation2D *ladeAnimation;
-variable Bildschirm *hauptScreen;
 variable Bilder *bilder;
 variable Bilder *bilder;
 variable UpdateHandler *updateH;
 variable UpdateHandler *updateH;
 variable bool _render;
 variable bool _render;
 variable KeepAliveTh *keepAliveTh;
 variable KeepAliveTh *keepAliveTh;
 variable InitDatei *userOptions;
 variable InitDatei *userOptions;
+variable UIInit uiFactory;
 
 
 void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm );
 void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm );
 void releaseVariables();
 void releaseVariables();

+ 4 - 20
KSGClient/Leser/KartenLeser.cpp

@@ -10,7 +10,7 @@ KartenLeser *KartenLeser::instance = new KartenLeser();
 
 
 KartenLeser *KartenLeser::getInstance()
 KartenLeser *KartenLeser::getInstance()
 {
 {
-    return instance->getThis();
+    return dynamic_cast<KartenLeser *>( instance->getThis() );
 }
 }
 
 
 void KartenLeser::cleanUp()
 void KartenLeser::cleanUp()
@@ -26,18 +26,17 @@ KartenLeser &KartenLeser::operator=( const KartenLeser &l )
     letzterFehler = new Text( l.letzterFehler->getText() );
     letzterFehler = new Text( l.letzterFehler->getText() );
     kartenClient = 0;
     kartenClient = 0;
     karteId = 0;
     karteId = 0;
-    ref = 1;
     return *this;
     return *this;
 }
 }
 
 
 // Inhalt der KartenLeser Klasse aus KartenLeser.h
 // Inhalt der KartenLeser Klasse aus KartenLeser.h
 // Konstruktor
 // Konstruktor
 KartenLeser::KartenLeser()
 KartenLeser::KartenLeser()
+    : ReferenceCounter()
 {
 {
     letzterFehler = new Text( "" );
     letzterFehler = new Text( "" );
     kartenClient = 0;
     kartenClient = 0;
     karteId = 0;
     karteId = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -70,7 +69,7 @@ void KartenLeser::unlock()
 }
 }
 
 
 // constant
 // constant
-Bild *KartenLeser::getKartenTitelBild( Schrift *zSchrift )
+Bild *KartenLeser::getKartenTitelBild()
 {
 {
     bool ok = 1;
     bool ok = 1;
     int port = 0;
     int port = 0;
@@ -103,7 +102,7 @@ Bild *KartenLeser::getKartenTitelBild( Schrift *zSchrift )
     {
     {
         ret = new Bild();
         ret = new Bild();
         ret->neuBild( 200, 100, 0xFF000000 );
         ret->neuBild( 200, 100, 0xFF000000 );
-        TextRenderer tr( zSchrift->getThis() );
+        TextRenderer tr( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
         tr.setSchriftSize( 12 );
         tr.setSchriftSize( 12 );
         Text *kn = getKarteName();
         Text *kn = getKarteName();
         tr.renderText( 10, 10, kn->getText(), *ret, 0xFFFFFFFF );
         tr.renderText( 10, 10, kn->getText(), *ret, 0xFFFFFFFF );
@@ -277,19 +276,4 @@ Text *KartenLeser::getKartePfad() const
 char *KartenLeser::getLetzterFehler() const
 char *KartenLeser::getLetzterFehler() const
 {
 {
     return letzterFehler->getText();
     return letzterFehler->getText();
-}
-
-// Reference Counting
-KartenLeser *KartenLeser::getThis()
-{
-    ref++;
-    return this;
-}
-
-KartenLeser *KartenLeser::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }
 }

+ 18 - 22
KSGClient/Leser/KartenLeser.h

@@ -8,14 +8,13 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class KartenLeser
+class KartenLeser : public virtual ReferenceCounter
 {
 {
 private:
 private:
     Text *letzterFehler;
     Text *letzterFehler;
     KSGClient::KartenServerClient *kartenClient;
     KSGClient::KartenServerClient *kartenClient;
-	int karteId;
+    int karteId;
     Critical cs;
     Critical cs;
-	int ref;
 
 
     static KartenLeser *instance;
     static KartenLeser *instance;
     // Konstruktor
     // Konstruktor
@@ -26,27 +25,24 @@ public:
     static KartenLeser *getInstance();
     static KartenLeser *getInstance();
     static void cleanUp();
     static void cleanUp();
 
 
-	// Destruktor
-	~KartenLeser();
-	// nicht constant
-	void setKarteId( int karteId );
+    // Destruktor
+    ~KartenLeser();
+    // nicht constant
+    void setKarteId( int karteId );
     void lock();
     void lock();
     void unlock();
     void unlock();
-	// constant
-	Bild *getKartenTitelBild( Schrift *zSchrift );
-	Bild *getKartenVorschauBild();
-	Bild *getLadeBild();
-	bool getKartenBeschreibung();
-	int getSpielId() const;
-	int getKarteId() const;
-	Text *getSpielName() const;
-	Text *getSpielPfad() const;
-	Text *getKarteName() const;
-	Text *getKartePfad() const;
-	char *getLetzterFehler() const;
-	// Reference Counting
-	KartenLeser *getThis();
-	KartenLeser *release();
+    // constant
+    Bild *getKartenTitelBild();
+    Bild *getKartenVorschauBild();
+    Bild *getLadeBild();
+    bool getKartenBeschreibung();
+    int getSpielId() const;
+    int getKarteId() const;
+    Text *getSpielName() const;
+    Text *getSpielPfad() const;
+    Text *getKarteName() const;
+    Text *getKartePfad() const;
+    char *getLetzterFehler() const;
 };
 };
 
 
 #endif
 #endif

+ 601 - 596
KSGClient/NachLogin/Account/AccountAnsehen.cpp

@@ -7,640 +7,645 @@
 
 
 // inhalt der AccountAnsehen Klasse aus AccountAnsehen.h
 // inhalt der AccountAnsehen Klasse aus AccountAnsehen.h
 // Konstruktor
 // Konstruktor
-AccountAnsehen::AccountAnsehen( Schrift *zSchrift, Fenster *zNachLoginFenster, int x )
-	: Zeichnung(),
-  laden( (Animation2D*)ladeAnimation->dublizieren() ),
-  bildschirmGröße( hauptScreen->getBackBufferSize() ),
-  rahmen( new LRahmen() ),
-  aktivitätK( initKnopf( 145, 10, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Spieler Aktivität" ) ),
-  historieK( initKnopf( 665, 10, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Spiel Historie" ) ),
-  spieleUndKartenK( initKnopf( 275, 10, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Spiele / Karten" ) ),
-  spielPartnerK( initKnopf( 405, 10, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Spielpartner" ) ),
-  statistikK( initKnopf( 535, 10, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Spiel Statistik" ) ),
-  suchenK( initKnopf( 15, 10, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Spieler suchen" ) ),
-  suche( new AccountSuchen( zSchrift->getThis() ) ),
-  aktivität( new AccountAktivität( zSchrift ) ),
-  spieleUndKarten( new AccountSpieleUndKarten( zSchrift ) ),
-  partner( new AccountSpielPartner( zSchrift ) ),
-  statistik( new AccountStatistik( zSchrift ) ),
-  historie( new AccountHistorie( zSchrift ) ),
-  account( 0 ),
-  alpha( 0 ),
-  alpha2( 255 ),
-  sichtbar( 0 ),
-  jetzt( 0 ),
-  nachher( 0 ),
-  prozent1( 0 ),
-  prozent2( 0 ),
-  tickVal( 0 ),
-  animation( 0 ),
-  knopfX( 810 ),
-  rend( 0 )
+AccountAnsehen::AccountAnsehen( Fenster *zNachLoginFenster, int x )
+    : Zeichnung(),
+    laden( (Animation2D *)ladeAnimation->dublizieren() ),
+    bildschirmGröße( uiFactory.initParam.bildschirm->getBackBufferSize() ),
+    rahmen( new LRahmen() ),
+    aktivitätK( initKnopf( 145, 10, 120, 20, Knopf::Style::Sichtbar, "Spieler Aktivität" ) ),
+    historieK( initKnopf( 665, 10, 120, 20, Knopf::Style::Sichtbar, "Spiel Historie" ) ),
+    spieleUndKartenK( initKnopf( 275, 10, 120, 20, Knopf::Style::Sichtbar, "Spiele / Karten" ) ),
+    spielPartnerK( initKnopf( 405, 10, 120, 20, Knopf::Style::Sichtbar, "Spielpartner" ) ),
+    statistikK( initKnopf( 535, 10, 120, 20, Knopf::Style::Sichtbar, "Spiel Statistik" ) ),
+    suchenK( initKnopf( 15, 10, 120, 20, Knopf::Style::Sichtbar, "Spieler suchen" ) ),
+    suche( new AccountSuchen() ),
+    aktivität( new AccountAktivität() ),
+    spieleUndKarten( new AccountSpieleUndKarten() ),
+    partner( new AccountSpielPartner() ),
+    statistik( new AccountStatistik() ),
+    historie( new AccountHistorie() ),
+    account( 0 ),
+    alpha( 0 ),
+    alpha2( 255 ),
+    sichtbar( 0 ),
+    jetzt( 0 ),
+    nachher( 0 ),
+    prozent1( 0 ),
+    prozent2( 0 ),
+    tickVal( 0 ),
+    animation( 0 ),
+    knopfX( 810 ),
+    rend( 0 )
 {
 {
-	laden->setSichtbar( 0 );
-	rahmen->setFarbe( 0xFFFFFFFF );
-	rahmen->setSize( 102, 32 );
-	begPos = Punkt( x, 67 );
-	begGröße = Punkt( 102, 32 );
-	pos = Punkt( x, 67 );
-	gr = Punkt( 102, 32 );
-	pos1 = begPos;
-	größe1 = begGröße;
-	größe2 = Punkt( 800, 500 );
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	laden->setPosition( 375, 225 );
-	zNachLoginFenster->addMember( getThis() );
+    laden->setSichtbar( 0 );
+    rahmen->setFarbe( 0xFFFFFFFF );
+    rahmen->setSize( 102, 32 );
+    begPos = Punkt( x, 67 );
+    begGröße = Punkt( 102, 32 );
+    pos = Punkt( x, 67 );
+    gr = Punkt( 102, 32 );
+    pos1 = begPos;
+    größe1 = begGröße;
+    größe2 = Punkt( 800, 500 );
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    laden->setPosition( 375, 225 );
+    getThis();
+    zNachLoginFenster->addMember( this );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountAnsehen::~AccountAnsehen()
 AccountAnsehen::~AccountAnsehen()
 {
 {
-	laden->release();
-	rahmen->release();
-	aktivitätK->release();
-	historieK->release();
-	spieleUndKartenK->release();
-	spielPartnerK->release();
-	statistikK->release();
-	suchenK->release();
-	suche->release();
-	aktivität->release();
-	spieleUndKarten->release();
-	partner->release();
-	statistik->release();
-	historie->release();
+    suche->warteAufThread( 10000 );
+    suche->ende();
+    aktivität->warteAufThread( 10000 );
+    aktivität->ende();
+    laden->release();
+    rahmen->release();
+    aktivitätK->release();
+    historieK->release();
+    spieleUndKartenK->release();
+    spielPartnerK->release();
+    statistikK->release();
+    suchenK->release();
+    suche->release();
+    aktivität->release();
+    spieleUndKarten->release();
+    partner->release();
+    statistik->release();
+    historie->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountAnsehen::setSichtbar( bool sicht )
 void AccountAnsehen::setSichtbar( bool sicht )
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	animation |= ( sicht ? 0x1 : 0x2 );
-	rend = 1;
+    begPos = pos;
+    begGröße = gr;
+    animation |= ( sicht ? 0x1 : 0x2 );
+    rend = 1;
 }
 }
 
 
 bool AccountAnsehen::setSpielerDetails( int account, int nachher )
 bool AccountAnsehen::setSpielerDetails( int account, int nachher )
 {
 {
-	if( laden->istSichtbar() )
-		return 0;
-	laden->setSichtbar( 1 );
-	if( nachher == 2 )
-		aktivität->ladeStatistik( account );
-	if( nachher == 3 )
-		spieleUndKarten->ladeStatistik( account );
-	if( nachher == 4 )
-		partner->ladeStatistik( account );
-	if( nachher == 5 )
-		statistik->ladeStatistik( account );
-	if( nachher == 6 )
-		historie->ladeStatistik( account );
-	this->nachher = nachher;
-	this->account = account;
-	return 1;
+    if( laden->istSichtbar() )
+        return 0;
+    laden->setSichtbar( 1 );
+    if( nachher == 2 )
+        aktivität->ladeStatistik( account );
+    if( nachher == 3 )
+        spieleUndKarten->ladeStatistik( account );
+    if( nachher == 4 )
+        partner->ladeStatistik( account );
+    if( nachher == 5 )
+        statistik->ladeStatistik( account );
+    if( nachher == 6 )
+        historie->ladeStatistik( account );
+    this->nachher = nachher;
+    this->account = account;
+    return 1;
 }
 }
 
 
 bool AccountAnsehen::tick( double tickVal )
 bool AccountAnsehen::tick( double tickVal )
 {
 {
-	if( !knopfX )
-	{
-		rend |= aktivitätK->tick( tickVal );
-		rend |= historieK->tick( tickVal );
-		rend |= spieleUndKartenK->tick( tickVal );
-		rend |= spielPartnerK->tick( tickVal );
-		rend |= statistikK->tick( tickVal );
-		rend |= suchenK->tick( tickVal );
-	}
-	rend |= laden->tick( tickVal );
-	rend |= suche->tick( tickVal );
-	rend |= aktivität->tick( tickVal );
-	rend |= spieleUndKarten->tick( tickVal );
-	rend |= partner->tick( tickVal );
-	rend |= statistik->tick( tickVal );
-	rend |= historie->tick( tickVal );
-	this->tickVal += tickVal;
-	int val = (int)( this->tickVal * 150 );
-	int val2 = (int)( this->tickVal * 500 );
-	this->tickVal -= val / 150.0;
-	if( val )
-	{
-		if( ( animation | 0x1 ) == animation ) // Einblenden
-		{
-			if( prozent1 != 100 )
-			{
-				prozent1 += val;
-				if( prozent1 >= 100 )
-				{
-					prozent1 = 100;
-					if( !jetzt && !nachher )
-						setSpielerDetails( loginClient->getAccountId(), 2 );
-				}
-				pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
-				gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
-			}
-			else if( alpha != 255 )
-			{
-				alpha += val * 2;
-				if( alpha >= 255 || ( animation | 0x2 ) == animation )
-				{
-					alpha = 255;
-					animation &= ~0x1;
-					sichtbar = 1;
-					prozent1 = 0;
-				}
-			}
-			rend = 1;
-		}
-		if( ( animation | 0x2 ) == animation ) // ausblenden
-		{
-			if( alpha != 0 )
-			{
-				alpha -= val * 2;
-				if( alpha < 0 )
-					alpha = 0;
-			}
-			else
-			{
-				prozent2 += val;
-				if( prozent2 > 100 )
-					prozent2 = 100;
-				pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
-				gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
-				if( prozent2 == 100 )
-				{
-					prozent2 = 0;
-					animation &= ~0x2;
-					sichtbar = 0;
-				}
-			}
-			rend = 1;
-		}
-		if( laden->istSichtbar() && alpha2 != 100 )
-		{
-			if( alpha2 - val <= 100 )
-				alpha2 = 100;
-			else
-				alpha2 -= val;
-			rend = 1;
-		}
-		if( !laden->istSichtbar() && alpha2 != 255 )
-		{
-			if( alpha2 + val >= 255 )
-				alpha2 = 255;
-			else
-				alpha2 += val;
-			rend = 1;
-		}
-	}
-	if( val2 )
-	{
-		if( jetzt > 1 && !laden->istSichtbar() && knopfX != 0 )
-		{
-			if( knopfX - val2 < 0 )
-				knopfX = 0;
-			else
-				knopfX -= val2;
-			rend = 1;
-		}
-		if( jetzt < 2 && !laden->istSichtbar() && knopfX != 810 )
-		{
-			if( knopfX + val2 > 810 )
-				knopfX = 810;
-			else
-				knopfX += val2;
-			rend = 1;
-		}
-	}
-	switch( nachher )
-	{
-	case 2:
-		if( aktivität->getStatus() == 2 )
-		{
-			switch( jetzt )
-			{
-			case 0:
-				aktivität->setSichtbar( 1, 0 );
-				break;
-			case 1:
-				suchenK->setAlphaFeldStrength( -5 );
-				suchenK->setAlphaFeldFarbe( 0x5500FF00 );
-				suche->setSichtbar( 0 );
-				aktivität->setSichtbar( 1, 0 );
-				break;
-			case 3:
-				spieleUndKartenK->setAlphaFeldStrength( -5 );
-				spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
-				spieleUndKarten->setSichtbar( 0, 1 );
-				aktivität->setSichtbar( 1, 1 );
-				break;
-			case 4:
-				spielPartnerK->setAlphaFeldStrength( -5 );
-				spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
-				partner->setSichtbar( 0, 1 );
-				aktivität->setSichtbar( 1, 1 );
-				break;
-			case 5:
-				statistikK->setAlphaFeldStrength( -5 );
-				statistikK->setAlphaFeldFarbe( 0x5500FF00 );
-				statistik->setSichtbar( 0, 1 );
-				aktivität->setSichtbar( 1, 1 );
-				break;
-			case 6:
-				historieK->setAlphaFeldStrength( -5 );
-				historieK->setAlphaFeldFarbe( 0x5500FF00 );
-				historie->setSichtbar( 0, 1 );
-				aktivität->setSichtbar( 1, 1 );
-				break;
-			}
-			aktivitätK->setAlphaFeldStrength( -2 );
-			aktivitätK->setAlphaFeldFarbe( 0x3000FF00 );
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		if( !aktivität->getStatus() )
-		{
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		break;
-	case 3:
-		if( spieleUndKarten->getStatus() == 2 )
-		{
-			switch( jetzt )
-			{
-			case 0:
-				spieleUndKarten->setSichtbar( 1, 0 );
-				break;
-			case 1:
-				suchenK->setAlphaFeldStrength( -5 );
-				suchenK->setAlphaFeldFarbe( 0x5500FF00 );
-				suche->setSichtbar( 0 );
-				spieleUndKarten->setSichtbar( 1, 0 );
-				break;
-			case 2:
-				aktivitätK->setAlphaFeldStrength( -5 );
-				aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
-				aktivität->setSichtbar( 0, 0 );
-				spieleUndKarten->setSichtbar( 1, 0 );
-				break;
-			case 4:
-				spielPartnerK->setAlphaFeldStrength( -5 );
-				spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
-				partner->setSichtbar( 0, 1 );
-				spieleUndKarten->setSichtbar( 1, 1 );
-				break;
-			case 5:
-				statistikK->setAlphaFeldStrength( -5 );
-				statistikK->setAlphaFeldFarbe( 0x5500FF00 );
-				statistik->setSichtbar( 0, 1 );
-				spieleUndKarten->setSichtbar( 1, 1 );
-				break;
-			case 6:
-				historieK->setAlphaFeldStrength( -5 );
-				historieK->setAlphaFeldFarbe( 0x5500FF00 );
-				historie->setSichtbar( 0, 1 );
-				spieleUndKarten->setSichtbar( 1, 1 );
-				break;
-			}
-			spieleUndKartenK->setAlphaFeldStrength( -2 );
-			spieleUndKartenK->setAlphaFeldFarbe( 0x3000FF00 );
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		if( !spieleUndKarten->getStatus() )
-		{
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		break;
-	case 4:
-		if( partner->getStatus() == 2 )
-		{
-			switch( jetzt )
-			{
-			case 0:
-				partner->setSichtbar( 1, 0 );
-				break;
-			case 1:
-				suchenK->setAlphaFeldStrength( -5 );
-				suchenK->setAlphaFeldFarbe( 0x5500FF00 );
-				suche->setSichtbar( 0 );
-				partner->setSichtbar( 1, 0 );
-				break;
-			case 2:
-				aktivitätK->setAlphaFeldStrength( -5 );
-				aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
-				aktivität->setSichtbar( 0, 0 );
-				partner->setSichtbar( 1, 0 );
-				break;
-			case 3:
-				spieleUndKartenK->setAlphaFeldStrength( -5 );
-				spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
-				spieleUndKarten->setSichtbar( 0, 0 );
-				partner->setSichtbar( 1, 0 );
-				break;
-			case 5:
-				statistikK->setAlphaFeldStrength( -5 );
-				statistikK->setAlphaFeldFarbe( 0x5500FF00 );
-				statistik->setSichtbar( 0, 1 );
-				partner->setSichtbar( 1, 1 );
-				break;
-			case 6:
-				historieK->setAlphaFeldStrength( -5 );
-				historieK->setAlphaFeldFarbe( 0x5500FF00 );
-				historie->setSichtbar( 0, 1 );
-				partner->setSichtbar( 1, 1 );
-				break;
-			}
-			spielPartnerK->setAlphaFeldStrength( -2 );
-			spielPartnerK->setAlphaFeldFarbe( 0x3000FF00 );
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		if( !partner->getStatus() )
-		{
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		break;
-	case 5:
-		if( statistik->getStatus() == 2 )
-		{
-			switch( jetzt )
-			{
-			case 0:
-				statistik->setSichtbar( 1, 0 );
-				break;
-			case 1:
-				suchenK->setAlphaFeldStrength( -5 );
-				suchenK->setAlphaFeldFarbe( 0x5500FF00 );
-				suche->setSichtbar( 0 );
-				statistik->setSichtbar( 1, 0 );
-				break;
-			case 2:
-				aktivitätK->setAlphaFeldStrength( -5 );
-				aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
-				aktivität->setSichtbar( 0, 0 );
-				statistik->setSichtbar( 1, 0 );
-				break;
-			case 3:
-				spieleUndKartenK->setAlphaFeldStrength( -5 );
-				spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
-				spieleUndKarten->setSichtbar( 0, 0 );
-				statistik->setSichtbar( 1, 0 );
-				break;
-			case 4:
-				spielPartnerK->setAlphaFeldStrength( -5 );
-				spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
-				partner->setSichtbar( 0, 0 );
-				statistik->setSichtbar( 1, 0 );
-				break;
-			case 6:
-				historieK->setAlphaFeldStrength( -5 );
-				historieK->setAlphaFeldFarbe( 0x5500FF00 );
-				historie->setSichtbar( 0, 1 );
-				statistik->setSichtbar( 1, 1 );
-				break;
-			}
-			statistikK->setAlphaFeldStrength( -2 );
-			statistikK->setAlphaFeldFarbe( 0x3000FF00 );
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		if( !statistik->getStatus() )
-		{
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		break;
-	case 6:
-		if( historie->getStatus() == 2 )
-		{
-			switch( jetzt )
-			{
-			case 0:
-				historie->setSichtbar( 1, 0 );
-				break;
-			case 1:
-				suchenK->setAlphaFeldStrength( -5 );
-				suchenK->setAlphaFeldFarbe( 0x5500FF00 );
-				suche->setSichtbar( 0 );
-				historie->setSichtbar( 1, 0 );
-				break;
-			case 2:
-				aktivitätK->setAlphaFeldStrength( -5 );
-				aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
-				aktivität->setSichtbar( 0, 0 );
-				historie->setSichtbar( 1, 0 );
-				break;
-			case 3:
-				spieleUndKartenK->setAlphaFeldStrength( -5 );
-				spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
-				spieleUndKarten->setSichtbar( 0, 0 );
-				historie->setSichtbar( 1, 0 );
-				break;
-			case 4:
-				spielPartnerK->setAlphaFeldStrength( -5 );
-				spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
-				partner->setSichtbar( 0, 0 );
-				historie->setSichtbar( 1, 0 );
-				break;
-			case 5:
-				statistikK->setAlphaFeldStrength( -5 );
-				statistikK->setAlphaFeldFarbe( 0x5500FF00 );
-				statistik->setSichtbar( 0, 0 );
-				historie->setSichtbar( 1, 0 );
-				break;
-			}
-			historieK->setAlphaFeldStrength( -2 );
-			historieK->setAlphaFeldFarbe( 0x3000FF00 );
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		if( !historie->getStatus() )
-		{
-			laden->setSichtbar( 0 );
-			jetzt = nachher;
-			nachher = 0;
-		}
-		break;
-	}
-	int tmp = suche->getAuswahlAccountId();
-	if( tmp )
-		setSpielerDetails( tmp, 2 );
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    if( !knopfX )
+    {
+        rend |= aktivitätK->tick( tickVal );
+        rend |= historieK->tick( tickVal );
+        rend |= spieleUndKartenK->tick( tickVal );
+        rend |= spielPartnerK->tick( tickVal );
+        rend |= statistikK->tick( tickVal );
+        rend |= suchenK->tick( tickVal );
+    }
+    rend |= laden->tick( tickVal );
+    rend |= suche->tick( tickVal );
+    rend |= aktivität->tick( tickVal );
+    rend |= spieleUndKarten->tick( tickVal );
+    rend |= partner->tick( tickVal );
+    rend |= statistik->tick( tickVal );
+    rend |= historie->tick( tickVal );
+    this->tickVal += tickVal;
+    int val = (int)( this->tickVal * 150 );
+    int val2 = (int)( this->tickVal * 500 );
+    this->tickVal -= val / 150.0;
+    if( val )
+    {
+        if( ( animation | 0x1 ) == animation ) // Einblenden
+        {
+            if( prozent1 != 100 )
+            {
+                prozent1 += val;
+                if( prozent1 >= 100 )
+                {
+                    prozent1 = 100;
+                    if( !jetzt && !nachher )
+                        setSpielerDetails( loginClient->getAccountId(), 2 );
+                }
+                pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
+                gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
+            }
+            else if( alpha != 255 )
+            {
+                alpha += val * 2;
+                if( alpha >= 255 || ( animation | 0x2 ) == animation )
+                {
+                    alpha = 255;
+                    animation &= ~0x1;
+                    sichtbar = 1;
+                    prozent1 = 0;
+                }
+            }
+            rend = 1;
+        }
+        if( ( animation | 0x2 ) == animation ) // ausblenden
+        {
+            if( alpha != 0 )
+            {
+                alpha -= val * 2;
+                if( alpha < 0 )
+                    alpha = 0;
+            }
+            else
+            {
+                prozent2 += val;
+                if( prozent2 > 100 )
+                    prozent2 = 100;
+                pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
+                gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
+                if( prozent2 == 100 )
+                {
+                    prozent2 = 0;
+                    animation &= ~0x2;
+                    sichtbar = 0;
+                }
+            }
+            rend = 1;
+        }
+        if( laden->istSichtbar() && alpha2 != 100 )
+        {
+            if( alpha2 - val <= 100 )
+                alpha2 = 100;
+            else
+                alpha2 -= val;
+            rend = 1;
+        }
+        if( !laden->istSichtbar() && alpha2 != 255 )
+        {
+            if( alpha2 + val >= 255 )
+                alpha2 = 255;
+            else
+                alpha2 += val;
+            rend = 1;
+        }
+    }
+    if( val2 )
+    {
+        if( jetzt > 1 && !laden->istSichtbar() && knopfX != 0 )
+        {
+            if( knopfX - val2 < 0 )
+                knopfX = 0;
+            else
+                knopfX -= val2;
+            rend = 1;
+        }
+        if( jetzt < 2 && !laden->istSichtbar() && knopfX != 810 )
+        {
+            if( knopfX + val2 > 810 )
+                knopfX = 810;
+            else
+                knopfX += val2;
+            rend = 1;
+        }
+    }
+    switch( nachher )
+    {
+    case 2:
+        if( aktivität->getStatus() == 2 )
+        {
+            switch( jetzt )
+            {
+            case 0:
+                aktivität->setSichtbar( 1, 0 );
+                break;
+            case 1:
+                suchenK->setAlphaFeldStrength( -5 );
+                suchenK->setAlphaFeldFarbe( 0x5500FF00 );
+                suche->setSichtbar( 0 );
+                aktivität->setSichtbar( 1, 0 );
+                break;
+            case 3:
+                spieleUndKartenK->setAlphaFeldStrength( -5 );
+                spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
+                spieleUndKarten->setSichtbar( 0, 1 );
+                aktivität->setSichtbar( 1, 1 );
+                break;
+            case 4:
+                spielPartnerK->setAlphaFeldStrength( -5 );
+                spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
+                partner->setSichtbar( 0, 1 );
+                aktivität->setSichtbar( 1, 1 );
+                break;
+            case 5:
+                statistikK->setAlphaFeldStrength( -5 );
+                statistikK->setAlphaFeldFarbe( 0x5500FF00 );
+                statistik->setSichtbar( 0, 1 );
+                aktivität->setSichtbar( 1, 1 );
+                break;
+            case 6:
+                historieK->setAlphaFeldStrength( -5 );
+                historieK->setAlphaFeldFarbe( 0x5500FF00 );
+                historie->setSichtbar( 0, 1 );
+                aktivität->setSichtbar( 1, 1 );
+                break;
+            }
+            aktivitätK->setAlphaFeldStrength( -2 );
+            aktivitätK->setAlphaFeldFarbe( 0x3000FF00 );
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        if( !aktivität->getStatus() )
+        {
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        break;
+    case 3:
+        if( spieleUndKarten->getStatus() == 2 )
+        {
+            switch( jetzt )
+            {
+            case 0:
+                spieleUndKarten->setSichtbar( 1, 0 );
+                break;
+            case 1:
+                suchenK->setAlphaFeldStrength( -5 );
+                suchenK->setAlphaFeldFarbe( 0x5500FF00 );
+                suche->setSichtbar( 0 );
+                spieleUndKarten->setSichtbar( 1, 0 );
+                break;
+            case 2:
+                aktivitätK->setAlphaFeldStrength( -5 );
+                aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
+                aktivität->setSichtbar( 0, 0 );
+                spieleUndKarten->setSichtbar( 1, 0 );
+                break;
+            case 4:
+                spielPartnerK->setAlphaFeldStrength( -5 );
+                spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
+                partner->setSichtbar( 0, 1 );
+                spieleUndKarten->setSichtbar( 1, 1 );
+                break;
+            case 5:
+                statistikK->setAlphaFeldStrength( -5 );
+                statistikK->setAlphaFeldFarbe( 0x5500FF00 );
+                statistik->setSichtbar( 0, 1 );
+                spieleUndKarten->setSichtbar( 1, 1 );
+                break;
+            case 6:
+                historieK->setAlphaFeldStrength( -5 );
+                historieK->setAlphaFeldFarbe( 0x5500FF00 );
+                historie->setSichtbar( 0, 1 );
+                spieleUndKarten->setSichtbar( 1, 1 );
+                break;
+            }
+            spieleUndKartenK->setAlphaFeldStrength( -2 );
+            spieleUndKartenK->setAlphaFeldFarbe( 0x3000FF00 );
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        if( !spieleUndKarten->getStatus() )
+        {
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        break;
+    case 4:
+        if( partner->getStatus() == 2 )
+        {
+            switch( jetzt )
+            {
+            case 0:
+                partner->setSichtbar( 1, 0 );
+                break;
+            case 1:
+                suchenK->setAlphaFeldStrength( -5 );
+                suchenK->setAlphaFeldFarbe( 0x5500FF00 );
+                suche->setSichtbar( 0 );
+                partner->setSichtbar( 1, 0 );
+                break;
+            case 2:
+                aktivitätK->setAlphaFeldStrength( -5 );
+                aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
+                aktivität->setSichtbar( 0, 0 );
+                partner->setSichtbar( 1, 0 );
+                break;
+            case 3:
+                spieleUndKartenK->setAlphaFeldStrength( -5 );
+                spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
+                spieleUndKarten->setSichtbar( 0, 0 );
+                partner->setSichtbar( 1, 0 );
+                break;
+            case 5:
+                statistikK->setAlphaFeldStrength( -5 );
+                statistikK->setAlphaFeldFarbe( 0x5500FF00 );
+                statistik->setSichtbar( 0, 1 );
+                partner->setSichtbar( 1, 1 );
+                break;
+            case 6:
+                historieK->setAlphaFeldStrength( -5 );
+                historieK->setAlphaFeldFarbe( 0x5500FF00 );
+                historie->setSichtbar( 0, 1 );
+                partner->setSichtbar( 1, 1 );
+                break;
+            }
+            spielPartnerK->setAlphaFeldStrength( -2 );
+            spielPartnerK->setAlphaFeldFarbe( 0x3000FF00 );
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        if( !partner->getStatus() )
+        {
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        break;
+    case 5:
+        if( statistik->getStatus() == 2 )
+        {
+            switch( jetzt )
+            {
+            case 0:
+                statistik->setSichtbar( 1, 0 );
+                break;
+            case 1:
+                suchenK->setAlphaFeldStrength( -5 );
+                suchenK->setAlphaFeldFarbe( 0x5500FF00 );
+                suche->setSichtbar( 0 );
+                statistik->setSichtbar( 1, 0 );
+                break;
+            case 2:
+                aktivitätK->setAlphaFeldStrength( -5 );
+                aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
+                aktivität->setSichtbar( 0, 0 );
+                statistik->setSichtbar( 1, 0 );
+                break;
+            case 3:
+                spieleUndKartenK->setAlphaFeldStrength( -5 );
+                spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
+                spieleUndKarten->setSichtbar( 0, 0 );
+                statistik->setSichtbar( 1, 0 );
+                break;
+            case 4:
+                spielPartnerK->setAlphaFeldStrength( -5 );
+                spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
+                partner->setSichtbar( 0, 0 );
+                statistik->setSichtbar( 1, 0 );
+                break;
+            case 6:
+                historieK->setAlphaFeldStrength( -5 );
+                historieK->setAlphaFeldFarbe( 0x5500FF00 );
+                historie->setSichtbar( 0, 1 );
+                statistik->setSichtbar( 1, 1 );
+                break;
+            }
+            statistikK->setAlphaFeldStrength( -2 );
+            statistikK->setAlphaFeldFarbe( 0x3000FF00 );
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        if( !statistik->getStatus() )
+        {
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        break;
+    case 6:
+        if( historie->getStatus() == 2 )
+        {
+            switch( jetzt )
+            {
+            case 0:
+                historie->setSichtbar( 1, 0 );
+                break;
+            case 1:
+                suchenK->setAlphaFeldStrength( -5 );
+                suchenK->setAlphaFeldFarbe( 0x5500FF00 );
+                suche->setSichtbar( 0 );
+                historie->setSichtbar( 1, 0 );
+                break;
+            case 2:
+                aktivitätK->setAlphaFeldStrength( -5 );
+                aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
+                aktivität->setSichtbar( 0, 0 );
+                historie->setSichtbar( 1, 0 );
+                break;
+            case 3:
+                spieleUndKartenK->setAlphaFeldStrength( -5 );
+                spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
+                spieleUndKarten->setSichtbar( 0, 0 );
+                historie->setSichtbar( 1, 0 );
+                break;
+            case 4:
+                spielPartnerK->setAlphaFeldStrength( -5 );
+                spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
+                partner->setSichtbar( 0, 0 );
+                historie->setSichtbar( 1, 0 );
+                break;
+            case 5:
+                statistikK->setAlphaFeldStrength( -5 );
+                statistikK->setAlphaFeldFarbe( 0x5500FF00 );
+                statistik->setSichtbar( 0, 0 );
+                historie->setSichtbar( 1, 0 );
+                break;
+            }
+            historieK->setAlphaFeldStrength( -2 );
+            historieK->setAlphaFeldFarbe( 0x3000FF00 );
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        if( !historie->getStatus() )
+        {
+            laden->setSichtbar( 0 );
+            jetzt = nachher;
+            nachher = 0;
+        }
+        break;
+    }
+    int tmp = suche->getAuswahlAccountId();
+    if( tmp )
+        setSpielerDetails( tmp, 2 );
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountAnsehen::doPublicMausEreignis( MausEreignis &me )
 void AccountAnsehen::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !sichtbar || animation || laden->istSichtbar() )
-		return;
-	int mx = me.mx;
-	int my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	if( jetzt > 1 )
-	{
-		int ak = 0;
-		bool tmp = me.verarbeitet;
-		suchenK->doPublicMausEreignis( me );
-		ak = me.verarbeitet ? 1 : 0;
-		aktivitätK->doPublicMausEreignis( me );
-		ak = me.verarbeitet && !ak ? 2 : ak;
-		spieleUndKartenK->doPublicMausEreignis( me );
-		ak = me.verarbeitet && !ak ? 3 : ak;
-		spielPartnerK->doPublicMausEreignis( me );
-		ak = me.verarbeitet && !ak ? 4 : ak;
-		statistikK->doPublicMausEreignis( me );
-		ak = me.verarbeitet && !ak ? 5 : ak;
-		historieK->doPublicMausEreignis( me );
-		ak = me.verarbeitet && !ak ? 6 : ak;
-		if( tmp )
-			ak = 0;
-		if( me.id == ME_RLinks )
-		{
-			switch( ak )
-			{
-			case 1: // Suchen Klick
-				if( jetzt == 1 )
-					break;
-				switch( jetzt )
-				{
-				case 2:
-					aktivitätK->setAlphaFeldStrength( -5 );
-					aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
-					aktivität->setSichtbar( 0, 1 );
-					break;
-				case 3:
-					spieleUndKartenK->setAlphaFeldStrength( -5 );
-					spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
-					spieleUndKarten->setSichtbar( 0, 1 );
-					break;
-				case 4:
-					spielPartnerK->setAlphaFeldStrength( -5 );
-					spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
-					partner->setSichtbar( 0, 1 );
-					break;
-				case 5:
-					statistikK->setAlphaFeldStrength( -5 );
-					statistikK->setAlphaFeldFarbe( 0x5500FF00 );
-					statistik->setSichtbar( 0, 1 );
-					break;
-				case 6:
-					historieK->setAlphaFeldStrength( -5 );
-					historieK->setAlphaFeldFarbe( 0x5500FF00 );
-					historie->setSichtbar( 0, 1 );
-					break;
-				}
-				suchenK->setAlphaFeldStrength( -2 );
-				suchenK->setAlphaFeldFarbe( 0x3000FF00 );
-				this->suche->setSichtbar( 1 );
-				jetzt = 1;
-				break;
-			case 2: // Aktivität Klick
-				setSpielerDetails( account, 2 );
-				break;
-			case 3: // SpieleUndKarten Klick
-				setSpielerDetails( account, 3 );
-				break;
-			case 4: // SpielPartner Klick
-				setSpielerDetails( account, 4 );
-				break;
-			case 5: // Statistik Klick
-				setSpielerDetails( account, 5 );
-				break;
-			case 6: // Historie Klick
-				setSpielerDetails( account, 6 );
-				break;
-			}
-		}
-	}
-	switch( jetzt )
-	{
-	case 1: // Suchen
-		suche->doPublicMausEreignis( me );
-		break;
-	case 3: // SpieleUndKarten
-		spieleUndKarten->doPublicMausEreignis( me );
-		break;
-	case 4: // SpielPartner
-		partner->doPublicMausEreignis( me );
-		break;
-	case 5: // Statistik
-		statistik->doPublicMausEreignis( me );
-		break;
-	case 6: // Historie
-		historie->doPublicMausEreignis( me );
-		break;
-	}
-	me.mx = mx;
-	me.my = my;
+    if( !sichtbar || animation || laden->istSichtbar() )
+        return;
+    int mx = me.mx;
+    int my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    if( jetzt > 1 )
+    {
+        int ak = 0;
+        bool tmp = me.verarbeitet;
+        suchenK->doPublicMausEreignis( me );
+        ak = me.verarbeitet ? 1 : 0;
+        aktivitätK->doPublicMausEreignis( me );
+        ak = me.verarbeitet && !ak ? 2 : ak;
+        spieleUndKartenK->doPublicMausEreignis( me );
+        ak = me.verarbeitet && !ak ? 3 : ak;
+        spielPartnerK->doPublicMausEreignis( me );
+        ak = me.verarbeitet && !ak ? 4 : ak;
+        statistikK->doPublicMausEreignis( me );
+        ak = me.verarbeitet && !ak ? 5 : ak;
+        historieK->doPublicMausEreignis( me );
+        ak = me.verarbeitet && !ak ? 6 : ak;
+        if( tmp )
+            ak = 0;
+        if( me.id == ME_RLinks )
+        {
+            switch( ak )
+            {
+            case 1: // Suchen Klick
+                if( jetzt == 1 )
+                    break;
+                switch( jetzt )
+                {
+                case 2:
+                    aktivitätK->setAlphaFeldStrength( -5 );
+                    aktivitätK->setAlphaFeldFarbe( 0x5500FF00 );
+                    aktivität->setSichtbar( 0, 1 );
+                    break;
+                case 3:
+                    spieleUndKartenK->setAlphaFeldStrength( -5 );
+                    spieleUndKartenK->setAlphaFeldFarbe( 0x5500FF00 );
+                    spieleUndKarten->setSichtbar( 0, 1 );
+                    break;
+                case 4:
+                    spielPartnerK->setAlphaFeldStrength( -5 );
+                    spielPartnerK->setAlphaFeldFarbe( 0x5500FF00 );
+                    partner->setSichtbar( 0, 1 );
+                    break;
+                case 5:
+                    statistikK->setAlphaFeldStrength( -5 );
+                    statistikK->setAlphaFeldFarbe( 0x5500FF00 );
+                    statistik->setSichtbar( 0, 1 );
+                    break;
+                case 6:
+                    historieK->setAlphaFeldStrength( -5 );
+                    historieK->setAlphaFeldFarbe( 0x5500FF00 );
+                    historie->setSichtbar( 0, 1 );
+                    break;
+                }
+                suchenK->setAlphaFeldStrength( -2 );
+                suchenK->setAlphaFeldFarbe( 0x3000FF00 );
+                this->suche->setSichtbar( 1 );
+                jetzt = 1;
+                break;
+            case 2: // Aktivität Klick
+                setSpielerDetails( account, 2 );
+                break;
+            case 3: // SpieleUndKarten Klick
+                setSpielerDetails( account, 3 );
+                break;
+            case 4: // SpielPartner Klick
+                setSpielerDetails( account, 4 );
+                break;
+            case 5: // Statistik Klick
+                setSpielerDetails( account, 5 );
+                break;
+            case 6: // Historie Klick
+                setSpielerDetails( account, 6 );
+                break;
+            }
+        }
+    }
+    switch( jetzt )
+    {
+    case 1: // Suchen
+        suche->doPublicMausEreignis( me );
+        break;
+    case 3: // SpieleUndKarten
+        spieleUndKarten->doPublicMausEreignis( me );
+        break;
+    case 4: // SpielPartner
+        partner->doPublicMausEreignis( me );
+        break;
+    case 5: // Statistik
+        statistik->doPublicMausEreignis( me );
+        break;
+    case 6: // Historie
+        historie->doPublicMausEreignis( me );
+        break;
+    }
+    me.mx = mx;
+    me.my = my;
 }
 }
 
 
 void AccountAnsehen::doTastaturEreignis( TastaturEreignis &te )
 void AccountAnsehen::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( !sichtbar || animation || laden->istSichtbar() )
-		return;
-	switch( jetzt )
-	{
-	case 1: // Suchen
-		suche->doTastaturEreignis( te );
-		break;
-	case 6: // Historie
-		historie->doTastaturEreignis( te );
-		break;
-	}
+    if( !sichtbar || animation || laden->istSichtbar() )
+        return;
+    switch( jetzt )
+    {
+    case 1: // Suchen
+        suche->doTastaturEreignis( te );
+        break;
+    case 6: // Historie
+        historie->doTastaturEreignis( te );
+        break;
+    }
 }
 }
 
 
 void AccountAnsehen::render( Bild &zRObj )
 void AccountAnsehen::render( Bild &zRObj )
 {
 {
-	if( pos == pos1 )
-		return;
-	if( !zRObj.setDrawOptions( pos, gr ) )
-		return;
-	rahmen->setSize( gr );
-	rahmen->render( zRObj );
-	int rbr = rahmen->getRBreite();
-	zRObj.setAlpha( (unsigned char)alpha );
-	zRObj.setAlpha( (unsigned char)alpha2 );
-	zRObj.addScrollOffset( -knopfX, 0 );
-	aktivitätK->render(zRObj );
-	historieK->render( zRObj );
-	spieleUndKartenK->render( zRObj );
-	spielPartnerK->render( zRObj );
-	statistikK->render( zRObj );
-	suchenK->render( zRObj );
-	zRObj.addScrollOffset( knopfX, 0 );
-	suche->render( zRObj );
-	aktivität->render( zRObj );
-	spieleUndKarten->render( zRObj );
-	partner->render( zRObj );
-	statistik->render( zRObj );
-	historie->render( zRObj );
-	zRObj.releaseAlpha();
-	laden->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.releaseDrawOptions();
+    if( pos == pos1 )
+        return;
+    if( !zRObj.setDrawOptions( pos, gr ) )
+        return;
+    rahmen->setSize( gr );
+    rahmen->render( zRObj );
+    int rbr = rahmen->getRBreite();
+    zRObj.setAlpha( (unsigned char)alpha );
+    zRObj.setAlpha( (unsigned char)alpha2 );
+    zRObj.addScrollOffset( -knopfX, 0 );
+    aktivitätK->render( zRObj );
+    historieK->render( zRObj );
+    spieleUndKartenK->render( zRObj );
+    spielPartnerK->render( zRObj );
+    statistikK->render( zRObj );
+    suchenK->render( zRObj );
+    zRObj.addScrollOffset( knopfX, 0 );
+    suche->render( zRObj );
+    aktivität->render( zRObj );
+    spieleUndKarten->render( zRObj );
+    partner->render( zRObj );
+    statistik->render( zRObj );
+    historie->render( zRObj );
+    zRObj.releaseAlpha();
+    laden->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 bool AccountAnsehen::istAnimiert() const
 bool AccountAnsehen::istAnimiert() const
 {
 {
-	return animation != 0;
+    return animation != 0;
 }
 }
 
 
 bool AccountAnsehen::istSichtbar() const
 bool AccountAnsehen::istSichtbar() const
 {
 {
-	return sichtbar || prozent1 != 0;
+    return sichtbar || prozent1 != 0;
 }
 }

+ 47 - 47
KSGClient/NachLogin/Account/AccountAnsehen.h

@@ -18,55 +18,55 @@ using namespace Framework;
 class AccountAnsehen : public Zeichnung
 class AccountAnsehen : public Zeichnung
 {
 {
 private:
 private:
-	Animation2D *laden;
-	Punkt begPos;
-	Punkt begGröße;
-	Punkt pos1;
-	Punkt größe1;
-	Punkt pos2;
-	Punkt größe2;
-	Punkt bildschirmGröße;
-	LRahmen *rahmen;
-	Knopf *aktivitätK;
-	Knopf *historieK;
-	Knopf *spieleUndKartenK;
-	Knopf *spielPartnerK;
-	Knopf *statistikK;
-	Knopf *suchenK;
-	AccountSuchen *suche;
-	AccountAktivität *aktivität;
-	AccountSpieleUndKarten *spieleUndKarten;
-	AccountSpielPartner *partner;
-	AccountStatistik *statistik;
-	AccountHistorie *historie;
-	int account;
-	int alpha;
-	int alpha2;
-	bool sichtbar;
-	int jetzt;
-	int nachher;
-	int prozent1;
-	int prozent2;
-	double tickVal;
-	int animation;
-	int knopfX;
-	bool rend;
+    Animation2D *laden;
+    Punkt begPos;
+    Punkt begGröße;
+    Punkt pos1;
+    Punkt größe1;
+    Punkt pos2;
+    Punkt größe2;
+    Punkt bildschirmGröße;
+    LRahmen *rahmen;
+    Knopf *aktivitätK;
+    Knopf *historieK;
+    Knopf *spieleUndKartenK;
+    Knopf *spielPartnerK;
+    Knopf *statistikK;
+    Knopf *suchenK;
+    AccountSuchen *suche;
+    AccountAktivität *aktivität;
+    AccountSpieleUndKarten *spieleUndKarten;
+    AccountSpielPartner *partner;
+    AccountStatistik *statistik;
+    AccountHistorie *historie;
+    int account;
+    int alpha;
+    int alpha2;
+    bool sichtbar;
+    int jetzt;
+    int nachher;
+    int prozent1;
+    int prozent2;
+    double tickVal;
+    int animation;
+    int knopfX;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AccountAnsehen( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
-	// Destruktor
-	~AccountAnsehen();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	bool setSpielerDetails( int account, int nachher );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istAnimiert() const;
-	bool istSichtbar() const;
+    // Konstruktor
+    AccountAnsehen( Fenster *zNachLoginFenster, int x );
+    // Destruktor
+    ~AccountAnsehen();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    bool setSpielerDetails( int account, int nachher );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istAnimiert() const;
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 244 - 256
KSGClient/NachLogin/Account/Aktivität/AccountAktivität.cpp

@@ -4,300 +4,288 @@
 
 
 // Inhalt der AccountAktivität Klasse aus AccountAktivität.h
 // Inhalt der AccountAktivität Klasse aus AccountAktivität.h
 // Konstruktor
 // Konstruktor
-AccountAktivität::AccountAktivität( Schrift *zSchrift )
-	: Thread(),
-  aktivitätF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Aktivität von " ) ),
-  online( initLinienDiagramm( 10, 10, 760, 200, zSchrift, LDiag::Style::DatenRahmen, 0 ) ),
-  spiele( initLinienDiagramm( 10, 220, 760, 200, zSchrift, LDiag::Style::DatenRahmen, 0 ) ),
-  status( 0 ),
-  accId( 0 ),
-  animation( 0 ),
-  alpha( 255 ),
-  tickVal( 0 ),
-  rend( 0 )
+AccountAktivität::AccountAktivität()
+    : Thread(),
+    aktivitätF( initFenster( 810, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Aktivität von " ) ),
+    online( initLinienDiagramm( 10, 10, 760, 200, LDiag::Style::DatenRahmen, 0 ) ),
+    spiele( initLinienDiagramm( 10, 220, 760, 200, LDiag::Style::DatenRahmen, 0 ) ),
+    status( 0 ),
+    accId( 0 ),
+    animation( 0 ),
+    alpha( 255 ),
+    tickVal( 0 ),
+    rend( 0 )
 {
 {
-	online->setHIntervallBreite( 36.8 );
-	spiele->setVIntervallHeight( 36.8 );
-	online->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
-	spiele->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
-	online->setRasterDicke( 1 );
-	spiele->setRasterDicke( 1 );
-	online->setRasterFarbe( 0xFF505050 );
-	spiele->setRasterFarbe( 0xFF505050 );
-	online->setHIntervallFarbe( 0xFFFFFFFF );
-	spiele->setHIntervallFarbe( 0xFFFFFFFF );
-	online->setHIntervallName( "Tage" );
-	spiele->setHIntervallName( "Tage" );
-	online->setVIntervallFarbe( 0xFFFFFFFF );
-	spiele->setVIntervallFarbe( 0xFFFFFFFF );
-	online->setVIntervallName( "Stunden" );
-	spiele->setVIntervallName( "Spiele" );
-	aktivitätF->addMember( online->getThis() );
-	aktivitätF->addMember( spiele->getThis() );
+    online->setHIntervallBreite( 36.8 );
+    spiele->setVIntervallHeight( 36.8 );
+    online->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
+    spiele->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
+    online->setRasterDicke( 1 );
+    spiele->setRasterDicke( 1 );
+    online->setRasterFarbe( 0xFF505050 );
+    spiele->setRasterFarbe( 0xFF505050 );
+    online->setHIntervallFarbe( 0xFFFFFFFF );
+    spiele->setHIntervallFarbe( 0xFFFFFFFF );
+    online->setHIntervallName( "Tage" );
+    spiele->setHIntervallName( "Tage" );
+    online->setVIntervallFarbe( 0xFFFFFFFF );
+    spiele->setVIntervallFarbe( 0xFFFFFFFF );
+    online->setVIntervallName( "Stunden" );
+    spiele->setVIntervallName( "Spiele" );
+    aktivitätF->addMember( dynamic_cast<Zeichnung *>( online->getThis() ) );
+    aktivitätF->addMember( dynamic_cast<Zeichnung *>( spiele->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountAktivität::~AccountAktivität()
 AccountAktivität::~AccountAktivität()
 {
 {
-	aktivitätF->release();
-	online->release();
-	spiele->release();
+    aktivitätF->release();
+    online->release();
+    spiele->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountAktivität::reset()
 void AccountAktivität::reset()
 {
 {
-	int wAnz = online->zDiagDaten()->werte->getEintragAnzahl();
-	for( int i = 0; i < wAnz; i++ )
-		online->removeWert( 0 );
-	wAnz = spiele->zDiagDaten()->werte->getEintragAnzahl();
-	for( int i = 0; i < wAnz; i++ )
-		spiele->removeWert( 0 );
-	wAnz = online->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
-	for( int i = 0; i < wAnz; i++ )
-		online->removeHIntervallText( online->zDiagDaten()->hIntervallWerte->get( 0 ) );
-	wAnz = spiele->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
-	for( int i = 0; i < wAnz; i++ )
-		spiele->removeHIntervallText( spiele->zDiagDaten()->hIntervallWerte->get( 0 ) );
-	wAnz = online->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
-	for( int i = 0; i < wAnz; i++ )
-		online->removeVIntervallText( online->zDiagDaten()->vIntervallWerte->get( 0 ) );
-	wAnz = spiele->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
-	for( int i = 0; i < wAnz; i++ )
-		spiele->removeVIntervallText( spiele->zDiagDaten()->vIntervallWerte->get( 0 ) );
+    int wAnz = online->zDiagDaten()->werte->getEintragAnzahl();
+    for( int i = 0; i < wAnz; i++ )
+        online->removeWert( 0 );
+    wAnz = spiele->zDiagDaten()->werte->getEintragAnzahl();
+    for( int i = 0; i < wAnz; i++ )
+        spiele->removeWert( 0 );
+    wAnz = online->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
+    for( int i = 0; i < wAnz; i++ )
+        online->removeHIntervallText( online->zDiagDaten()->hIntervallWerte->get( 0 ) );
+    wAnz = spiele->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
+    for( int i = 0; i < wAnz; i++ )
+        spiele->removeHIntervallText( spiele->zDiagDaten()->hIntervallWerte->get( 0 ) );
+    wAnz = online->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
+    for( int i = 0; i < wAnz; i++ )
+        online->removeVIntervallText( online->zDiagDaten()->vIntervallWerte->get( 0 ) );
+    wAnz = spiele->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
+    for( int i = 0; i < wAnz; i++ )
+        spiele->removeVIntervallText( spiele->zDiagDaten()->vIntervallWerte->get( 0 ) );
 }
 }
 
 
 void AccountAktivität::ladeStatistik( int accId )
 void AccountAktivität::ladeStatistik( int accId )
 {
 {
-	if( this->accId == accId )
-		return;
-	this->status = 0;
-	if( run )
-	{
-		warteAufThread( 1000 );
-		ende();
-	}
-	if( ( animation | 0x1 ) == animation )
-	{
-		animation |= 0x4;
-		this->accId = accId;
-		this->status = 1;
-		return;
-	}
-	if( this->accId )
-		reset();
-	this->accId = accId;
-	start();
-	this->status = 1;
+    if( this->accId == accId )
+        return;
+    this->status = 0;
+    if( run )
+    {
+        warteAufThread( 1000 );
+        ende();
+    }
+    if( ( animation | 0x1 ) == animation )
+    {
+        animation |= 0x4;
+        this->accId = accId;
+        this->status = 1;
+        return;
+    }
+    if( this->accId )
+        reset();
+    this->accId = accId;
+    start();
+    this->status = 1;
 }
 }
 
 
 void AccountAktivität::thread()
 void AccountAktivität::thread()
 {
 {
-	Text *name = infoClient->getSpielerName( accId );
-	if( name )
-	{
-		name->insert( 0, "Aktivität von " );
-		aktivitätF->setTitel( *name );
-		name->release();
-	}
+    Text *name = infoClient->getSpielerName( accId );
+    if( name )
+    {
+        name->insert( 0, "Aktivität von " );
+        aktivitätF->setTitel( *name );
+        name->release();
+    }
     Array< KSGClient::AccountActivityInfo > activity;
     Array< KSGClient::AccountActivityInfo > activity;
-	if( infoClient->getSpielerAktivität( accId, &activity ) )
-	{
-		int anz = activity.getEintragAnzahl();
-		double maxO = 0;
-		int maxS = 0;
-		for( int i = 0; i < anz; i++ )
-		{
+    if( infoClient->getSpielerAktivität( accId, &activity ) )
+    {
+        int anz = activity.getEintragAnzahl();
+        double maxO = 0;
+        int maxS = 0;
+        for( int i = 0; i < anz; i++ )
+        {
             KSGClient::AccountActivityInfo info = activity.get( i );
             KSGClient::AccountActivityInfo info = activity.get( i );
-			if( info.stOnline > maxO )
-				maxO = info.stOnline;
-			if( info.stGespielt > maxO )
-				maxO = info.stGespielt;
-			if( info.anzSpiele > maxS )
-				maxS = info.anzSpiele;
-			if( info.anzGewonnen > maxS )
-				maxS = info.anzGewonnen;
-		}
-		maxO += ( maxO / 100 ) * 10;
-		maxS++;
-		online->addVIntervallText( 0, "0" );
-		online->addVIntervallText( (int)maxO + 1, Text() += (int)( maxO + 1 ) );
-		spiele->addVIntervallText( 0, "0" );
-		spiele->addVIntervallText( (int)maxS + 1, Text() += (int)( maxS + 1 ) );
-		online->addHIntervallText( 0, activity.get( 0 ).datum );
-		online->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
-		spiele->addHIntervallText( 0, activity.get( 0 ).datum );
-		spiele->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
-		DiagWert *w = new DiagWert();
-		w->farbe = 0xFF00FFFF;
-		w->hintergrund = 0xFF205050;
-		w->name->setText( "Zeit Online" );
-		w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
-		online->addWert( w );
-		w = new DiagWert();
-		w->farbe = 0xFF00FF00;
-		w->hintergrund = 0xFF205020;
-		w->name->setText( "Zeit im Spiel" );
-		w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
-		online->addWert( w );
-		w = new DiagWert();
-		w->farbe = 0xFF00FFFF;
-		w->hintergrund = 0xFF205050;
-		w->name->setText( "Spiele am Tag" );
-		w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
-		spiele->addWert( w );
-		w = new DiagWert();
-		w->farbe = 0xFF00FF00;
-		w->hintergrund = 0xFF205020;
-		w->name->setText( "Gewonnene Spiele" );
-		w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
-		spiele->addWert( w );
-		for( int i = 0; i < anz; i++ )
-		{
+            if( info.stOnline > maxO )
+                maxO = info.stOnline;
+            if( info.stGespielt > maxO )
+                maxO = info.stGespielt;
+            if( info.anzSpiele > maxS )
+                maxS = info.anzSpiele;
+            if( info.anzGewonnen > maxS )
+                maxS = info.anzGewonnen;
+        }
+        maxO += ( maxO / 100 ) * 10;
+        maxS++;
+        online->addVIntervallText( 0, "0" );
+        online->addVIntervallText( (int)maxO + 1, Text() += (int)( maxO + 1 ) );
+        spiele->addVIntervallText( 0, "0" );
+        spiele->addVIntervallText( (int)maxS + 1, Text() += (int)( maxS + 1 ) );
+        online->addHIntervallText( 0, activity.get( 0 ).datum );
+        online->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
+        spiele->addHIntervallText( 0, activity.get( 0 ).datum );
+        spiele->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
+        DiagWert *w = new DiagWert();
+        w->farbe = 0xFF00FFFF;
+        w->hintergrund = 0xFF205050;
+        w->name->setText( "Zeit Online" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        online->addWert( w );
+        w = new DiagWert();
+        w->farbe = 0xFF00FF00;
+        w->hintergrund = 0xFF205020;
+        w->name->setText( "Zeit im Spiel" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        online->addWert( w );
+        w = new DiagWert();
+        w->farbe = 0xFF00FFFF;
+        w->hintergrund = 0xFF205050;
+        w->name->setText( "Spiele am Tag" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        spiele->addWert( w );
+        w = new DiagWert();
+        w->farbe = 0xFF00FF00;
+        w->hintergrund = 0xFF205020;
+        w->name->setText( "Gewonnene Spiele" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        spiele->addWert( w );
+        for( int i = 0; i < anz; i++ )
+        {
             KSGClient::AccountActivityInfo info = activity.get( i );
             KSGClient::AccountActivityInfo info = activity.get( i );
-			online->addPunkt( 0, i, info.stOnline );
-			online->addPunkt( 1, i, info.stGespielt );
-			spiele->addPunkt( 0, i, info.anzSpiele );
-			spiele->addPunkt( 1, i, info.anzGewonnen );
-		}
-	}
-	else
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Aktivität des Spielers konnte nicht ermittelt werden." ), new Text( "Ok" ) );
-	animation &= ~0x4;
-	status = 2;
-	run = 0;
+            online->addPunkt( 0, i, info.stOnline );
+            online->addPunkt( 1, i, info.stGespielt );
+            spiele->addPunkt( 0, i, info.anzSpiele );
+            spiele->addPunkt( 1, i, info.anzGewonnen );
+        }
+    }
+    else
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Aktivität des Spielers konnte nicht ermittelt werden." ), new Text( "Ok" ) );
+    animation &= ~0x4;
+    status = 2;
 }
 }
 
 
 void AccountAktivität::setSichtbar( bool sichtbar, bool nachRechts )
 void AccountAktivität::setSichtbar( bool sichtbar, bool nachRechts )
 {
 {
-	if( sichtbar )
-	{
-		if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
-		{
-			if( nachRechts )
-				aktivitätF->setPosition( -810, 40 );
-			else
-				aktivitätF->setPosition( 810, 40 );
-		}
-		animation |= 0x1;
-	}
-	else
-		animation &= ~0x1;
-	if( nachRechts )
-		animation |= 0x2;
-	else
-		animation &= ~0x2;
+    if( sichtbar )
+    {
+        if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
+        {
+            if( nachRechts )
+                aktivitätF->setPosition( -810, 40 );
+            else
+                aktivitätF->setPosition( 810, 40 );
+        }
+        animation |= 0x1;
+    }
+    else
+        animation &= ~0x1;
+    if( nachRechts )
+        animation |= 0x2;
+    else
+        animation &= ~0x2;
 }
 }
 
 
 bool AccountAktivität::tick( double zeit )
 bool AccountAktivität::tick( double zeit )
 {
 {
-	rend |= aktivitätF->tick( zeit );
-	tickVal += zeit;
-	int valA = (int)( tickVal * 150 );
-	int valB = (int)( tickVal * 500 );
-	tickVal -= valA / 150.0;
-	if( valA )
-	{
-		if( ( animation | 0x4 ) == animation && alpha )
-		{
-			if( alpha - valA <= 0 )
-				alpha = 0;
-			else
-				alpha -= valA;
-			rend = 1;
-			if( !alpha )
-			{
-				reset();
-				start();
-			}
-		}
-		if( ( animation | 0x4 ) != animation && alpha != 255 )
-		{
-			if( alpha + valA >= 255 )
-				alpha = 255;
-			else
-				alpha += valA;
-			rend = 1;
-		}
-	}
-	if( valB )
-	{
-		if( ( animation | 0x1 ) == animation )
-		{ // Sichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( aktivitätF->getX() != 10 )
-				{
-					if( aktivitätF->getX() + valB > 10 )
-						aktivitätF->setPosition( 10, aktivitätF->getY() );
-					else
-						aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( aktivitätF->getX() != 10 )
-				{
-					if( aktivitätF->getX() - valB < 10 )
-						aktivitätF->setPosition( 10, aktivitätF->getY() );
-					else
-						aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
-					rend = 1;
-				}
-			}
-		}
-		else
-		{ // Unsichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( aktivitätF->getX() != 810 )
-				{
-					if( aktivitätF->getX() + valB > 810 )
-						aktivitätF->setPosition( 810, aktivitätF->getY() );
-					else
-						aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( aktivitätF->getX() != -810 )
-				{
-					if( aktivitätF->getX() - valB < -810 )
-						aktivitätF->setPosition( -810, aktivitätF->getY() );
-					else
-						aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
-					rend = 1;
-				}
-			}
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= aktivitätF->tick( zeit );
+    tickVal += zeit;
+    int valA = (int)( tickVal * 150 );
+    int valB = (int)( tickVal * 500 );
+    tickVal -= valA / 150.0;
+    if( valA )
+    {
+        if( ( animation | 0x4 ) == animation && alpha )
+        {
+            if( alpha - valA <= 0 )
+                alpha = 0;
+            else
+                alpha -= valA;
+            rend = 1;
+            if( !alpha )
+            {
+                reset();
+                start();
+            }
+        }
+        if( ( animation | 0x4 ) != animation && alpha != 255 )
+        {
+            if( alpha + valA >= 255 )
+                alpha = 255;
+            else
+                alpha += valA;
+            rend = 1;
+        }
+    }
+    if( valB )
+    {
+        if( ( animation | 0x1 ) == animation )
+        { // Sichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( aktivitätF->getX() != 10 )
+                {
+                    if( aktivitätF->getX() + valB > 10 )
+                        aktivitätF->setPosition( 10, aktivitätF->getY() );
+                    else
+                        aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( aktivitätF->getX() != 10 )
+                {
+                    if( aktivitätF->getX() - valB < 10 )
+                        aktivitätF->setPosition( 10, aktivitätF->getY() );
+                    else
+                        aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+        else
+        { // Unsichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( aktivitätF->getX() != 810 )
+                {
+                    if( aktivitätF->getX() + valB > 810 )
+                        aktivitätF->setPosition( 810, aktivitätF->getY() );
+                    else
+                        aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( aktivitätF->getX() != -810 )
+                {
+                    if( aktivitätF->getX() - valB < -810 )
+                        aktivitätF->setPosition( -810, aktivitätF->getY() );
+                    else
+                        aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountAktivität::render( Bild &zRObj )
 void AccountAktivität::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( alpha );
-	aktivitätF->render( zRObj );
-	zRObj.releaseAlpha();
+    zRObj.setAlpha( alpha );
+    aktivitätF->render( zRObj );
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 int AccountAktivität::getStatus() const
 int AccountAktivität::getStatus() const
 {
 {
     return status;
     return status;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *AccountAktivität::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 1000 );
-        ende();
-    }
-    return Thread::release();
 }
 }

+ 24 - 26
KSGClient/NachLogin/Account/Aktivität/AccountAktivität.h

@@ -6,37 +6,35 @@
 #include <Fenster.h>
 #include <Fenster.h>
 #include <Thread.h>
 #include <Thread.h>
 
 
-using namespace Framework; 
+using namespace Framework;
 
 
 class AccountAktivität : public Thread
 class AccountAktivität : public Thread
 {
 {
 private:
 private:
-	Fenster *aktivitätF;
-	LDiag *online;
-	LDiag *spiele;
-	int status;
-	int accId;
-	int animation;
-	unsigned char alpha;
-	double tickVal;
-	bool rend;
-	
+    Fenster *aktivitätF;
+    LDiag *online;
+    LDiag *spiele;
+    int status;
+    int accId;
+    int animation;
+    unsigned char alpha;
+    double tickVal;
+    bool rend;
+
 public:
 public:
-	// Konstruktor
-	AccountAktivität( Schrift *zSchrift );
-	// Destruktor
-	~AccountAktivität();
-	// nicht constant
-	void reset();
-	void ladeStatistik( int accId );
-	virtual void thread();
-	void setSichtbar( bool sichtbar, bool nachRechts );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	int getStatus() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    AccountAktivität();
+    // Destruktor
+    ~AccountAktivität();
+    // nicht constant
+    void reset();
+    void ladeStatistik( int accId );
+    virtual void thread();
+    void setSichtbar( bool sichtbar, bool nachRechts );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    int getStatus() const;
 };
 };
 
 
 #endif
 #endif

+ 1024 - 1107
KSGClient/NachLogin/Account/Historie/AccountHistorie.cpp

@@ -9,132 +9,129 @@
 #include <Punkt.h>
 #include <Punkt.h>
 #include <Globals.h>
 #include <Globals.h>
 
 
-typedef AccountHistorieStatistikV* ( *AHSSDLLStart )( void );
-typedef AufzeichnungV* ( *AHSADLLStart )( void );
+typedef AccountHistorieStatistikV *( *AHSSDLLStart )( void );
+typedef AufzeichnungV *( *AHSADLLStart )( void );
 
 
 // Inahlt der AHSpielStatistik Klasse aus AccountHistorie.h
 // Inahlt der AHSpielStatistik Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
-AHSpielStatistik::AHSpielStatistik( Schrift *schrift )
-	: Thread(),
-	  schrift( schrift )
-{
-	statistikF = initFenster( 10, 40, 780, 450, schrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Spiel Ergebnis" );
-	laden = (Animation2D*)ladeAnimation->dublizieren();
-	laden->setSichtbar( 0 );
-	laden->setPosition( 380, 245 );
-	dllName = new Text( "" );
-	dllHandle = 0;
-	alpha = 0;
-	sichtbar = 0;
-	statistik = 0;
-	tickVal = 0;
+AHSpielStatistik::AHSpielStatistik()
+    : Thread()
+{
+    statistikF = initFenster( 10, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Spiel Ergebnis" );
+    laden = (Animation2D *)ladeAnimation->dublizieren();
+    laden->setSichtbar( 0 );
+    laden->setPosition( 380, 245 );
+    dllName = new Text( "" );
+    dllHandle = 0;
+    alpha = 0;
+    sichtbar = 0;
+    statistik = 0;
+    tickVal = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 AHSpielStatistik::~AHSpielStatistik()
 AHSpielStatistik::~AHSpielStatistik()
 {
 {
-	statistikF->release();
-	if( dllHandle )
-		reset();
-	dllName->release();
-	schrift->release();
-	laden->release();
+    statistikF->release();
+    if( dllHandle )
+        reset();
+    dllName->release();
+    laden->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSpielStatistik::reset()
 void AHSpielStatistik::reset()
 {
 {
-	if( run )
-		warteAufThread( INFINITE );
-	if( dllHandle )
-	{
-		if( statistik )
-			statistik = statistik->release();
-		Framework::getDLLRegister()->releaseDLL( *dllName );
-		dllHandle = 0;
-	}
+    if( run )
+        warteAufThread( INFINITE );
+    if( dllHandle )
+    {
+        if( statistik )
+            statistik = (AccountHistorieStatistikV *)statistik->release();
+        Framework::getDLLRegister()->releaseDLL( *dllName );
+        dllHandle = 0;
+    }
 }
 }
 
 
 bool AHSpielStatistik::ladeDaten( int spielId, int karteId )
 bool AHSpielStatistik::ladeDaten( int spielId, int karteId )
 {
 {
-	if( dllHandle )
-		reset();
-	KartenLeser *reader = KartenLeser::getInstance();
+    if( dllHandle )
+        reset();
+    KartenLeser *reader = KartenLeser::getInstance();
     reader->lock();
     reader->lock();
-	reader->setKarteId( karteId );
-	Text *pfad = reader->getSpielPfad();
-	if( !pfad )
-	{
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
+    reader->setKarteId( karteId );
+    Text *pfad = reader->getSpielPfad();
+    if( !pfad )
+    {
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
         reader->unlock();
         reader->unlock();
-		reader->release();
-		return 0;
-	}
-	pfad->append( "bin/" );
-	Text *spielArtName = reader->getSpielName();
-	if( !spielArtName )
-	{
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
+        reader->release();
+        return 0;
+    }
+    pfad->append( "bin/" );
+    Text *spielArtName = reader->getSpielName();
+    if( !spielArtName )
+    {
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
         reader->unlock();
         reader->unlock();
-		reader->release();
-		pfad->release();
-		return 0;
-	}
-	pfad->append( spielArtName->getText() );
-	pfad->append( ".dll" );
+        reader->release();
+        pfad->release();
+        return 0;
+    }
+    pfad->append( spielArtName->getText() );
+    pfad->append( ".dll" );
     reader->unlock();
     reader->unlock();
-	reader->release();
-	dllName->setText( "Spiele/" );
-	dllName->append( spielArtName->getText() );
-	dllName->append( ".dll" );
-	spielArtName->release();
-	dllHandle = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
-	if( !dllHandle )
-	{
-		Text *msg = new Text( "Die DLL Datei '" );
-		msg->append( pfad->getText() );
-		msg->append( "' konnte nicht geladen werden." );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
-		pfad->release();
-		return 0;
-	}
-	AHSSDLLStart startFunk = (AHSSDLLStart)GetProcAddress( dllHandle, "GetAccountHistorieStatistik" );
-	if( !startFunk )
-	{
-		if( dllHandle )
-		{
+    reader->release();
+    dllName->setText( "Spiele/" );
+    dllName->append( spielArtName->getText() );
+    dllName->append( ".dll" );
+    spielArtName->release();
+    dllHandle = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
+    if( !dllHandle )
+    {
+        Text *msg = new Text( "Die DLL Datei '" );
+        msg->append( pfad->getText() );
+        msg->append( "' konnte nicht geladen werden." );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
+        pfad->release();
+        return 0;
+    }
+    AHSSDLLStart startFunk = (AHSSDLLStart)GetProcAddress( dllHandle, "GetAccountHistorieStatistik" );
+    if( !startFunk )
+    {
+        if( dllHandle )
+        {
             Framework::getDLLRegister()->releaseDLL( *dllName );
             Framework::getDLLRegister()->releaseDLL( *dllName );
-			dllHandle = 0;
-		}
-		Text *msg = new Text( "Die Funktion 'GetAccountHistorieStatistik' konnte in der DLL Datei '" );
-		msg->append( pfad->getText() );
-		msg->append( "' nicht gefunden werden." );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
-		pfad->release();
-		return 0;
-	}
-	pfad->release();
-	statistik = startFunk();
-	if( !statistik )
-	{
-		if( dllHandle )
-		{
+            dllHandle = 0;
+        }
+        Text *msg = new Text( "Die Funktion 'GetAccountHistorieStatistik' konnte in der DLL Datei '" );
+        msg->append( pfad->getText() );
+        msg->append( "' nicht gefunden werden." );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
+        pfad->release();
+        return 0;
+    }
+    pfad->release();
+    statistik = startFunk();
+    if( !statistik )
+    {
+        if( dllHandle )
+        {
             Framework::getDLLRegister()->releaseDLL( *dllName );
             Framework::getDLLRegister()->releaseDLL( *dllName );
-			dllHandle = 0;
-		}
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Für diese Spielart ist keine genauere Ansicht der Spiel Ergebnisse verfügbar." ), new Text( "Ok" ) );
-		return 0;
-	}
-	this->spielId = spielId;
-	statistik->setSchrift( schrift->getThis() );
-	statistik->setBildschirm( hauptScreen );
-	start();
-	return 1;
+            dllHandle = 0;
+        }
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Für diese Spielart ist keine genauere Ansicht der Spiel Ergebnisse verfügbar." ), new Text( "Ok" ) );
+        return 0;
+    }
+    this->spielId = spielId;
+    statistik->setUIFactory( uiFactory );
+    start();
+    return 1;
 }
 }
 
 
 void AHSpielStatistik::thread()
 void AHSpielStatistik::thread()
 {
 {
-	laden->setSichtbar( 1 );
+    laden->setSichtbar( 1 );
     KSGClient::HistorieServerClient *historieClient = infoClient->createHistorieServerClient( spielId );
     KSGClient::HistorieServerClient *historieClient = infoClient->createHistorieServerClient( spielId );
     if( !historieClient )
     if( !historieClient )
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ), new Text( "Ok" ) );
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ), new Text( "Ok" ) );
@@ -159,230 +156,219 @@ void AHSpielStatistik::thread()
 
 
 void AHSpielStatistik::setPosition( int x, int y )
 void AHSpielStatistik::setPosition( int x, int y )
 {
 {
-	statistikF->setPosition( x, y );
+    statistikF->setPosition( x, y );
 }
 }
 
 
 void AHSpielStatistik::setSichtbar( bool sichtbar )
 void AHSpielStatistik::setSichtbar( bool sichtbar )
 {
 {
-	if( !statistik )
-		return;
-	if( !run )
-		statistik->setSichtbar( sichtbar );
-	this->sichtbar = sichtbar;
-	if( sichtbar && !alpha )
-		alpha = 1;
+    if( !statistik )
+        return;
+    if( !run )
+        statistik->setSichtbar( sichtbar );
+    this->sichtbar = sichtbar;
+    if( sichtbar && !alpha )
+        alpha = 1;
 }
 }
 
 
 void AHSpielStatistik::doPublicMausEreignis( MausEreignis &me )
 void AHSpielStatistik::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !statistik || alpha != 255 )
-		return;
-	me.mx -= 1 + statistikF->getX();
-	me.my -= 20 + statistikF->getY();
-	statistik->doPublicMausEreignis( me );
-	if( statistik->wurdeGeschlossen() )
-		setSichtbar( 0 );
-	me.mx += 1 + statistikF->getX();
-	me.my += 20 + statistikF->getY();
+    if( !statistik || alpha != 255 )
+        return;
+    me.mx -= 1 + statistikF->getX();
+    me.my -= 20 + statistikF->getY();
+    statistik->doPublicMausEreignis( me );
+    if( statistik->wurdeGeschlossen() )
+        setSichtbar( 0 );
+    me.mx += 1 + statistikF->getX();
+    me.my += 20 + statistikF->getY();
 }
 }
 
 
 void AHSpielStatistik::doTastaturEreignis( TastaturEreignis &te )
 void AHSpielStatistik::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( !statistik || alpha != 255 )
-		return;
-	statistik->doTastaturEreignis( te );
+    if( !statistik || alpha != 255 )
+        return;
+    statistik->doTastaturEreignis( te );
 }
 }
 
 
 bool AHSpielStatistik::tick( double tickVal )
 bool AHSpielStatistik::tick( double tickVal )
 {
 {
-	if( !statistik || !alpha )
-		return 0;
-	bool ret = statistik->tick( tickVal );
-	ret |= laden->tick( tickVal );
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	this->tickVal -= val;
-	if( val )
-	{
-		if( sichtbar && alpha != 255 )
-		{
-			if( alpha + val > 255 )
-				alpha = 255;
-			else
-				alpha += (unsigned char)val;
-			ret = 1;
-		}
-		if( !sichtbar && alpha )
-		{
-			if( alpha - val < 0 )
-				alpha = 0;
-			else
-				alpha -= (unsigned char)val;
-			if( !alpha && statistik->istNochSichtbar() )
-				alpha = 1;
-			ret = 1;
-		}
-	}
-	return ret;
+    if( !statistik || !alpha )
+        return 0;
+    bool ret = statistik->tick( tickVal );
+    ret |= laden->tick( tickVal );
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    this->tickVal -= val;
+    if( val )
+    {
+        if( sichtbar && alpha != 255 )
+        {
+            if( alpha + val > 255 )
+                alpha = 255;
+            else
+                alpha += (unsigned char)val;
+            ret = 1;
+        }
+        if( !sichtbar && alpha )
+        {
+            if( alpha - val < 0 )
+                alpha = 0;
+            else
+                alpha -= (unsigned char)val;
+            if( !alpha && statistik->istNochSichtbar() )
+                alpha = 1;
+            ret = 1;
+        }
+    }
+    return ret;
 }
 }
 
 
 void AHSpielStatistik::render( Bild &zRObj )
 void AHSpielStatistik::render( Bild &zRObj )
 {
 {
-	if( !statistik || !alpha )
-		return;
-	zRObj.setAlpha( alpha );
-	statistikF->render( zRObj );
-	if( !zRObj.setDrawOptions( statistikF->getX() + 1, statistikF->getY() + 21, statistikF->getBreite() - 2, statistikF->getHeight() - 22 ) )
-	{
-		zRObj.releaseAlpha();
-		return;
-	}
-	statistik->render( zRObj );
-	zRObj.releaseDrawOptions();
-	laden->render( zRObj );
-	zRObj.releaseAlpha();
+    if( !statistik || !alpha )
+        return;
+    zRObj.setAlpha( alpha );
+    statistikF->render( zRObj );
+    if( !zRObj.setDrawOptions( statistikF->getX() + 1, statistikF->getY() + 21, statistikF->getBreite() - 2, statistikF->getHeight() - 22 ) )
+    {
+        zRObj.releaseAlpha();
+        return;
+    }
+    statistik->render( zRObj );
+    zRObj.releaseDrawOptions();
+    laden->render( zRObj );
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 bool AHSpielStatistik::istNochSichtbar() const
 bool AHSpielStatistik::istNochSichtbar() const
 {
 {
-	if( alpha )
-		return 1;
-	return statistik ? statistik->istNochSichtbar() : 0;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *AHSpielStatistik::release()
-{
-    if( ref == 2 && run )
-        warteAufThread( INFINITE );
-    return Thread::release();
+    if( alpha )
+        return 1;
+    return statistik ? statistik->istNochSichtbar() : 0;
 }
 }
 
 
 
 
 // Inahlt der AHSpielVideo Klasse aus AccountHistorie.h
 // Inahlt der AHSpielVideo Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
-AHSpielVideo::AHSpielVideo( Schrift *schrift )
-	: Thread(),
-	schrift( schrift )
-{
-	videoF = initFenster( 10, 40, 780, 450, schrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Spiel Aufzeichnung" );
-	laden = (Animation2D*)ladeAnimation->dublizieren();
-	laden->setSichtbar( 0 );
-	laden->setPosition( 380, 245 );
-	dllName = new Text( "" );
-	dllHandle = 0;
-	alpha = 0;
-	sichtbar = 0;
-	video = 0;
-	tickVal = 0;
+AHSpielVideo::AHSpielVideo()
+    : Thread()
+{
+    videoF = initFenster( 10, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Spiel Aufzeichnung" );
+    laden = (Animation2D *)ladeAnimation->dublizieren();
+    laden->setSichtbar( 0 );
+    laden->setPosition( 380, 245 );
+    dllName = new Text( "" );
+    dllHandle = 0;
+    alpha = 0;
+    sichtbar = 0;
+    video = 0;
+    tickVal = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 AHSpielVideo::~AHSpielVideo()
 AHSpielVideo::~AHSpielVideo()
 {
 {
-	videoF->release();
-	if( dllHandle )
-		reset();
-	dllName->release();
-	schrift->release();
-	laden->release();
+    videoF->release();
+    if( dllHandle )
+        reset();
+    dllName->release();
+    laden->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSpielVideo::reset()
 void AHSpielVideo::reset()
 {
 {
-	if( run )
-		warteAufThread( INFINITE );
-	if( dllHandle )
-	{
-		if( video )
-			video = video->release();
+    if( run )
+        warteAufThread( INFINITE );
+    if( dllHandle )
+    {
+        if( video )
+            video = (AufzeichnungV *)video->release();
         Framework::getDLLRegister()->releaseDLL( *dllName );
         Framework::getDLLRegister()->releaseDLL( *dllName );
-		dllHandle = 0;
-	}
+        dllHandle = 0;
+    }
 }
 }
 
 
 bool AHSpielVideo::ladeDaten( int spielId, int karteId )
 bool AHSpielVideo::ladeDaten( int spielId, int karteId )
 {
 {
-	if( dllHandle )
-		reset();
-	KartenLeser *reader = KartenLeser::getInstance();
+    if( dllHandle )
+        reset();
+    KartenLeser *reader = KartenLeser::getInstance();
     reader->lock();
     reader->lock();
-	reader->setKarteId( karteId );
-	Text *pfad = reader->getSpielPfad();
-	if( !pfad )
-	{
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
+    reader->setKarteId( karteId );
+    Text *pfad = reader->getSpielPfad();
+    if( !pfad )
+    {
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
         reader->unlock();
         reader->unlock();
-		reader->release();
-		return 0;
-	}
-	pfad->append( "bin/" );
-	Text *spielArtName = reader->getSpielName();
-	if( !spielArtName )
-	{
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
+        reader->release();
+        return 0;
+    }
+    pfad->append( "bin/" );
+    Text *spielArtName = reader->getSpielName();
+    if( !spielArtName )
+    {
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( reader->getLetzterFehler() ), new Text( "Ok" ) );
         reader->unlock();
         reader->unlock();
-		reader->release();
-		pfad->release();
-		return 0;
-	}
-	pfad->append( spielArtName->getText() );
-	pfad->append( ".dll" );
+        reader->release();
+        pfad->release();
+        return 0;
+    }
+    pfad->append( spielArtName->getText() );
+    pfad->append( ".dll" );
     reader->unlock();
     reader->unlock();
-	reader->release();
-	dllName->setText( "Spiele/" );
-	dllName->append( spielArtName->getText() );
-	dllName->append( ".dll" );
-	spielArtName->release();
-	dllHandle = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
-	if( !dllHandle )
-	{
-		Text *msg = new Text( "Die DLL Datei '" );
-		msg->append( pfad->getText() );
-		msg->append( "' konnte nicht geladen werden." );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
-		pfad->release();
-		return 0;
-	}
-	AHSADLLStart startFunk = (AHSADLLStart)GetProcAddress( dllHandle, "GetAufzeichnung" );
-	if( !startFunk )
-	{
-		if( dllHandle )
-		{
+    reader->release();
+    dllName->setText( "Spiele/" );
+    dllName->append( spielArtName->getText() );
+    dllName->append( ".dll" );
+    spielArtName->release();
+    dllHandle = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
+    if( !dllHandle )
+    {
+        Text *msg = new Text( "Die DLL Datei '" );
+        msg->append( pfad->getText() );
+        msg->append( "' konnte nicht geladen werden." );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
+        pfad->release();
+        return 0;
+    }
+    AHSADLLStart startFunk = (AHSADLLStart)GetProcAddress( dllHandle, "GetAufzeichnung" );
+    if( !startFunk )
+    {
+        if( dllHandle )
+        {
             Framework::getDLLRegister()->releaseDLL( *dllName );
             Framework::getDLLRegister()->releaseDLL( *dllName );
-			dllHandle = 0;
-		}
-		Text *msg = new Text( "Die Funktion 'GetAufzeichnung' konnte in der DLL Datei '" );
-		msg->append( pfad->getText() );
-		msg->append( "' nicht gefunden werden." );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
-		pfad->release();
-		return 0;
-	}
-	pfad->release();
-	video = startFunk();
-	if( !video )
-	{
-		if( dllHandle )
-		{
+            dllHandle = 0;
+        }
+        Text *msg = new Text( "Die Funktion 'GetAufzeichnung' konnte in der DLL Datei '" );
+        msg->append( pfad->getText() );
+        msg->append( "' nicht gefunden werden." );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg, new Text( "Ok" ) );
+        pfad->release();
+        return 0;
+    }
+    pfad->release();
+    video = startFunk();
+    if( !video )
+    {
+        if( dllHandle )
+        {
             Framework::getDLLRegister()->releaseDLL( *dllName );
             Framework::getDLLRegister()->releaseDLL( *dllName );
-			dllHandle = 0;
-		}
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Für diese Spielart ist keine Aufzeichnung verfügbar." ), new Text( "Ok" ) );
-		return 0;
-	}
-	this->spielId = spielId;
-	video->setSchrift( schrift->getThis() );
-	video->setBildschirm( hauptScreen );
-	start();
-	return 1;
+            dllHandle = 0;
+        }
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Für diese Spielart ist keine Aufzeichnung verfügbar." ), new Text( "Ok" ) );
+        return 0;
+    }
+    this->spielId = spielId;
+    video->setUIFactory( uiFactory );
+    start();
+    return 1;
 }
 }
 
 
 void AHSpielVideo::thread()
 void AHSpielVideo::thread()
 {
 {
-	laden->setSichtbar( 1 );
+    laden->setSichtbar( 1 );
     KSGClient::HistorieServerClient *historieClient = infoClient->createHistorieServerClient( spielId );
     KSGClient::HistorieServerClient *historieClient = infoClient->createHistorieServerClient( spielId );
     if( !historieClient )
     if( !historieClient )
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Daten für dieses Spiel können zur Zeit nicht abgerufen werden." ), new Text( "Ok" ) );
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Daten für dieses Spiel können zur Zeit nicht abgerufen werden." ), new Text( "Ok" ) );
@@ -393,1093 +379,1024 @@ void AHSpielVideo::thread()
         historieClient->release();
         historieClient->release();
     }
     }
     video->ladeSpiel( spielId );
     video->ladeSpiel( spielId );
-	laden->setSichtbar( 0 );
-	if( sichtbar )
-	{
-		nachLogin->setSpielAufzeichnung( video->getThis() );
-		aktion = 7; // Aufzeichnung betreten
-	}
-	run = 0;
+    laden->setSichtbar( 0 );
+    if( sichtbar )
+    {
+        nachLogin->setSpielAufzeichnung( dynamic_cast<AufzeichnungV *>( video->getThis() ) );
+        aktion = 7; // Aufzeichnung betreten
+    }
+    run = 0;
 }
 }
 
 
 void AHSpielVideo::setSichtbar( bool sichtbar )
 void AHSpielVideo::setSichtbar( bool sichtbar )
 {
 {
-	if( !video )
-		return;
-	if( sichtbar && !run )
-	{
-		nachLogin->setSpielAufzeichnung( video->getThis() );
-		aktion = 7; // Aufzeichnung betreten
-	}
-	this->sichtbar = sichtbar;
-	if( sichtbar && !alpha )
-		alpha = 1;
+    if( !video )
+        return;
+    if( sichtbar && !run )
+    {
+        nachLogin->setSpielAufzeichnung( dynamic_cast<AufzeichnungV *>( video->getThis() ) );
+        aktion = 7; // Aufzeichnung betreten
+    }
+    this->sichtbar = sichtbar;
+    if( sichtbar && !alpha )
+        alpha = 1;
 }
 }
 
 
 bool AHSpielVideo::tick( double tickVal )
 bool AHSpielVideo::tick( double tickVal )
 {
 {
-	if( !video || !alpha )
-		return 0;
-	if( video->hatVerlassen( 0 ) && sichtbar )
-		setSichtbar( 0 );
-	bool ret = laden->tick( tickVal );
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	this->tickVal -= val;
-	if( val )
-	{
-		if( sichtbar && alpha != 255 )
-		{
-			if( alpha + val > 255 )
-				alpha = 255;
-			else
-				alpha += (unsigned char)val;
-			ret = 1;
-		}
-		if( !sichtbar && alpha )
-		{
-			if( alpha - val < 0 )
-				alpha = 0;
-			else
-				alpha -= (unsigned char)val;
-			ret = 1;
-		}
-	}
-	return ret;
+    if( !video || !alpha )
+        return 0;
+    if( video->hatVerlassen( 0 ) && sichtbar )
+        setSichtbar( 0 );
+    bool ret = laden->tick( tickVal );
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    this->tickVal -= val;
+    if( val )
+    {
+        if( sichtbar && alpha != 255 )
+        {
+            if( alpha + val > 255 )
+                alpha = 255;
+            else
+                alpha += (unsigned char)val;
+            ret = 1;
+        }
+        if( !sichtbar && alpha )
+        {
+            if( alpha - val < 0 )
+                alpha = 0;
+            else
+                alpha -= (unsigned char)val;
+            ret = 1;
+        }
+    }
+    return ret;
 }
 }
 
 
 void AHSpielVideo::render( Bild &zRObj )
 void AHSpielVideo::render( Bild &zRObj )
 {
 {
-	if( !video || !alpha )
-		return;
-	if( !zRObj.setDrawOptions( 0, 0, videoF->getBreite() + 10, videoF->getHeight() + 40 ) )
-		return;
-	zRObj.setAlpha( alpha );
-	videoF->render( zRObj );
-	laden->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.releaseDrawOptions();
+    if( !video || !alpha )
+        return;
+    if( !zRObj.setDrawOptions( 0, 0, videoF->getBreite() + 10, videoF->getHeight() + 40 ) )
+        return;
+    zRObj.setAlpha( alpha );
+    videoF->render( zRObj );
+    laden->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 bool AHSpielVideo::istNochSichtbar() const
 bool AHSpielVideo::istNochSichtbar() const
 {
 {
-	return alpha != 0;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *AHSpielVideo::release()
-{
-    if( ref == 2 && run )
-        warteAufThread( INFINITE );
-    return Thread::release();
+    return alpha != 0;
 }
 }
 
 
 
 
 // Inhalt der AHSLETeamListeSpieler Klasse aus AccountHistorie.h
 // Inhalt der AHSLETeamListeSpieler Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
-AHSLETeamListeSpieler::AHSLETeamListeSpieler( Schrift *zSchrift, char *name, int punkte, char *status, int farbe, int br )
-	: nameTF( initTextFeld( 5, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, name ) ),
-  punkteTF( initTextFeld( 110, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Punkte: " ) += punkte ) ),
-  statusTF( initTextFeld( 215, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, status ) ),
-  ram( new LRahmen() ),
-  ref( 1 )
-{
-    TextRenderer tr( zSchrift->getThis() );
+AHSLETeamListeSpieler::AHSLETeamListeSpieler( char *name, int punkte, char *status, int farbe, int br )
+    : ReferenceCounter(),
+    nameTF( initTextFeld( 5, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, name ) ),
+    punkteTF( initTextFeld( 110, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Punkte: " ) += punkte ) ),
+    statusTF( initTextFeld( 215, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, status ) ),
+    ram( new LRahmen() )
+{
+    TextRenderer tr( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     tr.setSchriftSize( 12 );
     tr.setSchriftSize( 12 );
-	nameTF->setSize( tr.getTextBreite( nameTF->zText()->getText() ) + 5, 20 );
-	punkteTF->setSize( tr.getTextBreite( punkteTF->zText()->getText() ) + 5, 20 );
-	statusTF->setSize( tr.getTextBreite( statusTF->zText()->getText() ) + 5, 20 );
-	if( nameTF->getBreite() > 100 )
-		punkteTF->setPosition( 10 + nameTF->getBreite(), 0 );
-	if( punkteTF->getX() + punkteTF->getBreite() > 210 )
-		statusTF->setPosition( punkteTF->getX() + punkteTF->getBreite() + 5, 0 );
-	ram->setFarbe( farbe );
-	ram->setSize( br, 20 );
-	ram->setRamenBreite( 1 );
+    nameTF->setSize( tr.getTextBreite( nameTF->zText()->getText() ) + 5, 20 );
+    punkteTF->setSize( tr.getTextBreite( punkteTF->zText()->getText() ) + 5, 20 );
+    statusTF->setSize( tr.getTextBreite( statusTF->zText()->getText() ) + 5, 20 );
+    if( nameTF->getBreite() > 100 )
+        punkteTF->setPosition( 10 + nameTF->getBreite(), 0 );
+    if( punkteTF->getX() + punkteTF->getBreite() > 210 )
+        statusTF->setPosition( punkteTF->getX() + punkteTF->getBreite() + 5, 0 );
+    ram->setFarbe( farbe );
+    ram->setSize( br, 20 );
+    ram->setRamenBreite( 1 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AHSLETeamListeSpieler::~AHSLETeamListeSpieler()
 AHSLETeamListeSpieler::~AHSLETeamListeSpieler()
 {
 {
-	nameTF->release();
-	punkteTF->release();
-	statusTF->release();
-	ram->release();
+    nameTF->release();
+    punkteTF->release();
+    statusTF->release();
+    ram->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSLETeamListeSpieler::render( int yOff, Bild &zRObj )
 void AHSLETeamListeSpieler::render( int yOff, Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( 2, yOff, ram->getBreite(), ram->getHeight() ) )
-		return;
-	nameTF->render( zRObj );
-	punkteTF->render( zRObj );
-	statusTF->render( zRObj );
-	ram->render( zRObj );
-	zRObj.releaseDrawOptions();
-}
-
-// cnstant
-
-// Reference Counting
-AHSLETeamListeSpieler *AHSLETeamListeSpieler::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSLETeamListeSpieler *AHSLETeamListeSpieler::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    if( !zRObj.setDrawOptions( 2, yOff, ram->getBreite(), ram->getHeight() ) )
+        return;
+    nameTF->render( zRObj );
+    punkteTF->render( zRObj );
+    statusTF->render( zRObj );
+    ram->render( zRObj );
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 
 
 // Inhalt der AHSLETeamListeTeam Klasse aus AccountHistorie.h
 // Inhalt der AHSLETeamListeTeam Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
-AHSLETeamListeTeam::AHSLETeamListeTeam( Schrift *zSchrift, char *name, int sAnz, char *status, int farbe, int br )
-	: nameTF( initTextFeld( 5, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, name ) ),
-  sAnzahlTF( initTextFeld( 110, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Spieleranzahl: " ) += sAnz ) ),
-  statusTF( initTextFeld( 215, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, status ) ),
-  ram( new LRahmen() ),
-  members( new RCArray< AHSLETeamListeSpieler >() ),
-  ref( 1 )
-{
-    TextRenderer tr( zSchrift->getThis() );
+AHSLETeamListeTeam::AHSLETeamListeTeam( char *name, int sAnz, char *status, int farbe, int br )
+    : ReferenceCounter(),
+    nameTF( initTextFeld( 5, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, name ) ),
+    sAnzahlTF( initTextFeld( 110, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Spieleranzahl: " ) += sAnz ) ),
+    statusTF( initTextFeld( 215, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, status ) ),
+    ram( new LRahmen() ),
+    members( new RCArray< AHSLETeamListeSpieler >() )
+{
+    TextRenderer tr( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     tr.setSchriftSize( 12 );
     tr.setSchriftSize( 12 );
-	nameTF->setSize( tr.getTextBreite( nameTF->zText()->getText() ) + 5, 20 );
-	sAnzahlTF->setSize( tr.getTextBreite( sAnzahlTF->zText()->getText() ) + 5, 20 );
-	statusTF->setSize( tr.getTextBreite( statusTF->zText()->getText() ) + 5, 20 );
-	if( nameTF->getBreite() > 100 )
-		sAnzahlTF->setPosition( 10 + nameTF->getBreite(), 0 );
-	if( sAnzahlTF->getX() + sAnzahlTF->getBreite() > 210 )
-		statusTF->setPosition( sAnzahlTF->getX() + sAnzahlTF->getBreite() + 5, 0 );
-	ram->setFarbe( farbe );
-	ram->setSize( br, 20 );
-	ram->setRamenBreite( 1 );
+    nameTF->setSize( tr.getTextBreite( nameTF->zText()->getText() ) + 5, 20 );
+    sAnzahlTF->setSize( tr.getTextBreite( sAnzahlTF->zText()->getText() ) + 5, 20 );
+    statusTF->setSize( tr.getTextBreite( statusTF->zText()->getText() ) + 5, 20 );
+    if( nameTF->getBreite() > 100 )
+        sAnzahlTF->setPosition( 10 + nameTF->getBreite(), 0 );
+    if( sAnzahlTF->getX() + sAnzahlTF->getBreite() > 210 )
+        statusTF->setPosition( sAnzahlTF->getX() + sAnzahlTF->getBreite() + 5, 0 );
+    ram->setFarbe( farbe );
+    ram->setSize( br, 20 );
+    ram->setRamenBreite( 1 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AHSLETeamListeTeam::~AHSLETeamListeTeam()
 AHSLETeamListeTeam::~AHSLETeamListeTeam()
 {
 {
-	nameTF->release();
-	sAnzahlTF->release();
-	statusTF->release();
-	ram->release();
-	members->release();
+    nameTF->release();
+    sAnzahlTF->release();
+    statusTF->release();
+    ram->release();
+    members->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSLETeamListeTeam::addSpieler( AHSLETeamListeSpieler *s )
 void AHSLETeamListeTeam::addSpieler( AHSLETeamListeSpieler *s )
 {
 {
-	members->add( s );
-	int maxHö = 20;
-	int anz = members->getEintragAnzahl();
-	if( anz )
-		maxHö += 4 + 20 * anz;
-	ram->setSize( ram->getBreite(), maxHö );
+    members->add( s );
+    int maxHö = 20;
+    int anz = members->getEintragAnzahl();
+    if( anz )
+        maxHö += 4 + 20 * anz;
+    ram->setSize( ram->getBreite(), maxHö );
 }
 }
 
 
 void AHSLETeamListeTeam::render( int xOff, int yOff, Bild &zRObj )
 void AHSLETeamListeTeam::render( int xOff, int yOff, Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( xOff, yOff, ram->getBreite(), ram->getHeight() ) )
-		return;
-	nameTF->render( zRObj );
-	sAnzahlTF->render( zRObj );
-	statusTF->render( zRObj );
-	ram->render( zRObj );
-	yOff = 22;
-	int anz = members->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		members->z( i )->render( yOff, zRObj );
-		yOff += 20;
-	}
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( xOff, yOff, ram->getBreite(), ram->getHeight() ) )
+        return;
+    nameTF->render( zRObj );
+    sAnzahlTF->render( zRObj );
+    statusTF->render( zRObj );
+    ram->render( zRObj );
+    yOff = 22;
+    int anz = members->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        members->z( i )->render( yOff, zRObj );
+        yOff += 20;
+    }
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int AHSLETeamListeTeam::getHeight() const
 int AHSLETeamListeTeam::getHeight() const
 {
 {
-	return ram->getHeight();
-}
-
-// Reference Counting
-AHSLETeamListeTeam *AHSLETeamListeTeam::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSLETeamListeTeam *AHSLETeamListeTeam::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return ram->getHeight();
 }
 }
 
 
 
 
 // Inhalt der AHSLETeamListe Klasse aus AccountHistorie.h
 // Inhalt der AHSLETeamListe Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
 AHSLETeamListe::AHSLETeamListe( int xPos )
 AHSLETeamListe::AHSLETeamListe( int xPos )
-	: members( new RCArray< AHSLETeamListeTeam >() ),
-  xPos( xPos ),
-  ref( 1 )
-{
-}
+    : ReferenceCounter(),
+    members( new RCArray< AHSLETeamListeTeam >() ),
+    xPos( xPos )
+{}
 
 
 // Destruktor
 // Destruktor
 AHSLETeamListe::~AHSLETeamListe()
 AHSLETeamListe::~AHSLETeamListe()
 {
 {
-	members->release();
+    members->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSLETeamListe::addTeam( AHSLETeamListeTeam *t )
 void AHSLETeamListe::addTeam( AHSLETeamListeTeam *t )
 {
 {
-	members->add( t );
+    members->add( t );
 }
 }
 
 
 void AHSLETeamListe::render( Bild &zRObj )
 void AHSLETeamListe::render( Bild &zRObj )
 {
 {
-	int y = 25;
-	int anz = members->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		members->z( i )->render( xPos, y, zRObj );
-		y += members->z( i )->getHeight();
-	}
+    int y = 25;
+    int anz = members->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        members->z( i )->render( xPos, y, zRObj );
+        y += members->z( i )->getHeight();
+    }
 }
 }
 
 
 // constant
 // constant
 int AHSLETeamListe::getHeight() const
 int AHSLETeamListe::getHeight() const
 {
 {
-	int anz = members->getEintragAnzahl();
-	int hö = 0;
-	for( int i = 0; i < anz; i++ )
-		hö += members->z( i )->getHeight();
-	return hö;
+    int anz = members->getEintragAnzahl();
+    int hö = 0;
+    for( int i = 0; i < anz; i++ )
+        hö += members->z( i )->getHeight();
+    return hö;
 }
 }
 
 
 int AHSLETeamListe::getBreite() const
 int AHSLETeamListe::getBreite() const
 {
 {
-	return 730 - xPos;
-}
-
-// Reference Counting
-AHSLETeamListe *AHSLETeamListe::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSLETeamListe *AHSLETeamListe::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return 730 - xPos;
 }
 }
 
 
 
 
 // Inhalt der AHSpielListeEintrag Klasse aus AccountHistorie.h
 // Inhalt der AHSpielListeEintrag Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
-AHSpielListeEintrag::AHSpielListeEintrag( int id, int karteId, Schrift *zSchrift, char *spiel, char *karte, char *datum, char *status,
-										  char *dauer, char *spielStatus, char *gewinner, int sAnzahl )
-: spielTF( initTextFeld( 5, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Spiel: " ) += spiel ) ),
-  karteTF( initTextFeld( 110, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Karte: " ) += karte ) ),
-  datumTF( initTextFeld( 215, 0, 180, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Datum: " ) += datum ) ),
-  statusTF( initTextFeld( 400, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Status: " ) += status ) ),
-  spiel( new Text( spiel ) ),
-  karte( new Text( karte ) ),
-  datum( new Text( datum ) ),
-  status( new Text( status ) ),
-  detailsK( initKnopf( 715, 0, 20, 20, 0, 0, "" ) ),
-  dauerTF( initTextFeld( 5, 25, 100, 20, zSchrift, TextFeld::Style::Text, Text( "Dauer: " ) += dauer ) ),
-  spielStatusTF( initTextFeld( 5, 45, 100, 20, zSchrift, TextFeld::Style::Text, Text( "Status: " ) += spielStatus ) ),
-  gewinnerTF( initTextFeld( 5, 65, 100, 20, zSchrift, TextFeld::Style::Text, Text( "Gewinner: " ) += gewinner ) ),
-  sAnzahlTF( initTextFeld( 5, 85, 100, 20, zSchrift, TextFeld::Style::Text, Text( "Spieleranzahl: " ) += sAnzahl ) ),
-  statistikK( initKnopf( 5, 105, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Statistik" ) ),
-  videoK( initKnopf( 5, 130, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Aufzeichnung" ) ),
-  liste( 0 ),
-  ram( new LRahmen() ),
-  ausklappen( bilder->get( "data/client/bilder/account.ltdb/ausklappen.png" ) ),
-  einklappen( bilder->get( "data/client/bilder/account.ltdb/einklappen.png" ) ),
-  id( id ),
-  karteId( karteId ),
-  tickVal( 0 ),
-  aktion( 0 ),
-  maxHö( 155 ),
-  ref( 1 )
-{
-	detailsK->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	detailsK->setHintergrundBildZ( ausklappen->getThis() );
-	initToolTip( detailsK, "Details anzeigen.", zSchrift, hauptScreen );
-    TextRenderer tr( zSchrift->getThis() );
+AHSpielListeEintrag::AHSpielListeEintrag( int id, int karteId, char *spiel, char *karte, char *datum, char *status,
+                                          char *dauer, char *spielStatus, char *gewinner, int sAnzahl )
+    : ReferenceCounter(),
+    spielTF( initTextFeld( 5, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Spiel: " ) += spiel ) ),
+    karteTF( initTextFeld( 110, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Karte: " ) += karte ) ),
+    datumTF( initTextFeld( 215, 0, 180, 20, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Datum: " ) += datum ) ),
+    statusTF( initTextFeld( 400, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, Text( "Status: " ) += status ) ),
+    spiel( new Text( spiel ) ),
+    karte( new Text( karte ) ),
+    datum( new Text( datum ) ),
+    status( new Text( status ) ),
+    detailsK( initKnopf( 715, 0, 20, 20, 0, "" ) ),
+    dauerTF( initTextFeld( 5, 25, 100, 20, TextFeld::Style::Text, Text( "Dauer: " ) += dauer ) ),
+    spielStatusTF( initTextFeld( 5, 45, 100, 20, TextFeld::Style::Text, Text( "Status: " ) += spielStatus ) ),
+    gewinnerTF( initTextFeld( 5, 65, 100, 20, TextFeld::Style::Text, Text( "Gewinner: " ) += gewinner ) ),
+    sAnzahlTF( initTextFeld( 5, 85, 100, 20, TextFeld::Style::Text, Text( "Spieleranzahl: " ) += sAnzahl ) ),
+    statistikK( initKnopf( 5, 105, 100, 20, Knopf::Style::Sichtbar, "Statistik" ) ),
+    videoK( initKnopf( 5, 130, 100, 20, Knopf::Style::Sichtbar, "Aufzeichnung" ) ),
+    liste( 0 ),
+    ram( new LRahmen() ),
+    ausklappen( bilder->get( "data/client/bilder/account.ltdb/ausklappen.png" ) ),
+    einklappen( bilder->get( "data/client/bilder/account.ltdb/einklappen.png" ) ),
+    id( id ),
+    karteId( karteId ),
+    tickVal( 0 ),
+    aktion( 0 ),
+    maxHö( 155 )
+{
+    detailsK->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    detailsK->setHintergrundBildZ( dynamic_cast<Bild *>( ausklappen->getThis() ) );
+    initToolTip( detailsK, "Details anzeigen." );
+    TextRenderer tr( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     tr.setSchriftSize( 12 );
     tr.setSchriftSize( 12 );
-	spielTF->setSize( tr.getTextBreite( spielTF->zText()->getText() ) + 5, 20 );
-	karteTF->setSize( tr.getTextBreite( karteTF->zText()->getText() ) + 5, 20 );
-	datumTF->setSize( tr.getTextBreite( datumTF->zText()->getText() ) + 5, 20 );
-	statusTF->setSize( tr.getTextBreite( statusTF->zText()->getText() ) + 5, 20 );
-	dauerTF->setSize( tr.getTextBreite( dauerTF->zText()->getText() ), 20 );
-	spielStatusTF->setSize( tr.getTextBreite( spielStatusTF->zText()->getText() ), 20 );
-	gewinnerTF->setSize( tr.getTextBreite( gewinnerTF->zText()->getText() ), 20 );
-	sAnzahlTF->setSize( tr.getTextBreite( sAnzahlTF->zText()->getText() ), 20 );
-	if( spielTF->getBreite() > 100 )
-		karteTF->setPosition( 10 + spielTF->getBreite(), 0 );
-	if( karteTF->getX() + karteTF->getBreite() > 210 )
-		datumTF->setPosition( karteTF->getX() + karteTF->getBreite() + 5, 0 );
-	if( datumTF->getX() + datumTF->getBreite() > 395 )
-		statusTF->setPosition( datumTF->getX() + datumTF->getBreite() + 5, 0 );
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setSize( 735, 20 );
-	ram->setRamenBreite( 1 );
-	int br = dauerTF->getBreite();
-	br = br > spielStatusTF->getBreite() ? br : spielStatusTF->getBreite();
-	br = br > gewinnerTF->getBreite() ? br : gewinnerTF->getBreite();
-	br = br > sAnzahlTF->getBreite() ? br : sAnzahlTF->getBreite();
-	statistikK->setSize( br, statistikK->getHeight() );
-	videoK->setSize( br, videoK->getHeight() );
-	liste = new AHSLETeamListe( br + 10 );
+    spielTF->setSize( tr.getTextBreite( spielTF->zText()->getText() ) + 5, 20 );
+    karteTF->setSize( tr.getTextBreite( karteTF->zText()->getText() ) + 5, 20 );
+    datumTF->setSize( tr.getTextBreite( datumTF->zText()->getText() ) + 5, 20 );
+    statusTF->setSize( tr.getTextBreite( statusTF->zText()->getText() ) + 5, 20 );
+    dauerTF->setSize( tr.getTextBreite( dauerTF->zText()->getText() ), 20 );
+    spielStatusTF->setSize( tr.getTextBreite( spielStatusTF->zText()->getText() ), 20 );
+    gewinnerTF->setSize( tr.getTextBreite( gewinnerTF->zText()->getText() ), 20 );
+    sAnzahlTF->setSize( tr.getTextBreite( sAnzahlTF->zText()->getText() ), 20 );
+    if( spielTF->getBreite() > 100 )
+        karteTF->setPosition( 10 + spielTF->getBreite(), 0 );
+    if( karteTF->getX() + karteTF->getBreite() > 210 )
+        datumTF->setPosition( karteTF->getX() + karteTF->getBreite() + 5, 0 );
+    if( datumTF->getX() + datumTF->getBreite() > 395 )
+        statusTF->setPosition( datumTF->getX() + datumTF->getBreite() + 5, 0 );
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setSize( 735, 20 );
+    ram->setRamenBreite( 1 );
+    int br = dauerTF->getBreite();
+    br = br > spielStatusTF->getBreite() ? br : spielStatusTF->getBreite();
+    br = br > gewinnerTF->getBreite() ? br : gewinnerTF->getBreite();
+    br = br > sAnzahlTF->getBreite() ? br : sAnzahlTF->getBreite();
+    statistikK->setSize( br, statistikK->getHeight() );
+    videoK->setSize( br, videoK->getHeight() );
+    liste = new AHSLETeamListe( br + 10 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AHSpielListeEintrag::~AHSpielListeEintrag()
 AHSpielListeEintrag::~AHSpielListeEintrag()
 {
 {
-	spielTF->release();
-	karteTF->release();
-	datumTF->release();
-	statusTF->release();
-	spiel->release();
-	karte->release();
-	datum->release();
-	status->release();
-	detailsK->release();
-	dauerTF->release();
-	spielStatusTF->release();
-	gewinnerTF->release();
-	sAnzahlTF->release();
-	statistikK->release();
-	videoK->release();
-	liste->release();
-	ram->release();
-	einklappen->release();
-	ausklappen->release();
+    spielTF->release();
+    karteTF->release();
+    datumTF->release();
+    statusTF->release();
+    spiel->release();
+    karte->release();
+    datum->release();
+    status->release();
+    detailsK->release();
+    dauerTF->release();
+    spielStatusTF->release();
+    gewinnerTF->release();
+    sAnzahlTF->release();
+    statistikK->release();
+    videoK->release();
+    liste->release();
+    ram->release();
+    einklappen->release();
+    ausklappen->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSpielListeEintrag::addTeam( AHSLETeamListeTeam *t )
 void AHSpielListeEintrag::addTeam( AHSLETeamListeTeam *t )
 {
 {
-	liste->addTeam( t );
-	maxHö = liste->getHeight();
-	maxHö = 155 > maxHö + 30 ? 155 : maxHö + 30;
+    liste->addTeam( t );
+    maxHö = liste->getHeight();
+    maxHö = 155 > maxHö + 30 ? 155 : maxHö + 30;
 }
 }
 
 
 bool AHSpielListeEintrag::tick( double tickVal )
 bool AHSpielListeEintrag::tick( double tickVal )
 {
 {
-	bool ret = detailsK->tick( tickVal );
-	ret |= statistikK->tick( tickVal );
-	ret |= videoK->tick( tickVal );
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	this->tickVal -= val;
-	if( val )
-	{
-		if( detailsK->zHintergrundBild() == ausklappen && ram->getHeight() != 20 )
-		{
-			if( ram->getHeight() - val < 20 )
-				ram->setSize( ram->getBreite(), 20 );
-			else
-				ram->setSize( ram->getBreite(), ram->getHeight() - val );
-			ret = 1;
-		}
-		if( detailsK->zHintergrundBild() == einklappen )
-		{
-			if( ram->getHeight() > maxHö )
-			{
-				if( ram->getHeight() - val < maxHö )
-					ram->setSize( ram->getBreite(), maxHö );
-				else
-					ram->setSize( ram->getBreite(), ram->getHeight() - val );
-				ret = 1;
-			}
-			if( ram->getHeight() < maxHö )
-			{
-				if( ram->getHeight() + val > maxHö )
-					ram->setSize( ram->getBreite(), maxHö );
-				else
-					ram->setSize( ram->getBreite(), ram->getHeight() + val );
-				ret = 1;
-			}
-		}
-	}
-	return ret;
+    bool ret = detailsK->tick( tickVal );
+    ret |= statistikK->tick( tickVal );
+    ret |= videoK->tick( tickVal );
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    this->tickVal -= val;
+    if( val )
+    {
+        if( detailsK->zHintergrundBild() == ausklappen && ram->getHeight() != 20 )
+        {
+            if( ram->getHeight() - val < 20 )
+                ram->setSize( ram->getBreite(), 20 );
+            else
+                ram->setSize( ram->getBreite(), ram->getHeight() - val );
+            ret = 1;
+        }
+        if( detailsK->zHintergrundBild() == einklappen )
+        {
+            if( ram->getHeight() > maxHö )
+            {
+                if( ram->getHeight() - val < maxHö )
+                    ram->setSize( ram->getBreite(), maxHö );
+                else
+                    ram->setSize( ram->getBreite(), ram->getHeight() - val );
+                ret = 1;
+            }
+            if( ram->getHeight() < maxHö )
+            {
+                if( ram->getHeight() + val > maxHö )
+                    ram->setSize( ram->getBreite(), maxHö );
+                else
+                    ram->setSize( ram->getBreite(), ram->getHeight() + val );
+                ret = 1;
+            }
+        }
+    }
+    return ret;
 }
 }
 
 
 void AHSpielListeEintrag::doPublicMausEreignis( MausEreignis &me )
 void AHSpielListeEintrag::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	bool meVera = 0;
-	bool meVeraTmp = 0;
-	if( me.mx < 0 || me.my < 0 || me.mx >= ram->getBreite() || me.my >= ram->getHeight() )
-	{
-		meVeraTmp = me.verarbeitet;
-		me.verarbeitet = 1;
-		meVera = 1;
-	}
-	int vera = me.verarbeitet;
-	detailsK->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet && me.id == ME_RLinks )
-	{
-		if( detailsK->zHintergrundBild() == einklappen )
-			detailsK->setHintergrundBildZ( ausklappen->getThis() );
-		else
-			detailsK->setHintergrundBildZ( einklappen->getThis() );
-	}
-	vera = me.verarbeitet;
-	statistikK->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet && me.id == ME_RLinks )
-		aktion = 1;
-	vera = me.verarbeitet;
-	videoK->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet && me.id == ME_RLinks )
-		aktion = 2;
-	if( meVera )
-		me.verarbeitet = meVeraTmp;
+    bool meVera = 0;
+    bool meVeraTmp = 0;
+    if( me.mx < 0 || me.my < 0 || me.mx >= ram->getBreite() || me.my >= ram->getHeight() )
+    {
+        meVeraTmp = me.verarbeitet;
+        me.verarbeitet = 1;
+        meVera = 1;
+    }
+    int vera = me.verarbeitet;
+    detailsK->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
+    {
+        if( detailsK->zHintergrundBild() == einklappen )
+            detailsK->setHintergrundBildZ( dynamic_cast<Bild *>( ausklappen->getThis() ) );
+        else
+            detailsK->setHintergrundBildZ( dynamic_cast<Bild *>( einklappen->getThis() ) );
+    }
+    vera = me.verarbeitet;
+    statistikK->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
+        aktion = 1;
+    vera = me.verarbeitet;
+    videoK->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
+        aktion = 2;
+    if( meVera )
+        me.verarbeitet = meVeraTmp;
 }
 }
 
 
 void AHSpielListeEintrag::render( int yOff, Bild &zRObj )
 void AHSpielListeEintrag::render( int yOff, Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( 5, yOff, ram->getBreite(), ram->getHeight() ) )
-		return;
-	ram->render( zRObj );
-	if( ram->getHeight() > 20 )
-		zRObj.drawLinieH( 1, 20, ram->getBreite() - 2, ram->getFarbe() );
-	if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 2, ram->getHeight() - 2 ) )
-	{
-		zRObj.releaseDrawOptions();
-		return;
-	}
-	spielTF->render( zRObj );
-	karteTF->render( zRObj );
-	datumTF->render( zRObj );
-	statusTF->render( zRObj );
-	detailsK->render( zRObj );
-	dauerTF->render( zRObj );
-	spielStatusTF->render( zRObj );
-	gewinnerTF->render( zRObj );
-	sAnzahlTF->render( zRObj );
-	statistikK->render( zRObj );
-	videoK->render( zRObj );
-	liste->render( zRObj );
-	zRObj.releaseDrawOptions();
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( 5, yOff, ram->getBreite(), ram->getHeight() ) )
+        return;
+    ram->render( zRObj );
+    if( ram->getHeight() > 20 )
+        zRObj.drawLinieH( 1, 20, ram->getBreite() - 2, ram->getFarbe() );
+    if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 2, ram->getHeight() - 2 ) )
+    {
+        zRObj.releaseDrawOptions();
+        return;
+    }
+    spielTF->render( zRObj );
+    karteTF->render( zRObj );
+    datumTF->render( zRObj );
+    statusTF->render( zRObj );
+    detailsK->render( zRObj );
+    dauerTF->render( zRObj );
+    spielStatusTF->render( zRObj );
+    gewinnerTF->render( zRObj );
+    sAnzahlTF->render( zRObj );
+    statistikK->render( zRObj );
+    videoK->render( zRObj );
+    liste->render( zRObj );
+    zRObj.releaseDrawOptions();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 int AHSpielListeEintrag::getAktion()
 int AHSpielListeEintrag::getAktion()
 {
 {
-	int ret = aktion;
-	aktion = 0;
-	return ret;
+    int ret = aktion;
+    aktion = 0;
+    return ret;
 }
 }
 
 
 // constant
 // constant
 int AHSpielListeEintrag::getKarteId() const
 int AHSpielListeEintrag::getKarteId() const
 {
 {
-	return karteId;
+    return karteId;
 }
 }
 
 
 int AHSpielListeEintrag::getHeight() const
 int AHSpielListeEintrag::getHeight() const
 {
 {
-	return ram->getHeight();
+    return ram->getHeight();
 }
 }
 
 
 int AHSpielListeEintrag::getId() const
 int AHSpielListeEintrag::getId() const
 {
 {
-	return id;
+    return id;
 }
 }
 
 
 int AHSpielListeEintrag::getListeBreite() const
 int AHSpielListeEintrag::getListeBreite() const
 {
 {
-	return liste->getBreite();
+    return liste->getBreite();
 }
 }
 
 
 Text *AHSpielListeEintrag::zSpiel() const
 Text *AHSpielListeEintrag::zSpiel() const
 {
 {
-	return spiel;
+    return spiel;
 }
 }
 
 
 Text *AHSpielListeEintrag::zKarte() const
 Text *AHSpielListeEintrag::zKarte() const
 {
 {
-	return karte;
+    return karte;
 }
 }
 
 
 Text *AHSpielListeEintrag::zDatum() const
 Text *AHSpielListeEintrag::zDatum() const
 {
 {
-	return datum;
+    return datum;
 }
 }
 
 
 Text *AHSpielListeEintrag::zStatus() const
 Text *AHSpielListeEintrag::zStatus() const
 {
 {
-	return status;
-}
-
-// Reference Counting
-AHSpielListeEintrag *AHSpielListeEintrag::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSpielListeEintrag *AHSpielListeEintrag::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return status;
 }
 }
 
 
 
 
 // Inhalt der AHSpielListe Klasse aus AccountHistorie.h
 // Inhalt der AHSpielListe Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
 AHSpielListe::AHSpielListe()
 AHSpielListe::AHSpielListe()
-	: Zeichnung(),
-  ram( new LRahmen() ),
-  scroll( new VScrollBar() ),
-  members( new RCArray< AHSpielListeEintrag >() ),
-  sortSpalte( new Text( "Spiel" ) ),
-  sortAbsteigend( 0 )
+    : Zeichnung(),
+    ram( new LRahmen() ),
+    scroll( new VScrollBar() ),
+    members( new RCArray< AHSpielListeEintrag >() ),
+    sortSpalte( new Text( "Spiel" ) ),
+    sortAbsteigend( 0 )
 {
 {
-	pos = Punkt( 10, 40 );
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setRamenBreite( 1 );
-	ram->setSize( 760, 380 );
-	scroll->update( 0, 380 );
+    pos = Punkt( 10, 40 );
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setRamenBreite( 1 );
+    ram->setSize( 760, 380 );
+    scroll->update( 0, 380 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AHSpielListe::~AHSpielListe()
 AHSpielListe::~AHSpielListe()
 {
 {
-	ram->release();
-	scroll->release();
-	members->release();
-	sortSpalte->release();
+    ram->release();
+    scroll->release();
+    members->release();
+    sortSpalte->release();
 }
 }
 
 
 // privat
 // privat
 int AHSpielListe::getReihenfolge( int *arr )
 int AHSpielListe::getReihenfolge( int *arr )
 {
 {
-	lockZeichnung();
-	int anz = members->getEintragAnzahl();
-	if( !anz )
-	{
-		unlockZeichnung();
-		return 0;
-	}
-	int ret = 0;
-	bool *fertig = new bool[ anz ];
-	ZeroMemory( fertig, anz );
-	for( int i = 0; i < anz; i++ )
-	{
-		int index = -1;
-		Text minMaxT;
-		Zeit minMaxZ;
-		for( int j = 0; j < anz; j++ )
-		{
-			AHSpielListeEintrag *tmp = members->z( j );
-			if( sortSpalte->istGleich( "Spiel" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zSpiel() > minMaxT ) || ( !sortAbsteigend && *tmp->zSpiel() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zSpiel()->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Karte" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zKarte() > minMaxT ) || ( !sortAbsteigend && *tmp->zKarte() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zKarte()->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Datum" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && minMaxZ.istKleiner( "y-m-d h:i", tmp->zDatum()->getText() ) ) ||
-				( !sortAbsteigend && minMaxZ.istLater( "y-m-d h:i", tmp->zDatum()->getText() ) ) ) )
-			{
-				minMaxZ.setZeit( "y-m-d h:i", tmp->zDatum()->getText() );
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Status" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zStatus() > minMaxT ) || ( !sortAbsteigend && *tmp->zStatus() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zStatus()->getText();
-				index = j;
-			}
-		}
-		if( index < 0 )
-			break;
-		fertig[ index ] = 1;
-		arr[ ret ] = index;
-		ret++;
-	}
-	delete[] fertig;
-	unlockZeichnung();
-	return ret;
+    lockZeichnung();
+    int anz = members->getEintragAnzahl();
+    if( !anz )
+    {
+        unlockZeichnung();
+        return 0;
+    }
+    int ret = 0;
+    bool *fertig = new bool[ anz ];
+    ZeroMemory( fertig, anz );
+    for( int i = 0; i < anz; i++ )
+    {
+        int index = -1;
+        Text minMaxT;
+        Zeit minMaxZ;
+        for( int j = 0; j < anz; j++ )
+        {
+            AHSpielListeEintrag *tmp = members->z( j );
+            if( sortSpalte->istGleich( "Spiel" ) && !fertig[ j ] && ( index < 0 ||
+                                                                      ( sortAbsteigend && *tmp->zSpiel() > minMaxT ) || ( !sortAbsteigend && *tmp->zSpiel() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zSpiel()->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Karte" ) && !fertig[ j ] && ( index < 0 ||
+                                                                           ( sortAbsteigend && *tmp->zKarte() > minMaxT ) || ( !sortAbsteigend && *tmp->zKarte() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zKarte()->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Datum" ) && !fertig[ j ] && ( index < 0 ||
+                                                                           ( sortAbsteigend && minMaxZ.istKleiner( "y-m-d h:i", tmp->zDatum()->getText() ) ) ||
+                                                                           ( !sortAbsteigend && minMaxZ.istLater( "y-m-d h:i", tmp->zDatum()->getText() ) ) ) )
+            {
+                minMaxZ.setZeit( "y-m-d h:i", tmp->zDatum()->getText() );
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Status" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && *tmp->zStatus() > minMaxT ) || ( !sortAbsteigend && *tmp->zStatus() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zStatus()->getText();
+                index = j;
+            }
+        }
+        if( index < 0 )
+            break;
+        fertig[ index ] = 1;
+        arr[ ret ] = index;
+        ret++;
+    }
+    delete[] fertig;
+    unlockZeichnung();
+    return ret;
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AHSpielListe::setSortSpalte( char *sp )
 void AHSpielListe::setSortSpalte( char *sp )
 {
 {
-	lockZeichnung();
-	sortSpalte->setText( sp );
-	unlockZeichnung();
+    lockZeichnung();
+    sortSpalte->setText( sp );
+    unlockZeichnung();
 }
 }
 
 
 void AHSpielListe::setSortRichtung( bool absteigend )
 void AHSpielListe::setSortRichtung( bool absteigend )
 {
 {
-	sortAbsteigend = absteigend;
+    sortAbsteigend = absteigend;
 }
 }
 
 
 void AHSpielListe::reset()
 void AHSpielListe::reset()
 {
 {
-	lockZeichnung();
-	members->leeren();
-	unlockZeichnung();
+    lockZeichnung();
+    members->leeren();
+    unlockZeichnung();
 }
 }
 
 
 void AHSpielListe::addSpiel( AHSpielListeEintrag *s )
 void AHSpielListe::addSpiel( AHSpielListeEintrag *s )
 {
 {
-	lockZeichnung();
-	members->add( s );
-	unlockZeichnung();
+    lockZeichnung();
+    members->add( s );
+    unlockZeichnung();
 }
 }
 
 
 bool AHSpielListe::tick( double tickVal )
 bool AHSpielListe::tick( double tickVal )
 {
 {
-	bool ret = scroll->getRend();
-	lockZeichnung();
-	int anz = members->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		ret |= members->z( i )->tick( tickVal );
-	unlockZeichnung();
-	return ret;
+    bool ret = scroll->getRend();
+    lockZeichnung();
+    int anz = members->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        ret |= members->z( i )->tick( tickVal );
+    unlockZeichnung();
+    return ret;
 }
 }
 
 
 void AHSpielListe::doPublicMausEreignis( MausEreignis &me )
 void AHSpielListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	bool vera = 0;
-	if( me.mx - pos.x <= 0 || me.mx - pos.x >= ram->getBreite() || me.my - pos.y <= 0 || me.my - pos.y >= ram->getHeight() )
-	{
-		vera = 1;
-		me.verarbeitet = 1;
-	}
-	int mx = me.mx, my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	scroll->doMausMessage( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, me );
-	me.mx -= 5;
-	me.my -= 5 - scroll->getScroll();
-	lockZeichnung();
-	int anz = members->getEintragAnzahl();
-	int *rf = new int[ anz ];
-	int rfAnz = getReihenfolge( rf );
-	for( int i = 0; i < rfAnz; i++ )
-	{
-		members->z( rf[ i ] )->doPublicMausEreignis( me );
-		me.my -= members->z( rf[ i ] )->getHeight() + 5;
-	}
-	delete[] rf;
-	unlockZeichnung();
-	me.mx = mx, me.my = my;
-	if( vera )
-		me.verarbeitet = 0;
+    bool vera = 0;
+    if( me.mx - pos.x <= 0 || me.mx - pos.x >= ram->getBreite() || me.my - pos.y <= 0 || me.my - pos.y >= ram->getHeight() )
+    {
+        vera = 1;
+        me.verarbeitet = 1;
+    }
+    int mx = me.mx, my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    scroll->doMausMessage( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, me );
+    me.mx -= 5;
+    me.my -= 5 - scroll->getScroll();
+    lockZeichnung();
+    int anz = members->getEintragAnzahl();
+    int *rf = new int[ anz ];
+    int rfAnz = getReihenfolge( rf );
+    for( int i = 0; i < rfAnz; i++ )
+    {
+        members->z( rf[ i ] )->doPublicMausEreignis( me );
+        me.my -= members->z( rf[ i ] )->getHeight() + 5;
+    }
+    delete[] rf;
+    unlockZeichnung();
+    me.mx = mx, me.my = my;
+    if( vera )
+        me.verarbeitet = 0;
 }
 }
 
 
 void AHSpielListe::render( Bild &zRObj )
 void AHSpielListe::render( Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( pos, ram->getSize() ) )
-		return;
-	ram->render( zRObj );
-	scroll->render( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, zRObj );
-	if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 15, ram->getHeight() - 2 ) )
-	{
-		zRObj.releaseDrawOptions();
-		return;
-	}
-	int anzHö = 5;
-	lockZeichnung();
-	int anz = members->getEintragAnzahl();
-	int *rf = new int[ anz ];
-	int rfAnz = getReihenfolge( rf );
-	for( int i = 0; i < rfAnz; i++ )
-	{
-		members->z( rf[ i ] )->render( anzHö - scroll->getScroll(), zRObj );
-		anzHö += members->z( rf[ i ] )->getHeight() + 5;
-	}
-	delete[] rf;
-	unlockZeichnung();
-	scroll->update( anzHö, ram->getHeight() - 2 );
-	zRObj.releaseDrawOptions();
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( pos, ram->getSize() ) )
+        return;
+    ram->render( zRObj );
+    scroll->render( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, zRObj );
+    if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 15, ram->getHeight() - 2 ) )
+    {
+        zRObj.releaseDrawOptions();
+        return;
+    }
+    int anzHö = 5;
+    lockZeichnung();
+    int anz = members->getEintragAnzahl();
+    int *rf = new int[ anz ];
+    int rfAnz = getReihenfolge( rf );
+    for( int i = 0; i < rfAnz; i++ )
+    {
+        members->z( rf[ i ] )->render( anzHö - scroll->getScroll(), zRObj );
+        anzHö += members->z( rf[ i ] )->getHeight() + 5;
+    }
+    delete[] rf;
+    unlockZeichnung();
+    scroll->update( anzHö, ram->getHeight() - 2 );
+    zRObj.releaseDrawOptions();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int AHSpielListe::getAktion( int *spielId, int *karteId ) const
 int AHSpielListe::getAktion( int *spielId, int *karteId ) const
 {
 {
-	int anz = members->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		int ak = members->z( i )->getAktion();
-		if( ak )
-		{
-			*spielId = members->z( i )->getId();
-			*karteId = members->z( i )->getKarteId();
-			return ak;
-		}
-	}
-	return 0;
+    int anz = members->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        int ak = members->z( i )->getAktion();
+        if( ak )
+        {
+            *spielId = members->z( i )->getId();
+            *karteId = members->z( i )->getKarteId();
+            return ak;
+        }
+    }
+    return 0;
 }
 }
 
 
 
 
 // Inhalt der AccountHistorie Klasse aus AccountHistorie.h
 // Inhalt der AccountHistorie Klasse aus AccountHistorie.h
 // Konstruktor
 // Konstruktor
-AccountHistorie::AccountHistorie( Schrift *zSchrift )
-	: Thread(),
-  schrift( zSchrift->getThis() ),
-  historieF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Historie von " ) ),
-  sortSpalte( initAuswahlBox( 10, 10, 150, 20, zSchrift, ABSTYLE, { "Spiel", "Karte", "Datum", "Status" } ) ),
-  sortRichtung( initAuswahlBox( 170, 10, 150, 20, zSchrift, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
-  liste( new AHSpielListe() ),
-  statistik( new AHSpielStatistik( zSchrift->getThis() ) ),
-  video( new AHSpielVideo( zSchrift->getThis() ) ),
-  status( 0 ),
-  accId( 0 ),
-  animation( 0 ),
-  alpha( 255 ),
-  alpha2( 255 ),
-  alpha3( 255 ),
-  tickVal( 0 ),
-  rend( 0 )
-{
-	initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", zSchrift, hauptScreen );
-	initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll.", zSchrift, hauptScreen );
-	historieF->addMember( liste->getThis() );
-	historieF->addMember( sortSpalte->getThis() );
-	historieF->addMember( sortRichtung->getThis() );
-	historieF->setMausEreignis( _ret1ME );
+AccountHistorie::AccountHistorie()
+    : Thread(),
+    historieF( initFenster( 810, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Historie von " ) ),
+    sortSpalte( initAuswahlBox( 10, 10, 150, 20, ABSTYLE, { "Spiel", "Karte", "Datum", "Status" } ) ),
+    sortRichtung( initAuswahlBox( 170, 10, 150, 20, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
+    liste( new AHSpielListe() ),
+    statistik( new AHSpielStatistik() ),
+    video( new AHSpielVideo() ),
+    status( 0 ),
+    accId( 0 ),
+    animation( 0 ),
+    alpha( 255 ),
+    alpha2( 255 ),
+    alpha3( 255 ),
+    tickVal( 0 ),
+    rend( 0 )
+{
+    initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll." );
+    initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll." );
+    historieF->addMember( dynamic_cast<Zeichnung *>( liste->getThis() ) );
+    historieF->addMember( dynamic_cast<Zeichnung *>( sortSpalte->getThis() ) );
+    historieF->addMember( dynamic_cast<Zeichnung *>( sortRichtung->getThis() ) );
+    historieF->setMausEreignis( _ret1ME );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountHistorie::~AccountHistorie()
 AccountHistorie::~AccountHistorie()
 {
 {
-	schrift->release();
-	historieF->release();
-	sortSpalte->release();
-	sortRichtung->release();
-	statistik->release();
-	liste->release();
-	video->release();
+    statistik->warteAufThread( 10000 );
+    statistik->ende();
+    video->warteAufThread( 10000 );
+    video->ende();
+    historieF->release();
+    sortSpalte->release();
+    sortRichtung->release();
+    statistik->release();
+    liste->release();
+    video->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountHistorie::reset()
 void AccountHistorie::reset()
 {
 {
-	liste->reset();
-	statistik->reset();
-	video->reset();
+    liste->reset();
+    statistik->reset();
+    video->reset();
 }
 }
 
 
 void AccountHistorie::ladeStatistik( int accId )
 void AccountHistorie::ladeStatistik( int accId )
 {
 {
-	if( this->accId == accId )
-		return;
-	this->status = 0;
-	if( run )
-	{
-		warteAufThread( 1000 );
-		ende();
-	}
-	if( ( animation | 0x1 ) == animation )
-	{
-		animation |= 0x4;
-		this->accId = accId;
-		this->status = 1;
-		return;
-	}
-	if( this->accId )
-		reset();
-	this->accId = accId;
-	start();
-	this->status = 1;
+    if( this->accId == accId )
+        return;
+    this->status = 0;
+    if( run )
+    {
+        warteAufThread( 1000 );
+        ende();
+    }
+    if( ( animation | 0x1 ) == animation )
+    {
+        animation |= 0x4;
+        this->accId = accId;
+        this->status = 1;
+        return;
+    }
+    if( this->accId )
+        reset();
+    this->accId = accId;
+    start();
+    this->status = 1;
 }
 }
 
 
 void AccountHistorie::thread()
 void AccountHistorie::thread()
 {
 {
-	Text *name = infoClient->getSpielerName( accId );
-	if( name )
-	{
-		name->insert( 0, "Historie von " );
-		historieF->setTitel( *name );
-		name->release();
-	}
-	Array< KSGClient::SpielHistorieDaten > *daten = infoClient->getSpielHistorieDaten( accId );
-	int anz = daten->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		KSGClient::SpielHistorieDaten spiel = daten->get( i );
-		AHSpielListeEintrag *spielE = new AHSpielListeEintrag( spiel.id, spiel.karteId, schrift, spiel.spiel, spiel.karte,
-															   spiel.datum, spiel.status, spiel.dauer,
-															   spiel.spielStatus, spiel.gewinner, spiel.sAnzahl );
-		int tAnz = spiel.teams.getEintragAnzahl();
-		for( int j = 0; j < tAnz; j++ )
-		{
-			KSGClient::SpielHistorieTeamDaten team = spiel.teams.get( j );
-			AHSLETeamListeTeam *teamE = new AHSLETeamListeTeam( schrift, team.name, team.sAnzahl, team.status,
-																team.farbe, spielE->getListeBreite() );
-			int sAnz = team.spieler.getEintragAnzahl();
-			for( int k = 0; k < sAnz; k++ )
-			{
-				KSGClient::SpielHistorieSpielerDaten spieler = team.spieler.get( k );
-				AHSLETeamListeSpieler *spielerE = new AHSLETeamListeSpieler( schrift, spieler.name, spieler.punkte, spieler.status,
-																			 spieler.farbe, spielE->getListeBreite() - 4 );
-				teamE->addSpieler( spielerE );
-			}
-			spielE->addTeam( teamE );
-		}
-		liste->addSpiel( spielE );
-	}
-	daten->release();
-	animation &= ~0x4;
-	status = 2;
-	run = 0;
+    Text *name = infoClient->getSpielerName( accId );
+    if( name )
+    {
+        name->insert( 0, "Historie von " );
+        historieF->setTitel( *name );
+        name->release();
+    }
+    Array< KSGClient::SpielHistorieDaten > *daten = infoClient->getSpielHistorieDaten( accId );
+    int anz = daten->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        KSGClient::SpielHistorieDaten spiel = daten->get( i );
+        AHSpielListeEintrag *spielE = new AHSpielListeEintrag( spiel.id, spiel.karteId, spiel.spiel, spiel.karte,
+                                                               spiel.datum, spiel.status, spiel.dauer,
+                                                               spiel.spielStatus, spiel.gewinner, spiel.sAnzahl );
+        int tAnz = spiel.teams.getEintragAnzahl();
+        for( int j = 0; j < tAnz; j++ )
+        {
+            KSGClient::SpielHistorieTeamDaten team = spiel.teams.get( j );
+            AHSLETeamListeTeam *teamE = new AHSLETeamListeTeam( team.name, team.sAnzahl, team.status,
+                                                                team.farbe, spielE->getListeBreite() );
+            int sAnz = team.spieler.getEintragAnzahl();
+            for( int k = 0; k < sAnz; k++ )
+            {
+                KSGClient::SpielHistorieSpielerDaten spieler = team.spieler.get( k );
+                AHSLETeamListeSpieler *spielerE = new AHSLETeamListeSpieler( spieler.name, spieler.punkte, spieler.status,
+                                                                             spieler.farbe, spielE->getListeBreite() - 4 );
+                teamE->addSpieler( spielerE );
+            }
+            spielE->addTeam( teamE );
+        }
+        liste->addSpiel( spielE );
+    }
+    daten->release();
+    animation &= ~0x4;
+    status = 2;
+    run = 0;
 }
 }
 
 
 void AccountHistorie::setSichtbar( bool sichtbar, bool nachRechts )
 void AccountHistorie::setSichtbar( bool sichtbar, bool nachRechts )
 {
 {
-	if( sichtbar )
-	{
-		if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
-		{
-			if( nachRechts )
-				historieF->setPosition( -810, 40 );
-			else
-				historieF->setPosition( 810, 40 );
-		}
-		animation |= 0x1;
-	}
-	else
-		animation &= ~0x1;
-	if( nachRechts )
-		animation |= 0x2;
-	else
-		animation &= ~0x2;
+    if( sichtbar )
+    {
+        if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
+        {
+            if( nachRechts )
+                historieF->setPosition( -810, 40 );
+            else
+                historieF->setPosition( 810, 40 );
+        }
+        animation |= 0x1;
+    }
+    else
+        animation &= ~0x1;
+    if( nachRechts )
+        animation |= 0x2;
+    else
+        animation &= ~0x2;
 }
 }
 
 
 bool AccountHistorie::tick( double zeit )
 bool AccountHistorie::tick( double zeit )
 {
 {
-	if( !statistik->istNochSichtbar() && !video->istNochSichtbar() )
-		rend |= historieF->tick( zeit );
-	rend |= statistik->tick( zeit );
-	rend |= video->tick( zeit );
-	tickVal += zeit;
-	int valA = (int)( tickVal * 150 );
-	int valB = (int)( tickVal * 500 );
-	tickVal -= valA / 150.0;
-	if( valA )
-	{
-		if( ( animation | 0x8 ) == animation && alpha2 )
-		{
-			if( alpha2 - valA <= 0 )
-			{
-				alpha2 = 0;
-				statistik->setSichtbar( 1 );
-			}
-			else
-				alpha2 -= valA;
-			rend = 1;
-		}
-		if( ( animation | 0x8 ) != animation && alpha2 != 255 )
-		{
-			if( alpha2 + valA >= 255 )
-				alpha2 = 255;
-			else
-				alpha2 += valA;
-			rend = 1;
-		}
-		if( ( animation | 0x10 ) == animation && alpha3 )
-		{
-			if( alpha3 - valA <= 0 )
-			{
-				alpha3 = 0;
-				video->setSichtbar( 1 );
-			}
-			else
-				alpha3 -= valA;
-			rend = 1;
-		}
-		if( ( animation | 0x10 ) != animation && alpha3 != 255 )
-		{
-			if( alpha3 + valA >= 255 )
-				alpha3 = 255;
-			else
-				alpha3 += valA;
-			rend = 1;
-		}
-		if( ( animation | 0x4 ) == animation && alpha )
-		{
-			if( alpha - valA <= 0 )
-				alpha = 0;
-			else
-				alpha -= valA;
-			rend = 1;
-			if( !alpha )
-			{
-				reset();
-				start();
-			}
-		}
-		if( ( animation | 0x4 ) != animation && alpha != 255 )
-		{
-			if( alpha + valA >= 255 )
-				alpha = 255;
-			else
-				alpha += valA;
-			rend = 1;
-		}
-	}
-	if( valB )
-	{
-		if( ( animation | 0x1 ) == animation )
-		{ // Sichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( historieF->getX() != 10 )
-				{
-					if( historieF->getX() + valB > 10 )
-						historieF->setPosition( 10, historieF->getY() );
-					else
-						historieF->setPosition( historieF->getX() + valB, historieF->getY() );
-					statistik->setPosition( historieF->getX(), historieF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( historieF->getX() != 10 )
-				{
-					if( historieF->getX() - valB < 10 )
-						historieF->setPosition( 10, historieF->getY() );
-					else
-						historieF->setPosition( historieF->getX() - valB, historieF->getY() );
-					statistik->setPosition( historieF->getX(), historieF->getY() );
-					rend = 1;
-				}
-			}
-		}
-		else
-		{ // Unsichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( historieF->getX() != 810 )
-				{
-					if( historieF->getX() + valB > 810 )
-						historieF->setPosition( 810, historieF->getY() );
-					else
-						historieF->setPosition( historieF->getX() + valB, historieF->getY() );
-					statistik->setPosition( historieF->getX(), historieF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( historieF->getX() != -810 )
-				{
-					if( historieF->getX() - valB < -810 )
-						historieF->setPosition( -810, historieF->getY() );
-					else
-						historieF->setPosition( historieF->getX() - valB, historieF->getY() );
-					statistik->setPosition( historieF->getX(), historieF->getY() );
-					rend = 1;
-				}
-			}
-		}
-	}
-	if( !alpha2 && !statistik->istNochSichtbar() )
-	{
-		animation &= ~0x8;
-		statistik->reset();
-	}
-	if( !alpha3 && !video->istNochSichtbar() )
-	{
-		animation &= ~0x10;
-		video->reset();
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    if( !statistik->istNochSichtbar() && !video->istNochSichtbar() )
+        rend |= historieF->tick( zeit );
+    rend |= statistik->tick( zeit );
+    rend |= video->tick( zeit );
+    tickVal += zeit;
+    int valA = (int)( tickVal * 150 );
+    int valB = (int)( tickVal * 500 );
+    tickVal -= valA / 150.0;
+    if( valA )
+    {
+        if( ( animation | 0x8 ) == animation && alpha2 )
+        {
+            if( alpha2 - valA <= 0 )
+            {
+                alpha2 = 0;
+                statistik->setSichtbar( 1 );
+            }
+            else
+                alpha2 -= valA;
+            rend = 1;
+        }
+        if( ( animation | 0x8 ) != animation && alpha2 != 255 )
+        {
+            if( alpha2 + valA >= 255 )
+                alpha2 = 255;
+            else
+                alpha2 += valA;
+            rend = 1;
+        }
+        if( ( animation | 0x10 ) == animation && alpha3 )
+        {
+            if( alpha3 - valA <= 0 )
+            {
+                alpha3 = 0;
+                video->setSichtbar( 1 );
+            }
+            else
+                alpha3 -= valA;
+            rend = 1;
+        }
+        if( ( animation | 0x10 ) != animation && alpha3 != 255 )
+        {
+            if( alpha3 + valA >= 255 )
+                alpha3 = 255;
+            else
+                alpha3 += valA;
+            rend = 1;
+        }
+        if( ( animation | 0x4 ) == animation && alpha )
+        {
+            if( alpha - valA <= 0 )
+                alpha = 0;
+            else
+                alpha -= valA;
+            rend = 1;
+            if( !alpha )
+            {
+                reset();
+                start();
+            }
+        }
+        if( ( animation | 0x4 ) != animation && alpha != 255 )
+        {
+            if( alpha + valA >= 255 )
+                alpha = 255;
+            else
+                alpha += valA;
+            rend = 1;
+        }
+    }
+    if( valB )
+    {
+        if( ( animation | 0x1 ) == animation )
+        { // Sichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( historieF->getX() != 10 )
+                {
+                    if( historieF->getX() + valB > 10 )
+                        historieF->setPosition( 10, historieF->getY() );
+                    else
+                        historieF->setPosition( historieF->getX() + valB, historieF->getY() );
+                    statistik->setPosition( historieF->getX(), historieF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( historieF->getX() != 10 )
+                {
+                    if( historieF->getX() - valB < 10 )
+                        historieF->setPosition( 10, historieF->getY() );
+                    else
+                        historieF->setPosition( historieF->getX() - valB, historieF->getY() );
+                    statistik->setPosition( historieF->getX(), historieF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+        else
+        { // Unsichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( historieF->getX() != 810 )
+                {
+                    if( historieF->getX() + valB > 810 )
+                        historieF->setPosition( 810, historieF->getY() );
+                    else
+                        historieF->setPosition( historieF->getX() + valB, historieF->getY() );
+                    statistik->setPosition( historieF->getX(), historieF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( historieF->getX() != -810 )
+                {
+                    if( historieF->getX() - valB < -810 )
+                        historieF->setPosition( -810, historieF->getY() );
+                    else
+                        historieF->setPosition( historieF->getX() - valB, historieF->getY() );
+                    statistik->setPosition( historieF->getX(), historieF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+    }
+    if( !alpha2 && !statistik->istNochSichtbar() )
+    {
+        animation &= ~0x8;
+        statistik->reset();
+    }
+    if( !alpha3 && !video->istNochSichtbar() )
+    {
+        animation &= ~0x10;
+        video->reset();
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountHistorie::doPublicMausEreignis( MausEreignis &me )
 void AccountHistorie::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !statistik->istNochSichtbar() && !video->istNochSichtbar() && alpha == 255 && alpha2 == 255 && alpha3 == 255 )
-	{
-		int sortSpalteS = sortSpalte->getAuswahl();
-		int sortRichtungS = sortRichtung->getAuswahl();
-		historieF->doPublicMausEreignis( me );
-		if( sortSpalte->getAuswahl() != sortSpalteS )
-		{
-			liste->setSortSpalte( sortSpalte->zEintrag( sortSpalte->getAuswahl() )->zText()->getText() );
-			sortSpalte->einklappen();
-		}
-		if( sortRichtung->getAuswahl() != sortRichtungS )
-		{
-			liste->setSortRichtung( sortRichtung->getAuswahl() != 0 );
-			sortRichtung->einklappen();
-		}
-		int spielId = 0;
-		int karteId = 0;
-		int ak = liste->getAktion( &spielId, &karteId );
-		if( ak == 1 )
-		{ // Statistik anzeigen
-			if( statistik->ladeDaten( spielId, karteId ) )
-				animation |= 0x8;
-		}
-		if( ak == 2 )
-		{ // Aufzeichnung abspielen
-			if( video->ladeDaten( spielId, karteId ) )
-				animation |= 0x10;
-		}
-	}
-	if( statistik->istNochSichtbar() )
-		statistik->doPublicMausEreignis( me );
+    if( !statistik->istNochSichtbar() && !video->istNochSichtbar() && alpha == 255 && alpha2 == 255 && alpha3 == 255 )
+    {
+        int sortSpalteS = sortSpalte->getAuswahl();
+        int sortRichtungS = sortRichtung->getAuswahl();
+        historieF->doPublicMausEreignis( me );
+        if( sortSpalte->getAuswahl() != sortSpalteS )
+        {
+            liste->setSortSpalte( sortSpalte->zEintrag( sortSpalte->getAuswahl() )->zText()->getText() );
+            sortSpalte->einklappen();
+        }
+        if( sortRichtung->getAuswahl() != sortRichtungS )
+        {
+            liste->setSortRichtung( sortRichtung->getAuswahl() != 0 );
+            sortRichtung->einklappen();
+        }
+        int spielId = 0;
+        int karteId = 0;
+        int ak = liste->getAktion( &spielId, &karteId );
+        if( ak == 1 )
+        { // Statistik anzeigen
+            if( statistik->ladeDaten( spielId, karteId ) )
+                animation |= 0x8;
+        }
+        if( ak == 2 )
+        { // Aufzeichnung abspielen
+            if( video->ladeDaten( spielId, karteId ) )
+                animation |= 0x10;
+        }
+    }
+    if( statistik->istNochSichtbar() )
+        statistik->doPublicMausEreignis( me );
 }
 }
 
 
 void AccountHistorie::doTastaturEreignis( TastaturEreignis &te )
 void AccountHistorie::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( statistik->istNochSichtbar() )
-		statistik->doTastaturEreignis( te );
+    if( statistik->istNochSichtbar() )
+        statistik->doTastaturEreignis( te );
 }
 }
 
 
 void AccountHistorie::render( Bild &zRObj )
 void AccountHistorie::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( alpha );
-	if( alpha2 && alpha3 )
-	{
-		zRObj.setAlpha( alpha2 );
-		zRObj.setAlpha( alpha3 );
-		historieF->render( zRObj );
-		zRObj.releaseAlpha();
-		zRObj.releaseAlpha();
-	}
-	if( statistik->istNochSichtbar() )
-		statistik->render( zRObj );
-	if( video->istNochSichtbar() )
-		video->render( zRObj );
-	zRObj.releaseAlpha();
+    zRObj.setAlpha( alpha );
+    if( alpha2 && alpha3 )
+    {
+        zRObj.setAlpha( alpha2 );
+        zRObj.setAlpha( alpha3 );
+        historieF->render( zRObj );
+        zRObj.releaseAlpha();
+        zRObj.releaseAlpha();
+    }
+    if( statistik->istNochSichtbar() )
+        statistik->render( zRObj );
+    if( video->istNochSichtbar() )
+        video->render( zRObj );
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 int AccountHistorie::getStatus() const
 int AccountHistorie::getStatus() const
 {
 {
-	return status;
+    return status;
 }
 }

+ 181 - 206
KSGClient/NachLogin/Account/Historie/AccountHistorie.h

@@ -17,260 +17,235 @@ using namespace Framework;
 class AHSpielStatistik : public Thread
 class AHSpielStatistik : public Thread
 {
 {
 private:
 private:
-	Fenster *statistikF;
-	Animation2D *laden;
-	Schrift *schrift;
-	Text *dllName;
-	HINSTANCE dllHandle;
-	AccountHistorieStatistikV *statistik;
-	double tickVal;
-	unsigned char alpha;
-	bool sichtbar;
-	int spielId;
+    Fenster *statistikF;
+    Animation2D *laden;
+    Text *dllName;
+    HINSTANCE dllHandle;
+    AccountHistorieStatistikV *statistik;
+    double tickVal;
+    unsigned char alpha;
+    bool sichtbar;
+    int spielId;
 
 
 public:
 public:
-	// Konstruktor
-	AHSpielStatistik( Schrift *schrift );
-	// Destruktor
-	~AHSpielStatistik();
-	// nicht constant
-	void reset();
-	bool ladeDaten( int spielId, int spielArtId );
-	void thread();
-	void setPosition( int x, int y );
-	void setSichtbar( bool sichtbar );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double tickVal );
-	void render( Bild &zRObj );
-	// constant
-	bool istNochSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    AHSpielStatistik();
+    // Destruktor
+    ~AHSpielStatistik();
+    // nicht constant
+    void reset();
+    bool ladeDaten( int spielId, int spielArtId );
+    void thread();
+    void setPosition( int x, int y );
+    void setSichtbar( bool sichtbar );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double tickVal );
+    void render( Bild &zRObj );
+    // constant
+    bool istNochSichtbar() const;
 };
 };
 
 
 class AHSpielVideo : public Thread
 class AHSpielVideo : public Thread
 {
 {
 private:
 private:
-	Fenster *videoF;
-	Animation2D *laden;
-	Schrift *schrift;
-	Text *dllName;
-	HINSTANCE dllHandle;
-	AufzeichnungV *video;
-	double tickVal;
-	unsigned char alpha;
-	bool sichtbar;
-	int spielId;
+    Fenster *videoF;
+    Animation2D *laden;
+    Text *dllName;
+    HINSTANCE dllHandle;
+    AufzeichnungV *video;
+    double tickVal;
+    unsigned char alpha;
+    bool sichtbar;
+    int spielId;
 
 
 public:
 public:
-	// Konstruktor
-	AHSpielVideo( Schrift *schrift );
-	// Destruktor
-	~AHSpielVideo();
-	// nicht constant
-	void reset();
-	bool ladeDaten( int spielId, int spielArtId );
-	void thread();
-	void setSichtbar( bool sichtbar );
-	bool tick( double tickVal );
-	void render( Bild &zRObj );
-	// constant
-	bool istNochSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    AHSpielVideo();
+    // Destruktor
+    ~AHSpielVideo();
+    // nicht constant
+    void reset();
+    bool ladeDaten( int spielId, int spielArtId );
+    void thread();
+    void setSichtbar( bool sichtbar );
+    bool tick( double tickVal );
+    void render( Bild &zRObj );
+    // constant
+    bool istNochSichtbar() const;
 };
 };
 
 
-class AHSLETeamListeSpieler
+class AHSLETeamListeSpieler : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	TextFeld *nameTF;
-	TextFeld *punkteTF;
-	TextFeld *statusTF;
-	LRahmen *ram;
-	int ref;
+    TextFeld *nameTF;
+    TextFeld *punkteTF;
+    TextFeld *statusTF;
+    LRahmen *ram;
 
 
 public:
 public:
-	// Konstruktor
-	AHSLETeamListeSpieler( Schrift *zSchrift, char *name, int punkte, char *status, int farbe, int br );
-	// Destruktor
-	~AHSLETeamListeSpieler();
-	// nicht constant
-	void render( int yOff, Bild &zRObj );
-	// cnstant
-
-	// Reference Counting
-	AHSLETeamListeSpieler *getThis();
-	AHSLETeamListeSpieler *release();
+    // Konstruktor
+    AHSLETeamListeSpieler( char *name, int punkte, char *status, int farbe, int br );
+    // Destruktor
+    ~AHSLETeamListeSpieler();
+    // nicht constant
+    void render( int yOff, Bild &zRObj );
 };
 };
 
 
-class AHSLETeamListeTeam
+class AHSLETeamListeTeam : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	TextFeld *nameTF;
-	TextFeld *sAnzahlTF;
-	TextFeld *statusTF;
-	LRahmen *ram;
-	RCArray< AHSLETeamListeSpieler > *members;
-	int ref;
+    TextFeld *nameTF;
+    TextFeld *sAnzahlTF;
+    TextFeld *statusTF;
+    LRahmen *ram;
+    RCArray< AHSLETeamListeSpieler > *members;
 
 
 public:
 public:
-	// Konstruktor
-	AHSLETeamListeTeam( Schrift *zSchrift, char *name, int sAnz, char *status, int farbe, int br );
-	// Destruktor
-	~AHSLETeamListeTeam();
-	// nicht constant
-	void addSpieler( AHSLETeamListeSpieler *s );
-	void render( int xOff, int yOff, Bild &zRObj );
-	// constant
-	int getHeight() const;
-	// Reference Counting
-	AHSLETeamListeTeam *getThis();
-	AHSLETeamListeTeam *release();
+    // Konstruktor
+    AHSLETeamListeTeam( char *name, int sAnz, char *status, int farbe, int br );
+    // Destruktor
+    ~AHSLETeamListeTeam();
+    // nicht constant
+    void addSpieler( AHSLETeamListeSpieler *s );
+    void render( int xOff, int yOff, Bild &zRObj );
+    // constant
+    int getHeight() const;
 };
 };
 
 
-class AHSLETeamListe
+class AHSLETeamListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	RCArray< AHSLETeamListeTeam > *members;
-	int xPos;
-	int ref;
+    RCArray< AHSLETeamListeTeam > *members;
+    int xPos;
 
 
 public:
 public:
-	// Konstruktor
-	AHSLETeamListe( int xPos );
-	// Destruktor
-	~AHSLETeamListe();
-	// nicht constant
-	void addTeam( AHSLETeamListeTeam  *t );
-	void render( Bild &zRObj );
-	// constant
-	int getHeight() const;
-	int getBreite() const;
-	// Reference Counting
-	AHSLETeamListe *getThis();
-	AHSLETeamListe *release();
+    // Konstruktor
+    AHSLETeamListe( int xPos );
+    // Destruktor
+    ~AHSLETeamListe();
+    // nicht constant
+    void addTeam( AHSLETeamListeTeam *t );
+    void render( Bild &zRObj );
+    // constant
+    int getHeight() const;
+    int getBreite() const;
 };
 };
 
 
-class AHSpielListeEintrag
+class AHSpielListeEintrag : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	TextFeld *spielTF;
-	TextFeld *karteTF;
-	TextFeld *datumTF;
-	TextFeld *statusTF;
-	Text *spiel;
-	Text *karte;
-	Text *datum;
-	Text *status;
-	Knopf *detailsK;
-	TextFeld *dauerTF;
-	TextFeld *spielStatusTF;
-	TextFeld *gewinnerTF;
-	TextFeld *sAnzahlTF;
-	Knopf *statistikK;
-	Knopf *videoK;
-	AHSLETeamListe *liste;
-	LRahmen *ram;
-	Bild *einklappen;
-	Bild *ausklappen;
-	int karteId;
-	int id;
-	double tickVal;
-	int aktion;
-	int maxHö;
-	int ref;
+    TextFeld *spielTF;
+    TextFeld *karteTF;
+    TextFeld *datumTF;
+    TextFeld *statusTF;
+    Text *spiel;
+    Text *karte;
+    Text *datum;
+    Text *status;
+    Knopf *detailsK;
+    TextFeld *dauerTF;
+    TextFeld *spielStatusTF;
+    TextFeld *gewinnerTF;
+    TextFeld *sAnzahlTF;
+    Knopf *statistikK;
+    Knopf *videoK;
+    AHSLETeamListe *liste;
+    LRahmen *ram;
+    Bild *einklappen;
+    Bild *ausklappen;
+    int karteId;
+    int id;
+    double tickVal;
+    int aktion;
+    int maxHö;
 
 
 public:
 public:
-	// Konstruktor
-	AHSpielListeEintrag( int id, int karteId, Schrift *zSchrift, char *spiel, char *karte, char *datum, char *status, 
-						 char *dauer, char *spielStatus, char *gewinner, int sAnzahl );
-	// Destruktor
-	~AHSpielListeEintrag();
-	// nicht constant
-	void addTeam( AHSLETeamListeTeam *t );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int yOff, Bild &zRObj );
-	int getAktion();
-	// constant
-	int getKarteId() const;
-	int getHeight() const;
-	int getId() const;
-	int getListeBreite() const;
-	Text *zSpiel() const;
-	Text *zKarte() const;
-	Text *zDatum() const;
-	Text *zStatus() const;
-	// Reference Counting
-	AHSpielListeEintrag *getThis();
-	AHSpielListeEintrag *release();
+    // Konstruktor
+    AHSpielListeEintrag( int id, int karteId, char *spiel, char *karte, char *datum, char *status,
+                         char *dauer, char *spielStatus, char *gewinner, int sAnzahl );
+    // Destruktor
+    ~AHSpielListeEintrag();
+    // nicht constant
+    void addTeam( AHSLETeamListeTeam *t );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int yOff, Bild &zRObj );
+    int getAktion();
+    // constant
+    int getKarteId() const;
+    int getHeight() const;
+    int getId() const;
+    int getListeBreite() const;
+    Text *zSpiel() const;
+    Text *zKarte() const;
+    Text *zDatum() const;
+    Text *zStatus() const;
 };
 };
 
 
 class AHSpielListe : public Zeichnung
 class AHSpielListe : public Zeichnung
 {
 {
 private:
 private:
-	LRahmen *ram;
-	VScrollBar *scroll;
-	RCArray< AHSpielListeEintrag > *members;
-	Text *sortSpalte;
-	bool sortAbsteigend;
+    LRahmen *ram;
+    VScrollBar *scroll;
+    RCArray< AHSpielListeEintrag > *members;
+    Text *sortSpalte;
+    bool sortAbsteigend;
 
 
-	// privat
-	int getReihenfolge( int *arr );
+    // privat
+    int getReihenfolge( int *arr );
 
 
 public:
 public:
-	// Konstruktor
-	AHSpielListe();
-	// Destruktor
-	~AHSpielListe();
-	// nicht constant
-	void setSortSpalte( char *sp );
-	void setSortRichtung( bool absteigend );
-	void reset();
-	void addSpiel( AHSpielListeEintrag *s );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	int getAktion( int *spielId, int *karteId ) const;
+    // Konstruktor
+    AHSpielListe();
+    // Destruktor
+    ~AHSpielListe();
+    // nicht constant
+    void setSortSpalte( char *sp );
+    void setSortRichtung( bool absteigend );
+    void reset();
+    void addSpiel( AHSpielListeEintrag *s );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    int getAktion( int *spielId, int *karteId ) const;
 };
 };
 
 
 class AccountHistorie : public Thread
 class AccountHistorie : public Thread
 {
 {
 private:
 private:
-	Schrift *schrift;
-	Fenster *historieF;
-	AuswahlBox *sortSpalte;
-	AuswahlBox *sortRichtung;
-	AHSpielListe *liste;
-	AHSpielStatistik *statistik;
-	AHSpielVideo *video;
-	int status;
-	int accId;
-	int animation;
-	unsigned char alpha;
-	unsigned char alpha2;
-	unsigned char alpha3;
-	double tickVal;
-	bool rend;
+    Fenster *historieF;
+    AuswahlBox *sortSpalte;
+    AuswahlBox *sortRichtung;
+    AHSpielListe *liste;
+    AHSpielStatistik *statistik;
+    AHSpielVideo *video;
+    int status;
+    int accId;
+    int animation;
+    unsigned char alpha;
+    unsigned char alpha2;
+    unsigned char alpha3;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AccountHistorie( Schrift *zSchrift );
-	// Destruktor
-	~AccountHistorie();
-	// nicht constant
-	void reset();
-	void ladeStatistik( int accId );
-	virtual void thread();
-	void setSichtbar( bool sichtbar, bool nachRechts );
-	bool tick( double zeit );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-	int getStatus() const;
+    // Konstruktor
+    AccountHistorie();
+    // Destruktor
+    ~AccountHistorie();
+    // nicht constant
+    void reset();
+    void ladeStatistik( int accId );
+    virtual void thread();
+    void setSichtbar( bool sichtbar, bool nachRechts );
+    bool tick( double zeit );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
+    // constant
+    int getStatus() const;
 };
 };
 
 
 #endif
 #endif

+ 879 - 896
KSGClient/NachLogin/Account/SpielPartner/AccountSpielPartner.cpp

@@ -10,757 +10,740 @@
 
 
 // Inhalt der AccountSPListeEintrag Klasse aus AccountSpielPartner.h
 // Inhalt der AccountSPListeEintrag Klasse aus AccountSpielPartner.h
 // Konstruktor
 // Konstruktor
-AccountSPListeEintrag::AccountSPListeEintrag( AccountSPListeEintragDaten *daten, Schrift *zSchrift )
-	: daten( daten ),
-  ram( new LRahmen() ),
-  members( new RCArray< AccountSPListeEintrag >() ),
-  name( initTextFeld( 5, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Name" ) ),
-  anzahl( initTextFeld( 110, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " ) ),
-  prozent( initFBalken( 220, 0, 400, 20, zSchrift, FBalken::Style::normal ) ),
-  details( initKnopf( 580, 0, 20, 20, 0, 0, "" ) ),
-  ausklappen( bilder->get( "data/client/bilder/account.ltdb/ausklappen.png" ) ),
-  einklappen( bilder->get( "data/client/bilder/account.ltdb/einklappen.png" ) ),
-  sortSpalte( new Text( "Name" ) ),
-  sortAbsteigend( 0 ),
-  tickVal( 0 ),
-  rend( 0 ),
-  ref( 1 )
+AccountSPListeEintrag::AccountSPListeEintrag( AccountSPListeEintragDaten *daten )
+    : ReferenceCounter(),
+    daten( daten ),
+    ram( new LRahmen() ),
+    members( new RCArray< AccountSPListeEintrag >() ),
+    name( initTextFeld( 5, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Name" ) ),
+    anzahl( initTextFeld( 110, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " ) ),
+    prozent( initFBalken( 220, 0, 400, 20, FBalken::Style::normal ) ),
+    details( initKnopf( 580, 0, 20, 20, 0, "" ) ),
+    ausklappen( bilder->get( "data/client/bilder/account.ltdb/ausklappen.png" ) ),
+    einklappen( bilder->get( "data/client/bilder/account.ltdb/einklappen.png" ) ),
+    sortSpalte( new Text( "Name" ) ),
+    sortAbsteigend( 0 ),
+    tickVal( 0 ),
+    rend( 0 )
 {
 {
-	details->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	details->setHintergrundBildZ( ausklappen->getThis() );
-	initToolTip( details, "Details anzeigen.", zSchrift, hauptScreen );
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setRamenBreite( 1 );
-	ram->setSize( 0, 20 );
-	if( daten->name )
-		name->setText( daten->name->getText() );
-	anzahl->zText()->append( daten->anzahl );
-    TextRenderer rd( zSchrift->getThis() );
+    details->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    details->setHintergrundBildZ( dynamic_cast<Bild *>( ausklappen->getThis() ) );
+    initToolTip( details, "Details anzeigen." );
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setRamenBreite( 1 );
+    ram->setSize( 0, 20 );
+    if( daten->name )
+        name->setText( daten->name->getText() );
+    anzahl->zText()->append( daten->anzahl );
+    TextRenderer rd( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     rd.setSchriftSize( 12 );
     rd.setSchriftSize( 12 );
-	name->setSize( rd.getTextBreite( name->zText()->getText() ) + 5, name->getHeight() );
-	anzahl->setPosition( ( name->getX() + name->getBreite() + 10 ) < 100 ? 100 : ( name->getX() + name->getBreite() + 10 ), anzahl->getY() );
-	anzahl->setSize( rd.getTextBreite( anzahl->zText()->getText() ) + 5, anzahl->getHeight() );
-	prozent->setPosition( ( anzahl->getX() + anzahl->getBreite() + 10 ) < 200 ? 200 : ( anzahl->getX() + anzahl->getBreite() + 10 ), prozent->getY() );
-	prozent->setAktionAnzahl( 100 );
-	prozent->aktionPlus( daten->prozent );
+    name->setSize( rd.getTextBreite( name->zText()->getText() ) + 5, name->getHeight() );
+    anzahl->setPosition( ( name->getX() + name->getBreite() + 10 ) < 100 ? 100 : ( name->getX() + name->getBreite() + 10 ), anzahl->getY() );
+    anzahl->setSize( rd.getTextBreite( anzahl->zText()->getText() ) + 5, anzahl->getHeight() );
+    prozent->setPosition( ( anzahl->getX() + anzahl->getBreite() + 10 ) < 200 ? 200 : ( anzahl->getX() + anzahl->getBreite() + 10 ), prozent->getY() );
+    prozent->setAktionAnzahl( 100 );
+    prozent->aktionPlus( daten->prozent );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSPListeEintrag::~AccountSPListeEintrag()
 AccountSPListeEintrag::~AccountSPListeEintrag()
 {
 {
-	ram->release();
-	members->release();
-	name->release();
-	anzahl->release();
-	prozent->release();
-	details->release();
-	ausklappen->release();
-	einklappen->release();
-	sortSpalte->release();
-	daten->name->release();
-	delete daten;
+    ram->release();
+    members->release();
+    name->release();
+    anzahl->release();
+    prozent->release();
+    details->release();
+    ausklappen->release();
+    einklappen->release();
+    sortSpalte->release();
+    daten->name->release();
+    delete daten;
 }
 }
 
 
 // privat
 // privat
 int AccountSPListeEintrag::getReihenfolge( int *arr )
 int AccountSPListeEintrag::getReihenfolge( int *arr )
 {
 {
-	int anz = members->getEintragAnzahl();
-	if( !anz || !HATSTYLE( ASPLEDStyle::Ausklappbar ) )
-		return 0;
-	int ret = 0;
-	bool *fertig = new bool[ anz ];
-	ZeroMemory( fertig, anz );
-	for( int i = 0; i < anz; i++ )
-	{
-		int index = -1;
-		int minMax = 0;
-		Text minMaxT;
-		for( int j = 0; j < anz; j++ )
-		{
-			AccountSPListeEintrag *tmp = members->z( j );
-			if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zDaten()->name > minMaxT ) || ( !sortAbsteigend && *tmp->zDaten()->name < minMaxT ) ) )
-			{
-				minMaxT = tmp->zDaten()->name->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->zDaten()->anzahl > minMax ) || ( !sortAbsteigend && tmp->zDaten()->anzahl < minMax ) ) )
-			{
-				minMax = tmp->zDaten()->anzahl;
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Prozent" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->zDaten()->prozent > minMax ) || ( !sortAbsteigend && tmp->zDaten()->prozent < minMax ) ) )
-			{
-				minMax = tmp->zDaten()->prozent;
-				index = j;
-			}
-		}
-		if( index < 0 )
-			break;
-		fertig[ index ] = 1;
-		arr[ ret ] = index;
-		ret++;
-	}
-	delete[] fertig;
-	return ret;
+    int anz = members->getEintragAnzahl();
+    if( !anz || !HATSTYLE( ASPLEDStyle::Ausklappbar ) )
+        return 0;
+    int ret = 0;
+    bool *fertig = new bool[ anz ];
+    ZeroMemory( fertig, anz );
+    for( int i = 0; i < anz; i++ )
+    {
+        int index = -1;
+        int minMax = 0;
+        Text minMaxT;
+        for( int j = 0; j < anz; j++ )
+        {
+            AccountSPListeEintrag *tmp = members->z( j );
+            if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
+                                                                     ( sortAbsteigend && *tmp->zDaten()->name > minMaxT ) || ( !sortAbsteigend && *tmp->zDaten()->name < minMaxT ) ) )
+            {
+                minMaxT = tmp->zDaten()->name->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && tmp->zDaten()->anzahl > minMax ) || ( !sortAbsteigend && tmp->zDaten()->anzahl < minMax ) ) )
+            {
+                minMax = tmp->zDaten()->anzahl;
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Prozent" ) && !fertig[ j ] && ( index < 0 ||
+                                                                             ( sortAbsteigend && tmp->zDaten()->prozent > minMax ) || ( !sortAbsteigend && tmp->zDaten()->prozent < minMax ) ) )
+            {
+                minMax = tmp->zDaten()->prozent;
+                index = j;
+            }
+        }
+        if( index < 0 )
+            break;
+        fertig[ index ] = 1;
+        arr[ ret ] = index;
+        ret++;
+    }
+    delete[] fertig;
+    return ret;
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSPListeEintrag::addMember( AccountSPListeEintrag *e )
 void AccountSPListeEintrag::addMember( AccountSPListeEintrag *e )
 {
 {
-	members->add( e );
-	rend = 1;
+    members->add( e );
+    rend = 1;
 }
 }
 
 
 void AccountSPListeEintrag::setSortSpalte( char *sp )
 void AccountSPListeEintrag::setSortSpalte( char *sp )
 {
 {
-	sortSpalte->setText( sp );
-	if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
-	{
-		int anz = members->getEintragAnzahl();
-		for( int i = 0; i < anz; i++ )
-			members->z( i )->setSortSpalte( sp );
-	}
-	rend = 1;
+    sortSpalte->setText( sp );
+    if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
+    {
+        int anz = members->getEintragAnzahl();
+        for( int i = 0; i < anz; i++ )
+            members->z( i )->setSortSpalte( sp );
+    }
+    rend = 1;
 }
 }
 
 
 void AccountSPListeEintrag::setSortRichtung( bool absteigend )
 void AccountSPListeEintrag::setSortRichtung( bool absteigend )
 {
 {
-	sortAbsteigend = absteigend;
-	if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
-	{
-		int anz = members->getEintragAnzahl();
-		for( int i = 0; i < anz; i++ )
-			members->z( i )->setSortRichtung( absteigend );
-	}
-	rend = 1;
+    sortAbsteigend = absteigend;
+    if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
+    {
+        int anz = members->getEintragAnzahl();
+        for( int i = 0; i < anz; i++ )
+            members->z( i )->setSortRichtung( absteigend );
+    }
+    rend = 1;
 }
 }
 
 
 bool AccountSPListeEintrag::tick( double tickVal )
 bool AccountSPListeEintrag::tick( double tickVal )
 {
 {
-	rend |= details->tick( tickVal );
-	int anz = members->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		rend |= members->z( i )->tick( tickVal );
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	this->tickVal -= val;
-	if( val )
-	{
-		if( details->zHintergrundBild() == ausklappen && ram->getHeight() != 20 )
-		{
-			if( ram->getHeight() - val < 20 )
-				ram->setSize( ram->getBreite(), 20 );
-			else
-				ram->setSize( ram->getBreite(), ram->getHeight() - val );
-			rend = 1;
-		}
-		if( details->zHintergrundBild() == einklappen )
-		{
-			int maxHö = 20;
-			for( int i = 0; i < anz; i++ )
-				maxHö += 5 + members->z( i )->getHeight();
-			if( maxHö > 20 )
-				maxHö += 5;
-			if( ram->getHeight() > maxHö )
-			{
-				if( ram->getHeight() - val < maxHö )
-					ram->setSize( ram->getBreite(), maxHö );
-				else
-					ram->setSize( ram->getBreite(), ram->getHeight() - val );
-				rend = 1;
-			}
-			if( ram->getHeight() < maxHö )
-			{
-				if( ram->getHeight() + val > maxHö )
-					ram->setSize( ram->getBreite(), maxHö );
-				else
-					ram->setSize( ram->getBreite(), ram->getHeight() + val );
-				rend = 1;
-			}
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= details->tick( tickVal );
+    int anz = members->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        rend |= members->z( i )->tick( tickVal );
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    this->tickVal -= val;
+    if( val )
+    {
+        if( details->zHintergrundBild() == ausklappen && ram->getHeight() != 20 )
+        {
+            if( ram->getHeight() - val < 20 )
+                ram->setSize( ram->getBreite(), 20 );
+            else
+                ram->setSize( ram->getBreite(), ram->getHeight() - val );
+            rend = 1;
+        }
+        if( details->zHintergrundBild() == einklappen )
+        {
+            int maxHö = 20;
+            for( int i = 0; i < anz; i++ )
+                maxHö += 5 + members->z( i )->getHeight();
+            if( maxHö > 20 )
+                maxHö += 5;
+            if( ram->getHeight() > maxHö )
+            {
+                if( ram->getHeight() - val < maxHö )
+                    ram->setSize( ram->getBreite(), maxHö );
+                else
+                    ram->setSize( ram->getBreite(), ram->getHeight() - val );
+                rend = 1;
+            }
+            if( ram->getHeight() < maxHö )
+            {
+                if( ram->getHeight() + val > maxHö )
+                    ram->setSize( ram->getBreite(), maxHö );
+                else
+                    ram->setSize( ram->getBreite(), ram->getHeight() + val );
+                rend = 1;
+            }
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountSPListeEintrag::doPublicMausEreignis( MausEreignis &me )
 void AccountSPListeEintrag::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	int mx = me.mx;
-	int my = me.my;
-	bool vera = 0;
-	if( me.mx < 0 || me.my < 0 || me.mx > ram->getBreite() || me.my > ram->getHeight() )
-	{
-		vera = 1;
-		me.verarbeitet = 1;
-	}
-	if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
-	{
-		bool ok = me.verarbeitet;
-		details->doPublicMausEreignis( me );
-		if( !ok && me.verarbeitet && me.id == ME_RLinks )
-		{
-			if( details->zHintergrundBild() == ausklappen )
-			{
-				details->setHintergrundBildZ( einklappen->getThis() );
-				// TODO: details->zToolTip()->setText( "Karten verbergen." );
-			}
-			else
-			{
-				details->setHintergrundBildZ( ausklappen->getThis() );
-				// TODO: details->zToolTip()->setText( "Karten anzeigen." );
-			}
-		}
-	}
-	if( ram->getHeight() > 20 )
-	{
-		int anz = members->getEintragAnzahl();
-		int *rf = new int[ anz ];
-		int rfAnz = getReihenfolge( rf );
-		me.my -= 25;
-		for( int i = 0; i < rfAnz; i++ )
-		{
-			members->z( rf[ i ] )->doPublicMausEreignis( me );
-			me.my -= members->z( rf[ i ] )->getHeight() + 5;
-		}
-		delete[] rf;
-	}
-	me.mx = mx;
-	me.my = my;
-	if( vera )
-		me.verarbeitet = 0;
+    int mx = me.mx;
+    int my = me.my;
+    bool vera = 0;
+    if( me.mx < 0 || me.my < 0 || me.mx > ram->getBreite() || me.my > ram->getHeight() )
+    {
+        vera = 1;
+        me.verarbeitet = 1;
+    }
+    if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
+    {
+        bool ok = me.verarbeitet;
+        details->doPublicMausEreignis( me );
+        if( !ok && me.verarbeitet && me.id == ME_RLinks )
+        {
+            if( details->zHintergrundBild() == ausklappen )
+            {
+                details->setHintergrundBildZ( dynamic_cast<Bild *>( einklappen->getThis() ) );
+                // TODO: details->zToolTip()->setText( "Karten verbergen." );
+            }
+            else
+            {
+                details->setHintergrundBildZ( dynamic_cast<Bild *>( ausklappen->getThis() ) );
+                // TODO: details->zToolTip()->setText( "Karten anzeigen." );
+            }
+        }
+    }
+    if( ram->getHeight() > 20 )
+    {
+        int anz = members->getEintragAnzahl();
+        int *rf = new int[ anz ];
+        int rfAnz = getReihenfolge( rf );
+        me.my -= 25;
+        for( int i = 0; i < rfAnz; i++ )
+        {
+            members->z( rf[ i ] )->doPublicMausEreignis( me );
+            me.my -= members->z( rf[ i ] )->getHeight() + 5;
+        }
+        delete[] rf;
+    }
+    me.mx = mx;
+    me.my = my;
+    if( vera )
+        me.verarbeitet = 0;
 }
 }
 
 
 void AccountSPListeEintrag::render( int xOff, int yOff, int breite, Bild &zRObj )
 void AccountSPListeEintrag::render( int xOff, int yOff, int breite, Bild &zRObj )
 {
 {
-	ram->setSize( breite, ram->getHeight() );
-	details->setPosition( ram->getBreite() - 20, details->getY() );
-	if( !zRObj.setDrawOptions( xOff, yOff, breite, ram->getHeight() ) )
-		return;
-	name->render( zRObj );
-	anzahl->render( zRObj );
-	prozent->render( zRObj );
-	if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
-		details->render( zRObj );
-	ram->render( zRObj );
-	if( ram->getHeight() > 20 )
-	{
-		zRObj.drawLinieH( 0, 20, ram->getBreite(), ram->getFarbe() );
-		int anz = members->getEintragAnzahl();
-		int *rf = new int[ anz ];
-		int rfAnz = getReihenfolge( rf );
-		yOff = 0;
-		for( int i = 0; i < rfAnz; i++ )
-		{
-			members->z( rf[ i ] )->render( 5, yOff + 25, breite - 10, zRObj );
-			yOff += 5 + members->z( rf[ i ] )->getHeight();
-		}
-		delete[] rf;
-	}
-	zRObj.releaseDrawOptions();
+    ram->setSize( breite, ram->getHeight() );
+    details->setPosition( ram->getBreite() - 20, details->getY() );
+    if( !zRObj.setDrawOptions( xOff, yOff, breite, ram->getHeight() ) )
+        return;
+    name->render( zRObj );
+    anzahl->render( zRObj );
+    prozent->render( zRObj );
+    if( HATSTYLE( ASPLEDStyle::Ausklappbar ) )
+        details->render( zRObj );
+    ram->render( zRObj );
+    if( ram->getHeight() > 20 )
+    {
+        zRObj.drawLinieH( 0, 20, ram->getBreite(), ram->getFarbe() );
+        int anz = members->getEintragAnzahl();
+        int *rf = new int[ anz ];
+        int rfAnz = getReihenfolge( rf );
+        yOff = 0;
+        for( int i = 0; i < rfAnz; i++ )
+        {
+            members->z( rf[ i ] )->render( 5, yOff + 25, breite - 10, zRObj );
+            yOff += 5 + members->z( rf[ i ] )->getHeight();
+        }
+        delete[] rf;
+    }
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int AccountSPListeEintrag::getHeight() const
 int AccountSPListeEintrag::getHeight() const
 {
 {
-	return ram->getHeight();
+    return ram->getHeight();
 }
 }
 
 
 AccountSPListeEintragDaten *AccountSPListeEintrag::zDaten() const
 AccountSPListeEintragDaten *AccountSPListeEintrag::zDaten() const
 {
 {
-	return daten;
-}
-
-// Reference Counting
-AccountSPListeEintrag *AccountSPListeEintrag::getThis()
-{
-	ref++;
-	return this;
-}
-
-AccountSPListeEintrag *AccountSPListeEintrag::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return daten;
 }
 }
 
 
 
 
 // Inhalt der AccountSPListe Klasse aus AccountSpielPartner.h
 // Inhalt der AccountSPListe Klasse aus AccountSpielPartner.h
 // Konstruktor
 // Konstruktor
-AccountSPListe::AccountSPListe( Schrift *zSchrift )
-	: Zeichnung(),
-  schrift( zSchrift->getThis() ),
-  ram( new LRahmen() ),
-  scroll( new VScrollBar() ),
-  skp( new RCArray< AccountSPListeEintrag >() ),
-  spk( new RCArray< AccountSPListeEintrag >() ),
-  psk( new RCArray< AccountSPListeEintrag >() ),
-  gruppierung( new Text( "Spieler/Spiel/Karte" ) ),
-  sortSpalte( new Text( "Name" ) ),
-  sortAbsteigend( 0 ),
-  rend( 0 )
+AccountSPListe::AccountSPListe()
+    : Zeichnung(),
+    ram( new LRahmen() ),
+    scroll( new VScrollBar() ),
+    skp( new RCArray< AccountSPListeEintrag >() ),
+    spk( new RCArray< AccountSPListeEintrag >() ),
+    psk( new RCArray< AccountSPListeEintrag >() ),
+    gruppierung( new Text( "Spieler/Spiel/Karte" ) ),
+    sortSpalte( new Text( "Name" ) ),
+    sortAbsteigend( 0 ),
+    rend( 0 )
 {
 {
-	pos = Punkt( 10, 40 );
-	ram->setSize( 760, 380 );
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setRamenBreite( 1 );
+    pos = Punkt( 10, 40 );
+    ram->setSize( 760, 380 );
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setRamenBreite( 1 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSPListe::~AccountSPListe()
 AccountSPListe::~AccountSPListe()
 {
 {
-	schrift->release();
-	ram->release();
-	scroll->release();
-	skp->release();
-	spk->release();
-	psk->release();
-	gruppierung->release();
-	sortSpalte->release();
+    ram->release();
+    scroll->release();
+    skp->release();
+    spk->release();
+    psk->release();
+    gruppierung->release();
+    sortSpalte->release();
 }
 }
 
 
 // privat
 // privat
 int AccountSPListe::getReihenfolge( int *arr )
 int AccountSPListe::getReihenfolge( int *arr )
 {
 {
-	RCArray< AccountSPListeEintrag > *members = 0;
-	if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
-		members = skp;
-	if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
-		members = spk;
-	if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
-		members = psk;
+    RCArray< AccountSPListeEintrag > *members = 0;
+    if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
+        members = skp;
+    if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
+        members = spk;
+    if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
+        members = psk;
     if( !members )
     if( !members )
         return 0;
         return 0;
-	int anz = members->getEintragAnzahl();
-	if( !anz )
-		return 0;
-	int ret = 0;
-	bool *fertig = new bool[ anz ];
-	ZeroMemory( fertig, anz );
-	for( int i = 0; i < anz; i++ )
-	{
-		int index = -1;
-		int minMax = 0;
-		Text minMaxT;
-		for( int j = 0; j < anz; j++ )
-		{
-			AccountSPListeEintrag *tmp = members->z( j );
-			if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zDaten()->name > minMaxT ) || ( !sortAbsteigend && *tmp->zDaten()->name < minMaxT ) ) )
-			{
-				minMaxT = tmp->zDaten()->name->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->zDaten()->anzahl > minMax ) || ( !sortAbsteigend && tmp->zDaten()->anzahl < minMax ) ) )
-			{
-				minMax = tmp->zDaten()->anzahl;
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Prozent" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->zDaten()->prozent > minMax ) || ( !sortAbsteigend && tmp->zDaten()->prozent < minMax ) ) )
-			{
-				minMax = tmp->zDaten()->prozent;
-				index = j;
-			}
-		}
-		if( index < 0 )
-			break;
-		fertig[ index ] = 1;
-		arr[ ret ] = index;
-		ret++;
-	}
-	delete[] fertig;
-	return ret;
+    int anz = members->getEintragAnzahl();
+    if( !anz )
+        return 0;
+    int ret = 0;
+    bool *fertig = new bool[ anz ];
+    ZeroMemory( fertig, anz );
+    for( int i = 0; i < anz; i++ )
+    {
+        int index = -1;
+        int minMax = 0;
+        Text minMaxT;
+        for( int j = 0; j < anz; j++ )
+        {
+            AccountSPListeEintrag *tmp = members->z( j );
+            if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
+                                                                     ( sortAbsteigend && *tmp->zDaten()->name > minMaxT ) || ( !sortAbsteigend && *tmp->zDaten()->name < minMaxT ) ) )
+            {
+                minMaxT = tmp->zDaten()->name->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && tmp->zDaten()->anzahl > minMax ) || ( !sortAbsteigend && tmp->zDaten()->anzahl < minMax ) ) )
+            {
+                minMax = tmp->zDaten()->anzahl;
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Prozent" ) && !fertig[ j ] && ( index < 0 ||
+                                                                             ( sortAbsteigend && tmp->zDaten()->prozent > minMax ) || ( !sortAbsteigend && tmp->zDaten()->prozent < minMax ) ) )
+            {
+                minMax = tmp->zDaten()->prozent;
+                index = j;
+            }
+        }
+        if( index < 0 )
+            break;
+        fertig[ index ] = 1;
+        arr[ ret ] = index;
+        ret++;
+    }
+    delete[] fertig;
+    return ret;
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSPListe::reset()
 void AccountSPListe::reset()
 {
 {
-	lockZeichnung();
-	skp->leeren();
-	spk->leeren();
-	psk->leeren();
-	unlockZeichnung();
+    lockZeichnung();
+    skp->leeren();
+    spk->leeren();
+    psk->leeren();
+    unlockZeichnung();
 }
 }
 
 
 void AccountSPListe::ladeDaten( int accId )
 void AccountSPListe::ladeDaten( int accId )
 {
 {
-	Array< int > *spieler = new Array< int >();
-	Array< int > *karten = new Array< int >();
-	Array< int > *anzahl = new Array< int >();
-	if( infoClient->getSpielPartnerListe( accId, spieler, karten, anzahl ) )
-	{
-		int anz = spieler->getEintragAnzahl();
-		int spielerAnzahl = 0;
-		int spielArtAnzahl = 0;
-		int anzahlGesammt = 0;
-		Array< int > *spielerUnique = new Array< int >();
-		Array< int > *spielArt = new Array< int >();
-		for( int i = 0; i < anz; i++ )
-		{ // Spiel Art Ids ermitteln
-			anzahlGesammt += anzahl->get( i );
-			if( spieler->hat( i ) && spielerUnique->getWertIndex( spieler->get( i ) ) < 0 )
-			{
-				spielerUnique->set( spieler->get( i ), spielerAnzahl );
-				spielerAnzahl++;
-			}
-			if( !spielArt->hat( i ) )
-			{
-				spielArtAnzahl++;
-				int id = infoClient->getSpielId( karten->get( i ) );
-				for( int j = i; j < anz; j++ )
-				{
-					if( karten->get( j ) == karten->get( i ) )
-						spielArt->set( id, j );
-				}
-			}
-		}
-		spielerUnique->release();
-		// Spiel/Karte/Spieler Tabelle initialisieren
-		Array< int > *spielArtVera = new Array< int >();
-		for( int i = 0; i < spielArtAnzahl; i++ )
-		{ // Spiel Arten Einträge
-			int id = 0;
-			for( int j = 0; j < anz; j++ )
-			{
-				if( spielArtVera->getWertIndex( spielArt->get( j ) ) < 0 )
-				{
-					id = spielArt->get( j );
-					spielArtVera->add( id );
-					break;
-				}
-			}
-			if( !id )
-				break;
-			AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
-			tmp->id = id;
-			tmp->name = infoClient->getSpielName( tmp->id );
-			tmp->style = ASPLEDStyle::SpielArt | ASPLEDStyle::Ausklappbar;
-			tmp->anzahl = 0;
-			for( int j = 0; j < anz; j++ )
-			{
-				if( spielArt->get( j ) == tmp->id )
-					tmp->anzahl += anzahl->get( j );
-			}
-			tmp->prozent = tmp->anzahl * 100 / anzahlGesammt;
-			AccountSPListeEintrag *spielE = new AccountSPListeEintrag( tmp, schrift );
-			skp->add( spielE );
-			Array< int > *kartenVera = new Array< int >();
-			for( int j = 0; j < anz; j++ )
-			{ // Karten Einträge
-				int id = 0;
-				for( int k = 0; k < anz; k++ )
-				{
-					if( spielArt->get( k ) == tmp->id )
-					{
-						if( kartenVera->getWertIndex( karten->get( k ) ) < 0 )
-						{
-							id = karten->get( k );
-							kartenVera->add( id );
-							break;
-						}
-					}
-				}
-				if( !id )
-					break;
-				AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
-				tmpk->id = id;
-				tmpk->name = infoClient->getKarteName( tmpk->id );
-				tmpk->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::Karte;
-				tmpk->anzahl = 0;
-				for( int k = 0; k < anz; k++ )
-				{
-					if( karten->get( k ) == tmpk->id )
-						tmpk->anzahl += anzahl->get( k );
-				}
-				tmpk->prozent = tmpk->anzahl * 100 / tmp->anzahl;
-				AccountSPListeEintrag *karteE = new AccountSPListeEintrag( tmpk, schrift );
-				spielE->addMember( karteE );
-				Array< int > *spielerVera = new Array< int >();
-				for( int k = 0; k < anz; k++ )
-				{ // Spieler Einträge
-					int id = 0;
-					int gAnz = 0;
-					for( int l = 0; l < anz; l++ )
-					{
-						if( karten->get( l ) == tmpk->id )
-						{
-							if( spielerVera->getWertIndex( spieler->get( l ) ) < 0 )
-							{
-								id = spieler->get( l );
-								spielerVera->add( id );
-								gAnz = anzahl->get( l );
-								break;
-							}
-						}
-					}
-					if( !id )
-						break;
-					AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
-					tmps->id = id;
-					tmps->name = infoClient->getSpielerName( tmps->id );
-					tmps->style = ASPLEDStyle::Spieler;
-					tmps->anzahl = gAnz;
-					tmps->prozent = tmps->anzahl * 100 / tmpk->anzahl;
-					karteE->addMember( new AccountSPListeEintrag( tmps, schrift ) );
-				}
-				spielerVera->release();
-			}
-			kartenVera->release();
-		}
-		spielArtVera->leeren();
-		// Spiel/Spieler/Karte Tabelle initialisieren
-		for( int i = 0; i < spielArtAnzahl; i++ )
-		{ // Spiel Arten Einträge
-			int id = 0;
-			for( int j = 0; j < anz; j++ )
-			{
-				if( spielArtVera->getWertIndex( spielArt->get( j ) ) < 0 )
-				{
-					id = spielArt->get( j );
-					spielArtVera->add( id );
-					break;
-				}
-			}
-			if( !id )
-				break;
-			AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
-			tmp->id = id;
-			tmp->name = infoClient->getSpielName( tmp->id );
-			tmp->style = ASPLEDStyle::SpielArt | ASPLEDStyle::Ausklappbar;
-			tmp->anzahl = 0;
-			for( int j = 0; j < anz; j++ )
-			{
-				if( spielArt->get( j ) == tmp->id )
-					tmp->anzahl += anzahl->get( j );
-			}
-			tmp->prozent = tmp->anzahl * 100 / anzahlGesammt;
-			AccountSPListeEintrag *spielE = new AccountSPListeEintrag( tmp, schrift );
-			spk->add( spielE );
-			Array< int > *spielerVera = new Array< int >();
-			for( int j = 0; j < anz; j++ )
-			{ // Spieler Einträge
-				int id = 0;
-				for( int k = 0; k < anz; k++ )
-				{
-					if( spielArt->get( k ) == tmp->id )
-					{
-						if( spielerVera->getWertIndex( spieler->get( k ) ) < 0 )
-						{
-							id = spieler->get( k );
-							spielerVera->add( id );
-							break;
-						}
-					}
-				}
-				if( !id )
-					break;
-				AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
-				tmps->id = id;
-				tmps->name = infoClient->getSpielerName( tmps->id );
-				tmps->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::Spieler;
-				tmps->anzahl = 0;
-				for( int k = 0; k < anz; k++ )
-				{
-					if( spieler->get( k ) == tmps->id && spielArt->get( k ) == tmp->id )
-						tmps->anzahl += anzahl->get( k );
-				}
-				tmps->prozent = tmps->anzahl * 100 / tmp->anzahl;
-				AccountSPListeEintrag *spielerE = new AccountSPListeEintrag( tmps, schrift );
-				spielE->addMember( spielerE );
-				Array< int > *karteVera = new Array< int >();
-				for( int k = 0; k < anz; k++ )
-				{ // Karten Einträge
-					int id = 0;
-					int gAnz = 0;
-					for( int l = 0; l < anz; l++ )
-					{
-						if( spieler->get( l ) == tmps->id && spielArt->get( l ) == tmp->id )
-						{
-							if( karteVera->getWertIndex( karten->get( l ) ) < 0 )
-							{
-								id = karten->get( l );
-								karteVera->add( id );
-								gAnz = anzahl->get( l );
-								break;
-							}
-						}
-					}
-					if( !id )
-						break;
-					AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
-					tmpk->id = id;
-					tmpk->name = infoClient->getKarteName( tmpk->id );
-					tmpk->style = ASPLEDStyle::Karte;
-					tmpk->anzahl = gAnz;
-					tmpk->prozent = tmpk->anzahl * 100 / tmps->anzahl;
-					spielerE->addMember( new AccountSPListeEintrag( tmpk, schrift ) );
-				}
-				karteVera->release();
-			}
-			spielerVera->release();
-		}
-		spielArtVera->release();
-		// Spieler/Spiel/Karte Tabelle initialisieren
-		Array< int > *spielerVera = new Array< int >();
-		for( int i = 0; i < spielerAnzahl; i++ )
-		{ // Spieler Einträge
-			int id = 0;
-			for( int j = 0; j < anz; j++ )
-			{
-				if( spielerVera->getWertIndex( spieler->get( j ) ) < 0 )
-				{
-					id = spieler->get( j );
-					spielerVera->add( id );
-					break;
-				}
-			}
-			if( !id )
-				break;
-			AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
-			tmp->id = id;
-			tmp->name = infoClient->getSpielerName( tmp->id );
-			tmp->style = ASPLEDStyle::Spieler | ASPLEDStyle::Ausklappbar;
-			tmp->anzahl = 0;
-			for( int j = 0; j < anz; j++ )
-			{
-				if( spieler->get( j ) == tmp->id )
-					tmp->anzahl += anzahl->get( j );
-			}
-			tmp->prozent = tmp->anzahl * 100 / anzahlGesammt;
-			AccountSPListeEintrag *spielerE = new AccountSPListeEintrag( tmp, schrift );
-			psk->add( spielerE );
-			Array< int > *spielVera = new Array< int >();
-			for( int j = 0; j < anz; j++ )
-			{ // Spiel Einträge
-				int id = 0;
-				for( int k = 0; k < anz; k++ )
-				{
-					if( spieler->get( k ) == tmp->id )
-					{
-						if( spielVera->getWertIndex( spielArt->get( k ) ) < 0 )
-						{
-							id = spielArt->get( k );
-							spielVera->add( id );
-							break;
-						}
-					}
-				}
-				if( !id )
-					break;
-				AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
-				tmps->id = id;
-				tmps->name = infoClient->getSpielName( tmps->id );
-				tmps->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::SpielArt;
-				tmps->anzahl = 0;
-				for( int k = 0; k < anz; k++ )
-				{
-					if( spieler->get( k ) == tmp->id && spielArt->get( k ) == tmps->id )
-						tmps->anzahl += anzahl->get( k );
-				}
-				tmps->prozent = tmps->anzahl * 100 / tmp->anzahl;
-				AccountSPListeEintrag *spielE = new AccountSPListeEintrag( tmps, schrift );
-				spielerE->addMember( spielE );
-				Array< int > *karteVera = new Array< int >();
-				for( int k = 0; k < anz; k++ )
-				{ // Karte Einträge
-					int id = 0;
-					int gAnz = 0;
-					for( int l = 0; l < anz; l++ )
-					{
-						if( spieler->get( l ) == tmp->id && spielArt->get( l ) == tmps->id )
-						{
-							if( karteVera->getWertIndex( karten->get( l ) ) < 0 )
-							{
-								id = karten->get( l );
-								karteVera->add( id );
-								gAnz = anzahl->get( l );
-								break;
-							}
-						}
-					}
-					if( !id )
-						break;
-					AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
-					tmpk->id = id;
-					tmpk->name = infoClient->getKarteName( tmpk->id );
-					tmpk->style = ASPLEDStyle::Karte;
-					tmpk->anzahl = gAnz;
-					tmpk->prozent = tmpk->anzahl * 100 / tmps->anzahl;
-					spielE->addMember( new AccountSPListeEintrag( tmpk, schrift ) );
-				}
-				karteVera->release();
-			}
-			spielVera->release();
-		}
-		spielerVera->release();
-		spielArt->release();
-	}
-	else
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spielpartner dieses Spielers konnten nicht ermittelt werden." ), new Text( "Ok" ) );
-	spieler->release();
-	karten->release();
-	anzahl->release();
+    Array< int > *spieler = new Array< int >();
+    Array< int > *karten = new Array< int >();
+    Array< int > *anzahl = new Array< int >();
+    if( infoClient->getSpielPartnerListe( accId, spieler, karten, anzahl ) )
+    {
+        int anz = spieler->getEintragAnzahl();
+        int spielerAnzahl = 0;
+        int spielArtAnzahl = 0;
+        int anzahlGesammt = 0;
+        Array< int > *spielerUnique = new Array< int >();
+        Array< int > *spielArt = new Array< int >();
+        for( int i = 0; i < anz; i++ )
+        { // Spiel Art Ids ermitteln
+            anzahlGesammt += anzahl->get( i );
+            if( spieler->hat( i ) && spielerUnique->getWertIndex( spieler->get( i ) ) < 0 )
+            {
+                spielerUnique->set( spieler->get( i ), spielerAnzahl );
+                spielerAnzahl++;
+            }
+            if( !spielArt->hat( i ) )
+            {
+                spielArtAnzahl++;
+                int id = infoClient->getSpielId( karten->get( i ) );
+                for( int j = i; j < anz; j++ )
+                {
+                    if( karten->get( j ) == karten->get( i ) )
+                        spielArt->set( id, j );
+                }
+            }
+        }
+        spielerUnique->release();
+        // Spiel/Karte/Spieler Tabelle initialisieren
+        Array< int > *spielArtVera = new Array< int >();
+        for( int i = 0; i < spielArtAnzahl; i++ )
+        { // Spiel Arten Einträge
+            int id = 0;
+            for( int j = 0; j < anz; j++ )
+            {
+                if( spielArtVera->getWertIndex( spielArt->get( j ) ) < 0 )
+                {
+                    id = spielArt->get( j );
+                    spielArtVera->add( id );
+                    break;
+                }
+            }
+            if( !id )
+                break;
+            AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
+            tmp->id = id;
+            tmp->name = infoClient->getSpielName( tmp->id );
+            tmp->style = ASPLEDStyle::SpielArt | ASPLEDStyle::Ausklappbar;
+            tmp->anzahl = 0;
+            for( int j = 0; j < anz; j++ )
+            {
+                if( spielArt->get( j ) == tmp->id )
+                    tmp->anzahl += anzahl->get( j );
+            }
+            tmp->prozent = tmp->anzahl * 100 / anzahlGesammt;
+            AccountSPListeEintrag *spielE = new AccountSPListeEintrag( tmp );
+            skp->add( spielE );
+            Array< int > *kartenVera = new Array< int >();
+            for( int j = 0; j < anz; j++ )
+            { // Karten Einträge
+                int id = 0;
+                for( int k = 0; k < anz; k++ )
+                {
+                    if( spielArt->get( k ) == tmp->id )
+                    {
+                        if( kartenVera->getWertIndex( karten->get( k ) ) < 0 )
+                        {
+                            id = karten->get( k );
+                            kartenVera->add( id );
+                            break;
+                        }
+                    }
+                }
+                if( !id )
+                    break;
+                AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
+                tmpk->id = id;
+                tmpk->name = infoClient->getKarteName( tmpk->id );
+                tmpk->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::Karte;
+                tmpk->anzahl = 0;
+                for( int k = 0; k < anz; k++ )
+                {
+                    if( karten->get( k ) == tmpk->id )
+                        tmpk->anzahl += anzahl->get( k );
+                }
+                tmpk->prozent = tmpk->anzahl * 100 / tmp->anzahl;
+                AccountSPListeEintrag *karteE = new AccountSPListeEintrag( tmpk );
+                spielE->addMember( karteE );
+                Array< int > *spielerVera = new Array< int >();
+                for( int k = 0; k < anz; k++ )
+                { // Spieler Einträge
+                    int id = 0;
+                    int gAnz = 0;
+                    for( int l = 0; l < anz; l++ )
+                    {
+                        if( karten->get( l ) == tmpk->id )
+                        {
+                            if( spielerVera->getWertIndex( spieler->get( l ) ) < 0 )
+                            {
+                                id = spieler->get( l );
+                                spielerVera->add( id );
+                                gAnz = anzahl->get( l );
+                                break;
+                            }
+                        }
+                    }
+                    if( !id )
+                        break;
+                    AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
+                    tmps->id = id;
+                    tmps->name = infoClient->getSpielerName( tmps->id );
+                    tmps->style = ASPLEDStyle::Spieler;
+                    tmps->anzahl = gAnz;
+                    tmps->prozent = tmps->anzahl * 100 / tmpk->anzahl;
+                    karteE->addMember( new AccountSPListeEintrag( tmps ) );
+                }
+                spielerVera->release();
+            }
+            kartenVera->release();
+        }
+        spielArtVera->leeren();
+        // Spiel/Spieler/Karte Tabelle initialisieren
+        for( int i = 0; i < spielArtAnzahl; i++ )
+        { // Spiel Arten Einträge
+            int id = 0;
+            for( int j = 0; j < anz; j++ )
+            {
+                if( spielArtVera->getWertIndex( spielArt->get( j ) ) < 0 )
+                {
+                    id = spielArt->get( j );
+                    spielArtVera->add( id );
+                    break;
+                }
+            }
+            if( !id )
+                break;
+            AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
+            tmp->id = id;
+            tmp->name = infoClient->getSpielName( tmp->id );
+            tmp->style = ASPLEDStyle::SpielArt | ASPLEDStyle::Ausklappbar;
+            tmp->anzahl = 0;
+            for( int j = 0; j < anz; j++ )
+            {
+                if( spielArt->get( j ) == tmp->id )
+                    tmp->anzahl += anzahl->get( j );
+            }
+            tmp->prozent = tmp->anzahl * 100 / anzahlGesammt;
+            AccountSPListeEintrag *spielE = new AccountSPListeEintrag( tmp );
+            spk->add( spielE );
+            Array< int > *spielerVera = new Array< int >();
+            for( int j = 0; j < anz; j++ )
+            { // Spieler Einträge
+                int id = 0;
+                for( int k = 0; k < anz; k++ )
+                {
+                    if( spielArt->get( k ) == tmp->id )
+                    {
+                        if( spielerVera->getWertIndex( spieler->get( k ) ) < 0 )
+                        {
+                            id = spieler->get( k );
+                            spielerVera->add( id );
+                            break;
+                        }
+                    }
+                }
+                if( !id )
+                    break;
+                AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
+                tmps->id = id;
+                tmps->name = infoClient->getSpielerName( tmps->id );
+                tmps->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::Spieler;
+                tmps->anzahl = 0;
+                for( int k = 0; k < anz; k++ )
+                {
+                    if( spieler->get( k ) == tmps->id && spielArt->get( k ) == tmp->id )
+                        tmps->anzahl += anzahl->get( k );
+                }
+                tmps->prozent = tmps->anzahl * 100 / tmp->anzahl;
+                AccountSPListeEintrag *spielerE = new AccountSPListeEintrag( tmps );
+                spielE->addMember( spielerE );
+                Array< int > *karteVera = new Array< int >();
+                for( int k = 0; k < anz; k++ )
+                { // Karten Einträge
+                    int id = 0;
+                    int gAnz = 0;
+                    for( int l = 0; l < anz; l++ )
+                    {
+                        if( spieler->get( l ) == tmps->id && spielArt->get( l ) == tmp->id )
+                        {
+                            if( karteVera->getWertIndex( karten->get( l ) ) < 0 )
+                            {
+                                id = karten->get( l );
+                                karteVera->add( id );
+                                gAnz = anzahl->get( l );
+                                break;
+                            }
+                        }
+                    }
+                    if( !id )
+                        break;
+                    AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
+                    tmpk->id = id;
+                    tmpk->name = infoClient->getKarteName( tmpk->id );
+                    tmpk->style = ASPLEDStyle::Karte;
+                    tmpk->anzahl = gAnz;
+                    tmpk->prozent = tmpk->anzahl * 100 / tmps->anzahl;
+                    spielerE->addMember( new AccountSPListeEintrag( tmpk ) );
+                }
+                karteVera->release();
+            }
+            spielerVera->release();
+        }
+        spielArtVera->release();
+        // Spieler/Spiel/Karte Tabelle initialisieren
+        Array< int > *spielerVera = new Array< int >();
+        for( int i = 0; i < spielerAnzahl; i++ )
+        { // Spieler Einträge
+            int id = 0;
+            for( int j = 0; j < anz; j++ )
+            {
+                if( spielerVera->getWertIndex( spieler->get( j ) ) < 0 )
+                {
+                    id = spieler->get( j );
+                    spielerVera->add( id );
+                    break;
+                }
+            }
+            if( !id )
+                break;
+            AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
+            tmp->id = id;
+            tmp->name = infoClient->getSpielerName( tmp->id );
+            tmp->style = ASPLEDStyle::Spieler | ASPLEDStyle::Ausklappbar;
+            tmp->anzahl = 0;
+            for( int j = 0; j < anz; j++ )
+            {
+                if( spieler->get( j ) == tmp->id )
+                    tmp->anzahl += anzahl->get( j );
+            }
+            tmp->prozent = tmp->anzahl * 100 / anzahlGesammt;
+            AccountSPListeEintrag *spielerE = new AccountSPListeEintrag( tmp );
+            psk->add( spielerE );
+            Array< int > *spielVera = new Array< int >();
+            for( int j = 0; j < anz; j++ )
+            { // Spiel Einträge
+                int id = 0;
+                for( int k = 0; k < anz; k++ )
+                {
+                    if( spieler->get( k ) == tmp->id )
+                    {
+                        if( spielVera->getWertIndex( spielArt->get( k ) ) < 0 )
+                        {
+                            id = spielArt->get( k );
+                            spielVera->add( id );
+                            break;
+                        }
+                    }
+                }
+                if( !id )
+                    break;
+                AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
+                tmps->id = id;
+                tmps->name = infoClient->getSpielName( tmps->id );
+                tmps->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::SpielArt;
+                tmps->anzahl = 0;
+                for( int k = 0; k < anz; k++ )
+                {
+                    if( spieler->get( k ) == tmp->id && spielArt->get( k ) == tmps->id )
+                        tmps->anzahl += anzahl->get( k );
+                }
+                tmps->prozent = tmps->anzahl * 100 / tmp->anzahl;
+                AccountSPListeEintrag *spielE = new AccountSPListeEintrag( tmps );
+                spielerE->addMember( spielE );
+                Array< int > *karteVera = new Array< int >();
+                for( int k = 0; k < anz; k++ )
+                { // Karte Einträge
+                    int id = 0;
+                    int gAnz = 0;
+                    for( int l = 0; l < anz; l++ )
+                    {
+                        if( spieler->get( l ) == tmp->id && spielArt->get( l ) == tmps->id )
+                        {
+                            if( karteVera->getWertIndex( karten->get( l ) ) < 0 )
+                            {
+                                id = karten->get( l );
+                                karteVera->add( id );
+                                gAnz = anzahl->get( l );
+                                break;
+                            }
+                        }
+                    }
+                    if( !id )
+                        break;
+                    AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
+                    tmpk->id = id;
+                    tmpk->name = infoClient->getKarteName( tmpk->id );
+                    tmpk->style = ASPLEDStyle::Karte;
+                    tmpk->anzahl = gAnz;
+                    tmpk->prozent = tmpk->anzahl * 100 / tmps->anzahl;
+                    spielE->addMember( new AccountSPListeEintrag( tmpk ) );
+                }
+                karteVera->release();
+            }
+            spielVera->release();
+        }
+        spielerVera->release();
+        spielArt->release();
+    }
+    else
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spielpartner dieses Spielers konnten nicht ermittelt werden." ), new Text( "Ok" ) );
+    spieler->release();
+    karten->release();
+    anzahl->release();
 }
 }
 
 
 void AccountSPListe::setGruppierung( char *gp )
 void AccountSPListe::setGruppierung( char *gp )
 {
 {
-	lockZeichnung();
-	gruppierung->setText( gp );
-	rend = 1;
-	unlockZeichnung();
+    lockZeichnung();
+    gruppierung->setText( gp );
+    rend = 1;
+    unlockZeichnung();
 }
 }
 
 
 void AccountSPListe::setSortSpalte( char *sp )
 void AccountSPListe::setSortSpalte( char *sp )
 {
 {
-	lockZeichnung();
-	sortSpalte->setText( sp );
-	int anz = skp->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		skp->z( i )->setSortSpalte( sp );
-	anz = spk->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		spk->z( i )->setSortSpalte( sp );
-	anz = psk->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		psk->z( i )->setSortSpalte( sp );
-	rend = 1;
-	unlockZeichnung();
+    lockZeichnung();
+    sortSpalte->setText( sp );
+    int anz = skp->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        skp->z( i )->setSortSpalte( sp );
+    anz = spk->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        spk->z( i )->setSortSpalte( sp );
+    anz = psk->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        psk->z( i )->setSortSpalte( sp );
+    rend = 1;
+    unlockZeichnung();
 }
 }
 
 
 void AccountSPListe::setSortRichtung( bool absteigend )
 void AccountSPListe::setSortRichtung( bool absteigend )
 {
 {
-	lockZeichnung();
-	sortAbsteigend = absteigend;
-	int anz = skp->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		skp->z( i )->setSortRichtung( absteigend );
-	anz = spk->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		spk->z( i )->setSortRichtung( absteigend );
-	anz = psk->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		psk->z( i )->setSortRichtung( absteigend );
-	rend = 1;
-	unlockZeichnung();
+    lockZeichnung();
+    sortAbsteigend = absteigend;
+    int anz = skp->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        skp->z( i )->setSortRichtung( absteigend );
+    anz = spk->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        spk->z( i )->setSortRichtung( absteigend );
+    anz = psk->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        psk->z( i )->setSortRichtung( absteigend );
+    rend = 1;
+    unlockZeichnung();
 }
 }
 
 
 bool AccountSPListe::tick( double tickVal )
 bool AccountSPListe::tick( double tickVal )
 {
 {
-	lockZeichnung();
-	RCArray< AccountSPListeEintrag > *members = 0;
-	if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
-		members = skp;
-	if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
-		members = spk;
-	if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
-		members = psk;
+    lockZeichnung();
+    RCArray< AccountSPListeEintrag > *members = 0;
+    if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
+        members = skp;
+    if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
+        members = spk;
+    if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
+        members = psk;
     if( members )
     if( members )
     {
     {
         int anz = members->getEintragAnzahl();
         int anz = members->getEintragAnzahl();
@@ -770,35 +753,35 @@ bool AccountSPListe::tick( double tickVal )
             rend |= members->z( rf[ i ] )->tick( tickVal );
             rend |= members->z( rf[ i ] )->tick( tickVal );
         delete[] rf;
         delete[] rf;
     }
     }
-	unlockZeichnung();
-	rend |= scroll->getRend();
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    unlockZeichnung();
+    rend |= scroll->getRend();
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountSPListe::doPublicMausEreignis( MausEreignis &me )
 void AccountSPListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	bool vera = 0;
-	if( me.mx - pos.x <= 0 || me.mx - pos.x >= ram->getBreite() || me.my - pos.y <= 0 || me.my - pos.y >= ram->getHeight() )
-	{
-		vera = 1;
-		me.verarbeitet = 1;
-	}
-	int mx = me.mx, my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	scroll->doMausMessage( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, me );
-	me.mx -= 10;
-	me.my -= 10 - scroll->getScroll();
-	lockZeichnung();
-	RCArray< AccountSPListeEintrag > *members = 0;
-	if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
-		members = skp;
-	if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
-		members = spk;
-	if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
-		members = psk;
+    bool vera = 0;
+    if( me.mx - pos.x <= 0 || me.mx - pos.x >= ram->getBreite() || me.my - pos.y <= 0 || me.my - pos.y >= ram->getHeight() )
+    {
+        vera = 1;
+        me.verarbeitet = 1;
+    }
+    int mx = me.mx, my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    scroll->doMausMessage( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, me );
+    me.mx -= 10;
+    me.my -= 10 - scroll->getScroll();
+    lockZeichnung();
+    RCArray< AccountSPListeEintrag > *members = 0;
+    if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
+        members = skp;
+    if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
+        members = spk;
+    if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
+        members = psk;
     if( members )
     if( members )
     {
     {
         int anz = members->getEintragAnzahl();
         int anz = members->getEintragAnzahl();
@@ -811,32 +794,32 @@ void AccountSPListe::doPublicMausEreignis( MausEreignis &me )
         }
         }
         delete[] rf;
         delete[] rf;
     }
     }
-	unlockZeichnung();
-	me.mx = mx, me.my = my;
-	if( vera )
-		me.verarbeitet = 0;
+    unlockZeichnung();
+    me.mx = mx, me.my = my;
+    if( vera )
+        me.verarbeitet = 0;
 }
 }
 
 
 void AccountSPListe::render( Bild &zRObj )
 void AccountSPListe::render( Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( pos, ram->getSize() ) )
-		return;
-	ram->render( zRObj );
-	scroll->render( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, zRObj );
-	if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 15, ram->getHeight() - 2 ) )
-	{
-		zRObj.releaseDrawOptions();
-		return;
-	}
-	int anzHö = 10;
-	lockZeichnung();
-	RCArray< AccountSPListeEintrag > *members = 0;
-	if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
-		members = skp;
-	if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
-		members = spk;
-	if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
-		members = psk;
+    if( !zRObj.setDrawOptions( pos, ram->getSize() ) )
+        return;
+    ram->render( zRObj );
+    scroll->render( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, zRObj );
+    if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 15, ram->getHeight() - 2 ) )
+    {
+        zRObj.releaseDrawOptions();
+        return;
+    }
+    int anzHö = 10;
+    lockZeichnung();
+    RCArray< AccountSPListeEintrag > *members = 0;
+    if( gruppierung->istGleich( "Spiel/Karte/Spieler" ) )
+        members = skp;
+    if( gruppierung->istGleich( "Spiel/Spieler/Karte" ) )
+        members = spk;
+    if( gruppierung->istGleich( "Spieler/Spiel/Karte" ) )
+        members = psk;
     if( members )
     if( members )
     {
     {
         int anz = members->getEintragAnzahl();
         int anz = members->getEintragAnzahl();
@@ -849,236 +832,236 @@ void AccountSPListe::render( Bild &zRObj )
         }
         }
         delete[] rf;
         delete[] rf;
     }
     }
-	unlockZeichnung();
-	scroll->update( anzHö, ram->getHeight() - 2 );
-	zRObj.releaseDrawOptions();
-	zRObj.releaseDrawOptions();
+    unlockZeichnung();
+    scroll->update( anzHö, ram->getHeight() - 2 );
+    zRObj.releaseDrawOptions();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 
 
 // Inhalt der AccountSpielPartner Klasse aus AccountSpielPartner.h
 // Inhalt der AccountSpielPartner Klasse aus AccountSpielPartner.h
 // Konstruktor
 // Konstruktor
-AccountSpielPartner::AccountSpielPartner( Schrift *zSchrift )
-	: Thread(),
-  spielPartnerF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Spielpartner von " ) ),
-  gruppAusw( initAuswahlBox( 10, 10, 150, 20, zSchrift, ABSTYLE, { "Spieler/Spiel/Karte", "Spiel/Karte/Spieler", "Spiel/Spieler/Karte" } ) ),
-  sortSpalte( initAuswahlBox( 170, 10, 150, 20, zSchrift, ABSTYLE, { "Name", "Spiele", "Prozent" } ) ),
-  sortRichtung( initAuswahlBox( 330, 10, 150, 20, zSchrift, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
-  liste( new AccountSPListe( zSchrift ) ),
-  status( 0 ),
-  accId( 0 ),
-  animation( 0 ),
-  alpha( 255 ),
-  tickVal( 0 ),
-  rend( 0 )
+AccountSpielPartner::AccountSpielPartner()
+    : Thread(),
+    spielPartnerF( initFenster( 810, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Spielpartner von " ) ),
+    gruppAusw( initAuswahlBox( 10, 10, 150, 20, ABSTYLE, { "Spieler/Spiel/Karte", "Spiel/Karte/Spieler", "Spiel/Spieler/Karte" } ) ),
+    sortSpalte( initAuswahlBox( 170, 10, 150, 20, ABSTYLE, { "Name", "Spiele", "Prozent" } ) ),
+    sortRichtung( initAuswahlBox( 330, 10, 150, 20, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
+    liste( new AccountSPListe() ),
+    status( 0 ),
+    accId( 0 ),
+    animation( 0 ),
+    alpha( 255 ),
+    tickVal( 0 ),
+    rend( 0 )
 {
 {
-	initToolTip( gruppAusw, "Wähle Gruppierung aus, nach der die Daten angezeigt werden sollen.", zSchrift, hauptScreen );
-	initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", zSchrift, hauptScreen );
-	initToolTip( sortRichtung, "Wähle aus, Ob Aufwärts oder Abwärts sortiert werden soll.", zSchrift, hauptScreen );
-	spielPartnerF->addMember( liste->getThis() );
-	spielPartnerF->addMember( gruppAusw->getThis() );
-	spielPartnerF->addMember( sortSpalte->getThis() );
-	spielPartnerF->addMember( sortRichtung->getThis() );
-	spielPartnerF->setMausEreignis( _ret1ME );
+    initToolTip( gruppAusw, "Wähle Gruppierung aus, nach der die Daten angezeigt werden sollen." );
+    initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll." );
+    initToolTip( sortRichtung, "Wähle aus, Ob Aufwärts oder Abwärts sortiert werden soll." );
+    spielPartnerF->addMember( dynamic_cast<Zeichnung *>( liste->getThis() ) );
+    spielPartnerF->addMember( dynamic_cast<Zeichnung *>( gruppAusw->getThis() ) );
+    spielPartnerF->addMember( dynamic_cast<Zeichnung *>( sortSpalte->getThis() ) );
+    spielPartnerF->addMember( dynamic_cast<Zeichnung *>( sortRichtung->getThis() ) );
+    spielPartnerF->setMausEreignis( _ret1ME );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSpielPartner::~AccountSpielPartner()
 AccountSpielPartner::~AccountSpielPartner()
 {
 {
-	spielPartnerF->release();
-	gruppAusw->release();
-	sortSpalte->release();
-	sortRichtung->release();
-	liste->release();
+    spielPartnerF->release();
+    gruppAusw->release();
+    sortSpalte->release();
+    sortRichtung->release();
+    liste->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSpielPartner::reset()
 void AccountSpielPartner::reset()
 {
 {
-	liste->reset();
+    liste->reset();
 }
 }
 
 
 void AccountSpielPartner::ladeStatistik( int accId )
 void AccountSpielPartner::ladeStatistik( int accId )
 {
 {
-	if( this->accId == accId )
-		return;
-	this->status = 0;
-	if( run )
-	{
-		warteAufThread( 1000 );
-		ende();
-	}
-	if( ( animation | 0x1 ) == animation )
-	{
-		animation |= 0x4;
-		this->accId = accId;
-		this->status = 1;
-		return;
-	}
-	if( this->accId )
-		reset();
-	this->accId = accId;
-	start();
-	this->status = 1;
+    if( this->accId == accId )
+        return;
+    this->status = 0;
+    if( run )
+    {
+        warteAufThread( 1000 );
+        ende();
+    }
+    if( ( animation | 0x1 ) == animation )
+    {
+        animation |= 0x4;
+        this->accId = accId;
+        this->status = 1;
+        return;
+    }
+    if( this->accId )
+        reset();
+    this->accId = accId;
+    start();
+    this->status = 1;
 }
 }
 
 
 void AccountSpielPartner::thread()
 void AccountSpielPartner::thread()
 {
 {
-	Text *name = infoClient->getSpielerName( accId );
-	if( name )
-	{
-		name->insert( 0, "Spielpartner von " );
-		spielPartnerF->setTitel( *name );
-		name->release();
-	}
-	liste->ladeDaten( accId );
-	animation &= ~0x4;
-	status = 2;
-	run = 0;
+    Text *name = infoClient->getSpielerName( accId );
+    if( name )
+    {
+        name->insert( 0, "Spielpartner von " );
+        spielPartnerF->setTitel( *name );
+        name->release();
+    }
+    liste->ladeDaten( accId );
+    animation &= ~0x4;
+    status = 2;
+    run = 0;
 }
 }
 
 
 void AccountSpielPartner::setSichtbar( bool sichtbar, bool nachRechts )
 void AccountSpielPartner::setSichtbar( bool sichtbar, bool nachRechts )
 {
 {
-	if( sichtbar )
-	{
-		if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
-		{
-			if( nachRechts )
-				spielPartnerF->setPosition( -810, 40 );
-			else
-				spielPartnerF->setPosition( 810, 40 );
-		}
-		animation |= 0x1;
-	}
-	else
-		animation &= ~0x1;
-	if( nachRechts )
-		animation |= 0x2;
-	else
-		animation &= ~0x2;
+    if( sichtbar )
+    {
+        if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
+        {
+            if( nachRechts )
+                spielPartnerF->setPosition( -810, 40 );
+            else
+                spielPartnerF->setPosition( 810, 40 );
+        }
+        animation |= 0x1;
+    }
+    else
+        animation &= ~0x1;
+    if( nachRechts )
+        animation |= 0x2;
+    else
+        animation &= ~0x2;
 }
 }
 
 
 bool AccountSpielPartner::tick( double zeit )
 bool AccountSpielPartner::tick( double zeit )
 {
 {
-	rend |= spielPartnerF->tick( zeit );
-	tickVal += zeit;
-	int valA = (int)( tickVal * 150 );
-	int valB = (int)( tickVal * 500 );
-	tickVal -= valA / 150.0;
-	if( valA )
-	{
-		if( ( animation | 0x4 ) == animation && alpha )
-		{
-			if( alpha - valA <= 0 )
-				alpha = 0;
-			else
-				alpha -= valA;
-			rend = 1;
-			if( !alpha )
-			{
-				reset();
-				start();
-			}
-		}
-		if( ( animation | 0x4 ) != animation && alpha != 255 )
-		{
-			if( alpha + valA >= 255 )
-				alpha = 255;
-			else
-				alpha += valA;
-			rend = 1;
-		}
-	}
-	if( valB )
-	{
-		if( ( animation | 0x1 ) == animation )
-		{ // Sichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( spielPartnerF->getX() != 10 )
-				{
-					if( spielPartnerF->getX() + valB > 10 )
-						spielPartnerF->setPosition( 10, spielPartnerF->getY() );
-					else
-						spielPartnerF->setPosition( spielPartnerF->getX() + valB, spielPartnerF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( spielPartnerF->getX() != 10 )
-				{
-					if( spielPartnerF->getX() - valB < 10 )
-						spielPartnerF->setPosition( 10, spielPartnerF->getY() );
-					else
-						spielPartnerF->setPosition( spielPartnerF->getX() - valB, spielPartnerF->getY() );
-					rend = 1;
-				}
-			}
-		}
-		else
-		{ // Unsichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( spielPartnerF->getX() != 810 )
-				{
-					if( spielPartnerF->getX() + valB > 810 )
-						spielPartnerF->setPosition( 810, spielPartnerF->getY() );
-					else
-						spielPartnerF->setPosition( spielPartnerF->getX() + valB, spielPartnerF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( spielPartnerF->getX() != -810 )
-				{
-					if( spielPartnerF->getX() - valB < -810 )
-						spielPartnerF->setPosition( -810, spielPartnerF->getY() );
-					else
-						spielPartnerF->setPosition( spielPartnerF->getX() - valB, spielPartnerF->getY() );
-					rend = 1;
-				}
-			}
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= spielPartnerF->tick( zeit );
+    tickVal += zeit;
+    int valA = (int)( tickVal * 150 );
+    int valB = (int)( tickVal * 500 );
+    tickVal -= valA / 150.0;
+    if( valA )
+    {
+        if( ( animation | 0x4 ) == animation && alpha )
+        {
+            if( alpha - valA <= 0 )
+                alpha = 0;
+            else
+                alpha -= valA;
+            rend = 1;
+            if( !alpha )
+            {
+                reset();
+                start();
+            }
+        }
+        if( ( animation | 0x4 ) != animation && alpha != 255 )
+        {
+            if( alpha + valA >= 255 )
+                alpha = 255;
+            else
+                alpha += valA;
+            rend = 1;
+        }
+    }
+    if( valB )
+    {
+        if( ( animation | 0x1 ) == animation )
+        { // Sichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( spielPartnerF->getX() != 10 )
+                {
+                    if( spielPartnerF->getX() + valB > 10 )
+                        spielPartnerF->setPosition( 10, spielPartnerF->getY() );
+                    else
+                        spielPartnerF->setPosition( spielPartnerF->getX() + valB, spielPartnerF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( spielPartnerF->getX() != 10 )
+                {
+                    if( spielPartnerF->getX() - valB < 10 )
+                        spielPartnerF->setPosition( 10, spielPartnerF->getY() );
+                    else
+                        spielPartnerF->setPosition( spielPartnerF->getX() - valB, spielPartnerF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+        else
+        { // Unsichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( spielPartnerF->getX() != 810 )
+                {
+                    if( spielPartnerF->getX() + valB > 810 )
+                        spielPartnerF->setPosition( 810, spielPartnerF->getY() );
+                    else
+                        spielPartnerF->setPosition( spielPartnerF->getX() + valB, spielPartnerF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( spielPartnerF->getX() != -810 )
+                {
+                    if( spielPartnerF->getX() - valB < -810 )
+                        spielPartnerF->setPosition( -810, spielPartnerF->getY() );
+                    else
+                        spielPartnerF->setPosition( spielPartnerF->getX() - valB, spielPartnerF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountSpielPartner::doPublicMausEreignis( MausEreignis &me )
 void AccountSpielPartner::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	int gruppAuswS = gruppAusw->getAuswahl();
-	int sortSpalteS = sortSpalte->getAuswahl();
-	int sortRichtungS = sortRichtung->getAuswahl();
-	spielPartnerF->doPublicMausEreignis( me );
-	if( gruppAusw->getAuswahl() != gruppAuswS )
-	{
-		liste->setGruppierung( gruppAusw->zEintrag( gruppAusw->getAuswahl() )->zText()->getText() );
-		gruppAusw->einklappen();
-	}
-	if( sortSpalte->getAuswahl() != sortSpalteS )
-	{
-		liste->setSortSpalte( sortSpalte->zEintrag( sortSpalte->getAuswahl() )->zText()->getText() );
-		sortSpalte->einklappen();
-	}
-	if( sortRichtung->getAuswahl() != sortRichtungS )
-	{
-		liste->setSortRichtung( sortRichtung->getAuswahl() != 0 );
-		sortRichtung->einklappen();
-	}
+    int gruppAuswS = gruppAusw->getAuswahl();
+    int sortSpalteS = sortSpalte->getAuswahl();
+    int sortRichtungS = sortRichtung->getAuswahl();
+    spielPartnerF->doPublicMausEreignis( me );
+    if( gruppAusw->getAuswahl() != gruppAuswS )
+    {
+        liste->setGruppierung( gruppAusw->zEintrag( gruppAusw->getAuswahl() )->zText()->getText() );
+        gruppAusw->einklappen();
+    }
+    if( sortSpalte->getAuswahl() != sortSpalteS )
+    {
+        liste->setSortSpalte( sortSpalte->zEintrag( sortSpalte->getAuswahl() )->zText()->getText() );
+        sortSpalte->einklappen();
+    }
+    if( sortRichtung->getAuswahl() != sortRichtungS )
+    {
+        liste->setSortRichtung( sortRichtung->getAuswahl() != 0 );
+        sortRichtung->einklappen();
+    }
 }
 }
 
 
 void AccountSpielPartner::render( Bild &zRObj )
 void AccountSpielPartner::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( alpha );
-	spielPartnerF->render( zRObj );
-	zRObj.releaseAlpha();
+    zRObj.setAlpha( alpha );
+    spielPartnerF->render( zRObj );
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 int AccountSpielPartner::getStatus() const
 int AccountSpielPartner::getStatus() const
 {
 {
-	return status;
+    return status;
 }
 }

+ 88 - 93
KSGClient/NachLogin/Account/SpielPartner/AccountSpielPartner.h

@@ -12,125 +12,120 @@ using namespace Framework;
 
 
 namespace ASPLEDStyle
 namespace ASPLEDStyle
 {
 {
-	const int SpielArt = 1;
-	const int Karte = 2;
-	const int Spieler = 4;
-	const int Ausklappbar = 8;
+    const int SpielArt = 1;
+    const int Karte = 2;
+    const int Spieler = 4;
+    const int Ausklappbar = 8;
 }
 }
 
 
 struct AccountSPListeEintragDaten
 struct AccountSPListeEintragDaten
 {
 {
-	int style;
-	int id;
-	Text *name;
-	int anzahl;
-	int prozent;
+    int style;
+    int id;
+    Text *name;
+    int anzahl;
+    int prozent;
 };
 };
 
 
-class AccountSPListeEintrag
+class AccountSPListeEintrag : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	LRahmen *ram;
-	RCArray< AccountSPListeEintrag > *members;
-	TextFeld *name;
-	TextFeld *anzahl;
-	FBalken *prozent;
-	Knopf *details;
-	Bild *ausklappen;
-	Bild *einklappen;
-	AccountSPListeEintragDaten *daten;
-	Text *sortSpalte;
-	bool sortAbsteigend;
-	double tickVal;
-	bool rend;
-	int ref;
+    LRahmen *ram;
+    RCArray< AccountSPListeEintrag > *members;
+    TextFeld *name;
+    TextFeld *anzahl;
+    FBalken *prozent;
+    Knopf *details;
+    Bild *ausklappen;
+    Bild *einklappen;
+    AccountSPListeEintragDaten *daten;
+    Text *sortSpalte;
+    bool sortAbsteigend;
+    double tickVal;
+    bool rend;
 
 
-	// privat
-	int getReihenfolge( int *arr );
+    // privat
+    int getReihenfolge( int *arr );
 
 
 public:
 public:
-	// Konstruktor
-	AccountSPListeEintrag( AccountSPListeEintragDaten *daten, Schrift *zSchrift );
-	// Destruktor
-	~AccountSPListeEintrag();
-	// nicht constant
-	void addMember( AccountSPListeEintrag *e );
-	void setSortSpalte( char *sp );
-	void setSortRichtung( bool absteigend );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int xOff, int yOff, int breite, Bild &zRObj );
-	// constant
-	int getHeight() const;
-	AccountSPListeEintragDaten *zDaten() const;
-	// Reference Counting
-	AccountSPListeEintrag *getThis();
-	AccountSPListeEintrag *release();
+    // Konstruktor
+    AccountSPListeEintrag( AccountSPListeEintragDaten *daten );
+    // Destruktor
+    ~AccountSPListeEintrag();
+    // nicht constant
+    void addMember( AccountSPListeEintrag *e );
+    void setSortSpalte( char *sp );
+    void setSortRichtung( bool absteigend );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int xOff, int yOff, int breite, Bild &zRObj );
+    // constant
+    int getHeight() const;
+    AccountSPListeEintragDaten *zDaten() const;
 };
 };
 
 
 class AccountSPListe : public Zeichnung
 class AccountSPListe : public Zeichnung
 {
 {
 private:
 private:
-	Schrift *schrift;
-	LRahmen *ram;
-	VScrollBar *scroll;
-	RCArray< AccountSPListeEintrag > *skp;
-	RCArray< AccountSPListeEintrag > *spk;
-	RCArray< AccountSPListeEintrag > *psk;
-	Text *gruppierung;
-	Text *sortSpalte;
-	bool sortAbsteigend;
-	bool rend;
+    LRahmen *ram;
+    VScrollBar *scroll;
+    RCArray< AccountSPListeEintrag > *skp;
+    RCArray< AccountSPListeEintrag > *spk;
+    RCArray< AccountSPListeEintrag > *psk;
+    Text *gruppierung;
+    Text *sortSpalte;
+    bool sortAbsteigend;
+    bool rend;
 
 
-	// privat
-	int getReihenfolge( int *arr );
+    // privat
+    int getReihenfolge( int *arr );
 
 
 public:
 public:
-	// Konstruktor
-	AccountSPListe( Schrift *zSchrift );
-	// Destruktor
-	~AccountSPListe();
-	// nicht constant
-	void reset();
-	void ladeDaten( int accId );
-	void setGruppierung( char *gp );
-	void setSortSpalte( char *sp );
-	void setSortRichtung( bool absteigend );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void render( Bild &zRObj ) override;
+    // Konstruktor
+    AccountSPListe();
+    // Destruktor
+    ~AccountSPListe();
+    // nicht constant
+    void reset();
+    void ladeDaten( int accId );
+    void setGruppierung( char *gp );
+    void setSortSpalte( char *sp );
+    void setSortRichtung( bool absteigend );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void render( Bild &zRObj ) override;
 };
 };
 
 
 class AccountSpielPartner : public Thread
 class AccountSpielPartner : public Thread
 {
 {
 private:
 private:
-	Fenster *spielPartnerF;
-	AuswahlBox *gruppAusw;
-	AuswahlBox *sortSpalte;
-	AuswahlBox *sortRichtung;
-	AccountSPListe *liste;
-	int status;
-	int accId;
-	int animation;
-	unsigned char alpha;
-	double tickVal;
-	bool rend;
+    Fenster *spielPartnerF;
+    AuswahlBox *gruppAusw;
+    AuswahlBox *sortSpalte;
+    AuswahlBox *sortRichtung;
+    AccountSPListe *liste;
+    int status;
+    int accId;
+    int animation;
+    unsigned char alpha;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AccountSpielPartner( Schrift *zSchrift );
-	// Destruktor
-	~AccountSpielPartner();
-	// nicht constant
-	void reset();
-	void ladeStatistik( int accId );
-	virtual void thread();
-	void setSichtbar( bool sichtbar, bool nachRechts );
-	bool tick( double zeit );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-	int getStatus() const;
+    // Konstruktor
+    AccountSpielPartner();
+    // Destruktor
+    ~AccountSpielPartner();
+    // nicht constant
+    void reset();
+    void ladeStatistik( int accId );
+    virtual void thread();
+    void setSichtbar( bool sichtbar, bool nachRechts );
+    bool tick( double zeit );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
+    // constant
+    int getStatus() const;
 };
 };
 
 
 #endif;
 #endif;

+ 632 - 663
KSGClient/NachLogin/Account/Spiele_Karten/AccountSpieleUndKarten.cpp

@@ -5,551 +5,522 @@
 #include <DateiSystem.h>
 #include <DateiSystem.h>
 #include <Punkt.h>
 #include <Punkt.h>
 #include <ToolTip.h>
 #include <ToolTip.h>
+#include <AuswahlBox.h>
 
 
 // Inhalt der AccountSUKListeKarte Klasse aus AccountSpieleUndKarten.h
 // Inhalt der AccountSUKListeKarte Klasse aus AccountSpieleUndKarten.h
 // Konstruktor
 // Konstruktor
-AccountSUKListeKarte::AccountSUKListeKarte( Schrift *zSchrift, int id, int account )
-: ram( new LRahmen() ),
-  name( initTextFeld( 5, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Karte: " ) ),
-  spiele( initTextFeld( 165, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " ) ),
-  gewonnen( initTextFeld( 325, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " ) ),
-  status( initTextFeld( 485, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Status: " ) ),
-  st( new Text() ),
-  karteId( id ),
-  rend( 0 ),
-  ref( 1 )
-{
-	na = infoClient->getKarteName( id );
-	if( na )
-		name->zText()->append( na->getText() );
-	sp = infoClient->getAccountKarteSpiele( account, id );
-	spiele->zText()->append( sp );
-	gw = infoClient->getAccountKarteSpieleGewonnen( account, id );
-	gewonnen->zText()->append( gw );
-	if( infoClient->hatAccountKarte( account, id ) )
-		st->setText( "Im Besitz" );
-	else
-		st->setText( "Nicht im Besitz" );
-	status->zText()->append( st->getText() );
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setSize( 715, 20 );
-	ram->setRamenBreite( 1 );
+AccountSUKListeKarte::AccountSUKListeKarte( int id, int account )
+    : ReferenceCounter(),
+    ram( new LRahmen() ),
+    name( initTextFeld( 5, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Karte: " ) ),
+    spiele( initTextFeld( 165, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " ) ),
+    gewonnen( initTextFeld( 325, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " ) ),
+    status( initTextFeld( 485, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Status: " ) ),
+    st( new Text() ),
+    karteId( id ),
+    rend( 0 )
+{
+    na = infoClient->getKarteName( id );
+    if( na )
+        name->zText()->append( na->getText() );
+    sp = infoClient->getAccountKarteSpiele( account, id );
+    spiele->zText()->append( sp );
+    gw = infoClient->getAccountKarteSpieleGewonnen( account, id );
+    gewonnen->zText()->append( gw );
+    if( infoClient->hatAccountKarte( account, id ) )
+        st->setText( "Im Besitz" );
+    else
+        st->setText( "Nicht im Besitz" );
+    status->zText()->append( st->getText() );
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setSize( 715, 20 );
+    ram->setRamenBreite( 1 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSUKListeKarte::~AccountSUKListeKarte()
 AccountSUKListeKarte::~AccountSUKListeKarte()
 {
 {
-	ram->release();
-	name->release();
-	spiele->release();
-	gewonnen->release();
-	status->release();
-	if( na )
-		na->release();
-	st->release();
+    ram->release();
+    name->release();
+    spiele->release();
+    gewonnen->release();
+    status->release();
+    if( na )
+        na->release();
+    st->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSUKListeKarte::render( int yOff, Bild &zRObj )
 void AccountSUKListeKarte::render( int yOff, Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( 5, yOff, ram->getBreite(), ram->getHeight() ) )
-		return;
-	name->render( zRObj );
-	spiele->render( zRObj );
-	gewonnen->render( zRObj );
-	status->render( zRObj );
-	ram->render( zRObj );
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( 5, yOff, ram->getBreite(), ram->getHeight() ) )
+        return;
+    name->render( zRObj );
+    spiele->render( zRObj );
+    gewonnen->render( zRObj );
+    status->render( zRObj );
+    ram->render( zRObj );
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 Text *AccountSUKListeKarte::zName() const
 Text *AccountSUKListeKarte::zName() const
 {
 {
-	return na;
+    return na;
 }
 }
 
 
 int AccountSUKListeKarte::getSpiele() const
 int AccountSUKListeKarte::getSpiele() const
 {
 {
-	return sp;
+    return sp;
 }
 }
 
 
 int AccountSUKListeKarte::getGewonnen() const
 int AccountSUKListeKarte::getGewonnen() const
 {
 {
-	return gw;
+    return gw;
 }
 }
 
 
 Text *AccountSUKListeKarte::zStatus() const
 Text *AccountSUKListeKarte::zStatus() const
 {
 {
-	return st;
-}
-
-// Reference Counting
-AccountSUKListeKarte *AccountSUKListeKarte::getThis()
-{
-	ref++;
-	return this;
-}
-
-AccountSUKListeKarte *AccountSUKListeKarte::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return st;
 }
 }
 
 
 
 
 // Inhalt der AccountSUKListeSpiel Klasse aus AccountSpieleUndKarten.h
 // Inhalt der AccountSUKListeSpiel Klasse aus AccountSpieleUndKarten.h
 // Konstruktor
 // Konstruktor
-AccountSUKListeSpiel::AccountSUKListeSpiel( Schrift *zSchrift, int id, int account )
-: ram( new LRahmen() ),
-  nameTF( initTextFeld( 5, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Name: " ) ),
-  spieleTF( initTextFeld( 165, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " ) ),
-  gewonnenTF( initTextFeld( 325, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " ) ),
-  punkteTF( initTextFeld( 435, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Punkte: " ) ),
-  statusTF( initTextFeld( 545, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Status: " ) ),
-  details( initKnopf( 705, 0, 20, 20, 0, 0, "" ) ),
-  karten( new RCArray< AccountSUKListeKarte >() ),
-  einklappen( bilder->get( "data/client/bilder/account.ltdb/einklappen.png" ) ),
-  ausklappen( bilder->get( "data/client/bilder/account.ltdb/ausklappen.png" ) ),
-  status( new Text() ),
-  statusFilter( new Text( "Alle" ) ),
-  sortSpalte( new Text( "Name" ) ),
-  sortAbsteigend( 0 ),
-  spielId( id ),
-  tickVal( 0 ),
-  rend( 0 ),
-  ref( 1 )
-{
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setRamenBreite( 1 );
-	ram->setSize( 725, 20 );
-	details->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	details->setHintergrundBildZ( ausklappen->getThis() );
-	initToolTip( details, "Karten anzeigen.", zSchrift, hauptScreen );
-	name = infoClient->getSpielName( id );
-	if( name )
-		nameTF->zText()->append( name->getText() );
-	Array< int > *stat = new Array< int >();
-	if( infoClient->getSpielStatistik( account, id, stat ) )
-	{
-		spiele = stat->get( 0 );
-		gewonnen = stat->get( 1 );
-		punkte = stat->get( 3 );
-	}
-	stat->release();
-	spieleTF->zText()->append( spiele );
-	gewonnenTF->zText()->append( gewonnen );
-	punkteTF->zText()->append( punkte );
-	if( infoClient->hatAccountSpiel( account, id ) )
-		status->setText( "Im Besitz" );
-	else
-		status->setText( "Nicht im Besitz" );
-	statusTF->zText()->append( status->getText() );
-	Array< int > *maps = infoClient->getAccountKarteGespieltListe( account, id );
-	if( maps )
-	{
-		int anz = maps->getEintragAnzahl();
-		for( int i = 0; i < anz; i++ )
-			karten->set( new AccountSUKListeKarte( zSchrift, maps->get( i ), account ), i );
-		maps->release();
-	}
+AccountSUKListeSpiel::AccountSUKListeSpiel( int id, int account )
+    : ReferenceCounter(),
+    ram( new LRahmen() ),
+    nameTF( initTextFeld( 5, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Name: " ) ),
+    spieleTF( initTextFeld( 165, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " ) ),
+    gewonnenTF( initTextFeld( 325, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " ) ),
+    punkteTF( initTextFeld( 435, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Punkte: " ) ),
+    statusTF( initTextFeld( 545, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Status: " ) ),
+    details( initKnopf( 705, 0, 20, 20, 0, "" ) ),
+    karten( new RCArray< AccountSUKListeKarte >() ),
+    einklappen( bilder->get( "data/client/bilder/account.ltdb/einklappen.png" ) ),
+    ausklappen( bilder->get( "data/client/bilder/account.ltdb/ausklappen.png" ) ),
+    status( new Text() ),
+    statusFilter( new Text( "Alle" ) ),
+    sortSpalte( new Text( "Name" ) ),
+    sortAbsteigend( 0 ),
+    spielId( id ),
+    tickVal( 0 ),
+    rend( 0 )
+{
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setRamenBreite( 1 );
+    ram->setSize( 725, 20 );
+    details->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    details->setHintergrundBildZ( dynamic_cast<Bild *>( ausklappen->getThis() ) );
+    initToolTip( details, "Karten anzeigen." );
+    name = infoClient->getSpielName( id );
+    if( name )
+        nameTF->zText()->append( name->getText() );
+    Array< int > *stat = new Array< int >();
+    if( infoClient->getSpielStatistik( account, id, stat ) )
+    {
+        spiele = stat->get( 0 );
+        gewonnen = stat->get( 1 );
+        punkte = stat->get( 3 );
+    }
+    stat->release();
+    spieleTF->zText()->append( spiele );
+    gewonnenTF->zText()->append( gewonnen );
+    punkteTF->zText()->append( punkte );
+    if( infoClient->hatAccountSpiel( account, id ) )
+        status->setText( "Im Besitz" );
+    else
+        status->setText( "Nicht im Besitz" );
+    statusTF->zText()->append( status->getText() );
+    Array< int > *maps = infoClient->getAccountKarteGespieltListe( account, id );
+    if( maps )
+    {
+        int anz = maps->getEintragAnzahl();
+        for( int i = 0; i < anz; i++ )
+            karten->set( new AccountSUKListeKarte( maps->get( i ), account ), i );
+        maps->release();
+    }
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSUKListeSpiel::~AccountSUKListeSpiel()
 AccountSUKListeSpiel::~AccountSUKListeSpiel()
 {
 {
-	ram->release();
-	nameTF->release();
-	spieleTF->release();
-	gewonnenTF->release();
-	punkteTF->release();
-	statusTF->release();
-	details->release();
-	karten->release();
-	einklappen->release();
-	ausklappen->release();
-	if( name )
-		name->release();
-	status->release();
-	statusFilter->release();
-	sortSpalte->release();
+    ram->release();
+    nameTF->release();
+    spieleTF->release();
+    gewonnenTF->release();
+    punkteTF->release();
+    statusTF->release();
+    details->release();
+    karten->release();
+    einklappen->release();
+    ausklappen->release();
+    if( name )
+        name->release();
+    status->release();
+    statusFilter->release();
+    sortSpalte->release();
 }
 }
 
 
 // privat
 // privat
 int AccountSUKListeSpiel::getReihenfolge( int *arr )
 int AccountSUKListeSpiel::getReihenfolge( int *arr )
 {
 {
-	int anz = karten->getEintragAnzahl();
-	if( !anz )
-		return 0;
-	int ret = 0;
-	bool *fertig = new bool[ anz ];
-	ZeroMemory( fertig, anz );
-	for( int i = 0; i < anz; i++ )
-	{
-		int index = -1;
-		int minMax = 0;
-		Text minMaxT;
-		for( int j = 0; j < anz; j++ )
-		{
-			AccountSUKListeKarte *tmp = karten->z( j );
-			if( !statusFilter->istGleich( "Alle" ) && !tmp->zStatus()->istGleich( statusFilter->getText() ) )
-				continue;
-			if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zName() > minMaxT ) || ( !sortAbsteigend && *tmp->zName() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zName()->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->getSpiele() > minMax ) || ( !sortAbsteigend && tmp->getSpiele() < minMax ) ) )
-			{
-				minMax = tmp->getSpiele();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Gewonnen" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->getGewonnen() > minMax ) || ( !sortAbsteigend && tmp->getGewonnen() < minMax ) ) )
-			{
-				minMax = tmp->getGewonnen();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Status" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zStatus() > minMaxT ) || ( !sortAbsteigend && *tmp->zStatus() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zStatus()->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Punkte" ) && !fertig[ j ] )
-			{
-				index = j;
-				break;
-			}
-		}
-		if( index < 0 )
-			break;
-		fertig[ index ] = 1;
-		arr[ ret ] = index;
-		ret++;
-	}
-	delete[] fertig;
-	return ret;
+    int anz = karten->getEintragAnzahl();
+    if( !anz )
+        return 0;
+    int ret = 0;
+    bool *fertig = new bool[ anz ];
+    ZeroMemory( fertig, anz );
+    for( int i = 0; i < anz; i++ )
+    {
+        int index = -1;
+        int minMax = 0;
+        Text minMaxT;
+        for( int j = 0; j < anz; j++ )
+        {
+            AccountSUKListeKarte *tmp = karten->z( j );
+            if( !statusFilter->istGleich( "Alle" ) && !tmp->zStatus()->istGleich( statusFilter->getText() ) )
+                continue;
+            if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
+                                                                     ( sortAbsteigend && *tmp->zName() > minMaxT ) || ( !sortAbsteigend && *tmp->zName() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zName()->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && tmp->getSpiele() > minMax ) || ( !sortAbsteigend && tmp->getSpiele() < minMax ) ) )
+            {
+                minMax = tmp->getSpiele();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Gewonnen" ) && !fertig[ j ] && ( index < 0 ||
+                                                                              ( sortAbsteigend && tmp->getGewonnen() > minMax ) || ( !sortAbsteigend && tmp->getGewonnen() < minMax ) ) )
+            {
+                minMax = tmp->getGewonnen();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Status" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && *tmp->zStatus() > minMaxT ) || ( !sortAbsteigend && *tmp->zStatus() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zStatus()->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Punkte" ) && !fertig[ j ] )
+            {
+                index = j;
+                break;
+            }
+        }
+        if( index < 0 )
+            break;
+        fertig[ index ] = 1;
+        arr[ ret ] = index;
+        ret++;
+    }
+    delete[] fertig;
+    return ret;
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSUKListeSpiel::setStatusAusw( char *status )
 void AccountSUKListeSpiel::setStatusAusw( char *status )
 {
 {
-	statusFilter->setText( status );
-	rend = 1;
+    statusFilter->setText( status );
+    rend = 1;
 }
 }
 
 
 void AccountSUKListeSpiel::setSortSpalte( char *spalte )
 void AccountSUKListeSpiel::setSortSpalte( char *spalte )
 {
 {
-	sortSpalte->setText( spalte );
-	rend = 1;
+    sortSpalte->setText( spalte );
+    rend = 1;
 }
 }
 
 
 void AccountSUKListeSpiel::setSortRichtung( bool absteigend )
 void AccountSUKListeSpiel::setSortRichtung( bool absteigend )
 {
 {
-	sortAbsteigend = absteigend;
-	rend = 1;
+    sortAbsteigend = absteigend;
+    rend = 1;
 }
 }
 
 
 bool AccountSUKListeSpiel::tick( double tickVal )
 bool AccountSUKListeSpiel::tick( double tickVal )
 {
 {
-	rend |= details->tick( tickVal );
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	this->tickVal -= val;
-	if( val )
-	{
-		if( details->zHintergrundBild() == ausklappen && ram->getHeight() != 20 )
-		{
-			if( ram->getHeight() - val < 20 )
-				ram->setSize( ram->getBreite(), 20 );
-			else
-				ram->setSize( ram->getBreite(), ram->getHeight() - val );
-			rend = 1;
-		}
-		if( details->zHintergrundBild() == einklappen )
-		{
-			int maxHö = 20;
-			int anz = karten->getEintragAnzahl();
-			for( int i = 0; i < anz; i++ )
-			{
-				AccountSUKListeKarte *tmp = karten->z( i );
-				if( !statusFilter->istGleich( "Alle" ) && !tmp->zStatus()->istGleich( statusFilter->getText() ) )
-					continue;
-				maxHö += 25;
-			}
-			if( maxHö > 20 )
-				maxHö += 5;
-			if( ram->getHeight() > maxHö )
-			{
-				if( ram->getHeight() - val < maxHö )
-					ram->setSize( ram->getBreite(), maxHö );
-				else
-					ram->setSize( ram->getBreite(), ram->getHeight() - val );
-				rend = 1;
-			}
-			if( ram->getHeight() < maxHö )
-			{
-				if( ram->getHeight() + val > maxHö )
-					ram->setSize( ram->getBreite(), maxHö );
-				else
-					ram->setSize( ram->getBreite(), ram->getHeight() + val );
-				rend = 1;
-			}
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= details->tick( tickVal );
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    this->tickVal -= val;
+    if( val )
+    {
+        if( details->zHintergrundBild() == ausklappen && ram->getHeight() != 20 )
+        {
+            if( ram->getHeight() - val < 20 )
+                ram->setSize( ram->getBreite(), 20 );
+            else
+                ram->setSize( ram->getBreite(), ram->getHeight() - val );
+            rend = 1;
+        }
+        if( details->zHintergrundBild() == einklappen )
+        {
+            int maxHö = 20;
+            int anz = karten->getEintragAnzahl();
+            for( int i = 0; i < anz; i++ )
+            {
+                AccountSUKListeKarte *tmp = karten->z( i );
+                if( !statusFilter->istGleich( "Alle" ) && !tmp->zStatus()->istGleich( statusFilter->getText() ) )
+                    continue;
+                maxHö += 25;
+            }
+            if( maxHö > 20 )
+                maxHö += 5;
+            if( ram->getHeight() > maxHö )
+            {
+                if( ram->getHeight() - val < maxHö )
+                    ram->setSize( ram->getBreite(), maxHö );
+                else
+                    ram->setSize( ram->getBreite(), ram->getHeight() - val );
+                rend = 1;
+            }
+            if( ram->getHeight() < maxHö )
+            {
+                if( ram->getHeight() + val > maxHö )
+                    ram->setSize( ram->getBreite(), maxHö );
+                else
+                    ram->setSize( ram->getBreite(), ram->getHeight() + val );
+                rend = 1;
+            }
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountSUKListeSpiel::doPublicMausEreignis( MausEreignis &me )
 void AccountSUKListeSpiel::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	bool vera = me.verarbeitet;
-	details->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet && me.id == ME_RLinks )
-	{
-		if( details->zHintergrundBild() == ausklappen )
-		{
-			details->setHintergrundBildZ( einklappen->getThis() );
-			// TODO: details->zToolTip()->setText( "Karten verbergen." );
-		}
-		else
-		{
-			details->setHintergrundBildZ( ausklappen->getThis() );
-			// TODO: details->zToolTip()->setText( "Karten anzeigen." );
-		}
-	}
+    bool vera = me.verarbeitet;
+    details->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
+    {
+        if( details->zHintergrundBild() == ausklappen )
+        {
+            details->setHintergrundBildZ( dynamic_cast<Bild *>( einklappen->getThis() ) );
+            // TODO: details->zToolTip()->setText( "Karten verbergen." );
+        }
+        else
+        {
+            details->setHintergrundBildZ( dynamic_cast<Bild *>( ausklappen->getThis() ) );
+            // TODO: details->zToolTip()->setText( "Karten anzeigen." );
+        }
+    }
 }
 }
 
 
 void AccountSUKListeSpiel::render( int yOff, Bild &zRObj )
 void AccountSUKListeSpiel::render( int yOff, Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( 10, yOff, ram->getBreite(), ram->getHeight() ) )
-		return;
-	nameTF->render( zRObj );
-	spieleTF->render( zRObj );
-	gewonnenTF->render( zRObj );
-	punkteTF->render( zRObj );
-	statusTF->render( zRObj );
-	details->render( zRObj );
-	ram->render( zRObj );
-	if( ram->getHeight() > 20 )
-	{
-		zRObj.drawLinieH( 0, 20, ram->getBreite(), ram->getFarbe() );
-		if( !zRObj.setDrawOptions( 1, 25, ram->getBreite() - 2, ram->getHeight() - 2 ) )
-		{
-			zRObj.releaseDrawOptions();
-			return;
-		}
-		int anz = karten->getEintragAnzahl();
-		int *arr = new int[ anz ];
-		anz = getReihenfolge( arr );
-		yOff = 0;
-		for( int i = 0; i < anz; i++ )
-		{
-			karten->z( arr[ i ] )->render( yOff, zRObj );
-			yOff += 25;
-		}
-		delete[]arr;
-		zRObj.releaseDrawOptions();
-	}
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( 10, yOff, ram->getBreite(), ram->getHeight() ) )
+        return;
+    nameTF->render( zRObj );
+    spieleTF->render( zRObj );
+    gewonnenTF->render( zRObj );
+    punkteTF->render( zRObj );
+    statusTF->render( zRObj );
+    details->render( zRObj );
+    ram->render( zRObj );
+    if( ram->getHeight() > 20 )
+    {
+        zRObj.drawLinieH( 0, 20, ram->getBreite(), ram->getFarbe() );
+        if( !zRObj.setDrawOptions( 1, 25, ram->getBreite() - 2, ram->getHeight() - 2 ) )
+        {
+            zRObj.releaseDrawOptions();
+            return;
+        }
+        int anz = karten->getEintragAnzahl();
+        int *arr = new int[ anz ];
+        anz = getReihenfolge( arr );
+        yOff = 0;
+        for( int i = 0; i < anz; i++ )
+        {
+            karten->z( arr[ i ] )->render( yOff, zRObj );
+            yOff += 25;
+        }
+        delete[]arr;
+        zRObj.releaseDrawOptions();
+    }
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int AccountSUKListeSpiel::getHeight() const
 int AccountSUKListeSpiel::getHeight() const
 {
 {
-	return ram->getHeight();
+    return ram->getHeight();
 }
 }
 
 
 Text *AccountSUKListeSpiel::zName() const
 Text *AccountSUKListeSpiel::zName() const
 {
 {
-	return name;
+    return name;
 }
 }
 
 
 int AccountSUKListeSpiel::getSpiele() const
 int AccountSUKListeSpiel::getSpiele() const
 {
 {
-	return spiele;
+    return spiele;
 }
 }
 
 
 int AccountSUKListeSpiel::getGewonnen() const
 int AccountSUKListeSpiel::getGewonnen() const
 {
 {
-	return gewonnen;
+    return gewonnen;
 }
 }
 
 
 int AccountSUKListeSpiel::getPunkte() const
 int AccountSUKListeSpiel::getPunkte() const
 {
 {
-	return punkte;
+    return punkte;
 }
 }
 
 
 Text *AccountSUKListeSpiel::zStatus() const
 Text *AccountSUKListeSpiel::zStatus() const
 {
 {
-	return status;
-}
-
-// Reference Counting
-AccountSUKListeSpiel *AccountSUKListeSpiel::getThis()
-{
-	ref++;
-	return this;
-}
-
-AccountSUKListeSpiel *AccountSUKListeSpiel::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return status;
 }
 }
 
 
 
 
 // Inhalt der AccountSUKListe Klasse aus AccountSpieleUndKarten.h
 // Inhalt der AccountSUKListe Klasse aus AccountSpieleUndKarten.h
 // Konstruktor
 // Konstruktor
 AccountSUKListe::AccountSUKListe()
 AccountSUKListe::AccountSUKListe()
-: Zeichnung(),
-  ram( new LRahmen() ),
-  scroll( new VScrollBar() ),
-  spiele( new RCArray< AccountSUKListeSpiel >() ),
-  status( new Text() ),
-  statusFilter( new Text( "Alle" ) ),
-  sortSpalte( new Text( "Name" ) ),
-  sortAbsteigend( 0 ),
-  rend( 0 )
-{
-	pos = Punkt( 10, 40 );
-	ram->setSize( 760, 380 );
-	ram->setFarbe( 0xFFFFFFFF );
-	ram->setRamenBreite( 1 );
+    : Zeichnung(),
+    ram( new LRahmen() ),
+    scroll( new VScrollBar() ),
+    spiele( new RCArray< AccountSUKListeSpiel >() ),
+    status( new Text() ),
+    statusFilter( new Text( "Alle" ) ),
+    sortSpalte( new Text( "Name" ) ),
+    sortAbsteigend( 0 ),
+    rend( 0 )
+{
+    pos = Punkt( 10, 40 );
+    ram->setSize( 760, 380 );
+    ram->setFarbe( 0xFFFFFFFF );
+    ram->setRamenBreite( 1 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSUKListe::~AccountSUKListe()
 AccountSUKListe::~AccountSUKListe()
 {
 {
-	ram->release();
-	scroll->release();
-	spiele->release();
-	status->release();
-	statusFilter->release();
-	sortSpalte->release();
+    ram->release();
+    scroll->release();
+    spiele->release();
+    status->release();
+    statusFilter->release();
+    sortSpalte->release();
 }
 }
 
 
 // privat
 // privat
 int AccountSUKListe::getReihenfolge( int *arr )
 int AccountSUKListe::getReihenfolge( int *arr )
 {
 {
-	int anz = spiele->getEintragAnzahl();
-	if( !anz )
-		return 0;
-	int ret = 0;
-	bool *fertig = new bool[ anz ];
-	ZeroMemory( fertig, anz );
-	for( int i = 0; i < anz; i++ )
-	{
-		int index = -1;
-		int minMax = 0;
-		Text minMaxT;
-		for( int j = 0; j < anz; j++ )
-		{
-			AccountSUKListeSpiel *tmp = spiele->z( j );
-			if( !statusFilter->istGleich( "Alle" ) && !tmp->zStatus()->istGleich( statusFilter->getText() ) )
-				continue;
-			if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zName() > minMaxT ) || ( !sortAbsteigend && *tmp->zName() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zName()->getText();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->getSpiele() > minMax ) || ( !sortAbsteigend && tmp->getSpiele() < minMax ) ) )
-			{
-				minMax = tmp->getSpiele();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Gewonnen" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->getGewonnen() > minMax ) || ( !sortAbsteigend && tmp->getGewonnen() < minMax ) ) )
-			{
-				minMax = tmp->getGewonnen();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Punkte" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && tmp->getPunkte() > minMax ) || ( !sortAbsteigend && tmp->getPunkte() < minMax ) ) )
-			{
-				minMax = tmp->getPunkte();
-				index = j;
-			}
-			else if( sortSpalte->istGleich( "Status" ) && !fertig[ j ] && ( index < 0 ||
-				( sortAbsteigend && *tmp->zStatus() > minMaxT ) || ( !sortAbsteigend && *tmp->zStatus() < minMaxT ) ) )
-			{
-				minMaxT = tmp->zStatus()->getText();
-				index = j;
-			}
-		}
-		if( index < 0 )
-			break;
-		fertig[ index ] = 1;
-		arr[ ret ] = index;
-		ret++;
-	}
-	delete[] fertig;
-	return ret;
+    int anz = spiele->getEintragAnzahl();
+    if( !anz )
+        return 0;
+    int ret = 0;
+    bool *fertig = new bool[ anz ];
+    ZeroMemory( fertig, anz );
+    for( int i = 0; i < anz; i++ )
+    {
+        int index = -1;
+        int minMax = 0;
+        Text minMaxT;
+        for( int j = 0; j < anz; j++ )
+        {
+            AccountSUKListeSpiel *tmp = spiele->z( j );
+            if( !statusFilter->istGleich( "Alle" ) && !tmp->zStatus()->istGleich( statusFilter->getText() ) )
+                continue;
+            if( sortSpalte->istGleich( "Name" ) && !fertig[ j ] && ( index < 0 ||
+                                                                     ( sortAbsteigend && *tmp->zName() > minMaxT ) || ( !sortAbsteigend && *tmp->zName() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zName()->getText();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Spiele" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && tmp->getSpiele() > minMax ) || ( !sortAbsteigend && tmp->getSpiele() < minMax ) ) )
+            {
+                minMax = tmp->getSpiele();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Gewonnen" ) && !fertig[ j ] && ( index < 0 ||
+                                                                              ( sortAbsteigend && tmp->getGewonnen() > minMax ) || ( !sortAbsteigend && tmp->getGewonnen() < minMax ) ) )
+            {
+                minMax = tmp->getGewonnen();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Punkte" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && tmp->getPunkte() > minMax ) || ( !sortAbsteigend && tmp->getPunkte() < minMax ) ) )
+            {
+                minMax = tmp->getPunkte();
+                index = j;
+            }
+            else if( sortSpalte->istGleich( "Status" ) && !fertig[ j ] && ( index < 0 ||
+                                                                            ( sortAbsteigend && *tmp->zStatus() > minMaxT ) || ( !sortAbsteigend && *tmp->zStatus() < minMaxT ) ) )
+            {
+                minMaxT = tmp->zStatus()->getText();
+                index = j;
+            }
+        }
+        if( index < 0 )
+            break;
+        fertig[ index ] = 1;
+        arr[ ret ] = index;
+        ret++;
+    }
+    delete[] fertig;
+    return ret;
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSUKListe::reset()
 void AccountSUKListe::reset()
 {
 {
-	lockZeichnung();
-	spiele->leeren();
-	unlockZeichnung();
+    lockZeichnung();
+    spiele->leeren();
+    unlockZeichnung();
 }
 }
 
 
 void AccountSUKListe::addSpiel( AccountSUKListeSpiel *spiel )
 void AccountSUKListe::addSpiel( AccountSUKListeSpiel *spiel )
 {
 {
-	lockZeichnung();
-	spiel->setSortRichtung( sortAbsteigend );
-	spiel->setSortSpalte( sortSpalte->getText() );
-	spiel->setStatusAusw( statusFilter->getText() );
-	spiele->add( spiel );
-	unlockZeichnung();
+    lockZeichnung();
+    spiel->setSortRichtung( sortAbsteigend );
+    spiel->setSortSpalte( sortSpalte->getText() );
+    spiel->setStatusAusw( statusFilter->getText() );
+    spiele->add( spiel );
+    unlockZeichnung();
 }
 }
 
 
 void AccountSUKListe::setStatusAusw( char *status )
 void AccountSUKListe::setStatusAusw( char *status )
 {
 {
-	lockZeichnung();
-	this->statusFilter->setText( status );
-	int anz = spiele->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		spiele->z( i )->setStatusAusw( status );
-	unlockZeichnung();
-	rend = 1;
+    lockZeichnung();
+    this->statusFilter->setText( status );
+    int anz = spiele->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        spiele->z( i )->setStatusAusw( status );
+    unlockZeichnung();
+    rend = 1;
 }
 }
 
 
 void AccountSUKListe::setSortSpalte( char *spalte )
 void AccountSUKListe::setSortSpalte( char *spalte )
 {
 {
-	lockZeichnung();
-	this->sortSpalte->setText( spalte );
-	int anz = spiele->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		spiele->z( i )->setSortSpalte( spalte );
-	unlockZeichnung();
-	rend = 1;
+    lockZeichnung();
+    this->sortSpalte->setText( spalte );
+    int anz = spiele->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        spiele->z( i )->setSortSpalte( spalte );
+    unlockZeichnung();
+    rend = 1;
 }
 }
 
 
 void AccountSUKListe::setSortRichtung( bool absteigend )
 void AccountSUKListe::setSortRichtung( bool absteigend )
 {
 {
-	lockZeichnung();
-	sortAbsteigend = absteigend;
-	int anz = spiele->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		spiele->z( i )->setSortRichtung( absteigend );
-	unlockZeichnung();
-	rend = 1;
+    lockZeichnung();
+    sortAbsteigend = absteigend;
+    int anz = spiele->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        spiele->z( i )->setSortRichtung( absteigend );
+    unlockZeichnung();
+    rend = 1;
 }
 }
 
 
 bool AccountSUKListe::tick( double tickVal )
 bool AccountSUKListe::tick( double tickVal )
 {
 {
-	lockZeichnung();
+    lockZeichnung();
     int anz = spiele->getEintragAnzahl();
     int anz = spiele->getEintragAnzahl();
     if( anz > 0 )
     if( anz > 0 )
     {
     {
@@ -559,311 +530,309 @@ bool AccountSUKListe::tick( double tickVal )
             rend |= spiele->z( rf[ i ] )->tick( tickVal );
             rend |= spiele->z( rf[ i ] )->tick( tickVal );
         delete[] rf;
         delete[] rf;
     }
     }
-	unlockZeichnung();
-	rend |= scroll->getRend();
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    unlockZeichnung();
+    rend |= scroll->getRend();
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountSUKListe::doPublicMausEreignis( MausEreignis &me )
 void AccountSUKListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	bool vera = 0;
-	if( me.mx - pos.x <= 0 || me.mx - pos.x >= ram->getBreite() || me.my - pos.y <= 0 || me.my - pos.y >= ram->getHeight() )
-	{
-		vera = 1;
-		me.verarbeitet = 1;
-	}
-	int mx = me.mx, my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	scroll->doMausMessage( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, me );
-	me.mx -= 10;
-	me.my -= 10 - scroll->getScroll();
-	lockZeichnung();
-	int anz = spiele->getEintragAnzahl();
-	int *rf = new int[ anz ];
-	int rfAnz = getReihenfolge( rf );
-	for( int i = 0; i < rfAnz; i++ )
-	{
-		spiele->z( rf[ i ] )->doPublicMausEreignis( me );
-		me.my -= spiele->z( rf[ i ] )->getHeight() + 10;
-	}
-	delete[] rf;
-	unlockZeichnung();
-	me.mx = mx, me.my = my;
-	if( vera )
-		me.verarbeitet = 0;
+    bool vera = 0;
+    if( me.mx - pos.x <= 0 || me.mx - pos.x >= ram->getBreite() || me.my - pos.y <= 0 || me.my - pos.y >= ram->getHeight() )
+    {
+        vera = 1;
+        me.verarbeitet = 1;
+    }
+    int mx = me.mx, my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    scroll->doMausMessage( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, me );
+    me.mx -= 10;
+    me.my -= 10 - scroll->getScroll();
+    lockZeichnung();
+    int anz = spiele->getEintragAnzahl();
+    int *rf = new int[ anz ];
+    int rfAnz = getReihenfolge( rf );
+    for( int i = 0; i < rfAnz; i++ )
+    {
+        spiele->z( rf[ i ] )->doPublicMausEreignis( me );
+        me.my -= spiele->z( rf[ i ] )->getHeight() + 10;
+    }
+    delete[] rf;
+    unlockZeichnung();
+    me.mx = mx, me.my = my;
+    if( vera )
+        me.verarbeitet = 0;
 }
 }
 
 
 void AccountSUKListe::render( Bild &zRObj )
 void AccountSUKListe::render( Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getBreite() ) )
-		return;
-	ram->render( zRObj );
-	scroll->render( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, zRObj );
-	if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 15, ram->getHeight() - 2 ) )
-	{
-		zRObj.releaseDrawOptions();
-		return;
-	}
-	int y = -scroll->getScroll();
-	int anzHö = 10;
-	lockZeichnung();
-	int anz = spiele->getEintragAnzahl();
-	int *rf = new int[ anz ];
-	int rfAnz = getReihenfolge( rf );
-	for( int i = 0; i < rfAnz; i++ )
-	{
-		spiele->z( rf[ i ] )->render( anzHö, zRObj );
-		anzHö += spiele->z( rf[ i ] )->getHeight() + 10;
-	}
-	delete[] rf;
-	unlockZeichnung();
-	scroll->update( anzHö, ram->getHeight() - 2 );
-	zRObj.releaseDrawOptions();
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getBreite() ) )
+        return;
+    ram->render( zRObj );
+    scroll->render( ram->getBreite() - 16, 1, 15, ram->getHeight() - 2, zRObj );
+    if( !zRObj.setDrawOptions( 1, 1, ram->getBreite() - 15, ram->getHeight() - 2 ) )
+    {
+        zRObj.releaseDrawOptions();
+        return;
+    }
+    int y = -scroll->getScroll();
+    int anzHö = 10;
+    lockZeichnung();
+    int anz = spiele->getEintragAnzahl();
+    int *rf = new int[ anz ];
+    int rfAnz = getReihenfolge( rf );
+    for( int i = 0; i < rfAnz; i++ )
+    {
+        spiele->z( rf[ i ] )->render( anzHö, zRObj );
+        anzHö += spiele->z( rf[ i ] )->getHeight() + 10;
+    }
+    delete[] rf;
+    unlockZeichnung();
+    scroll->update( anzHö, ram->getHeight() - 2 );
+    zRObj.releaseDrawOptions();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 #define ABSTYLE AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::Hintergrund | AuswahlBox::Style::VScroll
 #define ABSTYLE AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::Hintergrund | AuswahlBox::Style::VScroll
 
 
 // Inhalt der AccountSpieleUndKarten Klasse aus AccountSpieleUndKarten.h
 // Inhalt der AccountSpieleUndKarten Klasse aus AccountSpieleUndKarten.h
 // Konstruktor
 // Konstruktor
-AccountSpieleUndKarten::AccountSpieleUndKarten( Schrift *zSchrift )
-: Thread(),
-  schrift( zSchrift->getThis() ),
-  spieleUndKartenF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Spiele und Karten von " ) ),
-  statusAusw( initAuswahlBox( 10, 10, 150, 20, zSchrift, ABSTYLE, { "Alle", "Im Besitz", "Nicht im Besitz" } ) ),
-  sortSpalte( initAuswahlBox( 170, 10, 150, 20, zSchrift, ABSTYLE, { "Name", "Spiele", "Gewonnen", "Punkte", "Status" } ) ),
-  sortRichtung( initAuswahlBox( 330, 10, 150, 20, zSchrift, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
-  liste( new AccountSUKListe() ),
-  status( 0 ),
-  accId( 0 ),
-  animation( 0 ),
-  alpha( 255 ),
-  tickVal( 0 ),
-  rend( 0 )
-{
-	initToolTip( statusAusw, "Wähle den Status der anzuzeigenden Spiele und Karten aus.", zSchrift, hauptScreen );
-	initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", zSchrift, hauptScreen );
-	initToolTip( sortRichtung, "Wähle aus, Ob Aufwärts oder Abwärts sortiert werden soll.", zSchrift, hauptScreen );
-	spieleUndKartenF->addMember( liste->getThis() );
-	spieleUndKartenF->addMember( statusAusw->getThis() );
-	spieleUndKartenF->addMember( sortSpalte->getThis() );
-	spieleUndKartenF->addMember( sortRichtung->getThis() );
-	spieleUndKartenF->setMausEreignis( _ret1ME );
+AccountSpieleUndKarten::AccountSpieleUndKarten()
+    : Thread(),
+    spieleUndKartenF( initFenster( 810, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Spiele und Karten von " ) ),
+    statusAusw( initAuswahlBox( 10, 10, 150, 20, ABSTYLE, { "Alle", "Im Besitz", "Nicht im Besitz" } ) ),
+    sortSpalte( initAuswahlBox( 170, 10, 150, 20, ABSTYLE, { "Name", "Spiele", "Gewonnen", "Punkte", "Status" } ) ),
+    sortRichtung( initAuswahlBox( 330, 10, 150, 20, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
+    liste( new AccountSUKListe() ),
+    status( 0 ),
+    accId( 0 ),
+    animation( 0 ),
+    alpha( 255 ),
+    tickVal( 0 ),
+    rend( 0 )
+{
+    initToolTip( statusAusw, "Wähle den Status der anzuzeigenden Spiele und Karten aus." );
+    initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll." );
+    initToolTip( sortRichtung, "Wähle aus, Ob Aufwärts oder Abwärts sortiert werden soll." );
+    spieleUndKartenF->addMember( dynamic_cast<Zeichnung *>( liste->getThis() ) );
+    spieleUndKartenF->addMember( dynamic_cast<Zeichnung *>( statusAusw->getThis() ) );
+    spieleUndKartenF->addMember( dynamic_cast<Zeichnung *>( sortSpalte->getThis() ) );
+    spieleUndKartenF->addMember( dynamic_cast<Zeichnung *>( sortRichtung->getThis() ) );
+    spieleUndKartenF->setMausEreignis( _ret1ME );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSpieleUndKarten::~AccountSpieleUndKarten()
 AccountSpieleUndKarten::~AccountSpieleUndKarten()
 {
 {
-	schrift->release();
-	spieleUndKartenF->release();
-	statusAusw->release();
-	sortSpalte->release();
-	sortRichtung->release();
-	liste->release();
+    spieleUndKartenF->release();
+    statusAusw->release();
+    sortSpalte->release();
+    sortRichtung->release();
+    liste->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSpieleUndKarten::reset()
 void AccountSpieleUndKarten::reset()
 {
 {
-	liste->reset();
+    liste->reset();
 }
 }
 
 
 void AccountSpieleUndKarten::ladeStatistik( int accId )
 void AccountSpieleUndKarten::ladeStatistik( int accId )
 {
 {
-	if( this->accId == accId )
-		return;
-	this->status = 0;
-	if( run )
-	{
-		warteAufThread( 1000 );
-		ende();
-	}
-	if( ( animation | 0x1 ) == animation )
-	{
-		animation |= 0x4;
-		this->accId = accId;
-		this->status = 1;
-		return;
-	}
-	if( this->accId )
-		reset();
-	this->accId = accId;
-	start();
-	this->status = 1;
+    if( this->accId == accId )
+        return;
+    this->status = 0;
+    if( run )
+    {
+        warteAufThread( 1000 );
+        ende();
+    }
+    if( ( animation | 0x1 ) == animation )
+    {
+        animation |= 0x4;
+        this->accId = accId;
+        this->status = 1;
+        return;
+    }
+    if( this->accId )
+        reset();
+    this->accId = accId;
+    start();
+    this->status = 1;
 }
 }
 
 
 void AccountSpieleUndKarten::thread()
 void AccountSpieleUndKarten::thread()
 {
 {
-	Text *name = infoClient->getSpielerName( accId );
-	if( name )
-	{
-		name->insert( 0, "Spiele und Karten von " );
-		spieleUndKartenF->setTitel( *name );
-		name->release();
-	}
-	Array< int > *spiele = infoClient->getAccountSpielGespieltListe( accId );
-	if( spiele )
-	{
-		int anz = spiele->getEintragAnzahl();
-		for( int i = 0; i < anz; i++ )
-		{
-			AccountSUKListeSpiel *s = new AccountSUKListeSpiel( schrift, spiele->get( i ), accId );
-			liste->addSpiel( s );
-		}
-		spiele->release();
-	}
-	else
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Fehler beim laden der Daten." ), new Text( "Ok" ) );
-	animation &= ~0x4;
-	status = 2;
-	run = 0;
+    Text *name = infoClient->getSpielerName( accId );
+    if( name )
+    {
+        name->insert( 0, "Spiele und Karten von " );
+        spieleUndKartenF->setTitel( *name );
+        name->release();
+    }
+    Array< int > *spiele = infoClient->getAccountSpielGespieltListe( accId );
+    if( spiele )
+    {
+        int anz = spiele->getEintragAnzahl();
+        for( int i = 0; i < anz; i++ )
+        {
+            AccountSUKListeSpiel *s = new AccountSUKListeSpiel( spiele->get( i ), accId );
+            liste->addSpiel( s );
+        }
+        spiele->release();
+    }
+    else
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Fehler beim laden der Daten." ), new Text( "Ok" ) );
+    animation &= ~0x4;
+    status = 2;
+    run = 0;
 }
 }
 
 
 void AccountSpieleUndKarten::setSichtbar( bool sichtbar, bool nachRechts )
 void AccountSpieleUndKarten::setSichtbar( bool sichtbar, bool nachRechts )
 {
 {
-	if( sichtbar )
-	{
-		if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
-		{
-			if( nachRechts )
-				spieleUndKartenF->setPosition( -810, 40 );
-			else
-				spieleUndKartenF->setPosition( 810, 40 );
-		}
-		animation |= 0x1;
-	}
-	else
-		animation &= ~0x1;
-	if( nachRechts )
-		animation |= 0x2;
-	else
-		animation &= ~0x2;
+    if( sichtbar )
+    {
+        if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
+        {
+            if( nachRechts )
+                spieleUndKartenF->setPosition( -810, 40 );
+            else
+                spieleUndKartenF->setPosition( 810, 40 );
+        }
+        animation |= 0x1;
+    }
+    else
+        animation &= ~0x1;
+    if( nachRechts )
+        animation |= 0x2;
+    else
+        animation &= ~0x2;
 }
 }
 
 
 bool AccountSpieleUndKarten::tick( double zeit )
 bool AccountSpieleUndKarten::tick( double zeit )
 {
 {
-	rend |= spieleUndKartenF->tick( zeit );
-	tickVal += zeit;
-	int valA = (int)( tickVal * 150 );
-	int valB = (int)( tickVal * 500 );
-	tickVal -= valA / 150.0;
-	if( valA )
-	{
-		if( ( animation | 0x4 ) == animation && alpha )
-		{
-			if( alpha - valA <= 0 )
-				alpha = 0;
-			else
-				alpha -= valA;
-			rend = 1;
-			if( !alpha )
-			{
-				reset();
-				start();
-			}
-		}
-		if( ( animation | 0x4 ) != animation && alpha != 255 )
-		{
-			if( alpha + valA >= 255 )
-				alpha = 255;
-			else
-				alpha += valA;
-			rend = 1;
-		}
-	}
-	if( valB )
-	{
-		if( ( animation | 0x1 ) == animation )
-		{ // Sichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( spieleUndKartenF->getX() != 10 )
-				{
-					if( spieleUndKartenF->getX() + valB > 10 )
-						spieleUndKartenF->setPosition( 10, spieleUndKartenF->getY() );
-					else
-						spieleUndKartenF->setPosition( spieleUndKartenF->getX() + valB, spieleUndKartenF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( spieleUndKartenF->getX() != 10 )
-				{
-					if( spieleUndKartenF->getX() - valB < 10 )
-						spieleUndKartenF->setPosition( 10, spieleUndKartenF->getY() );
-					else
-						spieleUndKartenF->setPosition( spieleUndKartenF->getX() - valB, spieleUndKartenF->getY() );
-					rend = 1;
-				}
-			}
-		}
-		else
-		{ // Unsichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( spieleUndKartenF->getX() != 810 )
-				{
-					if( spieleUndKartenF->getX() + valB > 810 )
-						spieleUndKartenF->setPosition( 810, spieleUndKartenF->getY() );
-					else
-						spieleUndKartenF->setPosition( spieleUndKartenF->getX() + valB, spieleUndKartenF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( spieleUndKartenF->getX() != -810 )
-				{
-					if( spieleUndKartenF->getX() - valB < -810 )
-						spieleUndKartenF->setPosition( -810, spieleUndKartenF->getY() );
-					else
-						spieleUndKartenF->setPosition( spieleUndKartenF->getX() - valB, spieleUndKartenF->getY() );
-					rend = 1;
-				}
-			}
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= spieleUndKartenF->tick( zeit );
+    tickVal += zeit;
+    int valA = (int)( tickVal * 150 );
+    int valB = (int)( tickVal * 500 );
+    tickVal -= valA / 150.0;
+    if( valA )
+    {
+        if( ( animation | 0x4 ) == animation && alpha )
+        {
+            if( alpha - valA <= 0 )
+                alpha = 0;
+            else
+                alpha -= valA;
+            rend = 1;
+            if( !alpha )
+            {
+                reset();
+                start();
+            }
+        }
+        if( ( animation | 0x4 ) != animation && alpha != 255 )
+        {
+            if( alpha + valA >= 255 )
+                alpha = 255;
+            else
+                alpha += valA;
+            rend = 1;
+        }
+    }
+    if( valB )
+    {
+        if( ( animation | 0x1 ) == animation )
+        { // Sichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( spieleUndKartenF->getX() != 10 )
+                {
+                    if( spieleUndKartenF->getX() + valB > 10 )
+                        spieleUndKartenF->setPosition( 10, spieleUndKartenF->getY() );
+                    else
+                        spieleUndKartenF->setPosition( spieleUndKartenF->getX() + valB, spieleUndKartenF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( spieleUndKartenF->getX() != 10 )
+                {
+                    if( spieleUndKartenF->getX() - valB < 10 )
+                        spieleUndKartenF->setPosition( 10, spieleUndKartenF->getY() );
+                    else
+                        spieleUndKartenF->setPosition( spieleUndKartenF->getX() - valB, spieleUndKartenF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+        else
+        { // Unsichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( spieleUndKartenF->getX() != 810 )
+                {
+                    if( spieleUndKartenF->getX() + valB > 810 )
+                        spieleUndKartenF->setPosition( 810, spieleUndKartenF->getY() );
+                    else
+                        spieleUndKartenF->setPosition( spieleUndKartenF->getX() + valB, spieleUndKartenF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( spieleUndKartenF->getX() != -810 )
+                {
+                    if( spieleUndKartenF->getX() - valB < -810 )
+                        spieleUndKartenF->setPosition( -810, spieleUndKartenF->getY() );
+                    else
+                        spieleUndKartenF->setPosition( spieleUndKartenF->getX() - valB, spieleUndKartenF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountSpieleUndKarten::doPublicMausEreignis( MausEreignis &me )
 void AccountSpieleUndKarten::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	int statusAuswS = statusAusw->getAuswahl();
-	int sortSpalteS = sortSpalte->getAuswahl();
-	int sortRichtungS = sortRichtung->getAuswahl();
-	spieleUndKartenF->doPublicMausEreignis( me );
-	if( statusAusw->getAuswahl() != statusAuswS )
-	{
-		liste->setStatusAusw( statusAusw->zEintrag( statusAusw->getAuswahl() )->zText()->getText() );
-		statusAusw->einklappen();
-	}
-	if( sortSpalte->getAuswahl() != sortSpalteS )
-	{
-		liste->setSortSpalte( sortSpalte->zEintrag( sortSpalte->getAuswahl() )->zText()->getText() );
-		sortSpalte->einklappen();
-	}
-	if( sortRichtung->getAuswahl() != sortRichtungS )
-	{
-		liste->setSortRichtung( sortRichtung->getAuswahl() != 0 );
-		sortRichtung->einklappen();
-	}
+    int statusAuswS = statusAusw->getAuswahl();
+    int sortSpalteS = sortSpalte->getAuswahl();
+    int sortRichtungS = sortRichtung->getAuswahl();
+    spieleUndKartenF->doPublicMausEreignis( me );
+    if( statusAusw->getAuswahl() != statusAuswS )
+    {
+        liste->setStatusAusw( statusAusw->zEintrag( statusAusw->getAuswahl() )->zText()->getText() );
+        statusAusw->einklappen();
+    }
+    if( sortSpalte->getAuswahl() != sortSpalteS )
+    {
+        liste->setSortSpalte( sortSpalte->zEintrag( sortSpalte->getAuswahl() )->zText()->getText() );
+        sortSpalte->einklappen();
+    }
+    if( sortRichtung->getAuswahl() != sortRichtungS )
+    {
+        liste->setSortRichtung( sortRichtung->getAuswahl() != 0 );
+        sortRichtung->einklappen();
+    }
 }
 }
 
 
 void AccountSpieleUndKarten::render( Bild &zRObj )
 void AccountSpieleUndKarten::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( alpha );
-	spieleUndKartenF->render( zRObj );
-	zRObj.releaseAlpha();
+    zRObj.setAlpha( alpha );
+    spieleUndKartenF->render( zRObj );
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 int AccountSpieleUndKarten::getStatus() const
 int AccountSpieleUndKarten::getStatus() const
 {
 {
-	return status;
+    return status;
 }
 }

+ 113 - 122
KSGClient/NachLogin/Account/Spiele_Karten/AccountSpieleUndKarten.h

@@ -9,154 +9,145 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class AccountSUKListeKarte
+class AccountSUKListeKarte : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	LRahmen *ram;
-	TextFeld *name;
-	TextFeld *spiele;
-	TextFeld *gewonnen;
-	TextFeld *status;
-	Text *na;
-	int sp;
-	int gw;
-	Text *st;
-	int karteId;
-	bool rend;
-	int ref;
+    LRahmen *ram;
+    TextFeld *name;
+    TextFeld *spiele;
+    TextFeld *gewonnen;
+    TextFeld *status;
+    Text *na;
+    int sp;
+    int gw;
+    Text *st;
+    int karteId;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AccountSUKListeKarte( Schrift *zSchrift, int id, int account );
-	// Destruktor
-	~AccountSUKListeKarte();
-	// nicht constant
-	void render( int yOff, Bild &zRObj );
-	// constant
-	Text *zName() const;
-	int getSpiele() const;
-	int getGewonnen() const;
-	Text *zStatus() const;
-	// Reference Counting
-	AccountSUKListeKarte *getThis();
-	AccountSUKListeKarte *release();
+    // Konstruktor
+    AccountSUKListeKarte( int id, int account );
+    // Destruktor
+    ~AccountSUKListeKarte();
+    // nicht constant
+    void render( int yOff, Bild &zRObj );
+    // constant
+    Text *zName() const;
+    int getSpiele() const;
+    int getGewonnen() const;
+    Text *zStatus() const;
 };
 };
 
 
-class AccountSUKListeSpiel
+class AccountSUKListeSpiel : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	LRahmen *ram;
-	TextFeld *nameTF;
-	TextFeld *spieleTF;
-	TextFeld *gewonnenTF;
-	TextFeld *punkteTF;
-	TextFeld *statusTF;
-	Knopf *details;
-	RCArray< AccountSUKListeKarte > *karten;
-	Bild *einklappen;
-	Bild *ausklappen;
-	Text *name;
-	int spiele;
-	int gewonnen;
-	int punkte;
-	Text *status;
-	Text *statusFilter;
-	Text *sortSpalte;
-	bool sortAbsteigend;
-	int spielId;
-	double tickVal;
-	bool rend;
-	int ref;
+    LRahmen *ram;
+    TextFeld *nameTF;
+    TextFeld *spieleTF;
+    TextFeld *gewonnenTF;
+    TextFeld *punkteTF;
+    TextFeld *statusTF;
+    Knopf *details;
+    RCArray< AccountSUKListeKarte > *karten;
+    Bild *einklappen;
+    Bild *ausklappen;
+    Text *name;
+    int spiele;
+    int gewonnen;
+    int punkte;
+    Text *status;
+    Text *statusFilter;
+    Text *sortSpalte;
+    bool sortAbsteigend;
+    int spielId;
+    double tickVal;
+    bool rend;
 
 
-	// privat
-	int getReihenfolge( int *arr );
+    // privat
+    int getReihenfolge( int *arr );
 
 
 public:
 public:
-	// Konstruktor
-	AccountSUKListeSpiel( Schrift *zSchrift, int id, int account );
-	// Destruktor
-	~AccountSUKListeSpiel();
-	// nicht constant
-	void setStatusAusw( char *status );
-	void setSortSpalte( char *spalte );
-	void setSortRichtung( bool absteigend );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int yOff, Bild &zRObj );
-	// constant
-	int getHeight() const;
-	Text *zName() const;
-	int getSpiele() const;
-	int getGewonnen() const;
-	int getPunkte() const;
-	Text *zStatus() const;
-	// Reference Counting
-	AccountSUKListeSpiel *getThis();
-	AccountSUKListeSpiel *release();
+    // Konstruktor
+    AccountSUKListeSpiel( int id, int account );
+    // Destruktor
+    ~AccountSUKListeSpiel();
+    // nicht constant
+    void setStatusAusw( char *status );
+    void setSortSpalte( char *spalte );
+    void setSortRichtung( bool absteigend );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int yOff, Bild &zRObj );
+    // constant
+    int getHeight() const;
+    Text *zName() const;
+    int getSpiele() const;
+    int getGewonnen() const;
+    int getPunkte() const;
+    Text *zStatus() const;
 };
 };
 
 
 class AccountSUKListe : public Zeichnung
 class AccountSUKListe : public Zeichnung
 {
 {
 private:
 private:
-	LRahmen *ram;
-	VScrollBar *scroll;
-	RCArray< AccountSUKListeSpiel > *spiele;
-	Text *status;
-	Text *statusFilter;
-	Text *sortSpalte;
-	bool sortAbsteigend;
-	bool rend;
+    LRahmen *ram;
+    VScrollBar *scroll;
+    RCArray< AccountSUKListeSpiel > *spiele;
+    Text *status;
+    Text *statusFilter;
+    Text *sortSpalte;
+    bool sortAbsteigend;
+    bool rend;
 
 
-	// privat
-	int getReihenfolge( int *arr );
+    // privat
+    int getReihenfolge( int *arr );
 
 
 public:
 public:
-	// Konstruktor
-	AccountSUKListe();
-	// Destruktor
-	~AccountSUKListe();
-	// nicht constant
-	void reset();
-	void addSpiel( AccountSUKListeSpiel *spiel );
-	void setStatusAusw( char *status );
-	void setSortSpalte( char *spalte );
-	void setSortRichtung( bool absteigend );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void render( Bild &zRObj ) override;
+    // Konstruktor
+    AccountSUKListe();
+    // Destruktor
+    ~AccountSUKListe();
+    // nicht constant
+    void reset();
+    void addSpiel( AccountSUKListeSpiel *spiel );
+    void setStatusAusw( char *status );
+    void setSortSpalte( char *spalte );
+    void setSortRichtung( bool absteigend );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void render( Bild &zRObj ) override;
 };
 };
 
 
 class AccountSpieleUndKarten : public Thread
 class AccountSpieleUndKarten : public Thread
 {
 {
 private:
 private:
-	Schrift *schrift;
-	Fenster *spieleUndKartenF;
-	AuswahlBox *statusAusw;
-	AuswahlBox *sortSpalte;
-	AuswahlBox *sortRichtung;
-	AccountSUKListe *liste;
-	int status;
-	int accId;
-	int animation;
-	unsigned char alpha;
-	double tickVal;
-	bool rend;
+    Fenster *spieleUndKartenF;
+    AuswahlBox *statusAusw;
+    AuswahlBox *sortSpalte;
+    AuswahlBox *sortRichtung;
+    AccountSUKListe *liste;
+    int status;
+    int accId;
+    int animation;
+    unsigned char alpha;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AccountSpieleUndKarten( Schrift *zSchrift );
-	// Destruktor
-	~AccountSpieleUndKarten();
-	// nicht constant
-	void reset();
-	void ladeStatistik( int accId );
-	virtual void thread();
-	void setSichtbar( bool sichtbar, bool nachRechts );
-	bool tick( double zeit );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-	int getStatus() const;
+    // Konstruktor
+    AccountSpieleUndKarten();
+    // Destruktor
+    ~AccountSpieleUndKarten();
+    // nicht constant
+    void reset();
+    void ladeStatistik( int accId );
+    virtual void thread();
+    void setSichtbar( bool sichtbar, bool nachRechts );
+    bool tick( double zeit );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
+    // constant
+    int getStatus() const;
 };
 };
 
 
 #endif
 #endif

+ 292 - 294
KSGClient/NachLogin/Account/Statistik/AccountStatistik.cpp

@@ -5,356 +5,354 @@
 
 
 // Inhalt der AccountStatistik Klasse aus AccountStatistik.h
 // Inhalt der AccountStatistik Klasse aus AccountStatistik.h
 // Konstruktor
 // Konstruktor
-AccountStatistik::AccountStatistik( Schrift *zSchrift )
-: Thread(),
-  schrift( zSchrift->getThis() ),
-  statistikF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Statistik von " ) ),
-  sortSpalte( initAuswahlBox( 10, 10, 150, 20, zSchrift, ABSTYLE, { "Name", "Spiele", "Gewonnen", "Verloren", "Punkte", "BW0", "BW1", "BW2", "BW3", "BW4", "BW5" } ) ),
-  sortRichtung( initAuswahlBox( 170, 10, 150, 20, zSchrift, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
-  zurück( initKnopf( 590, 10, 20, 20, 0, 0, "" ) ),
-  vor( initKnopf( 750, 10, 20, 20, 0, 0, "" ) ),
-  seiteTF( initTextFeld( 620, 10, 120, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Seite 0 von 0" ) ),
-  tabelle( initObjTabelle( 10, 40, 760, 400, zSchrift, OTSTYLE, { { "Name", 108, 0, 0 }, { "Spiele", 70, 0, 0 }, { "Gewonnen", 70, 0, 0 },
-  { "Verloren", 70, 0, 0 }, { "Punkte", 70, 0, 0 }, { "BW0", 60, 0, 0 }, { "BW1", 60, 0, 0 }, { "BW2", 60, 0, 0 }, { "BW3", 60, 0, 0 },
-  { "BW4", 60, 0, 0 }, { "BW5", 60, 0, 0 } }, 20 ) ),
-  laden( (Animation2D*)ladeAnimation->dublizieren() ),
-  seite( 0 ),
-  maxSeite( 0 ),
-  status( 0 ),
-  accId( 0 ),
-  animation( 0 ),
-  alpha( 255 ),
-  tickVal( 0 ),
-  rend( 0 )
+AccountStatistik::AccountStatistik()
+    : Thread(),
+    statistikF( initFenster( 810, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen | Fenster::Style::Erlaubt, "Statistik von " ) ),
+    sortSpalte( initAuswahlBox( 10, 10, 150, 20, ABSTYLE, { "Name", "Spiele", "Gewonnen", "Verloren", "Punkte", "BW0", "BW1", "BW2", "BW3", "BW4", "BW5" } ) ),
+    sortRichtung( initAuswahlBox( 170, 10, 150, 20, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
+    zurück( initKnopf( 590, 10, 20, 20, 0, "" ) ),
+    vor( initKnopf( 750, 10, 20, 20, 0, "" ) ),
+    seiteTF( initTextFeld( 620, 10, 120, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Seite 0 von 0" ) ),
+    tabelle( initObjTabelle( 10, 40, 760, 400, OTSTYLE, { { "Name", 108, 0, 0 }, { "Spiele", 70, 0, 0 }, { "Gewonnen", 70, 0, 0 },
+    { "Verloren", 70, 0, 0 }, { "Punkte", 70, 0, 0 }, { "BW0", 60, 0, 0 }, { "BW1", 60, 0, 0 }, { "BW2", 60, 0, 0 }, { "BW3", 60, 0, 0 },
+    { "BW4", 60, 0, 0 }, { "BW5", 60, 0, 0 } }, 20 ) ),
+    laden( (Animation2D *)ladeAnimation->dublizieren() ),
+    seite( 0 ),
+    maxSeite( 0 ),
+    status( 0 ),
+    accId( 0 ),
+    animation( 0 ),
+    alpha( 255 ),
+    tickVal( 0 ),
+    rend( 0 )
 {
 {
-	initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", zSchrift, hauptScreen );
-	initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll.", zSchrift, hauptScreen );
-	Bild *zurückB = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
-	Bild *weiterB = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
-	laden->setSichtbar( 0 );
-	laden->setPosition( 365, 200 );
-	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.", zSchrift, 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.", zSchrift, hauptScreen );
-	statistikF->addMember( tabelle->getThis() );
-	statistikF->addMember( zurück->getThis() );
-	statistikF->addMember( seiteTF->getThis() );
-	statistikF->addMember( vor->getThis() );
-	statistikF->addMember( sortSpalte->getThis() );
-	statistikF->addMember( sortRichtung->getThis() );
-	statistikF->setMausEreignis( _ret1ME );
-	vor->setMausEreignis( accountStatistikVorME );
-	zurück->setMausEreignis( accountStatistikZurückME );
+    initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll." );
+    initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll." );
+    Bild *zurückB = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
+    Bild *weiterB = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
+    laden->setSichtbar( 0 );
+    laden->setPosition( 365, 200 );
+    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." );
+    vor->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    vor->setHintergrundBildZ( weiterB );
+    initToolTip( vor, "Eine Seite weiter blättern." );
+    statistikF->addMember( dynamic_cast<Zeichnung *>( tabelle->getThis() ) );
+    statistikF->addMember( dynamic_cast<Zeichnung *>( zurück->getThis() ) );
+    statistikF->addMember( dynamic_cast<Zeichnung *>( seiteTF->getThis() ) );
+    statistikF->addMember( dynamic_cast<Zeichnung *>( vor->getThis() ) );
+    statistikF->addMember( dynamic_cast<Zeichnung *>( sortSpalte->getThis() ) );
+    statistikF->addMember( dynamic_cast<Zeichnung *>( sortRichtung->getThis() ) );
+    statistikF->setMausEreignis( _ret1ME );
+    vor->setMausEreignis( accountStatistikVorME );
+    zurück->setMausEreignis( accountStatistikZurückME );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountStatistik::~AccountStatistik()
 AccountStatistik::~AccountStatistik()
 {
 {
-	reset( 1 );
-	statistikF->release();
-	sortSpalte->release();
-	sortRichtung->release();
-	zurück->release();
-	vor->release();
-	seiteTF->release();
-	tabelle->release();
-	laden->release();
-	schrift->release();
+    reset( 1 );
+    statistikF->release();
+    sortSpalte->release();
+    sortRichtung->release();
+    zurück->release();
+    vor->release();
+    seiteTF->release();
+    tabelle->release();
+    laden->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountStatistik::reset( bool überschrift )
 void AccountStatistik::reset( bool überschrift )
 {
 {
-	statistikF->lockZeichnung();
-	int zAnz = tabelle->getZeilenAnzahl();
-	for( int i = !überschrift; i < zAnz; i++ )
-		tabelle->removeZeile( !überschrift );
-	statistikF->unlockZeichnung();
+    statistikF->lockZeichnung();
+    int zAnz = tabelle->getZeilenAnzahl();
+    for( int i = !überschrift; i < zAnz; i++ )
+        tabelle->removeZeile( !überschrift );
+    statistikF->unlockZeichnung();
 }
 }
 
 
 void AccountStatistik::ladeStatistik( int accId )
 void AccountStatistik::ladeStatistik( int accId )
 {
 {
-	if( this->accId == accId )
-		return;
-	this->status = 0;
-	if( run )
-	{
-		warteAufThread( 1000 );
-		ende();
-	}
-	if( ( animation | 0x1 ) == animation )
-	{
-		animation |= 0x4;
-		this->accId = accId;
-		this->status = 1;
-		return;
-	}
-	this->accId = accId;
-	start();
-	this->status = 1;
+    if( this->accId == accId )
+        return;
+    this->status = 0;
+    if( run )
+    {
+        warteAufThread( 1000 );
+        ende();
+    }
+    if( ( animation | 0x1 ) == animation )
+    {
+        animation |= 0x4;
+        this->accId = accId;
+        this->status = 1;
+        return;
+    }
+    this->accId = accId;
+    start();
+    this->status = 1;
 }
 }
 
 
 void AccountStatistik::thread()
 void AccountStatistik::thread()
 {
 {
-	laden->setSichtbar( 1 );
-	reset();
-	Text *name = infoClient->getSpielerName( accId );
-	if( name )
-	{
-		name->insert( 0, "Statistik von " );
-		statistikF->setTitel( *name );
-		name->release();
-	}
-	RCArray< Array< int > > *values = new RCArray< Array< int > >();
-	RCArray< Text > *namen = new RCArray< Text >();
-	if( infoClient->getStatistikListe( accId, &seite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), values, namen ) )
-	{
-		statistikF->lockZeichnung();
-		seiteTF->setText( "Seite " );
-		seiteTF->zText()->append( seite );
-		seiteTF->zText()->append( " von " );
-		seiteTF->zText()->append( maxSeite );
-		statistikF->unlockZeichnung();
-		zurück->setStyle( Knopf::Style::Erlaubt, seite > 1 );
-		vor->setStyle( Knopf::Style::Erlaubt, seite < maxSeite );
-		int zAnz = values->getEintragAnzahl();
-		if( zAnz )
-		{
-			int sAnz = values->z( 0 )->getEintragAnzahl();
-			for( int i = 0; i < zAnz; i++ )
-			{
-				if( sAnz )
-				{
-					tabelle->addZeile( Text() += values->z( i )->get( 0 ) );
-					Text *name = namen->z( i );
-					if( name )
-					{
-						TextFeld *tf = initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::Center, *name );
-						tabelle->setZeichnungZ( 0, i + 1, tf );
-					}
-				}
-				for( int j = 1; j < sAnz; j++ )
-				{
-					if( j < 1 )
-					{
-						TextFeld *tf = initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
-						tf->zText()->append( values->z( i )->get( j ) );
-						tabelle->setZeichnungZ( j, i + 1, tf );
-					}
-					if( j > 1 )
-					{
-						TextFeld *tf = initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
-						tf->zText()->append( values->z( i )->get( j ) );
-						tabelle->setZeichnungZ( j - 1, i + 1, tf );
-					}
-				}
-			}
-		}
-	}
-	else
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Statistiken dieses Spielers konnten nicht abgerufen werden." ), new Text( "Ok" ) );
-	values->release();
-	namen->release();
-	laden->setSichtbar( 0 );
-	animation &= ~0x4;
-	status = 2;
-	run = 0;
+    laden->setSichtbar( 1 );
+    reset();
+    Text *name = infoClient->getSpielerName( accId );
+    if( name )
+    {
+        name->insert( 0, "Statistik von " );
+        statistikF->setTitel( *name );
+        name->release();
+    }
+    RCArray< Array< int > > *values = new RCArray< Array< int > >();
+    RCArray< Text > *namen = new RCArray< Text >();
+    if( infoClient->getStatistikListe( accId, &seite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), values, namen ) )
+    {
+        statistikF->lockZeichnung();
+        seiteTF->setText( "Seite " );
+        seiteTF->zText()->append( seite );
+        seiteTF->zText()->append( " von " );
+        seiteTF->zText()->append( maxSeite );
+        statistikF->unlockZeichnung();
+        zurück->setStyle( Knopf::Style::Erlaubt, seite > 1 );
+        vor->setStyle( Knopf::Style::Erlaubt, seite < maxSeite );
+        int zAnz = values->getEintragAnzahl();
+        if( zAnz )
+        {
+            int sAnz = values->z( 0 )->getEintragAnzahl();
+            for( int i = 0; i < zAnz; i++ )
+            {
+                if( sAnz )
+                {
+                    tabelle->addZeile( Text() += values->z( i )->get( 0 ) );
+                    Text *name = namen->z( i );
+                    if( name )
+                    {
+                        TextFeld *tf = initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::Center, *name );
+                        tabelle->setZeichnungZ( 0, i + 1, tf );
+                    }
+                }
+                for( int j = 1; j < sAnz; j++ )
+                {
+                    if( j < 1 )
+                    {
+                        TextFeld *tf = initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::Center, "" );
+                        tf->zText()->append( values->z( i )->get( j ) );
+                        tabelle->setZeichnungZ( j, i + 1, tf );
+                    }
+                    if( j > 1 )
+                    {
+                        TextFeld *tf = initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::Center, "" );
+                        tf->zText()->append( values->z( i )->get( j ) );
+                        tabelle->setZeichnungZ( j - 1, i + 1, tf );
+                    }
+                }
+            }
+        }
+    }
+    else
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Statistiken dieses Spielers konnten nicht abgerufen werden." ), new Text( "Ok" ) );
+    values->release();
+    namen->release();
+    laden->setSichtbar( 0 );
+    animation &= ~0x4;
+    status = 2;
+    run = 0;
 }
 }
 
 
 void AccountStatistik::setSichtbar( bool sichtbar, bool nachRechts )
 void AccountStatistik::setSichtbar( bool sichtbar, bool nachRechts )
 {
 {
-	if( sichtbar )
-	{
-		if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
-		{
-			if( nachRechts )
-				statistikF->setPosition( -810, 40 );
-			else
-				statistikF->setPosition( 810, 40 );
-		}
-		animation |= 0x1;
-	}
-	else
-		animation &= ~0x1;
-	if( nachRechts )
-		animation |= 0x2;
-	else
-		animation &= ~0x2;
+    if( sichtbar )
+    {
+        if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
+        {
+            if( nachRechts )
+                statistikF->setPosition( -810, 40 );
+            else
+                statistikF->setPosition( 810, 40 );
+        }
+        animation |= 0x1;
+    }
+    else
+        animation &= ~0x1;
+    if( nachRechts )
+        animation |= 0x2;
+    else
+        animation &= ~0x2;
 }
 }
 
 
 bool AccountStatistik::vorME( MausEreignis &me )
 bool AccountStatistik::vorME( MausEreignis &me )
 {
 {
-	if( me.id == ME_RLinks )
-	{
-		seite++;
-		start();
-	}
-	return 1;
+    if( me.id == ME_RLinks )
+    {
+        seite++;
+        start();
+    }
+    return 1;
 }
 }
 
 
 bool AccountStatistik::zurückME( MausEreignis &me )
 bool AccountStatistik::zurückME( MausEreignis &me )
 {
 {
-	if( me.id == ME_RLinks )
-	{
-		seite--;
-		start();
-	}
-	return 1;
+    if( me.id == ME_RLinks )
+    {
+        seite--;
+        start();
+    }
+    return 1;
 }
 }
 
 
 bool AccountStatistik::tick( double zeit )
 bool AccountStatistik::tick( double zeit )
 {
 {
-	statistikF->lockZeichnung();
-	rend |= statistikF->tick( zeit );
-	statistikF->unlockZeichnung();
-	rend |= laden->tick( zeit );
-	tickVal += zeit;
-	int valA = (int)( tickVal * 150 );
-	int valB = (int)( tickVal * 500 );
-	tickVal -= valA / 150.0;
-	if( valA )
-	{
-		if( ( animation | 0x4 ) == animation && alpha )
-		{
-			if( alpha - valA <= 0 )
-				alpha = 0;
-			else
-				alpha -= valA;
-			rend = 1;
-			if( !alpha )
-			{
-				reset();
-				start();
-			}
-		}
-		if( ( animation | 0x4 ) != animation && alpha != 255 )
-		{
-			if( alpha + valA >= 255 )
-				alpha = 255;
-			else
-				alpha += valA;
-			rend = 1;
-		}
-	}
-	if( valB )
-	{
-		if( ( animation | 0x1 ) == animation )
-		{ // Sichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( statistikF->getX() != 10 )
-				{
-					if( statistikF->getX() + valB > 10 )
-						statistikF->setPosition( 10, statistikF->getY() );
-					else
-						statistikF->setPosition( statistikF->getX() + valB, statistikF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( statistikF->getX() != 10 )
-				{
-					if( statistikF->getX() - valB < 10 )
-						statistikF->setPosition( 10, statistikF->getY() );
-					else
-						statistikF->setPosition( statistikF->getX() - valB, statistikF->getY() );
-					rend = 1;
-				}
-			}
-		}
-		else
-		{ // Unsichtbar
-			if( ( animation | 0x2 ) == animation )
-			{ // Nach Rechts
-				if( statistikF->getX() != 810 )
-				{
-					if( statistikF->getX() + valB > 810 )
-						statistikF->setPosition( 810, statistikF->getY() );
-					else
-						statistikF->setPosition( statistikF->getX() + valB, statistikF->getY() );
-					rend = 1;
-				}
-			}
-			else
-			{ // Nach Links
-				if( statistikF->getX() != -810 )
-				{
-					if( statistikF->getX() - valB < -810 )
-						statistikF->setPosition( -810, statistikF->getY() );
-					else
-						statistikF->setPosition( statistikF->getX() - valB, statistikF->getY() );
-					rend = 1;
-				}
-			}
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    statistikF->lockZeichnung();
+    rend |= statistikF->tick( zeit );
+    statistikF->unlockZeichnung();
+    rend |= laden->tick( zeit );
+    tickVal += zeit;
+    int valA = (int)( tickVal * 150 );
+    int valB = (int)( tickVal * 500 );
+    tickVal -= valA / 150.0;
+    if( valA )
+    {
+        if( ( animation | 0x4 ) == animation && alpha )
+        {
+            if( alpha - valA <= 0 )
+                alpha = 0;
+            else
+                alpha -= valA;
+            rend = 1;
+            if( !alpha )
+            {
+                reset();
+                start();
+            }
+        }
+        if( ( animation | 0x4 ) != animation && alpha != 255 )
+        {
+            if( alpha + valA >= 255 )
+                alpha = 255;
+            else
+                alpha += valA;
+            rend = 1;
+        }
+    }
+    if( valB )
+    {
+        if( ( animation | 0x1 ) == animation )
+        { // Sichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( statistikF->getX() != 10 )
+                {
+                    if( statistikF->getX() + valB > 10 )
+                        statistikF->setPosition( 10, statistikF->getY() );
+                    else
+                        statistikF->setPosition( statistikF->getX() + valB, statistikF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( statistikF->getX() != 10 )
+                {
+                    if( statistikF->getX() - valB < 10 )
+                        statistikF->setPosition( 10, statistikF->getY() );
+                    else
+                        statistikF->setPosition( statistikF->getX() - valB, statistikF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+        else
+        { // Unsichtbar
+            if( ( animation | 0x2 ) == animation )
+            { // Nach Rechts
+                if( statistikF->getX() != 810 )
+                {
+                    if( statistikF->getX() + valB > 810 )
+                        statistikF->setPosition( 810, statistikF->getY() );
+                    else
+                        statistikF->setPosition( statistikF->getX() + valB, statistikF->getY() );
+                    rend = 1;
+                }
+            }
+            else
+            { // Nach Links
+                if( statistikF->getX() != -810 )
+                {
+                    if( statistikF->getX() - valB < -810 )
+                        statistikF->setPosition( -810, statistikF->getY() );
+                    else
+                        statistikF->setPosition( statistikF->getX() - valB, statistikF->getY() );
+                    rend = 1;
+                }
+            }
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void AccountStatistik::doPublicMausEreignis( MausEreignis &me )
 void AccountStatistik::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( run )
-		return;
-	bool starten = 0;
-	int sortSpalteS = sortSpalte->getAuswahl();
-	int sortRichtungS = sortRichtung->getAuswahl();
-	statistikF->lockZeichnung();
-	statistikF->doPublicMausEreignis( me );
-	statistikF->unlockZeichnung();
-	if( sortSpalte->getAuswahl() != sortSpalteS )
-	{
-		sortSpalte->einklappen();
-		starten = 1;
-	}
-	if( sortRichtung->getAuswahl() != sortRichtungS )
-	{
-		sortRichtung->einklappen();
-		starten = 1;
-	}
-	if( starten )
-		start();
+    if( run )
+        return;
+    bool starten = 0;
+    int sortSpalteS = sortSpalte->getAuswahl();
+    int sortRichtungS = sortRichtung->getAuswahl();
+    statistikF->lockZeichnung();
+    statistikF->doPublicMausEreignis( me );
+    statistikF->unlockZeichnung();
+    if( sortSpalte->getAuswahl() != sortSpalteS )
+    {
+        sortSpalte->einklappen();
+        starten = 1;
+    }
+    if( sortRichtung->getAuswahl() != sortRichtungS )
+    {
+        sortRichtung->einklappen();
+        starten = 1;
+    }
+    if( starten )
+        start();
 }
 }
 
 
 void AccountStatistik::render( Bild &zRObj )
 void AccountStatistik::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( alpha );
-	statistikF->lockZeichnung();
-	statistikF->render( zRObj );
-	statistikF->unlockZeichnung();
-	if( !zRObj.setDrawOptions( statistikF->getPosition(), statistikF->getSize() ) )
-	{
-		zRObj.releaseAlpha();
-		return;
-	}
-	laden->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.releaseDrawOptions();
+    zRObj.setAlpha( alpha );
+    statistikF->lockZeichnung();
+    statistikF->render( zRObj );
+    statistikF->unlockZeichnung();
+    if( !zRObj.setDrawOptions( statistikF->getPosition(), statistikF->getSize() ) )
+    {
+        zRObj.releaseAlpha();
+        return;
+    }
+    laden->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int AccountStatistik::getStatus() const
 int AccountStatistik::getStatus() const
 {
 {
-	return status;
+    return status;
 }
 }
 
 
 
 
 // Ereignisse
 // Ereignisse
 bool accountStatistikVorME( void *p, void *o, MausEreignis me )
 bool accountStatistikVorME( void *p, void *o, MausEreignis me )
 {
 {
-	if( p )
-		return ( (AccountStatistik*)p )->vorME( me );
-	return 1;
+    if( p )
+        return ( (AccountStatistik *)p )->vorME( me );
+    return 1;
 }
 }
 
 
 bool accountStatistikZurückME( void *p, void *o, MausEreignis me )
 bool accountStatistikZurückME( void *p, void *o, MausEreignis me )
 {
 {
-	if( p )
-		return ( (AccountStatistik*)p )->zurückME( me );
-	return 1;
+    if( p )
+        return ( (AccountStatistik *)p )->zurückME( me );
+    return 1;
 }
 }

+ 32 - 33
KSGClient/NachLogin/Account/Statistik/AccountStatistik.h

@@ -12,41 +12,40 @@ using namespace Framework;
 class AccountStatistik : public Thread
 class AccountStatistik : public Thread
 {
 {
 private:
 private:
-	Schrift *schrift;
-	Fenster *statistikF;
-	AuswahlBox *sortSpalte;
-	AuswahlBox *sortRichtung;
-	Knopf *zurück;
-	Knopf *vor;
-	TextFeld *seiteTF;
-	ObjTabelle *tabelle;
-	Animation2D *laden;
-	int seite;
-	int maxSeite;
-	int status;
-	int accId;
-	int animation;
-	unsigned char alpha;
-	double tickVal;
-	bool rend;
+    Fenster *statistikF;
+    AuswahlBox *sortSpalte;
+    AuswahlBox *sortRichtung;
+    Knopf *zurück;
+    Knopf *vor;
+    TextFeld *seiteTF;
+    ObjTabelle *tabelle;
+    Animation2D *laden;
+    int seite;
+    int maxSeite;
+    int status;
+    int accId;
+    int animation;
+    unsigned char alpha;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AccountStatistik( Schrift *zSchrift );
-	// Destruktor
-	~AccountStatistik();
-	// nicht constant
-	void reset( bool überschrift = 0 );
-	void ladeStatistik( int accId );
-	virtual void thread();
-	void setSichtbar( bool sichtbar, bool nachRechts );
-	bool vorME( MausEreignis &me );
-	bool zurückME( MausEreignis &me );
-	bool tick( double zeit );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-	int getStatus() const;
+    // Konstruktor
+    AccountStatistik();
+    // Destruktor
+    ~AccountStatistik();
+    // nicht constant
+    void reset( bool überschrift = 0 );
+    void ladeStatistik( int accId );
+    virtual void thread();
+    void setSichtbar( bool sichtbar, bool nachRechts );
+    bool vorME( MausEreignis &me );
+    bool zurückME( MausEreignis &me );
+    bool tick( double zeit );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
+    // constant
+    int getStatus() const;
 };
 };
 
 
 // Ereignisse
 // Ereignisse

+ 231 - 245
KSGClient/NachLogin/Account/Suchen/AccountSuchen.cpp

@@ -6,59 +6,57 @@
 
 
 // Inhalt der AccountSuchen Klasse aud AccountSuchen.h
 // Inhalt der AccountSuchen Klasse aud AccountSuchen.h
 // Konstruktor
 // 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 )
+AccountSuchen::AccountSuchen()
+    : Thread(),
+    pos( 810, 0 ),
+    gr( 800, 500 ),
+    laden( (Animation2D *)ladeAnimation->dublizieren() ),
+    accountName( initTextFeld( 10, 10, 200, 20, TextFeld::Style::TextFeld, "Spieler Suchen" ) ),
+    suchen( initKnopf( 220, 10, 100, 20, Knopf::Style::Sichtbar, "Suchen" ) ),
+    sortSpalte( initAuswahlBox( 330, 10, 150, 20, ABSTYLE, { "Name", "Zuletzt Online", "Letztes Spiel", "Letzte Karte", "Spielart Punkte" } ) ),
+    sortRichtung( initAuswahlBox( 490, 10, 120, 20, ABSTYLE, { "Aufwärts", "Abwärts" } ) ),
+    zurück( initKnopf( 620, 10, 20, 20, 0, "" ) ),
+    seite( initTextFeld( 645, 10, 120, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Seite 0 von 0" ) ),
+    vor( initKnopf( 770, 10, 20, 20, 0, "" ) ),
+    liste( initObjTabelle( 10, 40, 780, 450, 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 )
 {
 {
-	initToolTip( accountName, "Gebe den Namen eines Spielers ein.", schrift, hauptScreen );
-	initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll.", schrift, hauptScreen );
-	initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll.", schrift, hauptScreen );
-	Bild *zurückB = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
-	Bild *weiterB = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
-	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, 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, hauptScreen );
-	liste->addSpalte( "Weiter" );
-	liste->setSpaltenBreite( "Weiter", 20 );
+    initToolTip( accountName, "Gebe den Namen eines Spielers ein." );
+    initToolTip( sortSpalte, "Wähle aus, nach welcher Spalte die\nTabelle sortiert werden soll." );
+    initToolTip( sortRichtung, "Wähle aus, ob Aufwärts oder Abwärts\nsortiert werden soll." );
+    Bild *zurückB = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
+    Bild *weiterB = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
+    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." );
+    vor->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    vor->setHintergrundBildZ( weiterB );
+    initToolTip( vor, "Eine Seite weiter blättern." );
+    liste->addSpalte( "Weiter" );
+    liste->setSpaltenBreite( "Weiter", 20 );
 }
 }
 
 
 // Destruktor
 // Destruktor
 AccountSuchen::~AccountSuchen()
 AccountSuchen::~AccountSuchen()
 {
 {
-	schrift->release();
-	laden->release();
-	accountName->release();
-	suchen->release();
-	sortSpalte->release();
-	sortRichtung->release();
-	zurück->release();
-	seite->release();
-	vor->release();
-	tabelleLehren( 1 );
-	liste->release();
+    laden->release();
+    accountName->release();
+    suchen->release();
+    sortSpalte->release();
+    sortRichtung->release();
+    zurück->release();
+    seite->release();
+    vor->release();
+    tabelleLehren( 1 );
+    liste->release();
 }
 }
 
 
 // privat
 // privat
@@ -74,241 +72,229 @@ void AccountSuchen::unlock()
 
 
 void AccountSuchen::tabelleLehren( bool überschrift )
 void AccountSuchen::tabelleLehren( bool überschrift )
 {
 {
-	lock();
-	int zAnz = liste->getZeilenAnzahl();
-	for( int i = !überschrift; i < zAnz; i++ )
-		liste->removeZeile( !überschrift );
-	unlock();
+    lock();
+    int zAnz = liste->getZeilenAnzahl();
+    for( int i = !überschrift; i < zAnz; i++ )
+        liste->removeZeile( !überschrift );
+    unlock();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void AccountSuchen::setSichtbar( bool sichtbar )
 void AccountSuchen::setSichtbar( bool sichtbar )
 {
 {
-	this->sichtbar = sichtbar;
+    this->sichtbar = sichtbar;
 }
 }
 
 
 void AccountSuchen::thread()
 void AccountSuchen::thread()
 {
 {
-	laden->setSichtbar( 1 );
-	tabelleLehren( 0 );
-	Array< KSGClient::AccountInfo > info;
-	int anz = infoClient->getSpielerListe( accountName->zText()->getText(), &jetztSeite, &maxSeite, sortSpalte->getAuswahl(),
-										   sortRichtung->getAuswahl(), &info );
-	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++ )
-	{
+    laden->setSichtbar( 1 );
+    tabelleLehren( 0 );
+    Array< KSGClient::AccountInfo > info;
+    int anz = infoClient->getSpielerListe( accountName->zText()->getText(), &jetztSeite, &maxSeite, sortSpalte->getAuswahl(),
+                                           sortRichtung->getAuswahl(), &info );
+    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++ )
+    {
         KSGClient::AccountInfo inf = info.get( i );
         KSGClient::AccountInfo inf = info.get( i );
-		liste->addZeile( i + 1, Text() += inf.id );
-		liste->setZeilenHeight( i + 1, 20 );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Name" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.name ) );
-		if( inf.zuletztOnline.hat( '.' ) )
-			inf.zuletztOnline.setText( inf.zuletztOnline.getTeilText( 0, inf.zuletztOnline.positionVon( '.' ) ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Zuletzt Online" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.zuletztOnline ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Letztes Spiel" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letztesSpiel ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Letzte Karte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letzteKarte ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Spielart Punkte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.punkte ) );
-		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 );
-	}
-	laden->setSichtbar( 0 );
-	run = 0;
+        liste->addZeile( i + 1, Text() += inf.id );
+        liste->setZeilenHeight( i + 1, 20 );
+        liste->setZeichnungZ( liste->getSpaltenNummer( "Name" ), i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.name ) );
+        if( inf.zuletztOnline.hat( '.' ) )
+            inf.zuletztOnline.setText( inf.zuletztOnline.getTeilText( 0, inf.zuletztOnline.positionVon( '.' ) ) );
+        liste->setZeichnungZ( liste->getSpaltenNummer( "Zuletzt Online" ), i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.zuletztOnline ) );
+        liste->setZeichnungZ( liste->getSpaltenNummer( "Letztes Spiel" ), i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letztesSpiel ) );
+        liste->setZeichnungZ( liste->getSpaltenNummer( "Letzte Karte" ), i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letzteKarte ) );
+        liste->setZeichnungZ( liste->getSpaltenNummer( "Spielart Punkte" ), i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.punkte ) );
+        Knopf *details = initKnopf( 0, 0, 20, 20, 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 );
+    }
+    laden->setSichtbar( 0 );
+    run = 0;
 }
 }
 
 
 bool AccountSuchen::detailsKlick( Knopf *zKnopf, MausEreignis &me )
 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;
+    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::doPublicMausEreignis( MausEreignis &me )
 void AccountSuchen::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( run )
-		return;
-	bool starten = 0;
-	lock();
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	int ausw = sortSpalte->getAuswahl();
-	sortSpalte->doPublicMausEreignis( me );
-	if( ausw != sortSpalte->getAuswahl() )
-	{
-		sortSpalte->einklappen();
-		starten = 1;
-	}
-	ausw = sortRichtung->getAuswahl();
-	sortRichtung->doPublicMausEreignis( me );
-	if( ausw != sortRichtung->getAuswahl() )
-	{
-		sortRichtung->einklappen();
-		starten = 1;
-	}
-	accountName->doPublicMausEreignis( me );
-	bool vera = me.verarbeitet;
-	suchen->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet && me.id == ME_RLinks )
-	{
-		jetztSeite = 1;
-		starten = 1;
-	}
-	vera = me.verarbeitet;
-	zurück->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet )
-	{
-		seite--;
-		starten = 1;
-	}
-	vera = me.verarbeitet;
-	vor->doPublicMausEreignis( me );
-	if( !vera && me.verarbeitet )
-	{
-		seite++;
-		starten = 1;
-	}
-	liste->doPublicMausEreignis( me );
-	me.mx += pos.x;
-	me.my += pos.y;
-	unlock();
-	if( starten )
-		start();
+    if( run )
+        return;
+    bool starten = 0;
+    lock();
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    int ausw = sortSpalte->getAuswahl();
+    sortSpalte->doPublicMausEreignis( me );
+    if( ausw != sortSpalte->getAuswahl() )
+    {
+        sortSpalte->einklappen();
+        starten = 1;
+    }
+    ausw = sortRichtung->getAuswahl();
+    sortRichtung->doPublicMausEreignis( me );
+    if( ausw != sortRichtung->getAuswahl() )
+    {
+        sortRichtung->einklappen();
+        starten = 1;
+    }
+    accountName->doPublicMausEreignis( me );
+    bool vera = me.verarbeitet;
+    suchen->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
+    {
+        jetztSeite = 1;
+        starten = 1;
+    }
+    vera = me.verarbeitet;
+    zurück->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet )
+    {
+        seite--;
+        starten = 1;
+    }
+    vera = me.verarbeitet;
+    vor->doPublicMausEreignis( me );
+    if( !vera && me.verarbeitet )
+    {
+        seite++;
+        starten = 1;
+    }
+    liste->doPublicMausEreignis( me );
+    me.mx += pos.x;
+    me.my += pos.y;
+    unlock();
+    if( starten )
+        start();
 }
 }
 
 
 void AccountSuchen::doTastaturEreignis( TastaturEreignis &te )
 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();
+    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 )
 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;
+    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 )
 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();
+    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 AccountSuchen::getAuswahlAccountId()
 {
 {
-	int ret = auswahl;
-	auswahl = 0;
-	return ret;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *AccountSuchen::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 1000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
+    int ret = auswahl;
+    auswahl = 0;
+    return ret;
 }
 }
 
 
 // Nachrichten
 // Nachrichten
 bool accountSuchenDetailsKlick( void *p, void *obj, MausEreignis me )
 bool accountSuchenDetailsKlick( void *p, void *obj, MausEreignis me )
 {
 {
-	if( p )
-		return ( (AccountSuchen*)p )->detailsKlick( (Knopf*)obj, me );
-	return 1;
+    if( p )
+        return ( (AccountSuchen *)p )->detailsKlick( (Knopf *)obj, me );
+    return 1;
 }
 }

+ 36 - 39
KSGClient/NachLogin/Account/Suchen/AccountSuchen.h

@@ -12,47 +12,44 @@ using namespace Framework;
 class AccountSuchen : public Thread
 class AccountSuchen : public Thread
 {
 {
 private:
 private:
-	Schrift *schrift;
-	Punkt pos;
-	Punkt gr;
-	Animation2D *laden;
-	TextFeld *accountName;
-	Knopf *suchen;
-	AuswahlBox *sortSpalte;
-	AuswahlBox *sortRichtung;
-	Knopf *zurück;
-	TextFeld *seite;
-	Knopf *vor;
-	ObjTabelle *liste;
-	Critical cs;
-	int auswahl;
-	double tickVal;
-	bool sichtbar;
-	int jetztSeite;
-	int maxSeite;
-	unsigned char alpha;
-	bool rend;
-	// privat
-	void lock();
-	void unlock();
-	void tabelleLehren( bool überschrift );
+    Punkt pos;
+    Punkt gr;
+    Animation2D *laden;
+    TextFeld *accountName;
+    Knopf *suchen;
+    AuswahlBox *sortSpalte;
+    AuswahlBox *sortRichtung;
+    Knopf *zurück;
+    TextFeld *seite;
+    Knopf *vor;
+    ObjTabelle *liste;
+    Critical cs;
+    int auswahl;
+    double tickVal;
+    bool sichtbar;
+    int jetztSeite;
+    int maxSeite;
+    unsigned char alpha;
+    bool rend;
+    // privat
+    void lock();
+    void unlock();
+    void tabelleLehren( bool überschrift );
 
 
 public:
 public:
-	// Konstruktor
-	AccountSuchen( Schrift *schrift );
-	// Destruktor
-	~AccountSuchen();
-	// nicht constant
-	void setSichtbar( bool sichtbar );
-	void thread();
-	bool detailsKlick( Knopf *zKnopf, MausEreignis &me );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double tickVal );
-	void render( Bild &zRObj );
-	int getAuswahlAccountId();
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    AccountSuchen();
+    // Destruktor
+    ~AccountSuchen();
+    // nicht constant
+    void setSichtbar( bool sichtbar );
+    void thread();
+    bool detailsKlick( Knopf *zKnopf, MausEreignis &me );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double tickVal );
+    void render( Bild &zRObj );
+    int getAuswahlAccountId();
 };
 };
 
 
 // Nachrichten
 // Nachrichten

+ 74 - 138
KSGClient/NachLogin/Chat/ChatLeiste.cpp

@@ -14,7 +14,8 @@ typedef GSL::GSLDateiV *( *GetGSLDatei )( );
 
 
 // Inhalt der Chat Klasse aus ChatLeiste.h
 // Inhalt der Chat Klasse aus ChatLeiste.h
 // Konstruktor
 // Konstruktor
-Chat::Chat( Schrift *zSchrift )
+Chat::Chat()
+    : ReferenceCounter()
 {
 {
     Bild *minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     Bild *minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     Bild *closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
     Bild *closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
@@ -22,21 +23,21 @@ Chat::Chat( Schrift *zSchrift )
     rahmen->setAlpha( 1 );
     rahmen->setAlpha( 1 );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
-    verlauf = initTextFeld( 7, 7, 184, 210, zSchrift, TextFeld::Style::TextGebiet, "" );
+    verlauf = initTextFeld( 7, 7, 184, 210, TextFeld::Style::TextGebiet, "" );
     verlauf->removeStyle( TextFeld::Style::Erlaubt );
     verlauf->removeStyle( TextFeld::Style::Erlaubt );
     verlauf->updateVScroll();
     verlauf->updateVScroll();
-    nachricht = initTextFeld( 1, 220, 198, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( nachricht, "Nachricht senden.", zSchrift, hauptScreen );
-    name = initTextFeld( 1, 250, 198, 29, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "" );
-    minimieren = initKnopf( 159, 255, 20, 20, 0, 0, "" );
+    nachricht = initTextFeld( 1, 220, 198, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( nachricht, "Nachricht senden." );
+    name = initTextFeld( 1, 250, 198, 29, TextFeld::Style::Text | TextFeld::Style::VCenter, "" );
+    minimieren = initKnopf( 159, 255, 20, 20, 0, "" );
     minimieren->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     minimieren->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     minimieren->setHintergrundBildZ( minimierenBild );
     minimieren->setHintergrundBildZ( minimierenBild );
-    initToolTip( minimieren, "Fenster einklappen.", zSchrift, hauptScreen );
-    close = initKnopf( 179, 255, 20, 20, 0, 0, "" );
+    initToolTip( minimieren, "Fenster einklappen." );
+    close = initKnopf( 179, 255, 20, 20, 0, "" );
     close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     close->setHintergrundBildZ( closeBild );
     close->setHintergrundBildZ( closeBild );
-    initToolTip( close, "Fenster schließen.", zSchrift, hauptScreen );
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    initToolTip( close, "Fenster schließen." );
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     admin = 0;
     admin = 0;
     tickVal = 0;
     tickVal = 0;
     sichtbar = 1;
     sichtbar = 1;
@@ -62,7 +63,6 @@ Chat::Chat( Schrift *zSchrift )
         if( !msgSound )
         if( !msgSound )
             Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
             Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
     }
     }
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -104,11 +104,11 @@ void Chat::addNachricht( char *txt )
         msgSound->setVolume( (int)( ( sound / 100.0 ) * 0xFFFF ), (int)( ( sound / 100.0 ) * 0xFFFF ) );
         msgSound->setVolume( (int)( ( sound / 100.0 ) * 0xFFFF ), (int)( ( sound / 100.0 ) * 0xFFFF ) );
         msgSound->playSound();
         msgSound->playSound();
     }
     }
-    Text * n = new Text( txt );
+    Text *n = new Text( txt );
     verlauf->zTextRenderer()->textFormatieren( n, verlauf->getBreite() - 20 );
     verlauf->zTextRenderer()->textFormatieren( n, verlauf->getBreite() - 20 );
     if( n->getText()[ n->getLength() - 1 ] != '\n' )
     if( n->getText()[ n->getLength() - 1 ] != '\n' )
         n->append( "\n" );
         n->append( "\n" );
-    verlauf->zText()->append( n->getThis() );
+    verlauf->zText()->append( dynamic_cast<Text *>( n->getThis() ) );
     verlauf->setSchriftFarbe( verlauf->zText()->getLength() - n->getLength(), verlauf->zText()->getLength(), 0xFFFFFFFF );
     verlauf->setSchriftFarbe( verlauf->zText()->getLength() - n->getLength(), verlauf->zText()->getLength(), 0xFFFFFFFF );
     n->release();
     n->release();
     if( animation != 4 )
     if( animation != 4 )
@@ -139,17 +139,17 @@ bool Chat::tick( double tickVal )
     return 0;
     return 0;
 }
 }
 
 
-void Chat::doPublicMausEreignis( MausEreignis & me )
+void Chat::doPublicMausEreignis( MausEreignis &me )
 {
 {
     // virtual
     // virtual
 }
 }
 
 
-void Chat::doTastaturEreignis( TastaturEreignis & te )
+void Chat::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     // virtual
     // virtual
 }
 }
 
 
-void Chat::render( int x, Bild & zRObj )
+void Chat::render( int x, Bild &zRObj )
 {
 {
     // virtual
     // virtual
 }
 }
@@ -157,7 +157,7 @@ void Chat::render( int x, Bild & zRObj )
 // constant
 // constant
 TextFeld *Chat::getName() const
 TextFeld *Chat::getName() const
 {
 {
-    return (TextFeld *)name->getThis();
+    return dynamic_cast<TextFeld *>( name->getThis() );
 }
 }
 
 
 TextFeld *Chat::zName() const
 TextFeld *Chat::zName() const
@@ -187,23 +187,10 @@ bool Chat::istSichtbar() const
     return sichtbar;
     return sichtbar;
 }
 }
 
 
-// Reference Counting
-void *Chat::getThis()
-{
-    // virtual
-    return 0;
-}
-
-void *Chat::release()
-{
-    // virtual
-    return 0;
-}
-
 // Inhalt der ChatFenster Klasse aus ChatLeiste.h
 // Inhalt der ChatFenster Klasse aus ChatLeiste.h
 // Konstruktor
 // Konstruktor
-ChatFenster::ChatFenster( Schrift * zSchrift, int accountId )
-    : Chat( zSchrift )
+ChatFenster::ChatFenster( int accountId )
+    : Chat()
 {
 {
     this->accountId = accountId;
     this->accountId = accountId;
     name->setTextZ( infoClient->getSpielerName( accountId ) );
     name->setTextZ( infoClient->getSpielerName( accountId ) );
@@ -302,7 +289,7 @@ bool ChatFenster::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void ChatFenster::doPublicMausEreignis( MausEreignis & me )
+void ChatFenster::doPublicMausEreignis( MausEreignis &me )
 {
 {
     bool tmp = me.verarbeitet;
     bool tmp = me.verarbeitet;
     if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
     if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
@@ -322,7 +309,7 @@ void ChatFenster::doPublicMausEreignis( MausEreignis & me )
     }
     }
     if( !aktion && !sichtbar && !vera )
     if( !aktion && !sichtbar && !vera )
     {
     {
-        if( me.mx < breite &&me.mx > 0 && me.my > 250 && me.my < 280 )
+        if( me.mx < breite && me.mx > 0 && me.my > 250 && me.my < 280 )
             aktion = 3;
             aktion = 3;
     }
     }
     switch( aktion )
     switch( aktion )
@@ -342,7 +329,7 @@ void ChatFenster::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void ChatFenster::doTastaturEreignis( TastaturEreignis & te )
+void ChatFenster::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     bool tmp = te.verarbeitet;
     bool tmp = te.verarbeitet;
     if( animation )
     if( animation )
@@ -381,7 +368,7 @@ void ChatFenster::doTastaturEreignis( TastaturEreignis & te )
     }
     }
 }
 }
 
 
-void ChatFenster::render( int xPos, Bild & zRObj )
+void ChatFenster::render( int xPos, Bild &zRObj )
 {
 {
     int x = xPos;
     int x = xPos;
     int y = 280 - höhe;
     int y = 280 - höhe;
@@ -407,34 +394,19 @@ int ChatFenster::getAccountId() const
     return accountId;
     return accountId;
 }
 }
 
 
-// Reference Counting
-void *ChatFenster::getThis()
-{
-    ref++;
-    return this;
-}
-
-void *ChatFenster::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der ChatroomFenster Klasse aus ChatLeiste.h
 // Inhalt der ChatroomFenster Klasse aus ChatLeiste.h
 // Konstruktor
 // Konstruktor
-ChatroomFenster::ChatroomFenster( Schrift * zSchrift, int chatroomId )
-    : Chat( zSchrift )
+ChatroomFenster::ChatroomFenster( int chatroomId )
+    : Chat()
 {
 {
     Bild *maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     Bild *maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     this->chatroomId = chatroomId;
     this->chatroomId = chatroomId;
-    spielerName = initTextFeld( 200, 5, 120, 0, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( spielerName, "Name des Spielers der eingeladen werden soll.", zSchrift, hauptScreen );
-    einladen = initKnopf( 325, 5, 20, 0, 0, 0, "" );
+    spielerName = initTextFeld( 200, 5, 120, 0, TextFeld::Style::TextFeld, "" );
+    initToolTip( spielerName, "Name des Spielers der eingeladen werden soll." );
+    einladen = initKnopf( 325, 5, 20, 0, 0, "" );
     einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladen->setHintergrundBildZ( maximierenBild );
     einladen->setHintergrundBildZ( maximierenBild );
-    initToolTip( einladen, "Spieler ins Chatroom einladen.", zSchrift, hauptScreen );
+    initToolTip( einladen, "Spieler ins Chatroom einladen." );
     spieler = new ObjTabelle();
     spieler = new ObjTabelle();
     spieler->setMausEreignis( _ret1ME );
     spieler->setMausEreignis( _ret1ME );
     spieler->setStyle( ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Rahmen | ObjTabelle::Style::VScroll | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::VScroll | ObjTabelle::Style::Raster );
     spieler->setStyle( ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Rahmen | ObjTabelle::Style::VScroll | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::VScroll | ObjTabelle::Style::Raster );
@@ -449,7 +421,6 @@ ChatroomFenster::ChatroomFenster( Schrift * zSchrift, int chatroomId )
     spieler->setSpaltenBreite( 0, 110 );
     spieler->setSpaltenBreite( 0, 110 );
     spieler->setSpaltenBreite( 1, 20 );
     spieler->setSpaltenBreite( 1, 20 );
     spieler->setSpaltenBreite( 2, 0 );
     spieler->setSpaltenBreite( 2, 0 );
-    schrift = zSchrift->getThis();
     name->setTextZ( infoClient->getChatroomName( chatroomId ) );
     name->setTextZ( infoClient->getChatroomName( chatroomId ) );
     close->setPosition( close->getX() + 150, close->getY() );
     close->setPosition( close->getX() + 150, close->getY() );
     minimieren->setPosition( minimieren->getX() + 150, minimieren->getY() );
     minimieren->setPosition( minimieren->getX() + 150, minimieren->getY() );
@@ -463,9 +434,8 @@ ChatroomFenster::ChatroomFenster( Schrift * zSchrift, int chatroomId )
 ChatroomFenster::~ChatroomFenster()
 ChatroomFenster::~ChatroomFenster()
 {
 {
     chatClient->chatroomVerlassen( chatroomId );
     chatClient->chatroomVerlassen( chatroomId );
-    schrift = schrift->release();
-    neueSpieler = neueSpieler->release();
-    alteSpieler = alteSpieler->release();
+    neueSpieler->release();
+    alteSpieler->release();
     spieler = (ObjTabelle *)spieler->release();
     spieler = (ObjTabelle *)spieler->release();
     spielerName = (TextFeld *)spielerName->release();
     spielerName = (TextFeld *)spielerName->release();
     einladen = (Knopf *)einladen->release();
     einladen = (Knopf *)einladen->release();
@@ -478,31 +448,31 @@ void ChatroomFenster::addSpieler( int accountId )
     zeile->append( accountId );
     zeile->append( accountId );
     if( spieler->getZeilenNummer( zeile->getText() ) >= 0 )
     if( spieler->getZeilenNummer( zeile->getText() ) >= 0 )
         return;
         return;
-    Bild * einladenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
-    Bild * closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
+    Bild *einladenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
+    Bild *closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
     spieler->addZeile( zeile->getText() );
     spieler->addZeile( zeile->getText() );
     spieler->setZeilenHeight( zeile->getText(), 0 );
     spieler->setZeilenHeight( zeile->getText(), 0 );
-    Text * name = infoClient->getSpielerName( accountId );
-    TextFeld * sName = initTextFeld( 0, 0, 110, 20, schrift, TextFeld::Style::Sichtbar | TextFeld::Style::Text | TextFeld::Style::Center, name->getText() );
-    name = name->release();
+    Text *name = infoClient->getSpielerName( accountId );
+    TextFeld *sName = initTextFeld( 0, 0, 110, 20, TextFeld::Style::Sichtbar | TextFeld::Style::Text | TextFeld::Style::Center, name->getText() );
+    name->release();
     spieler->setZeichnungZ( "Name", zeile->getText(), sName );
     spieler->setZeichnungZ( "Name", zeile->getText(), sName );
-    Knopf * freund = initKnopf( 0, 0, 20, 20, 0, 0, "" );
+    Knopf *freund = initKnopf( 0, 0, 20, 20, 0, "" );
     freund->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     freund->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     freund->setHintergrundBildZ( einladenBild );
     freund->setHintergrundBildZ( einladenBild );
     freund->setMausEreignisParameter( this );
     freund->setMausEreignisParameter( this );
     freund->setMausEreignis( chatroomFensterFreundME );
     freund->setMausEreignis( chatroomFensterFreundME );
-    initToolTip( freund, "Freundeseinladung an den Spieler schicken.", schrift, hauptScreen );
+    initToolTip( freund, "Freundeseinladung an den Spieler schicken." );
     spieler->setZeichnungZ( "Freund", zeile->getText(), freund );
     spieler->setZeichnungZ( "Freund", zeile->getText(), freund );
-    Knopf * entfernen = initKnopf( 0, 0, 0, 20, 0, 0, "" );
+    Knopf *entfernen = initKnopf( 0, 0, 0, 20, 0, "" );
     entfernen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     entfernen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     entfernen->setHintergrundBildZ( closeBild );
     entfernen->setHintergrundBildZ( closeBild );
     entfernen->setMausEreignisParameter( this );
     entfernen->setMausEreignisParameter( this );
     entfernen->setMausEreignis( chatroomFensterEntfernenME );
     entfernen->setMausEreignis( chatroomFensterEntfernenME );
-    initToolTip( entfernen, "Spieler aus Chatroom entfernen.", schrift, hauptScreen );
+    initToolTip( entfernen, "Spieler aus Chatroom entfernen." );
     spieler->setZeichnungZ( "Kick", zeile->getText(), entfernen );
     spieler->setZeichnungZ( "Kick", zeile->getText(), entfernen );
     neueSpieler->add( accountId, neueSpielerAnzahl );
     neueSpieler->add( accountId, neueSpielerAnzahl );
     neueSpielerAnzahl++;
     neueSpielerAnzahl++;
-    zeile = zeile->release();
+    zeile->release();
     rend = 1;
     rend = 1;
 }
 }
 
 
@@ -629,7 +599,7 @@ bool ChatroomFenster::tick( double tickVal )
         zeile->setText( "" );
         zeile->setText( "" );
         rend = 1;
         rend = 1;
     }
     }
-    zeile = zeile->release();
+    zeile->release();
     if( admin )
     if( admin )
     {
     {
         if( spielerName->getHeight() != 20 )
         if( spielerName->getHeight() != 20 )
@@ -664,7 +634,7 @@ bool ChatroomFenster::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void ChatroomFenster::doPublicMausEreignis( MausEreignis & me )
+void ChatroomFenster::doPublicMausEreignis( MausEreignis &me )
 {
 {
     bool tmp = me.verarbeitet;
     bool tmp = me.verarbeitet;
     if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
     if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
@@ -689,7 +659,7 @@ void ChatroomFenster::doPublicMausEreignis( MausEreignis & me )
     }
     }
     if( !aktion && !sichtbar && !vera )
     if( !aktion && !sichtbar && !vera )
     {
     {
-        if( me.mx < breite &&me.mx > 0 && me.my > 250 && me.my < 280 )
+        if( me.mx < breite && me.mx > 0 && me.my > 250 && me.my < 280 )
             aktion = 3;
             aktion = 3;
     }
     }
     switch( aktion )
     switch( aktion )
@@ -733,7 +703,7 @@ void ChatroomFenster::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void ChatroomFenster::doTastaturEreignis( TastaturEreignis & te )
+void ChatroomFenster::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     bool tmp = te.verarbeitet;
     bool tmp = te.verarbeitet;
     if( animation )
     if( animation )
@@ -790,7 +760,7 @@ void ChatroomFenster::doTastaturEreignis( TastaturEreignis & te )
     }
     }
 }
 }
 
 
-void ChatroomFenster::render( int xPos, Bild & zRObj )
+void ChatroomFenster::render( int xPos, Bild &zRObj )
 {
 {
     int x = xPos;
     int x = xPos;
     int y = 280 - höhe;
     int y = 280 - höhe;
@@ -816,7 +786,7 @@ void ChatroomFenster::render( int xPos, Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-bool ChatroomFenster::druckFreund( void *obj, MausEreignis & me )
+bool ChatroomFenster::druckFreund( void *obj, MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -835,7 +805,7 @@ bool ChatroomFenster::druckFreund( void *obj, MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-bool ChatroomFenster::druckEntfernen( void *obj, MausEreignis & me )
+bool ChatroomFenster::druckEntfernen( void *obj, MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks && admin )
     if( me.id == ME_RLinks && admin )
     {
     {
@@ -860,30 +830,14 @@ int ChatroomFenster::getChatroomId() const
     return chatroomId;
     return chatroomId;
 }
 }
 
 
-// Reference Counting
-void *ChatroomFenster::getThis()
-{
-    ref++;
-    return this;
-}
-
-void *ChatroomFenster::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der ChatLeisteObj Klasse aus ChatLeiste.h
 // Inhalt der ChatLeisteObj Klasse aus ChatLeiste.h
 // Konstruktor
 // Konstruktor
-ChatLeisteObj::ChatLeisteObj( Schrift * zSchrift )
+ChatLeisteObj::ChatLeisteObj()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    schrift = zSchrift->getThis();
     chats = new RCArray< Chat >();
     chats = new RCArray< Chat >();
     hsb = new HScrollBar();
     hsb = new HScrollBar();
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     anzahl = 0;
     anzahl = 0;
     nowME = -1;
     nowME = -1;
 }
 }
@@ -891,9 +845,8 @@ ChatLeisteObj::ChatLeisteObj( Schrift * zSchrift )
 // Destruktor
 // Destruktor
 ChatLeisteObj::~ChatLeisteObj()
 ChatLeisteObj::~ChatLeisteObj()
 {
 {
-    chats = chats->release();
+    chats->release();
     hsb = (HScrollBar *)hsb->release();
     hsb = (HScrollBar *)hsb->release();
-    schrift = schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -961,7 +914,7 @@ void ChatLeisteObj::addChat( int accountId, int chatroomId )
         }
         }
         if( !gefunden )
         if( !gefunden )
         {
         {
-            ChatFenster *neu = new ChatFenster( schrift, accountId );
+            ChatFenster *neu = new ChatFenster( accountId );
             chats->add( neu, anzahl );
             chats->add( neu, anzahl );
             anzahl++;
             anzahl++;
             rend = 1;
             rend = 1;
@@ -981,7 +934,7 @@ void ChatLeisteObj::addChat( int accountId, int chatroomId )
         }
         }
         if( !gefunden )
         if( !gefunden )
         {
         {
-            ChatroomFenster *neu = new ChatroomFenster( schrift, chatroomId );
+            ChatroomFenster *neu = new ChatroomFenster( chatroomId );
             chats->add( neu, anzahl );
             chats->add( neu, anzahl );
             anzahl++;
             anzahl++;
             rend = 1;
             rend = 1;
@@ -1015,7 +968,7 @@ void ChatLeisteObj::removeChat( int accountId, int chatroomId )
     unlockZeichnung();
     unlockZeichnung();
 }
 }
 
 
-void ChatLeisteObj::removeChat( Chat * zChat )
+void ChatLeisteObj::removeChat( Chat *zChat )
 {
 {
     lockZeichnung();
     lockZeichnung();
     for( int i = 0; i < anzahl; i++ )
     for( int i = 0; i < anzahl; i++ )
@@ -1100,13 +1053,13 @@ bool ChatLeisteObj::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void ChatLeisteObj::doTastaturEreignis( TastaturEreignis & te )
+void ChatLeisteObj::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     for( int i = 0; i < anzahl; i++ )
     for( int i = 0; i < anzahl; i++ )
         chats->z( i )->doTastaturEreignis( te );
         chats->z( i )->doTastaturEreignis( te );
 }
 }
 
 
-void ChatLeisteObj::doPublicMausEreignis( MausEreignis & me )
+void ChatLeisteObj::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int mx = me.mx;
     int mx = me.mx;
     int my = me.my;
     int my = me.my;
@@ -1128,7 +1081,7 @@ void ChatLeisteObj::doPublicMausEreignis( MausEreignis & me )
     me.insideParent = insideParent;
     me.insideParent = insideParent;
 }
 }
 
 
-void ChatLeisteObj::render( Bild & zRObj )
+void ChatLeisteObj::render( Bild &zRObj )
 {
 {
     int x = pos.x;
     int x = pos.x;
     int y = pos.y;
     int y = pos.y;
@@ -1153,26 +1106,26 @@ void ChatLeisteObj::render( Bild & zRObj )
 
 
 // Inhalt der ChatLeiste Klasse aus ChatLeiste.h
 // Inhalt der ChatLeiste Klasse aus ChatLeiste.h
 // Konstruktor
 // Konstruktor
-ChatLeiste::ChatLeiste( Schrift * zSchrift, Fenster * zNachLoginFenster )
+ChatLeiste::ChatLeiste( Fenster *zNachLoginFenster )
+    : ReferenceCounter()
 {
 {
     minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
-    bildschirmGröße = hauptScreen->getBackBufferSize();
-    fenster = initFenster( 20 - bildschirmGröße.x, bildschirmGröße.y - 50, bildschirmGröße.x, 50, 0, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::Rahmen, "" );
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    fenster = initFenster( 20 - bildschirmGröße.x, bildschirmGröße.y - 50, bildschirmGröße.x, 50, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::Rahmen, "" );
     fenster->setKBgFarbe( 0xFF000000 );
     fenster->setKBgFarbe( 0xFF000000 );
-    minMax = initKnopf( bildschirmGröße.x - 21, 1, 20, 20, 0, 0, "" );
+    minMax = initKnopf( bildschirmGröße.x - 21, 1, 20, 20, 0, "" );
     minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-    minMax->setHintergrundBildZ( minimierenBild->getThis() );
+    minMax->setHintergrundBildZ( dynamic_cast<Bild *>( minimierenBild->getThis() ) );
     minMax->setMausEreignisParameter( this );
     minMax->setMausEreignisParameter( this );
     minMax->setMausEreignis( chatLeisteMinMaxME );
     minMax->setMausEreignis( chatLeisteMinMaxME );
-    initToolTip( minMax, "Chat Leiste minimieren.", zSchrift, hauptScreen );
-    fenster->addMember( minMax->getThis() );
-    chatLeiste = new ChatLeisteObj( zSchrift );
-    fenster->addMember( chatLeiste->getThis() );
-    zNachLoginFenster->addMember( fenster->getThis() );
+    initToolTip( minMax, "Chat Leiste minimieren." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( minMax->getThis() ) );
+    chatLeiste = new ChatLeisteObj();
+    fenster->addMember( dynamic_cast<Zeichnung *>( chatLeiste->getThis() ) );
+    zNachLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
     tickVal = 0;
     tickVal = 0;
     animation = 1;
     animation = 1;
-    ref = 1;
     rend = 0;
     rend = 0;
     chatClient->chatNachrichtAnfrage();
     chatClient->chatNachrichtAnfrage();
 }
 }
@@ -1180,8 +1133,8 @@ ChatLeiste::ChatLeiste( Schrift * zSchrift, Fenster * zNachLoginFenster )
 // Destruktor
 // Destruktor
 ChatLeiste::~ChatLeiste()
 ChatLeiste::~ChatLeiste()
 {
 {
-    minimierenBild = minimierenBild->release();
-    maximierenBild = maximierenBild->release();
+    minimierenBild->release();
+    maximierenBild->release();
     fenster = (Fenster *)fenster->release();
     fenster = (Fenster *)fenster->release();
     minMax = (Knopf *)minMax->release();
     minMax = (Knopf *)minMax->release();
     chatLeiste = (ChatLeisteObj *)chatLeiste->release();
     chatLeiste = (ChatLeisteObj *)chatLeiste->release();
@@ -1208,7 +1161,7 @@ void ChatLeiste::removeChat( int accountId, int chatroomId )
     chatLeiste->removeChat( accountId, chatroomId );
     chatLeiste->removeChat( accountId, chatroomId );
 }
 }
 
 
-void ChatLeiste::removeChat( Chat * zChat )
+void ChatLeiste::removeChat( Chat *zChat )
 {
 {
     chatLeiste->removeChat( zChat );
     chatLeiste->removeChat( zChat );
 }
 }
@@ -1274,7 +1227,7 @@ bool ChatLeiste::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-bool ChatLeiste::druckMinMax( MausEreignis & me )
+bool ChatLeiste::druckMinMax( MausEreignis &me )
 {
 {
     if( animation )
     if( animation )
         return 1;
         return 1;
@@ -1283,36 +1236,19 @@ bool ChatLeiste::druckMinMax( MausEreignis & me )
         if( minMax->zHintergrundBild() == minimierenBild )
         if( minMax->zHintergrundBild() == minimierenBild )
         {
         {
             animation = 2;
             animation = 2;
-            minMax->setHintergrundBildZ( maximierenBild->getThis() );
+            minMax->setHintergrundBildZ( dynamic_cast<Bild *>( maximierenBild->getThis() ) );
             // TODO minMax->zToolTip()->setText( "Chat Leiste maximieren." );
             // TODO minMax->zToolTip()->setText( "Chat Leiste maximieren." );
         }
         }
         else
         else
         {
         {
             animation = 1;
             animation = 1;
-            minMax->setHintergrundBildZ( minimierenBild->getThis() );
+            minMax->setHintergrundBildZ( dynamic_cast<Bild *>( minimierenBild->getThis() ) );
             // TODO minMax->zToolTip()->setText( "Chat Leiste minimieren." );
             // TODO minMax->zToolTip()->setText( "Chat Leiste minimieren." );
         }
         }
     }
     }
     return 1;
     return 1;
 }
 }
 
 
-// constant
-
-// Reference Counting
-ChatLeiste *ChatLeiste::getThis()
-{
-    ref++;
-    return this;
-}
-
-ChatLeiste *ChatLeiste::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Nachrichten
 // Nachrichten
 bool chatLeisteMinMaxME( void *p, void *obj, MausEreignis me )
 bool chatLeisteMinMaxME( void *p, void *obj, MausEreignis me )
 {
 {

+ 122 - 140
KSGClient/NachLogin/Chat/ChatLeiste.h

@@ -14,177 +14,159 @@
 using namespace Framework;
 using namespace Framework;
 using namespace Network;
 using namespace Network;
 
 
-class Chat
+class Chat : public virtual ReferenceCounter
 {
 {
 protected:
 protected:
-	LRahmen *rahmen;
-	TextFeld *verlauf;
-	TextFeld *nachricht;
-	TextFeld *name;
-	Knopf *minimieren;
-	Knopf *close;
-	Punkt bildschirmGröße;
-	GSL::GSLSoundV *msgSound;
-	bool admin;
-	double tickVal;
-	bool sichtbar;
-	int animation;
-	int breite;
-	int höhe;
-	bool rend;
-	int ref;
+    LRahmen *rahmen;
+    TextFeld *verlauf;
+    TextFeld *nachricht;
+    TextFeld *name;
+    Knopf *minimieren;
+    Knopf *close;
+    Punkt bildschirmGröße;
+    GSL::GSLSoundV *msgSound;
+    bool admin;
+    double tickVal;
+    bool sichtbar;
+    int animation;
+    int breite;
+    int höhe;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	Chat( Schrift *zSchrift );
-	// Destruktor
-	~Chat();
-	// nicht constant
-	void setSichtbar( bool sichtbar );
-	void entfernen();
-	void addNachricht( char *txt );
-	void setAdmin();
-	virtual void addSpieler( int accountId );
-	virtual void removeSpieler( int accountId );
-	virtual bool tick( double tickVal );
-	virtual void doPublicMausEreignis( MausEreignis &me );
-	virtual void doTastaturEreignis( TastaturEreignis &te );
-	virtual void render( int x, Bild &zRObj );
-	// constant
-	TextFeld *getName() const;
-	TextFeld *zName() const;
-	virtual int getAccountId() const;
-	virtual int getChatroomId() const;
-	int getBreite() const;
-	bool istSichtbar() const;
-	// Reference Counting
-	virtual void *getThis();
-	virtual void *release();
+    // Konstruktor
+    Chat();
+    // Destruktor
+    ~Chat();
+    // nicht constant
+    void setSichtbar( bool sichtbar );
+    void entfernen();
+    void addNachricht( char *txt );
+    void setAdmin();
+    virtual void addSpieler( int accountId );
+    virtual void removeSpieler( int accountId );
+    virtual bool tick( double tickVal );
+    virtual void doPublicMausEreignis( MausEreignis &me );
+    virtual void doTastaturEreignis( TastaturEreignis &te );
+    virtual void render( int x, Bild &zRObj );
+    // constant
+    TextFeld *getName() const;
+    TextFeld *zName() const;
+    virtual int getAccountId() const;
+    virtual int getChatroomId() const;
+    int getBreite() const;
+    bool istSichtbar() const;
 };
 };
 
 
 class ChatFenster : public Chat
 class ChatFenster : public Chat
 {
 {
 private:
 private:
-	int accountId;
+    int accountId;
 
 
 public:
 public:
-	// Konstruktor
-	ChatFenster( Schrift *zSchrift, int accountId );
-	// Destruktor
-	~ChatFenster();
-	// nicht constant
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	void render( int x, Bild &zRObj ) override;
-	// constant
-	int getAccountId() const override;
-	// Reference Counting
-	void *getThis() override;
-	void *release() override;
+    // Konstruktor
+    ChatFenster( int accountId );
+    // Destruktor
+    ~ChatFenster();
+    // nicht constant
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    void render( int x, Bild &zRObj ) override;
+    // constant
+    int getAccountId() const override;
 };
 };
 
 
 class ChatroomFenster : public Chat
 class ChatroomFenster : public Chat
 {
 {
 private:
 private:
-	int chatroomId;
-	ObjTabelle *spieler;
-	Schrift *schrift;
-	Array< int > *neueSpieler;
-	int neueSpielerAnzahl;
-	Array< int > *alteSpieler;
-	int alteSpielerAnzahl;
-	TextFeld *spielerName;
-	Knopf *einladen;
+    int chatroomId;
+    ObjTabelle *spieler;
+    Array< int > *neueSpieler;
+    int neueSpielerAnzahl;
+    Array< int > *alteSpieler;
+    int alteSpielerAnzahl;
+    TextFeld *spielerName;
+    Knopf *einladen;
 
 
 public:
 public:
-	// Konstruktor
-	ChatroomFenster( Schrift *zSchrift, int chatroomId );
-	// Destruktor
-	~ChatroomFenster();
-	// nicht constant
-	void addSpieler( int accountId ) override;
-	void removeSpieler( int accountId ) override;
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	void render( int x, Bild &zRObj ) override;
-	bool druckFreund( void *obj, MausEreignis &me );
-	bool druckEntfernen( void *obj, MausEreignis &me );
-	// constant
-	virtual int getChatroomId() const;
-	// Reference Counting
-	virtual void *getThis();
-	virtual void *release();
+    // Konstruktor
+    ChatroomFenster( int chatroomId );
+    // Destruktor
+    ~ChatroomFenster();
+    // nicht constant
+    void addSpieler( int accountId ) override;
+    void removeSpieler( int accountId ) override;
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    void render( int x, Bild &zRObj ) override;
+    bool druckFreund( void *obj, MausEreignis &me );
+    bool druckEntfernen( void *obj, MausEreignis &me );
+    // constant
+    virtual int getChatroomId() const;
 };
 };
 
 
 class ChatLeisteObj : public Zeichnung
 class ChatLeisteObj : public Zeichnung
 {
 {
 private:
 private:
-	RCArray< Chat > *chats;
-	HScrollBar *hsb;
-	Schrift *schrift;
-	Punkt bildschirmGröße;
-	int anzahl;
-	int nowME;
+    RCArray< Chat > *chats;
+    HScrollBar *hsb;
+    Punkt bildschirmGröße;
+    int anzahl;
+    int nowME;
 
 
 public:
 public:
-	// Konstruktor
-	ChatLeisteObj( Schrift *zSchrift );
-	// Destruktor
-	~ChatLeisteObj();
-	// nicht constant
-	void chatNachricht( int vonAccount, char *txt );
-	void chatroomNachricht( int chatroomId, char *txt );
-	void addChat( int accountId, int chatroomId );
-	void removeChat( int accountId, int chatroomId );
-	void removeChat( Chat *zChat );
-	void removeAll();
-	void addSpieler( int chatroomId, int accountId );
-	void removeSpieler( int chatroomId, int accountId );
-	void setChatroomAdmin( int chatroomId );
-	bool tick( double tickVal ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void render( Bild &zRObj ) override;
+    // Konstruktor
+    ChatLeisteObj();
+    // Destruktor
+    ~ChatLeisteObj();
+    // nicht constant
+    void chatNachricht( int vonAccount, char *txt );
+    void chatroomNachricht( int chatroomId, char *txt );
+    void addChat( int accountId, int chatroomId );
+    void removeChat( int accountId, int chatroomId );
+    void removeChat( Chat *zChat );
+    void removeAll();
+    void addSpieler( int chatroomId, int accountId );
+    void removeSpieler( int chatroomId, int accountId );
+    void setChatroomAdmin( int chatroomId );
+    bool tick( double tickVal ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void render( Bild &zRObj ) override;
 };
 };
 
 
-class ChatLeiste
+class ChatLeiste : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Fenster *fenster;
-	Knopf *minMax;
-	ChatLeisteObj *chatLeiste;
-	Punkt bildschirmGröße;
-	Bild *minimierenBild;
-	Bild *maximierenBild;
-	double tickVal;
-	int animation;
-	bool rend;
-	int ref;
+    Fenster *fenster;
+    Knopf *minMax;
+    ChatLeisteObj *chatLeiste;
+    Punkt bildschirmGröße;
+    Bild *minimierenBild;
+    Bild *maximierenBild;
+    double tickVal;
+    int animation;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	ChatLeiste( Schrift *zSchrift, Fenster *zNachLoginFenster );
-	// Destruktor
-	~ChatLeiste();
-	// nicht constant
-	void chatNachricht( int vonAccount, char *txt );
-	void chatroomNachricht( int chatroomId, int vonAccount, char *txt );
-	void addChat( int accountId, int chatroomId );
-	void removeChat( int accountId, int chatroomId );
-	void removeChat( Chat *zChat );
-	void removeAll();
-	void addSpieler( int chatroomId, int accountId );
-	void removeSpieler( int chatroomId, int accountId );
-	void setChatroomAdmin( int chatroomId );
-	bool tick( double tickVal );
-	bool druckMinMax( MausEreignis &me );
-	// constant
-
-	// Reference Counting
-	ChatLeiste *getThis();
-	ChatLeiste *release();
+    // Konstruktor
+    ChatLeiste( Fenster *zNachLoginFenster );
+    // Destruktor
+    ~ChatLeiste();
+    // nicht constant
+    void chatNachricht( int vonAccount, char *txt );
+    void chatroomNachricht( int chatroomId, int vonAccount, char *txt );
+    void addChat( int accountId, int chatroomId );
+    void removeChat( int accountId, int chatroomId );
+    void removeChat( Chat *zChat );
+    void removeAll();
+    void addSpieler( int chatroomId, int accountId );
+    void removeSpieler( int chatroomId, int accountId );
+    void setChatroomAdmin( int chatroomId );
+    bool tick( double tickVal );
+    bool druckMinMax( MausEreignis &me );
 };
 };
 
 
 // Nachrichten
 // Nachrichten

+ 86 - 101
KSGClient/NachLogin/Chat/FreundesListe.cpp

@@ -12,7 +12,7 @@
 
 
 // Inhalt der FreundData Klasse aus FreundesListe.h
 // Inhalt der FreundData Klasse aus FreundesListe.h
 // Konstruktor
 // Konstruktor
-FreundData::FreundData( int accountId, LRahmen *rahmen, AlphaFeld *auswahlBuffer, Schrift *zSchrift )
+FreundData::FreundData( int accountId, LRahmen *rahmen, AlphaFeld *auswahlBuffer )
     : Thread()
     : Thread()
 {
 {
     Bild *entfernenBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
     Bild *entfernenBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
@@ -22,42 +22,37 @@ FreundData::FreundData( int accountId, LRahmen *rahmen, AlphaFeld *auswahlBuffer
     this->accountId = accountId;
     this->accountId = accountId;
     this->rahmen = rahmen;
     this->rahmen = rahmen;
     this->auswahlBuffer = auswahlBuffer;
     this->auswahlBuffer = auswahlBuffer;
-    name = new TextFeld();
+    name = uiFactory.createTextFeld( uiFactory.initParam );
     name->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
     name->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
-    name->setSchriftZ( zSchrift->getThis() );
-    name->setSchriftFarbe( 0xFFFFFFFF );
-    name->setSchriftSize( 12 );
     name->setText( "" );
     name->setText( "" );
     name->setSize( 200, 20 );
     name->setSize( 200, 20 );
     name->setPosition( 25, 1 );
     name->setPosition( 25, 1 );
-    status = new TextFeld();
+    status = uiFactory.createTextFeld( uiFactory.initParam );
     status->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
     status->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
-    status->setSchriftZ( zSchrift->getThis() );
     status->setSchriftFarbe( 0xFFFF0000 );
     status->setSchriftFarbe( 0xFFFF0000 );
-    status->setSchriftSize( 12 );
     status->setText( "offline" );
     status->setText( "offline" );
     status->setSize( 200, 20 );
     status->setSize( 200, 20 );
     status->setPosition( 25, 24 );
     status->setPosition( 25, 24 );
-    entfernen = initKnopf( 228, 49, 20, 20, 0, 0, "" );
+    entfernen = initKnopf( 228, 49, 20, 20, 0, "" );
     entfernen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     entfernen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     entfernen->setHintergrundBildZ( entfernenBild );
     entfernen->setHintergrundBildZ( entfernenBild );
     entfernen->setHintergrundFarbe( 0 );
     entfernen->setHintergrundFarbe( 0 );
-    initToolTip( entfernen, "Freund entfernen.", zSchrift, hauptScreen );
-    ansehen = initKnopf( 208, 49, 20, 20, 0, 0, "" );
+    initToolTip( entfernen, "Freund entfernen." );
+    ansehen = initKnopf( 208, 49, 20, 20, 0, "" );
     ansehen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     ansehen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     ansehen->setHintergrundBildZ( ansehenBild );
     ansehen->setHintergrundBildZ( ansehenBild );
     ansehen->setHintergrundFarbe( 0 );
     ansehen->setHintergrundFarbe( 0 );
-    initToolTip( ansehen, "Account ansehen.", zSchrift, hauptScreen );
-    nachricht = initKnopf( 188, 49, 20, 20, 0, 0, "" );
+    initToolTip( ansehen, "Account ansehen." );
+    nachricht = initKnopf( 188, 49, 20, 20, 0, "" );
     nachricht->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     nachricht->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     nachricht->setHintergrundBildZ( nachrichtBild );
     nachricht->setHintergrundBildZ( nachrichtBild );
     nachricht->setHintergrundFarbe( 0 );
     nachricht->setHintergrundFarbe( 0 );
-    initToolTip( nachricht, "Nachricht senden.", zSchrift, hauptScreen );
-    einladen = initKnopf( 168, 49, 20, 20, 0, 0, "" );
+    initToolTip( nachricht, "Nachricht senden." );
+    einladen = initKnopf( 168, 49, 20, 20, 0, "" );
     einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladen->setHintergrundBildZ( einladenBild );
     einladen->setHintergrundBildZ( einladenBild );
     einladen->setHintergrundFarbe( 0 );
     einladen->setHintergrundFarbe( 0 );
-    initToolTip( einladen, "Spieler in Gruppe einladen.\nDies kann nur der Gruppen Administrator.", zSchrift, hauptScreen );
+    initToolTip( einladen, "Spieler in Gruppe einladen.\nDies kann nur der Gruppen Administrator." );
     online = 0;
     online = 0;
     einladenSichtbar = 0;
     einladenSichtbar = 0;
     ausgewählt = 0;
     ausgewählt = 0;
@@ -146,7 +141,7 @@ void FreundData::zeigeEinladeKnopf( bool zeigen )
     rend = 1;
     rend = 1;
 }
 }
 
 
-void FreundData::doPublicMausEreignis( MausEreignis & me )
+void FreundData::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( animation != 3 )
     if( animation != 3 )
     {
     {
@@ -201,7 +196,7 @@ void FreundData::doPublicMausEreignis( MausEreignis & me )
                 nachricht->append( name->zText()->getText() );
                 nachricht->append( name->zText()->getText() );
                 nachricht->append( " wirklich beenden?" );
                 nachricht->append( " wirklich beenden?" );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Bist du dir Sicher?" ), nachricht, new Text( "ja" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Bist du dir Sicher?" ), nachricht, new Text( "ja" ),
-                                                              new Text( "abbrechen" ), [ id ]()
+                                                              new Text( "abbrechen" ), [id]()
                 {
                 {
                     chatClient->freundschaftBeenden( id );
                     chatClient->freundschaftBeenden( id );
                 } );
                 } );
@@ -217,7 +212,7 @@ void FreundData::doPublicMausEreignis( MausEreignis & me )
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                 }
                 }
-                if( anmeldungClient &&anmeldungClient->verbinde() )
+                if( anmeldungClient && anmeldungClient->verbinde() )
                 {
                 {
                     if( !anmeldungClient->gruppeSpielerEinladen( accountId, nachLogin->zSpielenFenster()->getGruppeId() ) )
                     if( !anmeldungClient->gruppeSpielerEinladen( accountId, nachLogin->zSpielenFenster()->getGruppeId() ) )
                     {
                     {
@@ -322,7 +317,7 @@ bool FreundData::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void FreundData::render( int yPos, Bild & zRObj )
+void FreundData::render( int yPos, Bild &zRObj )
 {
 {
     int br = 250;
     int br = 250;
     if( !zRObj.setDrawOptions( 0, yPos, br, höhe ) )
     if( !zRObj.setDrawOptions( 0, yPos, br, höhe ) )
@@ -394,11 +389,10 @@ int FreundData::getHeight() const
 
 
 // Inhalt der FreundesListeObj Klasse aus FreundesListe.h
 // Inhalt der FreundesListeObj Klasse aus FreundesListe.h
 // Konstruktor
 // Konstruktor
-FreundesListeObj::FreundesListeObj( Schrift * zSchrift )
+FreundesListeObj::FreundesListeObj()
     : Zeichnung()
     : Zeichnung()
 {
 {
     members = new RCArray< FreundData >();
     members = new RCArray< FreundData >();
-    schrift = zSchrift->getThis();
     memberRahmen = new LRahmen();
     memberRahmen = new LRahmen();
     memberRahmen->setFarbe( 0xFFFFFFFF );
     memberRahmen->setFarbe( 0xFFFFFFFF );
     memberRahmen->setRamenBreite( 1 );
     memberRahmen->setRamenBreite( 1 );
@@ -407,7 +401,7 @@ FreundesListeObj::FreundesListeObj( Schrift * zSchrift )
     auswahlBuffer->setPosition( 1, 1 );
     auswahlBuffer->setPosition( 1, 1 );
     vsb = new VScrollBar();
     vsb = new VScrollBar();
     vsb->setKlickScroll( 10 );
     vsb->setKlickScroll( 10 );
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     vsb->update( 0, bildschirmGröße.y - 200 );
     vsb->update( 0, bildschirmGröße.y - 200 );
     memberNummer = 0;
     memberNummer = 0;
     einladenSichtbar = 0;
     einladenSichtbar = 0;
@@ -416,8 +410,7 @@ FreundesListeObj::FreundesListeObj( Schrift * zSchrift )
 // Destruktor
 // Destruktor
 FreundesListeObj::~FreundesListeObj()
 FreundesListeObj::~FreundesListeObj()
 {
 {
-    members = members->release();
-    schrift = schrift->release();
+    members->release();
     memberRahmen->release();
     memberRahmen->release();
     auswahlBuffer = (AlphaFeld *)auswahlBuffer->release();
     auswahlBuffer = (AlphaFeld *)auswahlBuffer->release();
     vsb = (VScrollBar *)vsb->release();
     vsb = (VScrollBar *)vsb->release();
@@ -426,7 +419,7 @@ FreundesListeObj::~FreundesListeObj()
 // nicht constant
 // nicht constant
 void FreundesListeObj::addMember( int accountId )
 void FreundesListeObj::addMember( int accountId )
 {
 {
-    FreundData *tmp = new FreundData( accountId, (LRahmen *)memberRahmen->getThis(), (AlphaFeld *)auswahlBuffer->getThis(), schrift );
+    FreundData *tmp = new FreundData( accountId, dynamic_cast<LRahmen *>( memberRahmen->getThis() ), dynamic_cast<AlphaFeld *>( auswahlBuffer->getThis() ) );
     members->add( tmp, memberNummer );
     members->add( tmp, memberNummer );
     memberNummer++;
     memberNummer++;
     if( einladenSichtbar )
     if( einladenSichtbar )
@@ -447,7 +440,7 @@ void FreundesListeObj::removeMember( int accountId )
     }
     }
 }
 }
 
 
-void FreundesListeObj::removeMember( FreundData * member )
+void FreundesListeObj::removeMember( FreundData *member )
 {
 {
     for( int i = 0; i < memberNummer; i++ )
     for( int i = 0; i < memberNummer; i++ )
     {
     {
@@ -532,7 +525,7 @@ bool FreundesListeObj::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void FreundesListeObj::doPublicMausEreignis( MausEreignis & me )
+void FreundesListeObj::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int my = me.my;
     int my = me.my;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -573,7 +566,7 @@ void FreundesListeObj::doPublicMausEreignis( MausEreignis & me )
     vsb->doMausMessage( 250, pos.y, 20, gr.y, me );
     vsb->doMausMessage( 250, pos.y, 20, gr.y, me );
 }
 }
 
 
-void FreundesListeObj::render( Bild & zrObj )
+void FreundesListeObj::render( Bild &zrObj )
 {
 {
     if( !zrObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
     if( !zrObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
         return;
         return;
@@ -603,14 +596,14 @@ bool FreundesListeObj::istFreund( int accId ) const
 
 
 // Inhalt der FreundesListe Klasse aus FreundesListe.h
 // Inhalt der FreundesListe Klasse aus FreundesListe.h
 // Konstruktor
 // Konstruktor
-FreundesListe::FreundesListe( Schrift * zSchrift, Fenster * zNachLoginFenster )
+FreundesListe::FreundesListe( Fenster *zNachLoginFenster )
     : Thread()
     : Thread()
 {
 {
     minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     Bild *neuerFreundBild = bilder->get( "data/client/bilder/chat.ltdb/neuerfreund.png" );
     Bild *neuerFreundBild = bilder->get( "data/client/bilder/chat.ltdb/neuerfreund.png" );
 
 
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
 
 
     fenster = new Fenster();
     fenster = new Fenster();
     fenster->addStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHintergrund );
     fenster->addStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHintergrund );
@@ -619,94 +612,94 @@ FreundesListe::FreundesListe( Schrift * zSchrift, Fenster * zNachLoginFenster )
     fenster->setKBgFarbe( 0xFF000000 );
     fenster->setKBgFarbe( 0xFF000000 );
     fenster->setPosition( -250, 100 );
     fenster->setPosition( -250, 100 );
 
 
-    minMax = initKnopf( 249, 1, 20, 20, 0, 0, "" );
+    minMax = initKnopf( 249, 1, 20, 20, 0, "" );
     minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-    minMax->setHintergrundBildZ( minimierenBild->getThis() );
+    minMax->setHintergrundBildZ( dynamic_cast<Bild *>( minimierenBild->getThis() ) );
     minMax->setMausEreignisParameter( this );
     minMax->setMausEreignisParameter( this );
     minMax->setMausEreignis( freundesListeMinMaxME );
     minMax->setMausEreignis( freundesListeMinMaxME );
-    initToolTip( minMax, "Freundes Leiste minimieren.", zSchrift, hauptScreen );
-    fenster->addMember( minMax->getThis() );
+    initToolTip( minMax, "Freundes Leiste minimieren." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( minMax->getThis() ) );
 
 
-    überschrift = initTextFeld( 0, 5, 250, 25, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center | TextFeld::Style::Sichtbar, "Freunde" );
+    überschrift = initTextFeld( 0, 5, 250, 25, TextFeld::Style::Text | TextFeld::Style::Center | TextFeld::Style::Sichtbar, "Freunde" );
     überschrift->setSchriftSize( 15 );
     überschrift->setSchriftSize( 15 );
-    fenster->addMember( überschrift->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( überschrift->getThis() ) );
 
 
-    accountName = initTextFeld( 25, 40, 200, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::Sichtbar, "" );
+    accountName = initTextFeld( 25, 40, 200, 20, TextFeld::Style::TextFeld | TextFeld::Style::Sichtbar, "" );
     accountName->setTastaturEreignisParameter( this );
     accountName->setTastaturEreignisParameter( this );
     accountName->setTastaturEreignis( freundesListeNameTE );
     accountName->setTastaturEreignis( freundesListeNameTE );
-    initToolTip( accountName, "Mit diesem Namen bist du bei anderen Spielern sichtbar.", zSchrift, hauptScreen );
-    fenster->addMember( accountName->getThis() );
+    initToolTip( accountName, "Mit diesem Namen bist du bei anderen Spielern sichtbar." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( accountName->getThis() ) );
 
 
-    LTDBDatei * chatBilder = new LTDBDatei();
+    LTDBDatei *chatBilder = new LTDBDatei();
     chatBilder->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
     chatBilder->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
     chatBilder->leseDaten( 0 );
     chatBilder->leseDaten( 0 );
-    Bild * neuerChatBild = chatBilder->laden( 0, new Text( "neuerchat.png" ) );
-    chatBilder = chatBilder->release();
+    Bild *neuerChatBild = chatBilder->laden( 0, new Text( "neuerchat.png" ) );
+    chatBilder->release();
 
 
-    neuerFreund = initKnopf( 5, 75, 20, 20, 0, 0, "" );
+    neuerFreund = initKnopf( 5, 75, 20, 20, 0, "" );
     neuerFreund->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuerFreund->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuerFreund->setHintergrundBildZ( neuerFreundBild );
     neuerFreund->setHintergrundBildZ( neuerFreundBild );
     neuerFreund->setMausEreignisParameter( this );
     neuerFreund->setMausEreignisParameter( this );
     neuerFreund->setMausEreignis( freundesListeNeuerFreundME );
     neuerFreund->setMausEreignis( freundesListeNeuerFreundME );
-    initToolTip( neuerFreund, "Freundesanfrage senden.", zSchrift, hauptScreen );
-    fenster->addMember( neuerFreund->getThis() );
+    initToolTip( neuerFreund, "Freundesanfrage senden." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( neuerFreund->getThis() ) );
 
 
-    neuerChat = initKnopf( 30, 75, 20, 20, 0, 0, "" );
+    neuerChat = initKnopf( 30, 75, 20, 20, 0, "" );
     neuerChat->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuerChat->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuerChat->setHintergrundBildZ( neuerChatBild );
     neuerChat->setHintergrundBildZ( neuerChatBild );
     neuerChat->setMausEreignisParameter( this );
     neuerChat->setMausEreignisParameter( this );
     neuerChat->setMausEreignis( freundesListeNeuerChatME );
     neuerChat->setMausEreignis( freundesListeNeuerChatME );
-    initToolTip( neuerChat, "Nachricht senden.", zSchrift, hauptScreen );
-    fenster->addMember( neuerChat->getThis() );
+    initToolTip( neuerChat, "Nachricht senden." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( neuerChat->getThis() ) );
 
 
-    neuerFreundFenster = initFenster( 0, 100, 270, 0, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0 );
-    neuerFreundSpielerName = initTextFeld( 5, 5, 235, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name" );
+    neuerFreundFenster = initFenster( 0, 100, 270, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0 );
+    neuerFreundSpielerName = initTextFeld( 5, 5, 235, 20, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name" );
     neuerFreundSpielerName->setTastaturEreignisParameter( this );
     neuerFreundSpielerName->setTastaturEreignisParameter( this );
     neuerFreundSpielerName->setTastaturEreignis( freundesListeNeuerFreundSpielerNameTE );
     neuerFreundSpielerName->setTastaturEreignis( freundesListeNeuerFreundSpielerNameTE );
-    initToolTip( neuerFreundSpielerName, "Name des Spielers an den eine Freundesanfrage gesendet werden soll.", zSchrift, hauptScreen );
-    neuerFreundFenster->addMember( neuerFreundSpielerName->getThis() );
-    neuerFreundFertig = initKnopf( 245, 5, 20, 20, 0, 0, "" );
+    initToolTip( neuerFreundSpielerName, "Name des Spielers an den eine Freundesanfrage gesendet werden soll." );
+    neuerFreundFenster->addMember( dynamic_cast<Zeichnung *>( neuerFreundSpielerName->getThis() ) );
+    neuerFreundFertig = initKnopf( 245, 5, 20, 20, 0, "" );
     neuerFreundFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuerFreundFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
-    neuerFreundFertig->setHintergrundBildZ( maximierenBild->getThis() );
+    neuerFreundFertig->setHintergrundBildZ( dynamic_cast<Bild *>( maximierenBild->getThis() ) );
     neuerFreundFertig->setMausEreignisParameter( this );
     neuerFreundFertig->setMausEreignisParameter( this );
     neuerFreundFertig->setMausEreignis( freundesListeNeuerFreundFertigME );
     neuerFreundFertig->setMausEreignis( freundesListeNeuerFreundFertigME );
-    initToolTip( neuerFreundFertig, "Diesem Spieler eine Freundesanfrage senden.", zSchrift, hauptScreen );
-    neuerFreundFenster->addMember( neuerFreundFertig->getThis() );
-    fenster->addMember( neuerFreundFenster->getThis() );
+    initToolTip( neuerFreundFertig, "Diesem Spieler eine Freundesanfrage senden." );
+    neuerFreundFenster->addMember( dynamic_cast<Zeichnung *>( neuerFreundFertig->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( neuerFreundFenster->getThis() ) );
 
 
-    neuerChatFenster = initFenster( 0, 100, 270, 0, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0 );
-    neuerChatName = initTextFeld( 5, 5, 235, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name" );
+    neuerChatFenster = initFenster( 0, 100, 270, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0 );
+    neuerChatName = initTextFeld( 5, 5, 235, 20, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name" );
     neuerChatName->setTastaturEreignisParameter( this );
     neuerChatName->setTastaturEreignisParameter( this );
     neuerChatName->setTastaturEreignis( freundesListeNeuerChatNameTE );
     neuerChatName->setTastaturEreignis( freundesListeNeuerChatNameTE );
-    initToolTip( neuerChatName, "Name des Spielers an den eine Nachricht gesendet werden soll.", zSchrift, hauptScreen );
-    neuerChatFenster->addMember( neuerChatName->getThis() );
-    neuerChatFertig = initKnopf( 245, 5, 20, 20, 0, 0, "" );
+    initToolTip( neuerChatName, "Name des Spielers an den eine Nachricht gesendet werden soll." );
+    neuerChatFenster->addMember( dynamic_cast<Zeichnung *>( neuerChatName->getThis() ) );
+    neuerChatFertig = initKnopf( 245, 5, 20, 20, 0, "" );
     neuerChatFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuerChatFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
-    neuerChatFertig->setHintergrundBildZ( maximierenBild->getThis() );
+    neuerChatFertig->setHintergrundBildZ( dynamic_cast<Bild *>( maximierenBild->getThis() ) );
     neuerChatFertig->setMausEreignisParameter( this );
     neuerChatFertig->setMausEreignisParameter( this );
     neuerChatFertig->setMausEreignis( freundesListeNeuerChatFertigME );
     neuerChatFertig->setMausEreignis( freundesListeNeuerChatFertigME );
-    initToolTip( neuerChatFertig, "Diesem Spieler eine Nachricht senden.", zSchrift, hauptScreen );
-    neuerChatFenster->addMember( neuerChatFertig->getThis() );
-    neuesChatroomName = initTextFeld( 5, 30, 235, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Chatroom Name" );
+    initToolTip( neuerChatFertig, "Diesem Spieler eine Nachricht senden." );
+    neuerChatFenster->addMember( dynamic_cast<Zeichnung *>( neuerChatFertig->getThis() ) );
+    neuesChatroomName = initTextFeld( 5, 30, 235, 20, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Chatroom Name" );
     neuesChatroomName->setTastaturEreignisParameter( this );
     neuesChatroomName->setTastaturEreignisParameter( this );
     neuesChatroomName->setTastaturEreignis( freundesListeNeuesChatroomNameTE );
     neuesChatroomName->setTastaturEreignis( freundesListeNeuesChatroomNameTE );
-    initToolTip( neuesChatroomName, "Name des Chatroom dem du beitreten möchtest.", zSchrift, hauptScreen );
-    neuerChatFenster->addMember( neuesChatroomName->getThis() );
-    neuesChatroomFertig = initKnopf( 245, 30, 20, 20, 0, 0, "" );
+    initToolTip( neuesChatroomName, "Name des Chatroom dem du beitreten möchtest." );
+    neuerChatFenster->addMember( dynamic_cast<Zeichnung *>( neuesChatroomName->getThis() ) );
+    neuesChatroomFertig = initKnopf( 245, 30, 20, 20, 0, "" );
     neuesChatroomFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     neuesChatroomFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
-    neuesChatroomFertig->setHintergrundBildZ( maximierenBild->getThis() );
+    neuesChatroomFertig->setHintergrundBildZ( dynamic_cast<Bild *>( maximierenBild->getThis() ) );
     neuesChatroomFertig->setMausEreignisParameter( this );
     neuesChatroomFertig->setMausEreignisParameter( this );
     neuesChatroomFertig->setMausEreignis( freundesListeNeuesChatroomFertigME );
     neuesChatroomFertig->setMausEreignis( freundesListeNeuesChatroomFertigME );
-    initToolTip( neuesChatroomFertig, "Chatroom erstellen oder beitreten.", zSchrift, hauptScreen );
-    neuerChatFenster->addMember( neuesChatroomFertig->getThis() );
-    fenster->addMember( neuerChatFenster->getThis() );
+    initToolTip( neuesChatroomFertig, "Chatroom erstellen oder beitreten." );
+    neuerChatFenster->addMember( dynamic_cast<Zeichnung *>( neuesChatroomFertig->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( neuerChatFenster->getThis() ) );
 
 
-    freundesListe = new FreundesListeObj( zSchrift );
+    freundesListe = new FreundesListeObj();
     freundesListe->setPosition( 0, 100 );
     freundesListe->setPosition( 0, 100 );
     freundesListe->setSize( 270, bildschirmGröße.y - 200 );
     freundesListe->setSize( 270, bildschirmGröße.y - 200 );
-    fenster->addMember( freundesListe->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( freundesListe->getThis() ) );
 
 
-    zNachLoginFenster->addMember( fenster->getThis() );
+    zNachLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
     animation = 1;
     animation = 1;
     tickVal = 0;
     tickVal = 0;
     neuerFreundSichtbar = 0;
     neuerFreundSichtbar = 0;
@@ -720,8 +713,8 @@ FreundesListe::FreundesListe( Schrift * zSchrift, Fenster * zNachLoginFenster )
 FreundesListe::~FreundesListe()
 FreundesListe::~FreundesListe()
 {
 {
     fenster = (Fenster *)fenster->release();
     fenster = (Fenster *)fenster->release();
-    minimierenBild = minimierenBild->release();
-    maximierenBild = maximierenBild->release();
+    minimierenBild->release();
+    maximierenBild->release();
     minMax = (Knopf *)minMax->release();
     minMax = (Knopf *)minMax->release();
     überschrift = (TextFeld *)überschrift->release();
     überschrift = (TextFeld *)überschrift->release();
     accountName = (TextFeld *)accountName->release();
     accountName = (TextFeld *)accountName->release();
@@ -749,7 +742,7 @@ void FreundesListe::removeMember( int accountId )
     freundesListe->removeMember( accountId );
     freundesListe->removeMember( accountId );
 }
 }
 
 
-void FreundesListe::removeMember( FreundData * member )
+void FreundesListe::removeMember( FreundData *member )
 {
 {
     freundesListe->removeMember( member );
     freundesListe->removeMember( member );
 }
 }
@@ -792,7 +785,7 @@ void FreundesListe::thread()
             err = 0;
             err = 0;
         }
         }
     }
     }
-    if( err &&nachLogin->zNachrichtenListe() )
+    if( err && nachLogin->zNachrichtenListe() )
     {
     {
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                       new Text( "Dein Accountname konnte nicht ermittelt werden." ),
                                                       new Text( "Dein Accountname konnte nicht ermittelt werden." ),
@@ -938,34 +931,34 @@ bool FreundesListe::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-bool FreundesListe::druckMinMax( MausEreignis & me )
+bool FreundesListe::druckMinMax( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
         if( minMax->zHintergrundBild() == minimierenBild )
         if( minMax->zHintergrundBild() == minimierenBild )
         {
         {
             animation = 2;
             animation = 2;
-            minMax->setHintergrundBildZ( maximierenBild->getThis() );
+            minMax->setHintergrundBildZ( dynamic_cast<Bild *>( maximierenBild->getThis() ) );
             // TODO minMax->zToolTip()->setText( "Freundes Leiste maximieren." );
             // TODO minMax->zToolTip()->setText( "Freundes Leiste maximieren." );
         }
         }
         else
         else
         {
         {
             animation = 1;
             animation = 1;
-            minMax->setHintergrundBildZ( minimierenBild->getThis() );
+            minMax->setHintergrundBildZ( dynamic_cast<Bild *>( minimierenBild->getThis() ) );
             // TODO minMax->zToolTip()->setText( "Freundes Leiste minimieren." );
             // TODO minMax->zToolTip()->setText( "Freundes Leiste minimieren." );
         }
         }
     }
     }
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckName( TastaturEreignis & te )
+bool FreundesListe::druckName( TastaturEreignis &te )
 {
 {
     if( te.id == TE_Release && te.taste == T_Enter )
     if( te.id == TE_Release && te.taste == T_Enter )
         chatClient->accountNameÄndern( accountName->zText()->getText() );
         chatClient->accountNameÄndern( accountName->zText()->getText() );
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuerFreund( MausEreignis & me )
+bool FreundesListe::druckNeuerFreund( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -975,7 +968,7 @@ bool FreundesListe::druckNeuerFreund( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuerChat( MausEreignis & me )
+bool FreundesListe::druckNeuerChat( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -985,7 +978,7 @@ bool FreundesListe::druckNeuerChat( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuerFreundSpielerName( TastaturEreignis & te )
+bool FreundesListe::druckNeuerFreundSpielerName( TastaturEreignis &te )
 {
 {
     if( !neuerFreundSichtbar )
     if( !neuerFreundSichtbar )
         return 0;
         return 0;
@@ -997,7 +990,7 @@ bool FreundesListe::druckNeuerFreundSpielerName( TastaturEreignis & te )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuerFreundFertig( MausEreignis & me )
+bool FreundesListe::druckNeuerFreundFertig( MausEreignis &me )
 {
 {
     if( !neuerFreundSichtbar )
     if( !neuerFreundSichtbar )
         return 0;
         return 0;
@@ -1023,7 +1016,7 @@ bool FreundesListe::druckNeuerFreundFertig( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuerChatName( TastaturEreignis & te )
+bool FreundesListe::druckNeuerChatName( TastaturEreignis &te )
 {
 {
     if( !neuerChatSichtbar )
     if( !neuerChatSichtbar )
         return 0;
         return 0;
@@ -1035,7 +1028,7 @@ bool FreundesListe::druckNeuerChatName( TastaturEreignis & te )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuerChatFertig( MausEreignis & me )
+bool FreundesListe::druckNeuerChatFertig( MausEreignis &me )
 {
 {
     if( !neuerChatSichtbar )
     if( !neuerChatSichtbar )
         return 0;
         return 0;
@@ -1057,7 +1050,7 @@ bool FreundesListe::druckNeuerChatFertig( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuesChatroomName( TastaturEreignis & te )
+bool FreundesListe::druckNeuesChatroomName( TastaturEreignis &te )
 {
 {
     if( !neuerChatSichtbar )
     if( !neuerChatSichtbar )
         return 0;
         return 0;
@@ -1069,7 +1062,7 @@ bool FreundesListe::druckNeuesChatroomName( TastaturEreignis & te )
     return 1;
     return 1;
 }
 }
 
 
-bool FreundesListe::druckNeuesChatroomFertig( MausEreignis & me )
+bool FreundesListe::druckNeuesChatroomFertig( MausEreignis &me )
 {
 {
     if( !neuerChatSichtbar )
     if( !neuerChatSichtbar )
         return 0;
         return 0;
@@ -1100,14 +1093,6 @@ bool FreundesListe::druckNeuesChatroomFertig( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *FreundesListe::release()
-{
-    if( ref == 2 && run )
-        ende();
-    return Thread::release();
-}
-
 // constant
 // constant
 bool FreundesListe::istFreund( int accId ) const
 bool FreundesListe::istFreund( int accId ) const
 {
 {

+ 117 - 120
KSGClient/NachLogin/Chat/FreundesListe.h

@@ -14,142 +14,139 @@ using namespace Framework;
 class FreundData : public Thread
 class FreundData : public Thread
 {
 {
 private:
 private:
-	LRahmen *rahmen;
-	AlphaFeld *auswahlBuffer;
-	TextFeld *name;
-	TextFeld *status;
-	Knopf *entfernen;
-	Knopf *ansehen;
-	Knopf *nachricht;
-	Knopf *einladen;
-	int accountId;
-	bool einladenSichtbar;
-	bool online;
-	bool ausgewählt;
-	int höhe;
-	int animation;
-	unsigned char auswahlAlpha;
-	double tickVal;
-	bool rend;
+    LRahmen *rahmen;
+    AlphaFeld *auswahlBuffer;
+    TextFeld *name;
+    TextFeld *status;
+    Knopf *entfernen;
+    Knopf *ansehen;
+    Knopf *nachricht;
+    Knopf *einladen;
+    int accountId;
+    bool einladenSichtbar;
+    bool online;
+    bool ausgewählt;
+    int höhe;
+    int animation;
+    unsigned char auswahlAlpha;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	FreundData( int accountId, LRahmen *rahmen, AlphaFeld *auswahlBuffer, Schrift *zSchrift );
-	// Destruktor
-	~FreundData();
-	// nicht constant
-	void thread();
-	void setName( char *txt );
-	void setStatus( char *txt );
-	void setOnline( bool online );
-	void setAusgewählt( bool ausw );
-	void remove();
-	void zeigeEinladeKnopf( bool zeigen );
-	void doPublicMausEreignis( MausEreignis &me );
-	bool tick( double tickVal );
-	void render( int yPos, Bild &zRObj );
-	// constant
-	bool istOnline() const;
-	bool istAusgewählt() const;
-	char *zName() const;
-	Text *getName() const;
-	char *zStatus() const;
-	Text *getStatus() const;
-	int getAccountId() const;
-	int getHeight() const;
+    // Konstruktor
+    FreundData( int accountId, LRahmen *rahmen, AlphaFeld *auswahlBuffer );
+    // Destruktor
+    ~FreundData();
+    // nicht constant
+    void thread();
+    void setName( char *txt );
+    void setStatus( char *txt );
+    void setOnline( bool online );
+    void setAusgewählt( bool ausw );
+    void remove();
+    void zeigeEinladeKnopf( bool zeigen );
+    void doPublicMausEreignis( MausEreignis &me );
+    bool tick( double tickVal );
+    void render( int yPos, Bild &zRObj );
+    // constant
+    bool istOnline() const;
+    bool istAusgewählt() const;
+    char *zName() const;
+    Text *getName() const;
+    char *zStatus() const;
+    Text *getStatus() const;
+    int getAccountId() const;
+    int getHeight() const;
 };
 };
 
 
 class FreundesListeObj : public Zeichnung
 class FreundesListeObj : public Zeichnung
 {
 {
 private:
 private:
-	RCArray< FreundData > *members;
-	LRahmen *memberRahmen;
-	AlphaFeld *auswahlBuffer;
-	Schrift *schrift;
-	VScrollBar *vsb;
-	Punkt bildschirmGröße;
-	bool einladenSichtbar;
-	int memberNummer;
+    RCArray< FreundData > *members;
+    LRahmen *memberRahmen;
+    AlphaFeld *auswahlBuffer;
+    VScrollBar *vsb;
+    Punkt bildschirmGröße;
+    bool einladenSichtbar;
+    int memberNummer;
 
 
 public:
 public:
-	// Konstruktor
-	FreundesListeObj( Schrift *zSchrift );
-	// Destruktor
-	~FreundesListeObj();
-	// nicht constant
-	void addMember( int accountId );
-	void removeMember( int accountId );
-	void removeMember( FreundData *member );
-	void removeAll();
-	void setName( int accountId, char *txt );
-	void setStatus( int accountId, char *txt );
-	void setOnline( int accountId, bool online );
-	void zeigeEinladeKnopf( bool zeigen );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istFreund( int accId ) const;
+    // Konstruktor
+    FreundesListeObj();
+    // Destruktor
+    ~FreundesListeObj();
+    // nicht constant
+    void addMember( int accountId );
+    void removeMember( int accountId );
+    void removeMember( FreundData *member );
+    void removeAll();
+    void setName( int accountId, char *txt );
+    void setStatus( int accountId, char *txt );
+    void setOnline( int accountId, bool online );
+    void zeigeEinladeKnopf( bool zeigen );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istFreund( int accId ) const;
 };
 };
 
 
 class FreundesListe : public Thread
 class FreundesListe : public Thread
 {
 {
 private:
 private:
-	Fenster *fenster;
-	TextFeld *überschrift;
-	TextFeld *accountName;
-	Knopf *minMax;
-	Knopf *neuerFreund;
-	Knopf *neuerChat;
-	FreundesListeObj *freundesListe;
-	Punkt bildschirmGröße;
-	Fenster *neuerFreundFenster;
-	TextFeld *neuerFreundSpielerName;
-	Knopf *neuerFreundFertig;
-	Fenster *neuerChatFenster;
-	TextFeld *neuerChatName;
-	Knopf *neuerChatFertig;
-	TextFeld *neuesChatroomName;
-	Knopf *neuesChatroomFertig;
-	Bild *minimierenBild;
-	Bild *maximierenBild;
-	int animation;
-	double tickVal;
-	bool neuerFreundSichtbar;
-	bool neuerChatSichtbar;
-	bool rend;
+    Fenster *fenster;
+    TextFeld *überschrift;
+    TextFeld *accountName;
+    Knopf *minMax;
+    Knopf *neuerFreund;
+    Knopf *neuerChat;
+    FreundesListeObj *freundesListe;
+    Punkt bildschirmGröße;
+    Fenster *neuerFreundFenster;
+    TextFeld *neuerFreundSpielerName;
+    Knopf *neuerFreundFertig;
+    Fenster *neuerChatFenster;
+    TextFeld *neuerChatName;
+    Knopf *neuerChatFertig;
+    TextFeld *neuesChatroomName;
+    Knopf *neuesChatroomFertig;
+    Bild *minimierenBild;
+    Bild *maximierenBild;
+    int animation;
+    double tickVal;
+    bool neuerFreundSichtbar;
+    bool neuerChatSichtbar;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	FreundesListe( Schrift *zSchrift, Fenster *zNachLoginFenster );
-	// Destruktor
-	~FreundesListe();
-	// nicht constant
-	void addMember( int accountId );
-	void removeMember( int accountId );
-	void removeMember( FreundData *member );
-	void removeAll();
-	void setName( int accountId, char *txt );
-	void setStatus( int accountId, char *txt );
-	void setOnline( int accountId, bool online );
-	void setAnimation( int animation );
-	void thread();
-	void zeigeEinladeKnopf( bool zeigen );
-	bool tick( double tickVal );
-	bool druckMinMax( MausEreignis &me );
-	bool druckName( TastaturEreignis &te );
-	bool druckNeuerFreund( MausEreignis &me );
-	bool druckNeuerChat( MausEreignis &me );
-	bool druckNeuerFreundSpielerName( TastaturEreignis &te );
-	bool druckNeuerFreundFertig( MausEreignis &me );
-	bool druckNeuerChatName( TastaturEreignis &te );
-	bool druckNeuerChatFertig( MausEreignis &me );
-	bool druckNeuesChatroomName( TastaturEreignis &te );
-	bool druckNeuesChatroomFertig( MausEreignis &me );
-	// constant
-	bool istFreund( int accId ) const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    FreundesListe( Fenster *zNachLoginFenster );
+    // Destruktor
+    ~FreundesListe();
+    // nicht constant
+    void addMember( int accountId );
+    void removeMember( int accountId );
+    void removeMember( FreundData *member );
+    void removeAll();
+    void setName( int accountId, char *txt );
+    void setStatus( int accountId, char *txt );
+    void setOnline( int accountId, bool online );
+    void setAnimation( int animation );
+    void thread();
+    void zeigeEinladeKnopf( bool zeigen );
+    bool tick( double tickVal );
+    bool druckMinMax( MausEreignis &me );
+    bool druckName( TastaturEreignis &te );
+    bool druckNeuerFreund( MausEreignis &me );
+    bool druckNeuerChat( MausEreignis &me );
+    bool druckNeuerFreundSpielerName( TastaturEreignis &te );
+    bool druckNeuerFreundFertig( MausEreignis &me );
+    bool druckNeuerChatName( TastaturEreignis &te );
+    bool druckNeuerChatFertig( MausEreignis &me );
+    bool druckNeuesChatroomName( TastaturEreignis &te );
+    bool druckNeuesChatroomFertig( MausEreignis &me );
+    // constant
+    bool istFreund( int accId ) const;
 };
 };
 
 
 // Nachrichten
 // Nachrichten

+ 72 - 108
KSGClient/NachLogin/Chat/NachrichtenListe.cpp

@@ -15,20 +15,20 @@
 
 
 typedef GSL::GSLDateiV *( *GetGSLDatei )( );
 typedef GSL::GSLDateiV *( *GetGSLDatei )( );
 
 
-NLNachricht::NLNachricht( Schrift *zSchrift, Text *titel )
+NLNachricht::NLNachricht( Text *titel )
+    : ReferenceCounter()
 {
 {
     rahmen = new LRahmen();
     rahmen = new LRahmen();
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
     rahmen->setFarbe( 0xFFFFFFFF );
     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, "" );
+    this->titel = initTextFeld( 1, 1, 208, 20, TextFeld::Style::Text | TextFeld::Style::Center, titel->getText() );
+    titel->release();
+    close = initKnopf( 208, 1, 20, 20, 0, "" );
     close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
-    Bild * closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
+    Bild *closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
     close->setHintergrundBildZ( closeBild );
     close->setHintergrundBildZ( closeBild );
-    initToolTip( close, "Nachricht ignorieren.", zSchrift, hauptScreen );
+    initToolTip( close, "Nachricht ignorieren." );
     maxHöhe = 20;
     maxHöhe = 20;
-    ref = 1;
     animation = 1;
     animation = 1;
     ausgewählt = 0;
     ausgewählt = 0;
     tickVal = 0;
     tickVal = 0;
@@ -61,7 +61,7 @@ void NLNachricht::setAusgew
     }
     }
 }
 }
 
 
-void NLNachricht::doPublicMausEreignis( MausEreignis & me )
+void NLNachricht::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( animation != 3 )
     if( animation != 3 )
     {
     {
@@ -155,7 +155,7 @@ bool NLNachricht::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void NLNachricht::render( int y, Bild & zRObj )
+void NLNachricht::render( int y, Bild &zRObj )
 {
 {
     int br = 228;
     int br = 228;
     int hö = höhe;
     int hö = höhe;
@@ -191,31 +191,16 @@ Text *NLNachricht::zTitel() const
     return titel->zText();
     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 )
+SpielUpdateNachricht::SpielUpdateNachricht( Text *titel, Text *nachricht, int dgID, std::function<void()> posAk, std::function<void()> negAk )
+    : NLNachricht( titel )
 {
 {
     Text *result = new Text( nachricht->getText() );
     Text *result = new Text( nachricht->getText() );
     int län = nachricht->getLength();
     int län = nachricht->getLength();
     char *txt = nachricht->getText();
     char *txt = nachricht->getText();
     int x = 0;
     int x = 0;
     int y = 0;
     int y = 0;
-    Alphabet *tmp = zSchrift->getAlphabet( 12 );
-    TextRenderer rd( zSchrift->getThis() );
+    Alphabet *tmp = uiFactory.initParam.schrift->getAlphabet( 12 );
+    TextRenderer rd( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     rd.setSchriftSize( 12 );
     rd.setSchriftSize( 12 );
     int zeilenHöhe = rd.getZeilenHeight() + rd.getZeilenAbstand();
     int zeilenHöhe = rd.getZeilenHeight() + rd.getZeilenAbstand();
     int lastPos = -1;
     int lastPos = -1;
@@ -247,21 +232,21 @@ SpielUpdateNachricht::SpielUpdateNachricht( Schrift * zSchrift, Text * titel, Te
                 i = lastPos;
                 i = lastPos;
                 lastPos = -1;
                 lastPos = -1;
             }
             }
-            b = b->release();
+            b->release();
         }
         }
     }
     }
     y += zeilenHöhe;
     y += zeilenHöhe;
-    tmp = tmp->release();
-    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" );
+    tmp->release();
+    nachricht->release();
+    text = initTextFeld( 1, 22, 228, y, TextFeld::Style::Text, result->getText() );
+    result->release();
+    fortschritt = initFBalken( 5, y + 20, 215, 20, FBalken::Style::normal );
+    herunterladen = initKnopf( 10, 45 + y, 120, 20, Knopf::Style::Sichtbar, "herunterladen" );
+    abbrechen = initKnopf( 140, 45 + y, 80, 20, Knopf::Style::Sichtbar, "abbrechen" );
     this->posAk = posAk;
     this->posAk = posAk;
     this->negAk = negAk;
     this->negAk = negAk;
     maxHöhe = 75 + y;
     maxHöhe = 75 + y;
-    update = new Update( zSchrift, (FBalken *)fortschritt->getThis(), dgID, [ this ]( bool ok )
+    update = new Update( dynamic_cast<FBalken *>( fortschritt->getThis() ), dgID, [this]( bool ok )
     {
     {
         this->animation = 3;
         this->animation = 3;
         if( ok )
         if( ok )
@@ -269,7 +254,7 @@ SpielUpdateNachricht::SpielUpdateNachricht( Schrift * zSchrift, Text * titel, Te
         else
         else
             this->negAk();
             this->negAk();
     } );
     } );
-    if( !updateH->add( (Update *)update->getThis() ) )
+    if( !updateH->add( dynamic_cast<Update *>( update->getThis() ) ) )
         entfernen();
         entfernen();
 }
 }
 
 
@@ -280,6 +265,9 @@ SpielUpdateNachricht::~SpielUpdateNachricht()
     abbrechen->release();
     abbrechen->release();
     fortschritt->release();
     fortschritt->release();
     updateH->remove( update->getDateiGruppe() );
     updateH->remove( update->getDateiGruppe() );
+    update->abbrechen();
+    update->warteAufThread( 10000 );
+    update->ende();
     update->release();
     update->release();
 }
 }
 
 
@@ -290,7 +278,7 @@ void SpielUpdateNachricht::entfernen()
     negAk();
     negAk();
 }
 }
 
 
-void SpielUpdateNachricht::doPublicMausEreignis( MausEreignis & me )
+void SpielUpdateNachricht::doPublicMausEreignis( MausEreignis &me )
 {
 {
     __super::doPublicMausEreignis( me );
     __super::doPublicMausEreignis( me );
     if( animation != 3 )
     if( animation != 3 )
@@ -340,7 +328,7 @@ bool SpielUpdateNachricht::tick( double tickVal )
     return __super::tick( tickVal );
     return __super::tick( tickVal );
 }
 }
 
 
-void SpielUpdateNachricht::render( int y, Bild & zRObj )
+void SpielUpdateNachricht::render( int y, Bild &zRObj )
 {
 {
     __super::render( y, zRObj );
     __super::render( y, zRObj );
     int rbr = rahmen->getRBreite();
     int rbr = rahmen->getRBreite();
@@ -355,8 +343,8 @@ void SpielUpdateNachricht::render( int y, Bild & zRObj )
 
 
 // Inhalt der Nachricht Klasse aus NachrichtListe.h
 // Inhalt der Nachricht Klasse aus NachrichtListe.h
 // Konstruktor
 // Konstruktor
-Nachricht::Nachricht( Schrift * zSchrift, Text * titel, Text * nachricht, Text * positiv, Text * negativ, std::function<void()> posAk, std::function<void()> negAk )
-    : NLNachricht( zSchrift, titel )
+Nachricht::Nachricht( Text *titel, Text *nachricht, Text *positiv, Text *negativ, std::function<void()> posAk, std::function<void()> negAk )
+    : NLNachricht( titel )
 {
 {
 
 
     Text *result = new Text( nachricht->getText() );
     Text *result = new Text( nachricht->getText() );
@@ -364,8 +352,8 @@ Nachricht::Nachricht( Schrift * zSchrift, Text * titel, Text * nachricht, Text *
     char *txt = nachricht->getText();
     char *txt = nachricht->getText();
     int x = 0;
     int x = 0;
     int y = 0;
     int y = 0;
-    Alphabet *tmp = zSchrift->getAlphabet( 12 );
-    TextRenderer rd( zSchrift->getThis() );
+    Alphabet *tmp = uiFactory.initParam.schrift->getAlphabet( 12 );
+    TextRenderer rd( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     rd.setSchriftSize( 12 );
     rd.setSchriftSize( 12 );
     int zeilenHöhe = rd.getZeilenHeight() + rd.getZeilenAbstand();
     int zeilenHöhe = rd.getZeilenHeight() + rd.getZeilenAbstand();
     int lastPos = -1;
     int lastPos = -1;
@@ -397,25 +385,25 @@ Nachricht::Nachricht( Schrift * zSchrift, Text * titel, Text * nachricht, Text *
                 i = lastPos;
                 i = lastPos;
                 lastPos = -1;
                 lastPos = -1;
             }
             }
-            b = b->release();
+            b->release();
         }
         }
     }
     }
     y += zeilenHöhe;
     y += zeilenHöhe;
-    tmp = tmp->release();
-    nachricht = nachricht->release();
-    text = initTextFeld( 1, 22, 228, y, zSchrift, TextFeld::Style::Text, result->getText() );
-    result = result->release();
+    tmp->release();
+    nachricht->release();
+    text = initTextFeld( 1, 22, 228, y, TextFeld::Style::Text, result->getText() );
+    result->release();
     if( positiv )
     if( positiv )
     {
     {
-        this->positiv = initKnopf( 10, 20 + y, 100, 20, zSchrift, Knopf::Style::Sichtbar, positiv->getText() );
-        positiv = positiv->release();
+        this->positiv = initKnopf( 10, 20 + y, 100, 20, Knopf::Style::Sichtbar, positiv->getText() );
+        positiv->release();
     }
     }
     else
     else
         this->positiv = 0;
         this->positiv = 0;
     if( negativ )
     if( negativ )
     {
     {
-        this->negativ = initKnopf( 120, 20 + y, 100, 20, zSchrift, Knopf::Style::Sichtbar, negativ->getText() );
-        negativ = negativ->release();
+        this->negativ = initKnopf( 120, 20 + y, 100, 20, Knopf::Style::Sichtbar, negativ->getText() );
+        negativ->release();
     }
     }
     else
     else
         this->negativ = 0;
         this->negativ = 0;
@@ -440,7 +428,7 @@ void Nachricht::entfernen()
     negAk();
     negAk();
 }
 }
 
 
-void Nachricht::doPublicMausEreignis( MausEreignis & me )
+void Nachricht::doPublicMausEreignis( MausEreignis &me )
 {
 {
     __super::doPublicMausEreignis( me );
     __super::doPublicMausEreignis( me );
     if( animation != 3 )
     if( animation != 3 )
@@ -491,7 +479,7 @@ bool Nachricht::tick( double tickVal )
     return __super::tick( tickVal );
     return __super::tick( tickVal );
 }
 }
 
 
-void Nachricht::render( int yPos, Bild & zRObj )
+void Nachricht::render( int yPos, Bild &zRObj )
 {
 {
     __super::render( yPos, zRObj );
     __super::render( yPos, zRObj );
     int rbr = rahmen->getRBreite();
     int rbr = rahmen->getRBreite();
@@ -508,14 +496,13 @@ void Nachricht::render( int yPos, Bild & zRObj )
 
 
 // Inhalt der NachrichtenListeObj Klasse aus NachrichtListe.h
 // Inhalt der NachrichtenListeObj Klasse aus NachrichtListe.h
 // Konstruktor
 // Konstruktor
-NachrichtenListeObj::NachrichtenListeObj( Schrift * zSchrift )
+NachrichtenListeObj::NachrichtenListeObj()
     : Zeichnung()
     : Zeichnung()
 {
 {
     members = new RCArray< NLNachricht >();
     members = new RCArray< NLNachricht >();
-    schrift = zSchrift->getThis();
     vsb = new VScrollBar();
     vsb = new VScrollBar();
     vsb->setKlickScroll( 10 );
     vsb->setKlickScroll( 10 );
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     vsb->update( 0, bildschirmGröße.y - 122 );
     vsb->update( 0, bildschirmGröße.y - 122 );
     anzahl = 0;
     anzahl = 0;
     gr = Punkt( 250, bildschirmGröße.y - 122 );
     gr = Punkt( 250, bildschirmGröße.y - 122 );
@@ -524,20 +511,19 @@ NachrichtenListeObj::NachrichtenListeObj( Schrift * zSchrift )
 // Destruktor
 // Destruktor
 NachrichtenListeObj::~NachrichtenListeObj()
 NachrichtenListeObj::~NachrichtenListeObj()
 {
 {
-    schrift = schrift->release();
     vsb = (VScrollBar *)vsb->release();
     vsb = (VScrollBar *)vsb->release();
-    members = members->release();
+    members->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
-void NachrichtenListeObj::addNachricht( NLNachricht * nachricht )
+void NachrichtenListeObj::addNachricht( NLNachricht *nachricht )
 {
 {
     members->add( nachricht, anzahl );
     members->add( nachricht, anzahl );
     anzahl++;
     anzahl++;
     rend = 1;
     rend = 1;
 }
 }
 
 
-void NachrichtenListeObj::removeNachricht( NLNachricht * zNachricht )
+void NachrichtenListeObj::removeNachricht( NLNachricht *zNachricht )
 {
 {
     for( int i = 0; i < anzahl; i++ )
     for( int i = 0; i < anzahl; i++ )
     {
     {
@@ -577,7 +563,7 @@ bool NachrichtenListeObj::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void NachrichtenListeObj::doPublicMausEreignis( MausEreignis & me )
+void NachrichtenListeObj::doPublicMausEreignis( MausEreignis &me )
 {
 {
     lockZeichnung();
     lockZeichnung();
     int my = me.my;
     int my = me.my;
@@ -620,7 +606,7 @@ void NachrichtenListeObj::doPublicMausEreignis( MausEreignis & me )
     unlockZeichnung();
     unlockZeichnung();
 }
 }
 
 
-void NachrichtenListeObj::render( Bild & zrObj )
+void NachrichtenListeObj::render( Bild &zrObj )
 {
 {
     lockZeichnung();
     lockZeichnung();
     int x = pos.x;
     int x = pos.x;
@@ -651,29 +637,29 @@ void NachrichtenListeObj::render( Bild & zrObj )
 
 
 // Inhalt der NachrichtenListe Klasse aus NachrichtListe.h
 // Inhalt der NachrichtenListe Klasse aus NachrichtListe.h
 // Konstruktor
 // Konstruktor
-NachrichtenListe::NachrichtenListe( Schrift * zSchrift, Fenster * zNachLoginFenster )
+NachrichtenListe::NachrichtenListe( Fenster *zNachLoginFenster )
+    : ReferenceCounter()
 {
 {
-    schrift = zSchrift->getThis();
     minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
     maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
-    bildschirmGröße = hauptScreen->getBackBufferSize();
-    fenster = initFenster( bildschirmGröße.x - 21, 100, 250, 22, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHintergrund, "" );
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    fenster = initFenster( bildschirmGröße.x - 21, 100, 250, 22, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHintergrund, "" );
     fenster->setKBgFarbe( 0xFF000000 );
     fenster->setKBgFarbe( 0xFF000000 );
-    überschrift = initTextFeld( 1, 1, 248, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center | TextFeld::Style::Sichtbar, "Nachrichten" );
+    überschrift = initTextFeld( 1, 1, 248, 20, TextFeld::Style::Text | TextFeld::Style::Center | TextFeld::Style::Sichtbar, "Nachrichten" );
     überschrift->setSchriftSize( 15 );
     überschrift->setSchriftSize( 15 );
-    fenster->addMember( überschrift->getThis() );
-    minMax = initKnopf( 1, 1, 20, 20, 0, 0, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( überschrift->getThis() ) );
+    minMax = initKnopf( 1, 1, 20, 20, 0, "" );
     minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
     minMax->setMausEreignisParameter( this );
     minMax->setMausEreignisParameter( this );
     minMax->setMausEreignis( NachrichtenListeMinMaxME );
     minMax->setMausEreignis( NachrichtenListeMinMaxME );
-    minMax->setHintergrundBildZ( minimierenBild->getThis() );
-    initToolTip( minMax, "Nachrichten Leiste minimieren.", zSchrift, hauptScreen );
-    fenster->addMember( minMax->getThis() );
-    nachrichtenListe = new NachrichtenListeObj( zSchrift );
+    minMax->setHintergrundBildZ( dynamic_cast<Bild *>( minimierenBild->getThis() ) );
+    initToolTip( minMax, "Nachrichten Leiste minimieren." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( minMax->getThis() ) );
+    nachrichtenListe = new NachrichtenListeObj();
     nachrichtenListe->setPosition( 1, 21 );
     nachrichtenListe->setPosition( 1, 21 );
     nachrichtenListe->setSize( 248, bildschirmGröße.y - 122 );
     nachrichtenListe->setSize( 248, bildschirmGröße.y - 122 );
-    fenster->addMember( nachrichtenListe->getThis() );
-    zNachLoginFenster->addMember( fenster->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachrichtenListe->getThis() ) );
+    zNachLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
     tickVal = 0;
     tickVal = 0;
     animation = 1;
     animation = 1;
     rend = 0;
     rend = 0;
@@ -699,7 +685,6 @@ NachrichtenListe::NachrichtenListe( Schrift * zSchrift, Fenster * zNachLoginFens
         if( !msgSound && !errSound )
         if( !msgSound && !errSound )
             Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
             Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
     }
     }
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -723,13 +708,13 @@ NachrichtenListe::~NachrichtenListe()
     fenster = (Fenster *)fenster->release();
     fenster = (Fenster *)fenster->release();
     minMax = (Knopf *)minMax->release();
     minMax = (Knopf *)minMax->release();
     nachrichtenListe = (NachrichtenListeObj *)nachrichtenListe->release();
     nachrichtenListe = (NachrichtenListeObj *)nachrichtenListe->release();
-    minimierenBild = minimierenBild->release();
-    maximierenBild = maximierenBild->release();
+    minimierenBild->release();
+    maximierenBild->release();
     schrift->release();
     schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
-void NachrichtenListe::addNachricht( Text * titel, Text * nachricht, Text * positiv, Text * negativ, std::function<void()> posAk, std::function<void()> negAk )
+void NachrichtenListe::addNachricht( Text *titel, Text *nachricht, Text *positiv, Text *negativ, std::function<void()> posAk, std::function<void()> negAk )
 {
 {
     int sound = userOptions->wertExistiert( "GUISound" ) ? *userOptions->zWert( "GUISound" ) : 100;
     int sound = userOptions->wertExistiert( "GUISound" ) ? *userOptions->zWert( "GUISound" ) : 100;
     if( titel && titel->hat( "Fehler" ) && errSound )
     if( titel && titel->hat( "Fehler" ) && errSound )
@@ -742,9 +727,9 @@ void NachrichtenListe::addNachricht( Text * titel, Text * nachricht, Text * posi
         msgSound->setVolume( (int)( ( sound / 100.0 ) * 0xFFFF ), (int)( ( sound / 100.0 ) * 0xFFFF ) );
         msgSound->setVolume( (int)( ( sound / 100.0 ) * 0xFFFF ), (int)( ( sound / 100.0 ) * 0xFFFF ) );
         msgSound->playSound();
         msgSound->playSound();
     }
     }
-    nachrichtenListe->addNachricht( new Nachricht( schrift, titel, nachricht, positiv, negativ, posAk, negAk ) );
+    nachrichtenListe->addNachricht( new Nachricht( titel, nachricht, positiv, negativ, posAk, negAk ) );
 }
 }
-void NachrichtenListe::addNachricht( NLNachricht * nachricht )
+void NachrichtenListe::addNachricht( NLNachricht *nachricht )
 {
 {
     int sound = userOptions->wertExistiert( "GUISound" ) ? *userOptions->zWert( "GUISound" ) : 100;
     int sound = userOptions->wertExistiert( "GUISound" ) ? *userOptions->zWert( "GUISound" ) : 100;
     if( nachricht->zTitel() && nachricht->zTitel()->hat( "Fehler" ) && errSound )
     if( nachricht->zTitel() && nachricht->zTitel()->hat( "Fehler" ) && errSound )
@@ -760,7 +745,7 @@ void NachrichtenListe::addNachricht( NLNachricht * nachricht )
     nachrichtenListe->addNachricht( nachricht );
     nachrichtenListe->addNachricht( nachricht );
 }
 }
 
 
-void NachrichtenListe::removeNachricht( NLNachricht * zNachricht )
+void NachrichtenListe::removeNachricht( NLNachricht *zNachricht )
 {
 {
     nachrichtenListe->removeNachricht( zNachricht );
     nachrichtenListe->removeNachricht( zNachricht );
 }
 }
@@ -770,20 +755,20 @@ void NachrichtenListe::removeAll()
     nachrichtenListe->removeAll();
     nachrichtenListe->removeAll();
 }
 }
 
 
-bool NachrichtenListe::druckMinMax( MausEreignis & me )
+bool NachrichtenListe::druckMinMax( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
         if( minMax->zHintergrundBild() == minimierenBild )
         if( minMax->zHintergrundBild() == minimierenBild )
         {
         {
             animation = 2;
             animation = 2;
-            minMax->setHintergrundBildZ( maximierenBild->getThis() );
+            minMax->setHintergrundBildZ( dynamic_cast<Bild *>( maximierenBild->getThis() ) );
             // TODO minMax->zToolTip()->setText( "Nachrichten Leiste maximieren." );
             // TODO minMax->zToolTip()->setText( "Nachrichten Leiste maximieren." );
         }
         }
         else
         else
         {
         {
             animation = 1;
             animation = 1;
-            minMax->setHintergrundBildZ( minimierenBild->getThis() );
+            minMax->setHintergrundBildZ( dynamic_cast<Bild *>( minimierenBild->getThis() ) );
             // TODO minMax->zToolTip()->setText( "Nachrichten Leiste minimieren." );
             // TODO minMax->zToolTip()->setText( "Nachrichten Leiste minimieren." );
         }
         }
     }
     }
@@ -861,27 +846,6 @@ bool NachrichtenListe::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-// contant
-Schrift *NachrichtenListe::zSchrift() const
-{
-    return schrift;
-}
-
-// Reference Counting
-NachrichtenListe *NachrichtenListe::getThis()
-{
-    ref++;
-    return this;
-}
-
-NachrichtenListe *NachrichtenListe::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Nachrichten
 // Nachrichten
 bool NachrichtenListeMinMaxME( void *p, void *obj, MausEreignis me )
 bool NachrichtenListeMinMaxME( void *p, void *obj, MausEreignis me )
 {
 {

+ 52 - 63
KSGClient/NachLogin/Chat/NachrichtenListe.h

@@ -15,7 +15,7 @@
 using namespace Framework;
 using namespace Framework;
 using namespace Network;
 using namespace Network;
 
 
-class NLNachricht
+class NLNachricht : public virtual ReferenceCounter
 {
 {
 protected:
 protected:
     TextFeld *titel;
     TextFeld *titel;
@@ -27,9 +27,8 @@ protected:
     int animation;
     int animation;
     double tickVal;
     double tickVal;
     bool rend;
     bool rend;
-    int ref;
 
 
-    NLNachricht( Schrift *zSchrift, Text *titel );
+    NLNachricht( Text *titel );
     virtual ~NLNachricht();
     virtual ~NLNachricht();
 public:
 public:
     virtual void entfernen();
     virtual void entfernen();
@@ -41,9 +40,6 @@ public:
     bool istAusgewählt() const;
     bool istAusgewählt() const;
     int getHeight() const;
     int getHeight() const;
     Text *zTitel() const;
     Text *zTitel() const;
-    // Reference Counting
-    NLNachricht *getThis();
-    NLNachricht *release();
 };
 };
 
 
 class SpielUpdateNachricht : public NLNachricht
 class SpielUpdateNachricht : public NLNachricht
@@ -58,7 +54,7 @@ private:
     Update *update;
     Update *update;
 
 
 public:
 public:
-    SpielUpdateNachricht( Schrift *zSchrift, Text *titel, Text *nachricht, int dgID, std::function<void()> posAk = []() {}, std::function<void()> negAk = []() {} );
+    SpielUpdateNachricht( Text *titel, Text *nachricht, int dgID, std::function<void()> posAk = []() {}, std::function<void()> negAk = []() {} );
     ~SpielUpdateNachricht();
     ~SpielUpdateNachricht();
     // nicht constant
     // nicht constant
     void entfernen() override;
     void entfernen() override;
@@ -70,82 +66,75 @@ public:
 class Nachricht : public NLNachricht
 class Nachricht : public NLNachricht
 {
 {
 private:
 private:
-	TextFeld *text;
-	Knopf *positiv;
-	Knopf *negativ;
+    TextFeld *text;
+    Knopf *positiv;
+    Knopf *negativ;
     std::function<void()> posAk;
     std::function<void()> posAk;
     std::function<void()> negAk;
     std::function<void()> negAk;
 
 
 public:
 public:
-	// Konstruktor
-    Nachricht( Schrift *zSchrift, Text *titel, Text *nachricht, Text *positiv, Text *negativ, std::function<void()> posAk = []() {}, std::function<void()> negAk = []() {} );
-	// Destruktor
-	~Nachricht();
-	// nicht constant
+    // Konstruktor
+    Nachricht( Text *titel, Text *nachricht, Text *positiv, Text *negativ, std::function<void()> posAk = []() {}, std::function<void()> negAk = []() {} );
+    // Destruktor
+    ~Nachricht();
+    // nicht constant
     void entfernen() override;
     void entfernen() override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	bool tick( double tickVal ) override;
-	void render( int y, Bild &zRObj ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    bool tick( double tickVal ) override;
+    void render( int y, Bild &zRObj ) override;
 };
 };
 
 
 class NachrichtenListeObj : public Zeichnung
 class NachrichtenListeObj : public Zeichnung
 {
 {
 private:
 private:
-	RCArray< NLNachricht > *members;
-	VScrollBar *vsb;
-	Schrift *schrift;
-	Punkt bildschirmGröße;
-	int anzahl;
+    RCArray< NLNachricht > *members;
+    VScrollBar *vsb;
+    Punkt bildschirmGröße;
+    int anzahl;
 
 
 public:
 public:
-	// Konstruktor
-	NachrichtenListeObj( Schrift *zSchrift );
-	// Destruktor
-	~NachrichtenListeObj();
-	// nicht constant
-	void addNachricht( NLNachricht *nachricht );
-	void removeNachricht( NLNachricht *zNachricht );
-	void removeAll();
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void render( Bild &zRObj ) override;
+    // Konstruktor
+    NachrichtenListeObj();
+    // Destruktor
+    ~NachrichtenListeObj();
+    // nicht constant
+    void addNachricht( NLNachricht *nachricht );
+    void removeNachricht( NLNachricht *zNachricht );
+    void removeAll();
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void render( Bild &zRObj ) override;
 };
 };
 
 
-class NachrichtenListe
+class NachrichtenListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
     Schrift *schrift;
     Schrift *schrift;
-	Fenster *fenster;
-	Knopf *minMax;
-	NachrichtenListeObj *nachrichtenListe;
-	Punkt bildschirmGröße;
-	TextFeld *überschrift;
-	Bild *minimierenBild;
-	Bild *maximierenBild;
-	GSL::GSLSoundV *msgSound;
-	GSL::GSLSoundV *errSound;
-	double tickVal;
-	int animation;
-	bool rend;
-	int ref;
+    Fenster *fenster;
+    Knopf *minMax;
+    NachrichtenListeObj *nachrichtenListe;
+    Punkt bildschirmGröße;
+    TextFeld *überschrift;
+    Bild *minimierenBild;
+    Bild *maximierenBild;
+    GSL::GSLSoundV *msgSound;
+    GSL::GSLSoundV *errSound;
+    double tickVal;
+    int animation;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	NachrichtenListe( Schrift *zSchrift, Fenster *zNachLoginFenster );
-	// Destruktor
-	~NachrichtenListe();
-	// nicht constant
-	void addNachricht( Text *titel, Text *nachricht, Text *positiv = 0, Text *negativ = 0, std::function<void()> posAk = []() {}, std::function<void()> negAk = []() {} );
+    // Konstruktor
+    NachrichtenListe( Fenster *zNachLoginFenster );
+    // Destruktor
+    ~NachrichtenListe();
+    // nicht constant
+    void addNachricht( Text *titel, Text *nachricht, Text *positiv = 0, Text *negativ = 0, std::function<void()> posAk = []() {}, std::function<void()> negAk = []() {} );
     void addNachricht( NLNachricht *nachricht );
     void addNachricht( NLNachricht *nachricht );
-	void removeNachricht( NLNachricht *zNachricht );
-	void removeAll();
-	bool druckMinMax( MausEreignis &me );
-	bool tick( double tickVal );
-	// contant
-    Schrift *zSchrift() const;
-	// Reference Counting
-	NachrichtenListe *getThis();
-	NachrichtenListe *release();
+    void removeNachricht( NLNachricht *zNachricht );
+    void removeAll();
+    bool druckMinMax( MausEreignis &me );
+    bool tick( double tickVal );
 };
 };
 
 
 // Nachrichten
 // Nachrichten

+ 35 - 49
KSGClient/NachLogin/Editor/Auswahl/Auswahl.cpp

@@ -6,30 +6,29 @@
 
 
 // Inhalt der Auswahl Klasse aus Auswahl.h
 // Inhalt der Auswahl Klasse aus Auswahl.h
 // Konstruktor
 // Konstruktor
-Auswahl::Auswahl( Schrift *zSchrift, KartenEditor *kEditor )
+Auswahl::Auswahl( KartenEditor *kEditor )
     : Thread()
     : Thread()
 {
 {
     this->kEditor = kEditor;
     this->kEditor = kEditor;
     alpha = 255;
     alpha = 255;
     sichtbar = 0;
     sichtbar = 0;
-    suchFilterT = initTextFeld( 10, 10, 70, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Suchfilter:" );
-    suchFilter = initTextFeld( 90, 10, 210, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.", zSchrift, hauptScreen );
-    suchen = initKnopf( 310, 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
-    sortSpalte = initAuswahlBox( 640, 10, 120, 20, zSchrift, ABSTYLE,
+    suchFilterT = initTextFeld( 10, 10, 70, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Suchfilter:" );
+    suchFilter = initTextFeld( 90, 10, 210, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst." );
+    suchen = initKnopf( 310, 10, 100, 20, Knopf::Style::Sichtbar, "suchen" );
+    sortSpalte = initAuswahlBox( 640, 10, 120, 20, ABSTYLE,
                                  { "Name", "Spielart", "Preis (Kupfer)", "Verkauft", "Spieleranzahl" } );
                                  { "Name", "Spielart", "Preis (Kupfer)", "Verkauft", "Spieleranzahl" } );
-    sortRichtung = initAuswahlBox( 770, 10, 120, 20, zSchrift, ABSTYLE, { "Aufsteigend", "Absteigend" } );
-    karten = initObjTabelle( 10, 40, 880, 520, zSchrift, OTSTYLE, { { "Name", 220, 220, 220 }, { "Spielart", 220, 220, 220 },
+    sortRichtung = initAuswahlBox( 770, 10, 120, 20, ABSTYLE, { "Aufsteigend", "Absteigend" } );
+    karten = initObjTabelle( 10, 40, 880, 520, OTSTYLE, { { "Name", 220, 220, 220 }, { "Spielart", 220, 220, 220 },
     { "Kupfer", 130, 130, 130 }, { "Verkauft", 125, 125, 125 }, { "Spieleranzahl", 140, 140, 140 },
     { "Kupfer", 130, 130, 130 }, { "Verkauft", 125, 125, 125 }, { "Spieleranzahl", 140, 140, 140 },
     { "", 20, 20, 20 } }, 20 );
     { "", 20, 20, 20 } }, 20 );
-    neuKarteName = initTextFeld( 10, 570, 195, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( neuKarteName, "Name einer neuen Karte", zSchrift, hauptScreen );
-    neuKarteSpielArt = initAuswahlBox( 215, 570, 195, 20, zSchrift, ABSTYLE, {} );
-    neuKarte = initKnopf( 420, 570, 120, 20, zSchrift, Knopf::Style::Sichtbar, "Karte Erstellen" );
-    laden = ( Framework::Animation2D * )ladeAnimation->dublizieren();
+    neuKarteName = initTextFeld( 10, 570, 195, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( neuKarteName, "Name einer neuen Karte" );
+    neuKarteSpielArt = initAuswahlBox( 215, 570, 195, 20, ABSTYLE, {} );
+    neuKarte = initKnopf( 420, 570, 120, 20, Knopf::Style::Sichtbar, "Karte Erstellen" );
+    laden = (Framework::Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
-    schrift = zSchrift->getThis();
     aktion = 0;
     aktion = 0;
     tickVal = 0;
     tickVal = 0;
     rend = 0;
     rend = 0;
@@ -48,7 +47,6 @@ Auswahl::~Auswahl()
     neuKarteName->release();
     neuKarteName->release();
     neuKarteSpielArt->release();
     neuKarteSpielArt->release();
     neuKarte->release();
     neuKarte->release();
-    schrift->release();
     kEditor->release();
     kEditor->release();
 }
 }
 
 
@@ -110,7 +108,7 @@ void Auswahl::thread()
         int port = 0;
         int port = 0;
         Text ip = "";
         Text ip = "";
         if( editorClient )
         if( editorClient )
-            editorClient = editorClient->release();
+            editorClient = (KSGClient::EditorServerClient *)editorClient->release();
         editorClient = infoClient->createEditorServerClient( aktion );
         editorClient = infoClient->createEditorServerClient( aktion );
         if( !editorClient )
         if( !editorClient )
         {
         {
@@ -152,7 +150,7 @@ void Auswahl::thread()
         {
         {
             if( !saList->hat( i ) )
             if( !saList->hat( i ) )
                 continue;
                 continue;
-            Text * name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
+            Text *name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
             if( name )
             if( name )
                 saNamen->add( name );
                 saNamen->add( name );
         }
         }
@@ -176,13 +174,13 @@ void Auswahl::thread()
     for( int i = 1; i < anz; i++ )
     for( int i = 1; i < anz; i++ )
         karten->removeZeile( 1 );
         karten->removeZeile( 1 );
     karten->unlockZeichnung();
     karten->unlockZeichnung();
-    Bild * shopWeiter = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
-    Array< int > * kId = new Array< int >();
-    RCArray< Text > * kName = new RCArray< Text >();
-    RCArray< Text > * saName = new RCArray< Text >();
-    Array< int > * kupfer = new Array< int >();
-    Array< int > * verkauft = new Array< int >();
-    Array< int > * maxSpieler = new Array< int >();
+    Bild *shopWeiter = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
+    Array< int > *kId = new Array< int >();
+    RCArray< Text > *kName = new RCArray< Text >();
+    RCArray< Text > *saName = new RCArray< Text >();
+    Array< int > *kupfer = new Array< int >();
+    Array< int > *verkauft = new Array< int >();
+    Array< int > *maxSpieler = new Array< int >();
     int kAnz = infoClient->getKartenListe( suchFilter->zText()->getText(), (char)sortSpalte->getAuswahl(), (char)sortRichtung->getAuswahl(),
     int kAnz = infoClient->getKartenListe( suchFilter->zText()->getText(), (char)sortSpalte->getAuswahl(), (char)sortRichtung->getAuswahl(),
                                            kId, kName, saName, kupfer, verkauft, maxSpieler );
                                            kId, kName, saName, kupfer, verkauft, maxSpieler );
     for( int i = 0; i < kAnz; i++ )
     for( int i = 0; i < kAnz; i++ )
@@ -190,14 +188,14 @@ void Auswahl::thread()
         Text zeile;
         Text zeile;
         zeile = kId->get( i );
         zeile = kId->get( i );
         karten->addZeile( zeile );
         karten->addZeile( zeile );
-        karten->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, kName->z( i )->getText() ) );
-        karten->setZeichnungZ( 1, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, saName->z( i )->getText() ) );
-        karten->setZeichnungZ( 2, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += kupfer->get( i ) ) );
-        karten->setZeichnungZ( 3, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += verkauft->get( i ) ) );
-        karten->setZeichnungZ( 4, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += maxSpieler->get( i ) ) );
-        Knopf * weiter = initKnopf( 0, 0, 0, 0, schrift, 0, "" );
+        karten->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, kName->z( i )->getText() ) );
+        karten->setZeichnungZ( 1, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, saName->z( i )->getText() ) );
+        karten->setZeichnungZ( 2, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += kupfer->get( i ) ) );
+        karten->setZeichnungZ( 3, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += verkauft->get( i ) ) );
+        karten->setZeichnungZ( 4, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text | TextFeld::Style::VCenter, Text() += maxSpieler->get( i ) ) );
+        Knopf *weiter = initKnopf( 0, 0, 0, 0, 0, "" );
         weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
         weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-        weiter->setHintergrundBildZ( shopWeiter->getThis() );
+        weiter->setHintergrundBildZ( dynamic_cast<Bild *>( shopWeiter->getThis() ) );
         weiter->setMausEreignisParameter( this );
         weiter->setMausEreignisParameter( this );
         weiter->setMausEreignis( auswahlWeiterME );
         weiter->setMausEreignis( auswahlWeiterME );
         karten->setZeichnungZ( 5, i + 1, weiter );
         karten->setZeichnungZ( 5, i + 1, weiter );
@@ -213,7 +211,7 @@ void Auswahl::thread()
     run = 0;
     run = 0;
 }
 }
 
 
-bool Auswahl::weiterME( Zeichnung * obj, MausEreignis & me )
+bool Auswahl::weiterME( Zeichnung *obj, MausEreignis &me )
 {
 {
     if( me.id != ME_RLinks )
     if( me.id != ME_RLinks )
         return 1;
         return 1;
@@ -231,14 +229,14 @@ bool Auswahl::weiterME( Zeichnung * obj, MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-void Auswahl::doPublicMausEreignis( MausEreignis & me )
+void Auswahl::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar || run )
     if( !sichtbar || run )
         return;
         return;
     suchFilter->doPublicMausEreignis( me );
     suchFilter->doPublicMausEreignis( me );
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     suchen->doPublicMausEreignis( me );
     suchen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         aktion = 0;
         aktion = 0;
         start();
         start();
@@ -271,13 +269,13 @@ void Auswahl::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void Auswahl::doTastaturEreignis( TastaturEreignis & te )
+void Auswahl::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar || run )
     if( !sichtbar || run )
         return;
         return;
     bool vera = te.verarbeitet;
     bool vera = te.verarbeitet;
     suchFilter->doTastaturEreignis( te );
     suchFilter->doTastaturEreignis( te );
-    if( !vera && te.verarbeitet &&te.taste == T_Enter && te.id == TE_Release )
+    if( !vera && te.verarbeitet && te.taste == T_Enter && te.id == TE_Release )
     {
     {
         MausEreignis me;
         MausEreignis me;
         me.id = ME_RLinks;
         me.id = ME_RLinks;
@@ -351,7 +349,7 @@ bool Auswahl::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void Auswahl::render( Bild & zRObj )
+void Auswahl::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -375,18 +373,6 @@ bool Auswahl::istSichtbar() const
     return sichtbar;
     return sichtbar;
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *Auswahl::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 1000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
-}
-
 
 
 // Ereignisse
 // Ereignisse
 bool auswahlWeiterME( void *p, void *obj, MausEreignis me )
 bool auswahlWeiterME( void *p, void *obj, MausEreignis me )

+ 30 - 33
KSGClient/NachLogin/Editor/Auswahl/Auswahl.h

@@ -13,41 +13,38 @@ using namespace Framework;
 class Auswahl : public Thread
 class Auswahl : public Thread
 {
 {
 private:
 private:
-	KartenEditor *kEditor;
-	Animation2D *laden;
-	TextFeld *suchFilterT;
-	TextFeld *suchFilter;
-	Knopf *suchen;
-	AuswahlBox *sortSpalte;
-	AuswahlBox *sortRichtung;
-	ObjTabelle *karten;
-	TextFeld *neuKarteName;
-	AuswahlBox *neuKarteSpielArt;
-	Knopf *neuKarte;
-	Schrift *schrift;
-	int aktion;
-	unsigned char alpha;
-	bool sichtbar;
-	double tickVal;
-	bool rend;
+    KartenEditor *kEditor;
+    Animation2D *laden;
+    TextFeld *suchFilterT;
+    TextFeld *suchFilter;
+    Knopf *suchen;
+    AuswahlBox *sortSpalte;
+    AuswahlBox *sortRichtung;
+    ObjTabelle *karten;
+    TextFeld *neuKarteName;
+    AuswahlBox *neuKarteSpielArt;
+    Knopf *neuKarte;
+    int aktion;
+    unsigned char alpha;
+    bool sichtbar;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	Auswahl( Schrift *zSchrift, KartenEditor *kEditor );
-	// Destruktor
-	~Auswahl();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	virtual void thread();
-	bool weiterME( Zeichnung *obj, MausEreignis &me );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    Auswahl( KartenEditor *kEditor );
+    // Destruktor
+    ~Auswahl();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    virtual void thread();
+    bool weiterME( Zeichnung *obj, MausEreignis &me );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
 };
 };
 
 
 // Ereignisse
 // Ereignisse

+ 160 - 157
KSGClient/NachLogin/Editor/Editor.cpp

@@ -5,197 +5,200 @@
 
 
 // Inhalt der Editor Klasse aus Editor.h
 // Inhalt der Editor Klasse aus Editor.h
 // Konstruktor
 // Konstruktor
-Editor::Editor( Schrift *zSchrift, Fenster *zNachLoginFenster, int x )
-	: Zeichnung()
+Editor::Editor( Fenster *zNachLoginFenster, int x )
+    : Zeichnung()
 {
 {
-	schrift = zSchrift->getThis();
-	bildschirmGröße = hauptScreen->getBackBufferSize();
-	pos = Punkt( x, 35 );
-	gr = Punkt( 102, 32 );
-	rahmen = new LRahmen();
-	rahmen->setFarbe( 0xFFFFFFFF );
-	rahmen->setSize( 102, 32 );
-	alpha = 0;
-	animation = 0;
-	sichtbar = 0;
-	tickVal = 0;
-	jetzt = 0;
-	prozent1 = 0;
-	prozent2 = 0;
-	begPos = Punkt( 0, 0 );
-	begGröße = Punkt( 0, 0 );
-	größe1 = Punkt( 102, 32 );
-	pos1 = Punkt( x, 35 );
-	größe2 = Punkt( 900, 600 );
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	laden = (Animation2D*)ladeAnimation->dublizieren();
-	laden->setSichtbar( 0 );
-	laden->setPosition( 425, 275 );
-	zNachLoginFenster->addMember( getThis() );
-	kEditor = new KartenEditor( schrift->getThis() );
-	karteAuswahl = new Auswahl( zSchrift, (KartenEditor*)kEditor->getThis() );
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    pos = Punkt( x, 35 );
+    gr = Punkt( 102, 32 );
+    rahmen = new LRahmen();
+    rahmen->setFarbe( 0xFFFFFFFF );
+    rahmen->setSize( 102, 32 );
+    alpha = 0;
+    animation = 0;
+    sichtbar = 0;
+    tickVal = 0;
+    jetzt = 0;
+    prozent1 = 0;
+    prozent2 = 0;
+    begPos = Punkt( 0, 0 );
+    begGröße = Punkt( 0, 0 );
+    größe1 = Punkt( 102, 32 );
+    pos1 = Punkt( x, 35 );
+    größe2 = Punkt( 900, 600 );
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    laden = (Animation2D *)ladeAnimation->dublizieren();
+    laden->setSichtbar( 0 );
+    laden->setPosition( 425, 275 );
+    getThis();
+    zNachLoginFenster->addMember( this );
+    kEditor = new KartenEditor();
+    karteAuswahl = new Auswahl( dynamic_cast<KartenEditor *>( kEditor->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
 Editor::~Editor()
 Editor::~Editor()
 {
 {
-	rahmen->release();
-	laden->release();
-	karteAuswahl->release();
-	kEditor->release();
-	schrift->release();
+    karteAuswahl->warteAufThread( 10000 );
+    karteAuswahl->ende();
+    kEditor->warteAufThread( 10000 );
+    kEditor->ende();
+    kEditor->release();
+    rahmen->release();
+    laden->release();
+    karteAuswahl->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void Editor::setSichtbar( bool sicht )
 void Editor::setSichtbar( bool sicht )
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	animation |= ( sicht ? 0x1 : 0x2 );
-	rend = 1;
+    begPos = pos;
+    begGröße = gr;
+    animation |= ( sicht ? 0x1 : 0x2 );
+    rend = 1;
 }
 }
 
 
 void Editor::doPublicMausEreignis( MausEreignis &me )
 void Editor::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( animation || !sichtbar )
-		return;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	switch( jetzt )
-	{
-	case 1: // Karten Auswahl
-		karteAuswahl->doPublicMausEreignis( me );
-		break;
-	case 2: // Karten Editor
-		kEditor->doPublicMausEreignis( me );
-		break;
-	}
-	me.mx += pos.x;
-	me.my += pos.y;
+    if( animation || !sichtbar )
+        return;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    switch( jetzt )
+    {
+    case 1: // Karten Auswahl
+        karteAuswahl->doPublicMausEreignis( me );
+        break;
+    case 2: // Karten Editor
+        kEditor->doPublicMausEreignis( me );
+        break;
+    }
+    me.mx += pos.x;
+    me.my += pos.y;
 }
 }
 
 
 void Editor::doTastaturEreignis( TastaturEreignis &te )
 void Editor::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( animation || !sichtbar )
-		return;
-	switch( jetzt )
-	{
-	case 1: // Karten Auswahl
-		karteAuswahl->doTastaturEreignis( te );
-		break;
-	case 2: // Karten Editor
-		kEditor->doTastaturEreignis( te );
-		break;
-	}
+    if( animation || !sichtbar )
+        return;
+    switch( jetzt )
+    {
+    case 1: // Karten Auswahl
+        karteAuswahl->doTastaturEreignis( te );
+        break;
+    case 2: // Karten Editor
+        kEditor->doTastaturEreignis( te );
+        break;
+    }
 }
 }
 
 
 bool Editor::tick( double z )
 bool Editor::tick( double z )
 {
 {
-	rend |= laden->tick( z );
-	rend |= karteAuswahl->tick( z );
-	if( jetzt == 1 && !karteAuswahl->istSichtbar() )
-	{
-		kEditor->setSichtbar( 1 );
-		jetzt = 2;
-	}
-	if( jetzt == 2 && !kEditor->istSichtbar() )
-	{
-		karteAuswahl->setSichtbar( 1 );
-		jetzt = 1;
-	}
-	rend |= kEditor->tick( z );
-	tickVal += z * 150;
-	int val = (int)tickVal;
-	if( val < 1 )
-	{
-		bool ret = rend;
-		rend = 0;
-		return ret;
-	}
-	tickVal -= val;
-	if( ( animation | 0x1 ) == animation ) // Einblenden
-	{
-		if( prozent1 != 100 )
-		{
-			prozent1 += val;
-			if( prozent1 >= 100 )
-			{
-				if( !jetzt )
-				{
-					karteAuswahl->setSichtbar( 1 );
-					jetzt = 1;
-				}
-				prozent1 = 100;
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
-		}
-		else if( alpha != 255 )
-		{
-			alpha += val * 2;
-			if( alpha >= 255 || ( animation | 0x2 ) == animation )
-			{
-				alpha = 255;
-				animation &= ~0x1;
-				sichtbar = 1;
-				prozent1 = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x2 ) == animation ) // ausblenden
-	{
-		if( alpha != 0 )
-		{
-			alpha -= val * 2;
-			if( alpha < 0 )
-				alpha = 0;
-		}
-		else
-		{
-			prozent2 += val;
-			if( prozent2 > 100 )
-				prozent2 = 100;
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
-			if( prozent2 == 100 )
-			{
-				prozent2 = 0;
-				animation &= ~0x2;
-				sichtbar = 0;
-			}
-		}
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= laden->tick( z );
+    rend |= karteAuswahl->tick( z );
+    if( jetzt == 1 && !karteAuswahl->istSichtbar() )
+    {
+        kEditor->setSichtbar( 1 );
+        jetzt = 2;
+    }
+    if( jetzt == 2 && !kEditor->istSichtbar() )
+    {
+        karteAuswahl->setSichtbar( 1 );
+        jetzt = 1;
+    }
+    rend |= kEditor->tick( z );
+    tickVal += z * 150;
+    int val = (int)tickVal;
+    if( val < 1 )
+    {
+        bool ret = rend;
+        rend = 0;
+        return ret;
+    }
+    tickVal -= val;
+    if( ( animation | 0x1 ) == animation ) // Einblenden
+    {
+        if( prozent1 != 100 )
+        {
+            prozent1 += val;
+            if( prozent1 >= 100 )
+            {
+                if( !jetzt )
+                {
+                    karteAuswahl->setSichtbar( 1 );
+                    jetzt = 1;
+                }
+                prozent1 = 100;
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
+        }
+        else if( alpha != 255 )
+        {
+            alpha += val * 2;
+            if( alpha >= 255 || ( animation | 0x2 ) == animation )
+            {
+                alpha = 255;
+                animation &= ~0x1;
+                sichtbar = 1;
+                prozent1 = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x2 ) == animation ) // ausblenden
+    {
+        if( alpha != 0 )
+        {
+            alpha -= val * 2;
+            if( alpha < 0 )
+                alpha = 0;
+        }
+        else
+        {
+            prozent2 += val;
+            if( prozent2 > 100 )
+                prozent2 = 100;
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
+            if( prozent2 == 100 )
+            {
+                prozent2 = 0;
+                animation &= ~0x2;
+                sichtbar = 0;
+            }
+        }
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void Editor::render( Bild &zRObj )
 void Editor::render( Bild &zRObj )
 {
 {
-	if( pos == pos1 )
-		return;
-	if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
-		return;
-	rahmen->setSize( gr );
-	rahmen->render( zRObj );
-	int rbr = rahmen->getRBreite();
-	zRObj.setAlpha( (unsigned char)alpha );
-	karteAuswahl->render( zRObj );
-	kEditor->render( zRObj );
-	laden->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.releaseDrawOptions();
+    if( pos == pos1 )
+        return;
+    if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
+        return;
+    rahmen->setSize( gr );
+    rahmen->render( zRObj );
+    int rbr = rahmen->getRBreite();
+    zRObj.setAlpha( (unsigned char)alpha );
+    karteAuswahl->render( zRObj );
+    kEditor->render( zRObj );
+    laden->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 bool Editor::istAnimiert() const
 bool Editor::istAnimiert() const
 {
 {
-	return animation != 0;
+    return animation != 0;
 }
 }
 
 
 bool Editor::istSichtbar() const
 bool Editor::istSichtbar() const
 {
 {
-	return sichtbar || prozent1 != 0;
+    return sichtbar || prozent1 != 0;
 }
 }

+ 32 - 33
KSGClient/NachLogin/Editor/Editor.h

@@ -11,41 +11,40 @@ using namespace Framework;
 class Editor : public Zeichnung
 class Editor : public Zeichnung
 {
 {
 private:
 private:
-	Punkt begPos;
-	Punkt begGröße;
-	Punkt pos1;
-	Punkt größe1;
-	Punkt pos2;
-	Punkt größe2;
-	Punkt bildschirmGröße;
-	LRahmen *rahmen;
-	Animation2D *laden;
-	Schrift *schrift;
-	Auswahl *karteAuswahl;
-	KartenEditor *kEditor;
-	int dg;
-	int animation;
-	int alpha;
-	bool sichtbar;
-	int prozent1;
-	int prozent2;
-	double tickVal;
-	int jetzt;
+    Punkt begPos;
+    Punkt begGröße;
+    Punkt pos1;
+    Punkt größe1;
+    Punkt pos2;
+    Punkt größe2;
+    Punkt bildschirmGröße;
+    LRahmen *rahmen;
+    Animation2D *laden;
+    Auswahl *karteAuswahl;
+    KartenEditor *kEditor;
+    int dg;
+    int animation;
+    int alpha;
+    bool sichtbar;
+    int prozent1;
+    int prozent2;
+    double tickVal;
+    int jetzt;
 
 
 public:
 public:
-	// Konstruktor
-	Editor( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
-	// Destruktor
-	~Editor();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	bool tick( double z ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istAnimiert() const;
-	bool istSichtbar() const;
+    // Konstruktor
+    Editor( Fenster *zNachLoginFenster, int x );
+    // Destruktor
+    ~Editor();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    bool tick( double z ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istAnimiert() const;
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 22 - 22
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBEditor.cpp

@@ -11,23 +11,23 @@ bool KEBKnopfPressME( void *p, void *obj, MausEreignis me );
 
 
 // Inhalt der KEBEditor Klasse aus KEBEditor.h
 // Inhalt der KEBEditor Klasse aus KEBEditor.h
 // Konstruktor
 // Konstruktor
-KEBEditor::KEBEditor( Schrift *zSchrift, KEBeschreibung *zKeb )
+KEBEditor::KEBEditor( KEBeschreibung *zKeb )
     : Zeichnung()
     : Zeichnung()
 {
 {
-    beschreibung = initKnopf( 10, 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Beschreibung" );
-    initToolTip( beschreibung, "Beschreibung bei der Kartenauswahl", zSchrift, hauptScreen );
+    beschreibung = initKnopf( 10, 10, 100, 20, Knopf::Style::Sichtbar, "Beschreibung" );
+    initToolTip( beschreibung, "Beschreibung bei der Kartenauswahl" );
     beschreibung->setMausEreignisParameter( zKeb );
     beschreibung->setMausEreignisParameter( zKeb );
     beschreibung->setMausEreignis( KEBKnopfPressME );
     beschreibung->setMausEreignis( KEBKnopfPressME );
-    titelBild = initKnopf( 10, 40, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Titel Bild" );
-    initToolTip( titelBild, "Titelbild während der Kartenauswahl (200x100)", zSchrift, hauptScreen );
+    titelBild = initKnopf( 10, 40, 100, 20, Knopf::Style::Sichtbar, "Titel Bild" );
+    initToolTip( titelBild, "Titelbild während der Kartenauswahl (200x100)" );
     titelBild->setMausEreignisParameter( zKeb );
     titelBild->setMausEreignisParameter( zKeb );
     titelBild->setMausEreignis( KEBKnopfPressME );
     titelBild->setMausEreignis( KEBKnopfPressME );
-    mapBild = initKnopf( 10, 70, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Minimap Bild" );
-    initToolTip( mapBild, "Kartenvorschau Bild währed des erstellens einer Gruppe (348x348)", zSchrift, hauptScreen );
+    mapBild = initKnopf( 10, 70, 100, 20, Knopf::Style::Sichtbar, "Minimap Bild" );
+    initToolTip( mapBild, "Kartenvorschau Bild währed des erstellens einer Gruppe (348x348)" );
     mapBild->setMausEreignisParameter( zKeb );
     mapBild->setMausEreignisParameter( zKeb );
     mapBild->setMausEreignis( KEBKnopfPressME );
     mapBild->setMausEreignis( KEBKnopfPressME );
-    ladenBild = initKnopf( 10, 100, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Laden Bild" );
-    initToolTip( ladenBild, "Hintergrundbild beim Laden der Karte", zSchrift, hauptScreen );
+    ladenBild = initKnopf( 10, 100, 100, 20, Knopf::Style::Sichtbar, "Laden Bild" );
+    initToolTip( ladenBild, "Hintergrundbild beim Laden der Karte" );
     ladenBild->setMausEreignisParameter( zKeb );
     ladenBild->setMausEreignisParameter( zKeb );
     ladenBild->setMausEreignis( KEBKnopfPressME );
     ladenBild->setMausEreignis( KEBKnopfPressME );
     bild = initBildZ( 120, 10, 750, 510, ( BildZ::Style::normal | BildZ::Style::Alpha ) & ~BildZ::Style::Sichtbar, 0 );
     bild = initBildZ( 120, 10, 750, 510, ( BildZ::Style::normal | BildZ::Style::Alpha ) & ~BildZ::Style::Sichtbar, 0 );
@@ -43,7 +43,7 @@ KEBEditor::KEBEditor( Schrift *zSchrift, KEBeschreibung *zKeb )
         if( getKSGScriptEditor )
         if( getKSGScriptEditor )
         {
         {
             text = getKSGScriptEditor();
             text = getKSGScriptEditor();
-            text->setSchriftZ( ( ksgsS ? ksgsS : zSchrift )->getThis() );
+            text->setSchriftZ( dynamic_cast<Schrift *>( ( ksgsS ? ksgsS : uiFactory.initParam.schrift )->getThis() ) );
             text->setSize( 750, 510 );
             text->setSize( 750, 510 );
             text->setPosition( 120, 10 );
             text->setPosition( 120, 10 );
             text->setStyle( ZeichnungHintergrund::Style::HScroll | ZeichnungHintergrund::Style::VScroll | ZeichnungHintergrund::Style::Erlaubt | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund );
             text->setStyle( ZeichnungHintergrund::Style::HScroll | ZeichnungHintergrund::Style::VScroll | ZeichnungHintergrund::Style::Erlaubt | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund );
@@ -59,30 +59,30 @@ KEBEditor::KEBEditor( Schrift *zSchrift, KEBeschreibung *zKeb )
         {
         {
             text = 0;
             text = 0;
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-                new Text( "Der Einstiegspunkt '" KSGS_EDITOR_FUNKTION "' in der DLL-Datei "
-                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-                new Text( "Ok" ), 0 );
+                                                          new Text( "Der Einstiegspunkt '" KSGS_EDITOR_FUNKTION "' in der DLL-Datei "
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                          new Text( "Ok" ), 0 );
         }
         }
     }
     }
     else
     else
     {
     {
         text = 0;
         text = 0;
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-            new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
-            new Text( "Ok" ), 0 );
+                                                      new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
+                                                      new Text( "Ok" ), 0 );
     }
     }
     if( ksgsS )
     if( ksgsS )
         ksgsS->release();
         ksgsS->release();
-    speichern = initKnopf( 10, 500, 100, 20, zSchrift, 0, "Speichern" );
-    initToolTip( speichern, "Beschreibung speichern", zSchrift, hauptScreen );
+    speichern = initKnopf( 10, 500, 100, 20, 0, "Speichern" );
+    initToolTip( speichern, "Beschreibung speichern" );
     speichern->setMausEreignisParameter( zKeb );
     speichern->setMausEreignisParameter( zKeb );
     speichern->setMausEreignis( KEBKnopfPressME );
     speichern->setMausEreignis( KEBKnopfPressME );
-    importieren = initKnopf( 10, 500, 100, 20, zSchrift, 0, "Importieren" );
-    initToolTip( importieren, "Bild von Festplatte hochladen", zSchrift, hauptScreen );
+    importieren = initKnopf( 10, 500, 100, 20, 0, "Importieren" );
+    initToolTip( importieren, "Bild von Festplatte hochladen" );
     importieren->setMausEreignisParameter( zKeb );
     importieren->setMausEreignisParameter( zKeb );
     importieren->setMausEreignis( KEBKnopfPressME );
     importieren->setMausEreignis( KEBKnopfPressME );
-    vorschau = initKnopf( 10, 470, 100, 20, zSchrift, 0, "Script Testen" );
-    initToolTip( vorschau, "Die Beschreibung auf Scriptfehler testen", zSchrift, hauptScreen );
+    vorschau = initKnopf( 10, 470, 100, 20, 0, "Script Testen" );
+    initToolTip( vorschau, "Die Beschreibung auf Scriptfehler testen" );
     vorschau->setMausEreignisParameter( zKeb );
     vorschau->setMausEreignisParameter( zKeb );
     vorschau->setMausEreignis( KEBKnopfPressME );
     vorschau->setMausEreignis( KEBKnopfPressME );
     jetzt = 0;
     jetzt = 0;
@@ -125,7 +125,7 @@ void KEBEditor::setText( Text *zText )
 
 
 void KEBEditor::setBild( Bild *zBild )
 void KEBEditor::setBild( Bild *zBild )
 {
 {
-    bild->setBildZ( zBild->getThis() );
+    bild->setBildZ( dynamic_cast<Bild *>( zBild->getThis() ) );
     text->removeStyle( ZeichnungHintergrund::Style::Sichtbar );
     text->removeStyle( ZeichnungHintergrund::Style::Sichtbar );
     bild->addStyle( BildZ::Style::Sichtbar );
     bild->addStyle( BildZ::Style::Sichtbar );
     speichern->removeStyle( Knopf::Style::Sichtbar );
     speichern->removeStyle( Knopf::Style::Sichtbar );

+ 1 - 1
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBEditor.h

@@ -27,7 +27,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEBEditor( Schrift *zSchrift, KEBeschreibung *zKeb );
+    KEBEditor( KEBeschreibung *zKeb );
     // Destruktor
     // Destruktor
     ~KEBEditor();
     ~KEBEditor();
     // nicht constant
     // nicht constant

+ 23 - 25
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBVorschau.cpp

@@ -13,7 +13,7 @@ void kEBVorschauKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVar
 
 
 // Inhalt der KEBVorschauKarteScript Klasse aus KEBVorschau.h
 // Inhalt der KEBVorschauKarteScript Klasse aus KEBVorschau.h
 // Konstruktor
 // Konstruktor
-KEBVorschauKarteScript::KEBVorschauKarteScript( Schrift * zSchrift, TextFeld * zLog )
+KEBVorschauKarteScript::KEBVorschauKarteScript( TextFeld *zLog )
     : Thread()
     : Thread()
 {
 {
     ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
     ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
@@ -23,18 +23,18 @@ KEBVorschauKarteScript::KEBVorschauKarteScript( Schrift * zSchrift, TextFeld * z
         if( getKSGScript )
         if( getKSGScript )
         {
         {
             fenster = getKSGScript();
             fenster = getKSGScript();
-            fenster->setSchriftZ( zSchrift->getThis() );
+            fenster->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
             fenster->setSize( 578, 428 );
             fenster->setSize( 578, 428 );
-            fenster->setRückrufParam( this );
-            fenster->setRückrufFunktion( kEBVorschauKSGSAktion );
-            fenster->setLog( (TextFeld *)zLog->getThis() );
+            fenster->setCallbackParam( this );
+            fenster->setCallbackFunktion( kEBVorschauKSGSAktion );
+            fenster->setLog( dynamic_cast<TextFeld *>( zLog->getThis() ) );
         }
         }
         else
         else
         {
         {
             fenster = 0;
             fenster = 0;
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
     }
     }
@@ -61,7 +61,7 @@ KEBVorschauKarteScript::~KEBVorschauKarteScript()
 {
 {
     if( fenster )
     if( fenster )
     {
     {
-        fenster->zurücksetzen();
+        fenster->reset();
         fenster->release();
         fenster->release();
     }
     }
     ram->release();
     ram->release();
@@ -124,10 +124,10 @@ void KEBVorschauKarteScript::ladeKarteSeite( char *pfad )
     start();
     start();
 }
 }
 
 
-void KEBVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void KEBVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {}
 {}
 
 
-void KEBVorschauKarteScript::doPublicMausEreignis( MausEreignis & me )
+void KEBVorschauKarteScript::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -137,7 +137,7 @@ void KEBVorschauKarteScript::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void KEBVorschauKarteScript::doTastaturEreignis( TastaturEreignis & te )
+void KEBVorschauKarteScript::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( fenster )
     if( fenster )
         fenster->doTastaturEreignis( te );
         fenster->doTastaturEreignis( te );
@@ -154,7 +154,7 @@ bool KEBVorschauKarteScript::tick( double zeit )
             alpha -= (unsigned char)( zeit * 150 );
             alpha -= (unsigned char)( zeit * 150 );
         rend = 1;
         rend = 1;
     }
     }
-    if( sichtbar &&alpha < 255 )
+    if( sichtbar && alpha < 255 )
     {
     {
         if( alpha + zeit * 150 > 255 )
         if( alpha + zeit * 150 > 255 )
             alpha = 255;
             alpha = 255;
@@ -165,7 +165,7 @@ bool KEBVorschauKarteScript::tick( double zeit )
     return rend;
     return rend;
 }
 }
 
 
-void KEBVorschauKarteScript::render( Bild & zRObj )
+void KEBVorschauKarteScript::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
         return;
         return;
@@ -180,15 +180,14 @@ void KEBVorschauKarteScript::render( Bild & zRObj )
 
 
 // Inhalt der KEBVorschau Klasse aus KEBVorschau.h
 // Inhalt der KEBVorschau Klasse aus KEBVorschau.h
 // Konstruktor
 // Konstruktor
-KEBVorschau::KEBVorschau( Schrift * zSchrift )
+KEBVorschau::KEBVorschau()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    this->schrift = zSchrift->getThis();
-    neu = initKnopf( 10, 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Neu starten" );
-    beenden = initKnopf( 10, 40, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Beenden" );
-    log = initTextFeld( 10, 445, 860, 75, zSchrift, ( TextFeld::Style::TextGebiet | TextFeld::Style::HScroll ) & ~TextFeld::Style::Erlaubt, "Log:\n" );
-    script = new KEBVorschauKarteScript( zSchrift, log );
-    erlaubt = initKontrollKnopf( 10, 70, 100, 20, zSchrift, KontrollKnopf::Style::Normal | KontrollKnopf::Style::Selected, "Erlaubt" );
+    neu = initKnopf( 10, 10, 100, 20, Knopf::Style::Sichtbar, "Neu starten" );
+    beenden = initKnopf( 10, 40, 100, 20, Knopf::Style::Sichtbar, "Beenden" );
+    log = initTextFeld( 10, 445, 860, 75, ( TextFeld::Style::TextGebiet | TextFeld::Style::HScroll ) & ~TextFeld::Style::Erlaubt, "Log:\n" );
+    script = new KEBVorschauKarteScript( log );
+    erlaubt = initKontrollKnopf( 10, 70, 100, 20, KontrollKnopf::Style::Normal | KontrollKnopf::Style::Selected, "Erlaubt" );
     alpha = 0;
     alpha = 0;
     sichtbar = 0;
     sichtbar = 0;
     tickVal = 0;
     tickVal = 0;
@@ -199,7 +198,6 @@ KEBVorschau::KEBVorschau( Schrift * zSchrift )
 // Destruktor
 // Destruktor
 KEBVorschau::~KEBVorschau()
 KEBVorschau::~KEBVorschau()
 {
 {
-    schrift->release();
     script->release();
     script->release();
     neu->release();
     neu->release();
     beenden->release();
     beenden->release();
@@ -246,18 +244,18 @@ void KEBVorschau::setSichtbar( bool sicht )
     sichtbar = sicht;
     sichtbar = sicht;
 }
 }
 
 
-void KEBVorschau::doPublicMausEreignis( MausEreignis & me )
+void KEBVorschau::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
     script->doPublicMausEreignis( me );
     script->doPublicMausEreignis( me );
     bool mev = me.verarbeitet;
     bool mev = me.verarbeitet;
     neu->doPublicMausEreignis( me );
     neu->doPublicMausEreignis( me );
-    if( !mev && me.verarbeitet &&me.id == ME_RLinks )
+    if( !mev && me.verarbeitet && me.id == ME_RLinks )
         script->ladeKarteSeite( "data/tmp/ke/kbv" );
         script->ladeKarteSeite( "data/tmp/ke/kbv" );
     mev = me.verarbeitet;
     mev = me.verarbeitet;
     beenden->doPublicMausEreignis( me );
     beenden->doPublicMausEreignis( me );
-    if( !mev && me.verarbeitet &&me.id == ME_RLinks )
+    if( !mev && me.verarbeitet && me.id == ME_RLinks )
         aktion = 1;
         aktion = 1;
     log->doPublicMausEreignis( me );
     log->doPublicMausEreignis( me );
     bool eu = 0;
     bool eu = 0;
@@ -267,7 +265,7 @@ void KEBVorschau::doPublicMausEreignis( MausEreignis & me )
         script->setErlaubt( erlaubt->hatStyle( KontrollKnopf::Style::Selected ) );
         script->setErlaubt( erlaubt->hatStyle( KontrollKnopf::Style::Selected ) );
 }
 }
 
 
-void KEBVorschau::doTastaturEreignis( TastaturEreignis & te )
+void KEBVorschau::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -306,7 +304,7 @@ bool KEBVorschau::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void KEBVorschau::render( Bild & zRObj )
+void KEBVorschau::render( Bild &zRObj )
 {
 {
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha );
     script->render( zRObj );
     script->render( zRObj );

+ 2 - 3
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBVorschau.h

@@ -24,7 +24,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEBVorschauKarteScript( Schrift *zSchrift, TextFeld *zLog );
+    KEBVorschauKarteScript( TextFeld *zLog );
     // Destruktor
     // Destruktor
     ~KEBVorschauKarteScript();
     ~KEBVorschauKarteScript();
     // nicht constant
     // nicht constant
@@ -41,7 +41,6 @@ public:
 class KEBVorschau : public Zeichnung
 class KEBVorschau : public Zeichnung
 {
 {
 private:
 private:
-    Schrift *schrift;
     KEBVorschauKarteScript *script;
     KEBVorschauKarteScript *script;
     Knopf *neu;
     Knopf *neu;
     Knopf *beenden;
     Knopf *beenden;
@@ -55,7 +54,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEBVorschau( Schrift *zSchrift );
+    KEBVorschau();
     // Destruktor
     // Destruktor
     ~KEBVorschau();
     ~KEBVorschau();
     // nicht constant
     // nicht constant

+ 23 - 37
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBeschreibung.cpp

@@ -5,27 +5,26 @@
 bool KEBKnopfPressME( void *p, void *obj, MausEreignis me )
 bool KEBKnopfPressME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        ( (KEBeschreibung*)p )->knopfPress( (Knopf*)obj, &me );
+        ( (KEBeschreibung *)p )->knopfPress( (Knopf *)obj, &me );
     return 1;
     return 1;
 }
 }
 
 
 // Inhalt der KEBeschreibung Klasse aus KEBeschreibung.h
 // Inhalt der KEBeschreibung Klasse aus KEBeschreibung.h
 // Konstruktor
 // Konstruktor
-KEBeschreibung::KEBeschreibung( int karte, Schrift *zSchrift )
+KEBeschreibung::KEBeschreibung( int karte )
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
     Text *kName = infoClient->getKarteName( karte );
     Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Beschreibung";
     titel += " - Beschreibung";
     if( kName )
     if( kName )
         kName->release();
         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 KEBEditor( zSchrift, this );
-    vorschau = new KEBVorschau( zSchrift );
-    fenster->addMember( editor->getThis() );
-    fenster->addMember( vorschau->getThis() );
-    laden = (Animation2D*)ladeAnimation->dublizieren();
+    fenster = initFenster( 10, 40, 880, 550, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    editor = new KEBEditor( this );
+    vorschau = new KEBVorschau();
+    fenster->addMember( dynamic_cast<Zeichnung *>( editor->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( vorschau->getThis() ) );
+    laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     importDialog = 0;
     importDialog = 0;
@@ -47,7 +46,6 @@ KEBeschreibung::~KEBeschreibung()
 {
 {
     fenster->release();
     fenster->release();
     laden->release();
     laden->release();
-    schrift->release();
     editor->release();
     editor->release();
     vorschau->release();
     vorschau->release();
     if( importDialog )
     if( importDialog )
@@ -91,45 +89,45 @@ void KEBeschreibung::thread()
         { // beschreibung laden
         { // beschreibung laden
             Text *t = editorClient->beschreibungLaden();
             Text *t = editorClient->beschreibungLaden();
             t->ersetzen( "\r\n", "\n" );
             t->ersetzen( "\r\n", "\n" );
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( !t )
             if( !t )
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
             else
                 editor->setText( t );
                 editor->setText( t );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             t->release();
             t->release();
         }
         }
         if( jetzt == 2 )
         if( jetzt == 2 )
         { // Titelbild laden
         { // Titelbild laden
             Bild *b = editorClient->titelbildLaden();
             Bild *b = editorClient->titelbildLaden();
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( !b )
             if( !b )
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
             else
                 editor->setBild( b );
                 editor->setBild( b );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             b->release();
             b->release();
         }
         }
         if( jetzt == 3 )
         if( jetzt == 3 )
         { // Minimap Bild laden
         { // Minimap Bild laden
             Bild *b = editorClient->minimapLaden();
             Bild *b = editorClient->minimapLaden();
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( !b )
             if( !b )
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
             else
                 editor->setBild( b );
                 editor->setBild( b );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             b->release();
             b->release();
         }
         }
         if( jetzt == 4 )
         if( jetzt == 4 )
         { // Ladebild laden
         { // Ladebild laden
             Bild *b = editorClient->ladebildLaden();
             Bild *b = editorClient->ladebildLaden();
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( !b )
             if( !b )
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
             else
                 editor->setBild( b );
                 editor->setBild( b );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             b->release();
             b->release();
         }
         }
         editor->setSichtbar( 1 );
         editor->setSichtbar( 1 );
@@ -156,9 +154,9 @@ void KEBeschreibung::thread()
                 err->release();
                 err->release();
                 if( !editorClient->titelbildSpeichern( b ) )
                 if( !editorClient->titelbildSpeichern( b ) )
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 editor->setBild( b );
                 editor->setBild( b );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
                 b->release();
                 b->release();
             }
             }
         }
         }
@@ -177,9 +175,9 @@ void KEBeschreibung::thread()
                 err->release();
                 err->release();
                 if( !editorClient->minimapSpeichern( b ) )
                 if( !editorClient->minimapSpeichern( b ) )
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 editor->setBild( b );
                 editor->setBild( b );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
                 b->release();
                 b->release();
             }
             }
         }
         }
@@ -198,9 +196,9 @@ void KEBeschreibung::thread()
                 err->release();
                 err->release();
                 if( !editorClient->ladebildSpeichern( b ) )
                 if( !editorClient->ladebildSpeichern( b ) )
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 editor->setBild( b );
                 editor->setBild( b );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
                 b->release();
                 b->release();
             }
             }
         }
         }
@@ -275,7 +273,7 @@ bool KEBeschreibung::tick( double z )
             if( importPfad )
             if( importPfad )
                 importPfad->release();
                 importPfad->release();
             importPfad = importDialog->getPfad();
             importPfad = importDialog->getPfad();
-            importDialog = (DateiDialogTh*)importDialog->release();
+            importDialog = (DateiDialogTh *)importDialog->release();
             if( sichtbar && importPfad )
             if( sichtbar && importPfad )
             {
             {
                 aktion = 1;
                 aktion = 1;
@@ -403,16 +401,4 @@ void KEBeschreibung::render( Bild &zRObj )
 bool KEBeschreibung::istSichtbar() const
 bool KEBeschreibung::istSichtbar() const
 {
 {
     return sichtbar || animation;
     return sichtbar || animation;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KEBeschreibung::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 1 - 4
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBeschreibung.h

@@ -14,7 +14,6 @@ class KEBeschreibung : public Thread
 private:
 private:
     Fenster *fenster;
     Fenster *fenster;
     Animation2D *laden;
     Animation2D *laden;
-    Schrift *schrift;
     DateiDialogTh *importDialog;
     DateiDialogTh *importDialog;
     Text *importPfad;
     Text *importPfad;
     KEBEditor *editor;
     KEBEditor *editor;
@@ -32,7 +31,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEBeschreibung( int karte, Schrift *zSchrift );
+    KEBeschreibung( int karte );
     // Destruktor
     // Destruktor
     ~KEBeschreibung();
     ~KEBeschreibung();
     // nicht constant
     // nicht constant
@@ -45,6 +44,4 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
     // constant
     // constant
     bool istSichtbar() const;
     bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };

+ 99 - 141
KSGClient/NachLogin/Editor/Karte/Dateien/KEDEditor.cpp

@@ -8,14 +8,15 @@
 
 
 // Inhalt der KEDBildSeite Klasse aus KEDEditor.h
 // Inhalt der KEDBildSeite Klasse aus KEDEditor.h
 // Konstruktor
 // Konstruktor
-KEDBildSeite::KEDBildSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove )
+KEDBildSeite::KEDBildSeite( Knopf *zNeueDatei, Knopf *zDateiRemove )
+    : ReferenceCounter()
 {
 {
-    bilder = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
+    bilder = initAuswahlListe( 220, 10, 200, 510, AuswahlListe::Style::Normal, {} );
     bildObj = initBildZ( 430, 10, 440, 440, BildZ::Style::normal | BildZ::Style::Alpha, 0 );
     bildObj = initBildZ( 430, 10, 440, 440, BildZ::Style::normal | BildZ::Style::Alpha, 0 );
-    bildLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bild Löschen" );
-    importieren = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Importieren" );
-    dateiLöschen = (Knopf *)zDateiRemove->getThis();
-    neueDatei = (Knopf *)zNeueDatei->getThis();
+    bildLöschen = initKnopf( 430, 460, 100, 20, Knopf::Style::Sichtbar, "Bild Löschen" );
+    importieren = initKnopf( 430, 490, 100, 20, Knopf::Style::Sichtbar, "Importieren" );
+    dateiLöschen = dynamic_cast<Knopf *>( zDateiRemove->getThis() );
+    neueDatei = dynamic_cast<Knopf *>( zNeueDatei->getThis() );
     importDialog = 0;
     importDialog = 0;
     importPfad = 0;
     importPfad = 0;
     aktion = 0;
     aktion = 0;
@@ -23,7 +24,6 @@ KEDBildSeite::KEDBildSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiR
     alpha = 0;
     alpha = 0;
     alpha2 = 0;
     alpha2 = 0;
     tickVal = 0;
     tickVal = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -49,9 +49,9 @@ int KEDBildSeite::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-void KEDBildSeite::setBildListe( RCArray< Text > * list )
+void KEDBildSeite::setBildListe( RCArray< Text > *list )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     Text txt = bilder->zEintrag( bilder->getAuswahl() ) ? bilder->zEintrag( bilder->getAuswahl() )->zText()->getText() : "";
     Text txt = bilder->zEintrag( bilder->getAuswahl() ) ? bilder->zEintrag( bilder->getAuswahl() )->zText()->getText() : "";
     while( bilder->getEintragAnzahl() )
     while( bilder->getEintragAnzahl() )
         bilder->removeEintrag( 0 );
         bilder->removeEintrag( 0 );
@@ -68,14 +68,14 @@ void KEDBildSeite::setBildListe( RCArray< Text > * list )
     else
     else
         bilder->deSelect();
         bilder->deSelect();
     list->release();
     list->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
-void KEDBildSeite::setBild( Bild * b )
+void KEDBildSeite::setBild( Bild *b )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     bildObj->setBild( b );
     bildObj->setBild( b );
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
 void KEDBildSeite::setSichtbar( bool s )
 void KEDBildSeite::setSichtbar( bool s )
@@ -93,7 +93,7 @@ bool KEDBildSeite::tick( double tv )
                 importPfad->release();
                 importPfad->release();
             importPfad = importDialog->getPfad();
             importPfad = importDialog->getPfad();
             importDialog = (DateiDialogTh *)importDialog->release();
             importDialog = (DateiDialogTh *)importDialog->release();
-            if( sichtbar &&importPfad )
+            if( sichtbar && importPfad )
                 aktion = 3;
                 aktion = 3;
         }
         }
     }
     }
@@ -144,7 +144,7 @@ bool KEDBildSeite::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KEDBildSeite::doPublicMausEreignis( MausEreignis & me )
+void KEDBildSeite::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -159,11 +159,11 @@ void KEDBildSeite::doPublicMausEreignis( MausEreignis & me )
     }
     }
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     dateiLöschen->doPublicMausEreignis( me );
     dateiLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 4;
         aktion = 4;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     neueDatei->doPublicMausEreignis( me );
     neueDatei->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 5;
         aktion = 5;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     importieren->doPublicMausEreignis( me );
     importieren->doPublicMausEreignis( me );
@@ -186,11 +186,11 @@ void KEDBildSeite::doPublicMausEreignis( MausEreignis & me )
     bildObj->doPublicMausEreignis( me );
     bildObj->doPublicMausEreignis( me );
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     bildLöschen->doPublicMausEreignis( me );
     bildLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 2;
         aktion = 2;
 }
 }
 
 
-void KEDBildSeite::render( Bild & zRObj )
+void KEDBildSeite::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -221,21 +221,6 @@ Text *KEDBildSeite::zBildAuswahl() const
     return bilder->zEintrag( bilder->getAuswahl() )->zText();
     return bilder->zEintrag( bilder->getAuswahl() )->zText();
 }
 }
 
 
-// Reference Counting
-KEDBildSeite *KEDBildSeite::getThis()
-{
-    ref++;
-    return this;
-}
-
-KEDBildSeite *KEDBildSeite::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 bool kEDEditorNeuModelOkME( void *p, void *obj, MausEreignis me )
 bool kEDEditorNeuModelOkME( void *p, void *obj, MausEreignis me )
 {
 {
@@ -249,10 +234,11 @@ bool kEDEditorNeuModelOkME( void *p, void *obj, MausEreignis me )
 
 
 // Inhalt der KEDModellSeite Klasse aus KEDEditor.h
 // Inhalt der KEDModellSeite Klasse aus KEDEditor.h
 // Konstruktor
 // Konstruktor
-KEDModellSeite::KEDModellSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zDateiRemove, AuswahlListe * datL )
+KEDModellSeite::KEDModellSeite( Knopf *zNeueDatei, Knopf *zDateiRemove, AuswahlListe *datL )
+    : ReferenceCounter()
 {
 {
     dateien = datL;
     dateien = datL;
-    modelle = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
+    modelle = initAuswahlListe( 220, 10, 200, 510, AuswahlListe::Style::Normal, {} );
     modelObj = new M2DVorschau();
     modelObj = new M2DVorschau();
     modelObj->setPosition( 430, 10 );
     modelObj->setPosition( 430, 10 );
     modelObj->setSize( 440, 440 );
     modelObj->setSize( 440, 440 );
@@ -262,32 +248,31 @@ KEDModellSeite::KEDModellSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf *
     modelObj->setModel2DZ( new Model2D() );
     modelObj->setModel2DZ( new Model2D() );
     modelObj->zModel()->setStyle( Model2D::Style::Erlaubt | Model2D::Style::Mesh | Model2D::Style::Sichtbar );
     modelObj->zModel()->setStyle( Model2D::Style::Erlaubt | Model2D::Style::Mesh | Model2D::Style::Sichtbar );
     modelObj->zModel()->setFarbe( 0xFFFFFFFF );
     modelObj->zModel()->setFarbe( 0xFFFFFFFF );
-    modelLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Modell2D Löschen" );
-    neuesModel = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Neues Modell2D" );
-    bearbeiten = initKnopf( 550, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bearbeiten" );
-    dateiLöschen = (Knopf *)zDateiRemove->getThis();
-    neueDatei = (Knopf *)zNeueDatei->getThis();
-    editor = new Model2DEditor::GUI( zSchrift );
-    neuModelF = initFenster( 365, 160, 150, 90, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
+    modelLöschen = initKnopf( 430, 460, 100, 20, Knopf::Style::Sichtbar, "Modell2D Löschen" );
+    neuesModel = initKnopf( 430, 490, 100, 20, Knopf::Style::Sichtbar, "Neues Modell2D" );
+    bearbeiten = initKnopf( 550, 490, 100, 20, Knopf::Style::Sichtbar, "Bearbeiten" );
+    dateiLöschen = dynamic_cast<Knopf *>( zDateiRemove->getThis() );
+    neueDatei = dynamic_cast<Knopf *>( zNeueDatei->getThis() );
+    editor = new Model2DEditor::GUI();
+    neuModelF = initFenster( 365, 160, 150, 90, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
                              Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
                              Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
                              Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neues Modell" );
                              Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neues Modell" );
     neuModelF->setKBgFarbe( 0xC0000000 );
     neuModelF->setKBgFarbe( 0xC0000000 );
     neuModelF->setSBgFarbe( 0xC0000000 );
     neuModelF->setSBgFarbe( 0xC0000000 );
     neuModelF->setTBgFarbe( 0xC0000000 );
     neuModelF->setTBgFarbe( 0xC0000000 );
     neuModelF->setClosingMe( kEDEditorNeuModelOkME );
     neuModelF->setClosingMe( kEDEditorNeuModelOkME );
-    neuModelName = initTextFeld( 10, 10, 130, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
-    neuModelOk = initKnopf( 25, 40, 100, 20, zSchrift, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
+    neuModelName = initTextFeld( 10, 10, 130, 20, TextFeld::Style::TextFeld, "Name" );
+    neuModelOk = initKnopf( 25, 40, 100, 20, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
     neuModelOk->setMausEreignisParameter( this );
     neuModelOk->setMausEreignisParameter( this );
     neuModelOk->setMausEreignis( kEDEditorNeuModelOkME );
     neuModelOk->setMausEreignis( kEDEditorNeuModelOkME );
-    neuModelF->addMember( neuModelName->getThis() );
-    neuModelF->addMember( neuModelOk->getThis() );
+    neuModelF->addMember( dynamic_cast<Zeichnung *>( neuModelName->getThis() ) );
+    neuModelF->addMember( dynamic_cast<Zeichnung *>( neuModelOk->getThis() ) );
     aktion = 0;
     aktion = 0;
     sichtbar = 0;
     sichtbar = 0;
     alpha = 0;
     alpha = 0;
     alpha2 = 0;
     alpha2 = 0;
     alpha3 = 0;
     alpha3 = 0;
     tickVal = 0;
     tickVal = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -315,7 +300,7 @@ int KEDModellSeite::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-bool KEDModellSeite::neuModelOkME( MausEreignis & me )
+bool KEDModellSeite::neuModelOkME( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -325,9 +310,9 @@ bool KEDModellSeite::neuModelOkME( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-void KEDModellSeite::setModelListe( RCArray< Text > * list )
+void KEDModellSeite::setModelListe( RCArray< Text > *list )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     Text txt = modelle->zEintrag( modelle->getAuswahl() ) ? modelle->zEintrag( modelle->getAuswahl() )->zText()->getText() : "";
     Text txt = modelle->zEintrag( modelle->getAuswahl() ) ? modelle->zEintrag( modelle->getAuswahl() )->zText()->getText() : "";
     while( modelle->getEintragAnzahl() )
     while( modelle->getEintragAnzahl() )
         modelle->removeEintrag( 0 );
         modelle->removeEintrag( 0 );
@@ -344,12 +329,12 @@ void KEDModellSeite::setModelListe( RCArray< Text > * list )
     else
     else
         modelle->deSelect();
         modelle->deSelect();
     list->release();
     list->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
-void KEDModellSeite::setModel( Model2DData * mdl )
+void KEDModellSeite::setModel( Model2DData *mdl )
 {
 {
-    modelObj->setModel2D( mdl->getThis() );
+    modelObj->setModel2D( dynamic_cast<Model2DData *>( mdl->getThis() ) );
     editor->setModel( mdl );
     editor->setModel( mdl );
 }
 }
 
 
@@ -430,7 +415,7 @@ bool KEDModellSeite::tick( double tv )
             alpha3 -= val;
             alpha3 -= val;
         ret = 1;
         ret = 1;
     }
     }
-    if( sichtbar &&neuModelF->hatStyleNicht( Fenster::Style::Sichtbar ) && alpha3 < 255 )
+    if( sichtbar && neuModelF->hatStyleNicht( Fenster::Style::Sichtbar ) && alpha3 < 255 )
     {
     {
         if( alpha3 + val > 255 )
         if( alpha3 + val > 255 )
             alpha3 = 255;
             alpha3 = 255;
@@ -441,7 +426,7 @@ bool KEDModellSeite::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KEDModellSeite::doPublicMausEreignis( MausEreignis & me )
+void KEDModellSeite::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -461,21 +446,21 @@ void KEDModellSeite::doPublicMausEreignis( MausEreignis & me )
     }
     }
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     dateiLöschen->doPublicMausEreignis( me );
     dateiLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 5;
         aktion = 5;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     neueDatei->doPublicMausEreignis( me );
     neueDatei->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 6;
         aktion = 6;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     neuesModel->doPublicMausEreignis( me );
     neuesModel->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         neuModelF->addStyle( Fenster::Style::Sichtbar );
         neuModelF->addStyle( Fenster::Style::Sichtbar );
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     if( modelle->getAuswahl() < 0 )
     if( modelle->getAuswahl() < 0 )
         return;
         return;
     bearbeiten->doPublicMausEreignis( me );
     bearbeiten->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         editor->setSichtbar( 1 );
         editor->setSichtbar( 1 );
         modelObj->removeStyle( Model2D::Style::Sichtbar );
         modelObj->removeStyle( Model2D::Style::Sichtbar );
@@ -491,11 +476,11 @@ void KEDModellSeite::doPublicMausEreignis( MausEreignis & me )
     editor->doPublicMausEreignis( me );
     editor->doPublicMausEreignis( me );
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     modelLöschen->doPublicMausEreignis( me );
     modelLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 2;
         aktion = 2;
 }
 }
 
 
-void KEDModellSeite::doTastaturEreignis( TastaturEreignis & te )
+void KEDModellSeite::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( neuModelF->hatStyle( Fenster::Style::Sichtbar ) )
     if( neuModelF->hatStyle( Fenster::Style::Sichtbar ) )
     {
     {
@@ -505,7 +490,7 @@ void KEDModellSeite::doTastaturEreignis( TastaturEreignis & te )
     editor->doTastaturEreignis( te );
     editor->doTastaturEreignis( te );
 }
 }
 
 
-void KEDModellSeite::render( Bild & zRObj )
+void KEDModellSeite::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -549,33 +534,19 @@ Model2DData *KEDModellSeite::getModelData() const
     return editor->getM2Data();
     return editor->getM2Data();
 }
 }
 
 
-// Reference Counting
-KEDModellSeite *KEDModellSeite::getThis()
-{
-    ref++;
-    return this;
-}
-
-KEDModellSeite *KEDModellSeite::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der KEDSoundSeite Klasse aus KEDEditor.h
 // Inhalt der KEDSoundSeite Klasse aus KEDEditor.h
 // Konstruktor
 // Konstruktor
-KEDSoundSeite::KEDSoundSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zDateiRemove )
+KEDSoundSeite::KEDSoundSeite( Knopf *zNeueDatei, Knopf *zDateiRemove )
+    : ReferenceCounter()
 {
 {
     Framework::getDLLRegister()->ladeDLL( "GSL.dll", "data/bin/GSL.dll" );
     Framework::getDLLRegister()->ladeDLL( "GSL.dll", "data/bin/GSL.dll" );
-    sounds = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
-    play = initKnopf( 430, 430, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Play" );
-    soundLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bild Löschen" );
-    importieren = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Importieren" );
-    dateiLöschen = (Knopf *)zDateiRemove->getThis();
-    neueDatei = (Knopf *)zNeueDatei->getThis();
+    sounds = initAuswahlListe( 220, 10, 200, 510, AuswahlListe::Style::Normal, {} );
+    play = initKnopf( 430, 430, 100, 20, Knopf::Style::Sichtbar, "Play" );
+    soundLöschen = initKnopf( 430, 460, 100, 20, Knopf::Style::Sichtbar, "Bild Löschen" );
+    importieren = initKnopf( 430, 490, 100, 20, Knopf::Style::Sichtbar, "Importieren" );
+    dateiLöschen = dynamic_cast<Knopf *>( zDateiRemove->getThis() );
+    neueDatei = dynamic_cast<Knopf *>( zNeueDatei->getThis() );
     importDialog = 0;
     importDialog = 0;
     importPfad = 0;
     importPfad = 0;
     aktion = 0;
     aktion = 0;
@@ -584,7 +555,6 @@ KEDSoundSeite::KEDSoundSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zD
     alpha2 = 0;
     alpha2 = 0;
     tickVal = 0;
     tickVal = 0;
     sound = 0;
     sound = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -616,9 +586,9 @@ int KEDSoundSeite::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-void KEDSoundSeite::setSoundListe( RCArray< Text > * list )
+void KEDSoundSeite::setSoundListe( RCArray< Text > *list )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     Text txt = sounds->zEintrag( sounds->getAuswahl() ) ? sounds->zEintrag( sounds->getAuswahl() )->zText()->getText() : "";
     Text txt = sounds->zEintrag( sounds->getAuswahl() ) ? sounds->zEintrag( sounds->getAuswahl() )->zText()->getText() : "";
     while( sounds->getEintragAnzahl() )
     while( sounds->getEintragAnzahl() )
         sounds->removeEintrag( 0 );
         sounds->removeEintrag( 0 );
@@ -635,10 +605,10 @@ void KEDSoundSeite::setSoundListe( RCArray< Text > * list )
     else
     else
         sounds->deSelect();
         sounds->deSelect();
     list->release();
     list->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
-void KEDSoundSeite::setSound( GSL::GSLSoundV * b )
+void KEDSoundSeite::setSound( GSL::GSLSoundV *b )
 {
 {
     if( sound )
     if( sound )
     {
     {
@@ -666,7 +636,7 @@ bool KEDSoundSeite::tick( double tv )
                 importPfad->release();
                 importPfad->release();
             importPfad = importDialog->getPfad();
             importPfad = importDialog->getPfad();
             importDialog = (DateiDialogTh *)importDialog->release();
             importDialog = (DateiDialogTh *)importDialog->release();
-            if( sichtbar &&importPfad )
+            if( sichtbar && importPfad )
                 aktion = 3;
                 aktion = 3;
         }
         }
     }
     }
@@ -717,7 +687,7 @@ bool KEDSoundSeite::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KEDSoundSeite::doPublicMausEreignis( MausEreignis & me )
+void KEDSoundSeite::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -735,11 +705,11 @@ void KEDSoundSeite::doPublicMausEreignis( MausEreignis & me )
     }
     }
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     dateiLöschen->doPublicMausEreignis( me );
     dateiLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 4;
         aktion = 4;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     neueDatei->doPublicMausEreignis( me );
     neueDatei->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 5;
         aktion = 5;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     importieren->doPublicMausEreignis( me );
     importieren->doPublicMausEreignis( me );
@@ -759,7 +729,7 @@ void KEDSoundSeite::doPublicMausEreignis( MausEreignis & me )
         return;
         return;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     play->doPublicMausEreignis( me );
     play->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         if( sound )
         if( sound )
             sound->stopSound();
             sound->stopSound();
@@ -767,11 +737,11 @@ void KEDSoundSeite::doPublicMausEreignis( MausEreignis & me )
     }
     }
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     soundLöschen->doPublicMausEreignis( me );
     soundLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 2;
         aktion = 2;
 }
 }
 
 
-void KEDSoundSeite::render( Bild & zRObj )
+void KEDSoundSeite::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -802,21 +772,6 @@ Text *KEDSoundSeite::zSoundAuswahl() const
     return sounds->zEintrag( sounds->getAuswahl() )->zText();
     return sounds->zEintrag( sounds->getAuswahl() )->zText();
 }
 }
 
 
-// Reference Counting
-KEDSoundSeite *KEDSoundSeite::getThis()
-{
-    ref++;
-    return this;
-}
-
-KEDSoundSeite *KEDSoundSeite::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 bool kEDEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
 bool kEDEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
 {
 {
@@ -830,30 +785,33 @@ bool kEDEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
 
 
 // Inhalt der KEDEditor Klasse aus KEDEditor.h
 // Inhalt der KEDEditor Klasse aus KEDEditor.h
 // Konstruktor
 // Konstruktor
-KEDEditor::KEDEditor( Schrift * zSchrift )
+KEDEditor::KEDEditor()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    neueDatei = initKnopf( 0, 0, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Neue Datei" );
-    dateiLöschen = initKnopf( 0, 0, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Datei Löschen" );
-    dateien = initAuswahlListe( 10, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
-    bildSeite = new KEDBildSeite( zSchrift, neueDatei, dateiLöschen );
-    modelSeite = new KEDModellSeite( zSchrift, neueDatei, dateiLöschen, (AuswahlListe *)dateien->getThis() );
-    soundSeite = new KEDSoundSeite( zSchrift, neueDatei, dateiLöschen );
-    neuDateiF = initFenster( 365, 145, 150, 120, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
+    neueDatei = initKnopf( 0, 0, 100, 20, Knopf::Style::Sichtbar, "Neue Datei" );
+    dateiLöschen = initKnopf( 0, 0, 100, 20, Knopf::Style::Sichtbar, "Datei Löschen" );
+    dateien = initAuswahlListe( 10, 10, 200, 510, AuswahlListe::Style::Normal, {} );
+    bildSeite = new KEDBildSeite( neueDatei, dateiLöschen );
+    modelSeite = new KEDModellSeite( neueDatei, dateiLöschen, dynamic_cast<AuswahlListe *>( dateien->getThis() ) );
+    soundSeite = new KEDSoundSeite( neueDatei, dateiLöschen );
+    neuDateiF = initFenster( 365, 145, 150, 120, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
                              Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
                              Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
                              Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neue Datei" );
                              Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neue Datei" );
     neuDateiF->setKBgFarbe( 0xC0000000 );
     neuDateiF->setKBgFarbe( 0xC0000000 );
     neuDateiF->setSBgFarbe( 0xC0000000 );
     neuDateiF->setSBgFarbe( 0xC0000000 );
     neuDateiF->setTBgFarbe( 0xC0000000 );
     neuDateiF->setTBgFarbe( 0xC0000000 );
     neuDateiF->setClosingMe( kEDEditorNeuDateiOkME );
     neuDateiF->setClosingMe( kEDEditorNeuDateiOkME );
-    neuDateiTyp = initAuswahlBox( 10, 10, 130, 20, zSchrift, ABSTYLE, { "Ordner", "Bild (.ltdb)", "Modell 2D (.m2)", "Sound (.gsl)" } );
-    neuDateiName = initTextFeld( 10, 40, 130, 20, zSchrift, TextFeld::Style::TextFeld, "Datei Name" );
-    neuDateiOk = initKnopf( 25, 70, 100, 20, zSchrift, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
+    neuDateiTyp = initAuswahlBox( 10, 10, 130, 20, ABSTYLE, { "Ordner", "Bild (.ltdb)", "Modell 2D (.m2)", "Sound (.gsl)" } );
+    neuDateiName = initTextFeld( 10, 40, 130, 20, TextFeld::Style::TextFeld, "Datei Name" );
+    neuDateiOk = initKnopf( 25, 70, 100, 20, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
     neuDateiOk->setMausEreignisParameter( this );
     neuDateiOk->setMausEreignisParameter( this );
     neuDateiOk->setMausEreignis( kEDEditorNeuDateiOkME );
     neuDateiOk->setMausEreignis( kEDEditorNeuDateiOkME );
-    neuDateiF->addMember( neuDateiName->getThis() );
-    neuDateiF->addMember( neuDateiOk->getThis() );
-    neuDateiF->addMember( neuDateiTyp->getThis() );
+#pragma warning(push)
+#pragma warning(disable : 4436)
+    neuDateiF->addMember( dynamic_cast<Zeichnung *>( neuDateiName->getThis() ) );
+    neuDateiF->addMember( dynamic_cast<Zeichnung *>( neuDateiOk->getThis() ) );
+    neuDateiF->addMember( dynamic_cast<Zeichnung *>( neuDateiTyp->getThis() ) );
+#pragma warning(pop)
     aktion = 0;
     aktion = 0;
     sichtbar = 0;
     sichtbar = 0;
     alpha = 0;
     alpha = 0;
@@ -884,7 +842,7 @@ int KEDEditor::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-bool KEDEditor::neuDateiOkME( MausEreignis & me )
+bool KEDEditor::neuDateiOkME( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -894,9 +852,9 @@ bool KEDEditor::neuDateiOkME( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-void KEDEditor::setDateiListe( RCArray< Text > * list )
+void KEDEditor::setDateiListe( RCArray< Text > *list )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     dateien->deSelect();
     dateien->deSelect();
     while( dateien->getEintragAnzahl() )
     while( dateien->getEintragAnzahl() )
         dateien->removeEintrag( 0 );
         dateien->removeEintrag( 0 );
@@ -908,10 +866,10 @@ void KEDEditor::setDateiListe( RCArray< Text > * list )
     modelSeite->setSichtbar( 0 );
     modelSeite->setSichtbar( 0 );
     neuDateiF->removeStyle( Fenster::Style::Sichtbar );
     neuDateiF->removeStyle( Fenster::Style::Sichtbar );
     list->release();
     list->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
-void KEDEditor::setBildListe( RCArray< Text > * list )
+void KEDEditor::setBildListe( RCArray< Text > *list )
 {
 {
     soundSeite->setSichtbar( 0 );
     soundSeite->setSichtbar( 0 );
     modelSeite->setSichtbar( 0 );
     modelSeite->setSichtbar( 0 );
@@ -919,7 +877,7 @@ void KEDEditor::setBildListe( RCArray< Text > * list )
     bildSeite->setSichtbar( 1 );
     bildSeite->setSichtbar( 1 );
 }
 }
 
 
-void KEDEditor::setSoundListe( RCArray< Text > * list )
+void KEDEditor::setSoundListe( RCArray< Text > *list )
 {
 {
     modelSeite->setSichtbar( 0 );
     modelSeite->setSichtbar( 0 );
     bildSeite->setSichtbar( 0 );
     bildSeite->setSichtbar( 0 );
@@ -927,7 +885,7 @@ void KEDEditor::setSoundListe( RCArray< Text > * list )
     soundSeite->setSichtbar( 1 );
     soundSeite->setSichtbar( 1 );
 }
 }
 
 
-void KEDEditor::setModel2dListe( RCArray< Text > * list )
+void KEDEditor::setModel2dListe( RCArray< Text > *list )
 {
 {
     bildSeite->setSichtbar( 0 );
     bildSeite->setSichtbar( 0 );
     soundSeite->setSichtbar( 0 );
     soundSeite->setSichtbar( 0 );
@@ -935,17 +893,17 @@ void KEDEditor::setModel2dListe( RCArray< Text > * list )
     modelSeite->setSichtbar( 1 );
     modelSeite->setSichtbar( 1 );
 }
 }
 
 
-void KEDEditor::setBild( Bild * b )
+void KEDEditor::setBild( Bild *b )
 {
 {
     bildSeite->setBild( b );
     bildSeite->setBild( b );
 }
 }
 
 
-void KEDEditor::setSound( GSL::GSLSoundV * s )
+void KEDEditor::setSound( GSL::GSLSoundV *s )
 {
 {
     soundSeite->setSound( s );
     soundSeite->setSound( s );
 }
 }
 
 
-void KEDEditor::setModel2d( Model2DData * d )
+void KEDEditor::setModel2d( Model2DData *d )
 {
 {
     modelSeite->setModel( d );
     modelSeite->setModel( d );
 }
 }
@@ -1072,7 +1030,7 @@ bool KEDEditor::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KEDEditor::doPublicMausEreignis( MausEreignis & me )
+void KEDEditor::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -1097,19 +1055,19 @@ void KEDEditor::doPublicMausEreignis( MausEreignis & me )
     {
     {
         bool vera = me.verarbeitet;
         bool vera = me.verarbeitet;
         neueDatei->doPublicMausEreignis( me );
         neueDatei->doPublicMausEreignis( me );
-        if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+        if( !vera && me.verarbeitet && me.id == ME_RLinks )
             neuDateiF->addStyle( Fenster::Style::Sichtbar );
             neuDateiF->addStyle( Fenster::Style::Sichtbar );
         if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
         if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
         {
         {
             vera = me.verarbeitet;
             vera = me.verarbeitet;
             dateiLöschen->doPublicMausEreignis( me );
             dateiLöschen->doPublicMausEreignis( me );
-            if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+            if( !vera && me.verarbeitet && me.id == ME_RLinks )
                 aktion = 3;
                 aktion = 3;
         }
         }
     }
     }
 }
 }
 
 
-void KEDEditor::doTastaturEreignis( TastaturEreignis & te )
+void KEDEditor::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( neuDateiF->hatStyle( Fenster::Style::Sichtbar ) )
     if( neuDateiF->hatStyle( Fenster::Style::Sichtbar ) )
     {
     {
@@ -1119,7 +1077,7 @@ void KEDEditor::doTastaturEreignis( TastaturEreignis & te )
     modelSeite->doTastaturEreignis( te );
     modelSeite->doTastaturEreignis( te );
 }
 }
 
 
-void KEDEditor::render( Bild & zRObj )
+void KEDEditor::render( Bild &zRObj )
 {
 {
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha2 );
     zRObj.setAlpha( alpha2 );

+ 7 - 19
KSGClient/NachLogin/Editor/Karte/Dateien/KEDEditor.h

@@ -12,7 +12,7 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class KEDBildSeite
+class KEDBildSeite : public virtual ReferenceCounter
 {
 {
 private:
 private:
     AuswahlListe *bilder;
     AuswahlListe *bilder;
@@ -28,11 +28,10 @@ private:
     unsigned char alpha;
     unsigned char alpha;
     unsigned char alpha2;
     unsigned char alpha2;
     double tickVal;
     double tickVal;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEDBildSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove );
+    KEDBildSeite( Knopf *zNeueDatei, Knopf *zDateiRemove );
     // Destruktor
     // Destruktor
     ~KEDBildSeite();
     ~KEDBildSeite();
     // nicht constant
     // nicht constant
@@ -46,12 +45,9 @@ public:
     // constant
     // constant
     Text *zBildImportPfad() const;
     Text *zBildImportPfad() const;
     Text *zBildAuswahl() const;
     Text *zBildAuswahl() const;
-    // Reference Counting
-    KEDBildSeite *getThis();
-    KEDBildSeite *release();
 };
 };
 
 
-class KEDModellSeite
+class KEDModellSeite : public virtual ReferenceCounter
 {
 {
 private:
 private:
     AuswahlListe *modelle;
     AuswahlListe *modelle;
@@ -72,11 +68,10 @@ private:
     unsigned char alpha2;
     unsigned char alpha2;
     unsigned char alpha3;
     unsigned char alpha3;
     double tickVal;
     double tickVal;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEDModellSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove, AuswahlListe *dateien );
+    KEDModellSeite( Knopf *zNeueDatei, Knopf *zDateiRemove, AuswahlListe *dateien );
     // Destruktor
     // Destruktor
     ~KEDModellSeite();
     ~KEDModellSeite();
     // nicht constant
     // nicht constant
@@ -93,12 +88,9 @@ public:
     Text *zModelAuswahl() const;
     Text *zModelAuswahl() const;
     Text *zNeuModelName() const;
     Text *zNeuModelName() const;
     Model2DData *getModelData() const;
     Model2DData *getModelData() const;
-    // Reference Counting
-    KEDModellSeite *getThis();
-    KEDModellSeite *release();
 };
 };
 
 
-class KEDSoundSeite
+class KEDSoundSeite : public virtual ReferenceCounter
 {
 {
 private:
 private:
     AuswahlListe *sounds;
     AuswahlListe *sounds;
@@ -115,11 +107,10 @@ private:
     unsigned char alpha;
     unsigned char alpha;
     unsigned char alpha2;
     unsigned char alpha2;
     double tickVal;
     double tickVal;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEDSoundSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove );
+    KEDSoundSeite( Knopf *zNeueDatei, Knopf *zDateiRemove );
     // Destruktor
     // Destruktor
     ~KEDSoundSeite();
     ~KEDSoundSeite();
     // nicht constant
     // nicht constant
@@ -133,9 +124,6 @@ public:
     // constant
     // constant
     Text *zSoundImportPfad() const;
     Text *zSoundImportPfad() const;
     Text *zSoundAuswahl() const;
     Text *zSoundAuswahl() const;
-    // Reference Counting
-    KEDSoundSeite *getThis();
-    KEDSoundSeite *release();
 };
 };
 
 
 class KEDEditor : public Zeichnung
 class KEDEditor : public Zeichnung
@@ -159,7 +147,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEDEditor( Schrift *zSchrift );
+    KEDEditor();
     // Destruktor
     // Destruktor
     ~KEDEditor();
     ~KEDEditor();
     // nicht constant
     // nicht constant

+ 76 - 122
KSGClient/NachLogin/Editor/Karte/Dateien/KEDModel2DEditor.cpp

@@ -14,12 +14,12 @@ using namespace Model2DEditor;
 // Inhalt der VertexData Klasse aus KEDModel2DEditor.h
 // Inhalt der VertexData Klasse aus KEDModel2DEditor.h
 // Konstruktor
 // Konstruktor
 VertexData::VertexData( Vec2< float > v, Vertex t )
 VertexData::VertexData( Vec2< float > v, Vertex t )
+    : ReferenceCounter()
 {
 {
     vertex = v;
     vertex = v;
     textur = t;
     textur = t;
     selected = 0;
     selected = 0;
     sichtbar = 1;
     sichtbar = 1;
-    ref = 1;
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -94,31 +94,16 @@ Vertex VertexData::getTPos() const
     return textur;
     return textur;
 }
 }
 
 
-// Reference Counting
-VertexData *VertexData::getThis()
-{
-    ref++;
-    return this;
-}
-
-VertexData *VertexData::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der PolygonData Klasse aus KEDModel2DEditor.h
 // Inhalt der PolygonData Klasse aus KEDModel2DEditor.h
 // Konstruktor
 // Konstruktor
-PolygonData::PolygonData( Polygon2D & pg )
+PolygonData::PolygonData( Polygon2D &pg )
+    : ReferenceCounter()
 {
 {
     name = pg.name->getText();
     name = pg.name->getText();
     vd = new RCArray< VertexData >();
     vd = new RCArray< VertexData >();
     transparent = pg.transparent;
     transparent = pg.transparent;
     sichtbar = 1;
     sichtbar = 1;
-    ref = 1;
     int anz = pg.vertex->getEintragAnzahl();
     int anz = pg.vertex->getEintragAnzahl();
     for( int i = 0; i < anz; i++ )
     for( int i = 0; i < anz; i++ )
     {
     {
@@ -126,7 +111,7 @@ PolygonData::PolygonData( Polygon2D & pg )
         Vertex t( 0, 0 );
         Vertex t( 0, 0 );
         if( pg.vertex->hat( i ) )
         if( pg.vertex->hat( i ) )
             v = pg.vertex->get( i );
             v = pg.vertex->get( i );
-        if( pg.tKordinaten &&pg.tKordinaten->hat( i ) )
+        if( pg.tKordinaten && pg.tKordinaten->hat( i ) )
             t = pg.tKordinaten->get( i );
             t = pg.tKordinaten->get( i );
         vd->add( new VertexData( v, t ) );
         vd->add( new VertexData( v, t ) );
     }
     }
@@ -215,7 +200,7 @@ int PolygonData::getVertexAnzahl() const
     return vd->getEintragAnzahl();
     return vd->getEintragAnzahl();
 }
 }
 
 
-void PolygonData::getM2( Polygon2D & pd, bool textur ) const
+void PolygonData::getM2( Polygon2D &pd, bool textur ) const
 {
 {
     int anz = vd->getEintragAnzahl();
     int anz = vd->getEintragAnzahl();
     if( !pd.name )
     if( !pd.name )
@@ -237,25 +222,11 @@ bool PolygonData::istTransparent() const
     return transparent;
     return transparent;
 }
 }
 
 
-// Reference Counting
-PolygonData *PolygonData::getThis()
-{
-    ref++;
-    return this;
-}
-
-PolygonData *PolygonData::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der Data Klasse aus KEDModel2DEditor.h
 // Inhalt der Data Klasse aus KEDModel2DEditor.h
 // Konstruktor
 // Konstruktor
-Data::Data( Model2DData * mdl )
+Data::Data( Model2DData *mdl )
+    : ReferenceCounter()
 {
 {
     pd = new RCArray< PolygonData >();
     pd = new RCArray< PolygonData >();
     tPos.x = 0;
     tPos.x = 0;
@@ -263,7 +234,6 @@ Data::Data( Model2DData * mdl )
     textur = 0;
     textur = 0;
     rTextur = 0;
     rTextur = 0;
     sp = -1;
     sp = -1;
-    ref = 1;
     int anz = ( mdl && mdl->polygons ) ? mdl->polygons->getEintragAnzahl() : 0;
     int anz = ( mdl && mdl->polygons ) ? mdl->polygons->getEintragAnzahl() : 0;
     for( int i = 0; i < anz; i++ )
     for( int i = 0; i < anz; i++ )
     {
     {
@@ -351,7 +321,7 @@ void Data::saveTextur()
         i->saveTextur( tPos, textur->getSize() );
         i->saveTextur( tPos, textur->getSize() );
 }
 }
 
 
-void Data::setTextur( Bild * t )
+void Data::setTextur( Bild *t )
 {
 {
     if( textur )
     if( textur )
         textur->release();
         textur->release();
@@ -420,25 +390,10 @@ Punkt Data::getTPos() const
     return tPos;
     return tPos;
 }
 }
 
 
-// Reference Counting
-Data *Data::getThis()
-{
-    ref++;
-    return this;
-}
-
-Data *Data::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der EditorListe Klasse aus KEDModel2DEditor.h
 // Inhalt der EditorListe Klasse aus KEDModel2DEditor.h
 // Konstruktor
 // Konstruktor
-EditorListe::EditorListe( Schrift * zSchrift )
+EditorListe::EditorListe()
     : Zeichnung()
     : Zeichnung()
 {
 {
     ram = new LRahmen();
     ram = new LRahmen();
@@ -447,50 +402,52 @@ EditorListe::EditorListe( Schrift * zSchrift )
     ram->setSize( 150, 480 );
     ram->setSize( 150, 480 );
     ram->setPosition( 720, 10 );
     ram->setPosition( 720, 10 );
     scroll = new VScrollBar();
     scroll = new VScrollBar();
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift ? schrift->getThis() : 0 );
-    pName = initTextFeld( 0, 0, 70, 20, schrift, TextFeld::Style::TextFeld, "" );
-    koordF = initFenster( 10, 10, 150, 140, zSchrift, ( Fenster::Style::normal | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund ) & ~Fenster::Style::Sichtbar, "Koordinaten" );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
+    pName = initTextFeld( 0, 0, 70, 20, TextFeld::Style::TextFeld, "" );
+    koordF = initFenster( 10, 10, 150, 140, ( Fenster::Style::normal | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund ) & ~Fenster::Style::Sichtbar, "Koordinaten" );
     koordF->setKBgFarbe( 0xFF000000 );
     koordF->setKBgFarbe( 0xFF000000 );
     koordF->setTBgFarbe( 0xFF000000 );
     koordF->setTBgFarbe( 0xFF000000 );
     koordF->setClosingMe( _closeFensterME );
     koordF->setClosingMe( _closeFensterME );
-    kxT = initTextFeld( 10, 10, 30, 20, zSchrift, TextFeld::Style::Text, "x:" );
-    kyT = initTextFeld( 10, 40, 30, 20, zSchrift, TextFeld::Style::Text, "y:" );
-    kx = initTextFeld( 40, 10, 90, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    ky = initTextFeld( 40, 40, 90, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    tkxT = initTextFeld( 10, 70, 30, 20, zSchrift, TextFeld::Style::Text, "tx:" );
-    tkyT = initTextFeld( 10, 100, 30, 20, zSchrift, TextFeld::Style::Text, "ty:" );
-    tkx = initTextFeld( 40, 70, 90, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    tky = initTextFeld( 40, 100, 90, 20, zSchrift, TextFeld::Style::TextFeld, "" );
+    kxT = initTextFeld( 10, 10, 30, 20, TextFeld::Style::Text, "x:" );
+    kyT = initTextFeld( 10, 40, 30, 20, TextFeld::Style::Text, "y:" );
+    kx = initTextFeld( 40, 10, 90, 20, TextFeld::Style::TextFeld, "" );
+    ky = initTextFeld( 40, 40, 90, 20, TextFeld::Style::TextFeld, "" );
+    tkxT = initTextFeld( 10, 70, 30, 20, TextFeld::Style::Text, "tx:" );
+    tkyT = initTextFeld( 10, 100, 30, 20, TextFeld::Style::Text, "ty:" );
+    tkx = initTextFeld( 40, 70, 90, 20, TextFeld::Style::TextFeld, "" );
+    tky = initTextFeld( 40, 100, 90, 20, TextFeld::Style::TextFeld, "" );
     int *polIP = &polI, *verIP = &verI;
     int *polIP = &polI, *verIP = &verI;
-    TextFeld * kxTmp = kx;
-    TextFeld * kyTmp = ky;
-    auto saveK = [ polIP, verIP, kxTmp, kyTmp ]( void *p, void *o, TastaturEreignis te )
+    TextFeld *kxTmp = kx;
+    TextFeld *kyTmp = ky;
+    auto saveK = [polIP, verIP, kxTmp, kyTmp]( void *p, void *o, TastaturEreignis te )
     {
     {
         Data *data = (Data *)p;
         Data *data = (Data *)p;
-        data->zPolygon( *polIP )->zVertex( *verIP )->setPosition( Vertex( (float)(double)* kxTmp->zText(), (float)(double)* kyTmp->zText() ) );
+        data->zPolygon( *polIP )->zVertex( *verIP )->setPosition( Vertex( (float)(double)*kxTmp->zText(), (float)(double)*kyTmp->zText() ) );
         return 1;
         return 1;
     };
     };
     kx->setNTastaturEreignis( saveK );
     kx->setNTastaturEreignis( saveK );
     ky->setNTastaturEreignis( saveK );
     ky->setNTastaturEreignis( saveK );
-    TextFeld * tkxTmp = tkx;
-    TextFeld * tkyTmp = tky;
-    auto saveTK = [ polIP, verIP, tkxTmp, tkyTmp ]( void *p, void *o, TastaturEreignis te )
+    TextFeld *tkxTmp = tkx;
+    TextFeld *tkyTmp = tky;
+    auto saveTK = [polIP, verIP, tkxTmp, tkyTmp]( void *p, void *o, TastaturEreignis te )
     {
     {
         Data *data = (Data *)p;
         Data *data = (Data *)p;
-        data->zPolygon( *polIP )->zVertex( *verIP )->setTextur( Vertex( (float)(double)* tkxTmp->zText(), (float)(double)* tkyTmp->zText() ) );
+        data->zPolygon( *polIP )->zVertex( *verIP )->setTextur( Vertex( (float)(double)*tkxTmp->zText(), (float)(double)*tkyTmp->zText() ) );
         return 1;
         return 1;
     };
     };
     tkx->setNTastaturEreignis( saveTK );
     tkx->setNTastaturEreignis( saveTK );
     tky->setNTastaturEreignis( saveTK );
     tky->setNTastaturEreignis( saveTK );
-    koordF->addMember( kxT->getThis() );
-    koordF->addMember( kyT->getThis() );
-    koordF->addMember( kx->getThis() );
-    koordF->addMember( ky->getThis() );
-    koordF->addMember( tkxT->getThis() );
-    koordF->addMember( tkyT->getThis() );
-    koordF->addMember( tkx->getThis() );
-    koordF->addMember( tky->getThis() );
+#pragma warning(push)
+#pragma warning(disable : 4436)
+    koordF->addMember( dynamic_cast<Zeichnung *>( kxT->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( kyT->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( kx->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( ky->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( tkxT->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( tkyT->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( tkx->getThis() ) );
+    koordF->addMember( dynamic_cast<Zeichnung *>( tky->getThis() ) );
+#pragma warning(pop)
     polI = 0;
     polI = 0;
     verI = 0;
     verI = 0;
     data = 0;
     data = 0;
@@ -504,7 +461,6 @@ EditorListe::~EditorListe()
     scroll->release();
     scroll->release();
     if( data )
     if( data )
         data->release();
         data->release();
-    schrift->release();
     koordF->release();
     koordF->release();
     kxT->release();
     kxT->release();
     kyT->release();
     kyT->release();
@@ -518,14 +474,14 @@ EditorListe::~EditorListe()
 }
 }
 
 
 // nicht constant
 // nicht constant
-void EditorListe::setDataZ( Data * d )
+void EditorListe::setDataZ( Data *d )
 {
 {
     if( data )
     if( data )
         data->release();
         data->release();
     data = d;
     data = d;
 }
 }
 
 
-void EditorListe::doPublicMausEreignis( MausEreignis & me )
+void EditorListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
     koordF->doPublicMausEreignis( me );
     koordF->doPublicMausEreignis( me );
     me.mx -= ram->getX();
     me.mx -= ram->getX();
@@ -566,7 +522,7 @@ void EditorListe::doPublicMausEreignis( MausEreignis & me )
                 data->zPolygon( i )->setTransparent( !data->zPolygon( i )->istTransparent() );
                 data->zPolygon( i )->setTransparent( !data->zPolygon( i )->istTransparent() );
                 rend = 1;
                 rend = 1;
             }
             }
-            else if( me.mx > 0 && me.my > y &&me.mx < 133 && me.my < y + 20 )
+            else if( me.mx > 0 && me.my > y && me.mx < 133 && me.my < y + 20 )
             { // Polygon Auswählen und Abwählen
             { // Polygon Auswählen und Abwählen
                 if( data->getSelectedPolygon() != i )
                 if( data->getSelectedPolygon() != i )
                     data->selectPolygon( i );
                     data->selectPolygon( i );
@@ -574,7 +530,7 @@ void EditorListe::doPublicMausEreignis( MausEreignis & me )
                     data->selectPolygon( -1 );
                     data->selectPolygon( -1 );
                 rend = 1;
                 rend = 1;
             }
             }
-            PolygonData * pd = data->zPolygon( i );
+            PolygonData *pd = data->zPolygon( i );
             if( pd && ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
             if( pd && ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
             {
             {
                 int vAnz = pd->getVertexAnzahl();
                 int vAnz = pd->getVertexAnzahl();
@@ -607,7 +563,7 @@ void EditorListe::doPublicMausEreignis( MausEreignis & me )
                         ky->setText( Text() += pd->zVertex( j )->getPos().y );
                         ky->setText( Text() += pd->zVertex( j )->getPos().y );
                         koordF->addStyle( Fenster::Style::Sichtbar );
                         koordF->addStyle( Fenster::Style::Sichtbar );
                     }
                     }
-                    else if( me.my > y &&me.my < y + 20 && me.mx > 0 && me.mx < 133 )
+                    else if( me.my > y && me.my < y + 20 && me.mx > 0 && me.mx < 133 )
                     { // Auswählen und Abwählen
                     { // Auswählen und Abwählen
                         pd->zVertex( j )->setAuswahl( !pd->zVertex( j )->istAusgewählt() );
                         pd->zVertex( j )->setAuswahl( !pd->zVertex( j )->istAusgewählt() );
                         rend = 1;
                         rend = 1;
@@ -622,24 +578,24 @@ void EditorListe::doPublicMausEreignis( MausEreignis & me )
     me.my += ram->getY();
     me.my += ram->getY();
 }
 }
 
 
-void EditorListe::doTastaturEreignis( TastaturEreignis & te )
+void EditorListe::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     koordF->doTastaturEreignis( te );
     koordF->doTastaturEreignis( te );
-    if( data &&data->getSelectedPolygon() >= 0 )
+    if( data && data->getSelectedPolygon() >= 0 )
         pName->doTastaturEreignis( te );
         pName->doTastaturEreignis( te );
 }
 }
 
 
 bool EditorListe::tick( double zeit )
 bool EditorListe::tick( double zeit )
 {
 {
     rend |= koordF->tick( zeit );
     rend |= koordF->tick( zeit );
-    if( data &&data->getSelectedPolygon() >= 0 )
+    if( data && data->getSelectedPolygon() >= 0 )
         rend |= pName->tick( zeit );
         rend |= pName->tick( zeit );
     bool ret = rend;
     bool ret = rend;
     rend = 0;
     rend = 0;
     return ret;
     return ret;
 }
 }
 
 
-void EditorListe::render( Bild & zRObj )
+void EditorListe::render( Bild &zRObj )
 {
 {
     ram->render( zRObj );
     ram->render( zRObj );
     if( !zRObj.setDrawOptions( ram->getPosition() + Punkt( 1, 1 ), ram->getSize() - Punkt( 2, 2 ) ) )
     if( !zRObj.setDrawOptions( ram->getPosition() + Punkt( 1, 1 ), ram->getSize() - Punkt( 2, 2 ) ) )
@@ -657,7 +613,7 @@ void EditorListe::render( Bild & zRObj )
             pName->setPosition( 20, y );
             pName->setPosition( 20, y );
             pName->setText( data->zPolygon( data->getSelectedPolygon() )->getName() );
             pName->setText( data->zPolygon( data->getSelectedPolygon() )->getName() );
             Data *tmpData = data;
             Data *tmpData = data;
-            pName->setNTastaturEreignis( [ tmpData ]( void *p, void *o, TastaturEreignis te ) -> bool
+            pName->setNTastaturEreignis( [tmpData]( void *p, void *o, TastaturEreignis te ) -> bool
             {
             {
                 if( tmpData->getSelectedPolygon() >= 0 )
                 if( tmpData->getSelectedPolygon() >= 0 )
                     tmpData->zPolygon( tmpData->getSelectedPolygon() )->setName( ( (TextFeld *)o )->zText()->getText() );
                     tmpData->zPolygon( tmpData->getSelectedPolygon() )->setName( ( (TextFeld *)o )->zText()->getText() );
@@ -691,7 +647,7 @@ void EditorListe::render( Bild & zRObj )
         if( ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
         if( ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
         {
         {
             zRObj.drawDreieck( Punkt( 10, 4 + y ), Punkt( 4, 16 + y ), Punkt( 16, 16 + y ), 0xFFFFFFFF );
             zRObj.drawDreieck( Punkt( 10, 4 + y ), Punkt( 4, 16 + y ), Punkt( 16, 16 + y ), 0xFFFFFFFF );
-            PolygonData * pd = data->zPolygon( i );
+            PolygonData *pd = data->zPolygon( i );
             if( pd )
             if( pd )
             {
             {
                 int vAnz = pd->getVertexAnzahl();
                 int vAnz = pd->getVertexAnzahl();
@@ -738,7 +694,7 @@ void EditorListe::render( Bild & zRObj )
 
 
 // Inhalt der Editor2D Klasse aus KEDModel2DEditor.h
 // Inhalt der Editor2D Klasse aus KEDModel2DEditor.h
 // Konstruktor
 // Konstruktor
-Editor2D::Editor2D( Schrift * zSchrift )
+Editor2D::Editor2D()
     : Zeichnung()
     : Zeichnung()
 {
 {
     pos.x = 10;
     pos.x = 10;
@@ -755,8 +711,7 @@ Editor2D::Editor2D( Schrift * zSchrift )
     select = new LRahmen();
     select = new LRahmen();
     select->setFarbe( 0xFF5050FF );
     select->setFarbe( 0xFF5050FF );
     select->setRamenBreite( 1 );
     select->setRamenBreite( 1 );
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift->getThis() );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     addV = Vertex( 0, 0 );
     addV = Vertex( 0, 0 );
     mausIn = 0;
     mausIn = 0;
     größe = 1;
     größe = 1;
@@ -767,21 +722,20 @@ Editor2D::~Editor2D()
 {
 {
     ram->release();
     ram->release();
     select->release();
     select->release();
-    schrift->release();
     tr->release();
     tr->release();
     if( data )
     if( data )
         data->release();
         data->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
-void Editor2D::setDataZ( Data * d )
+void Editor2D::setDataZ( Data *d )
 {
 {
     if( data )
     if( data )
         data->release();
         data->release();
     data = d;
     data = d;
 }
 }
 
 
-void Editor2D::doPublicMausEreignis( MausEreignis & me )
+void Editor2D::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -848,7 +802,7 @@ void Editor2D::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void Editor2D::doTastaturEreignis( TastaturEreignis & te )
+void Editor2D::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( te.id == TE_Release && te.taste == T_Enter && mausIn )
     if( te.id == TE_Release && te.taste == T_Enter && mausIn )
     {
     {
@@ -926,7 +880,7 @@ bool Editor2D::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void Editor2D::render( Bild & zRObj )
+void Editor2D::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos, ram->getSize() ) )
     if( !zRObj.setDrawOptions( pos, ram->getSize() ) )
         return;
         return;
@@ -940,7 +894,7 @@ void Editor2D::render( Bild & zRObj )
     {
     {
         Punkt tPos = data->getTPos();
         Punkt tPos = data->getTPos();
         zRObj.alphaBildSkall( (int)( ( tPos.x - offs.x ) * größe ), (int)( ( tPos.y - offs.y ) * größe ),
         zRObj.alphaBildSkall( (int)( ( tPos.x - offs.x ) * größe ), (int)( ( tPos.y - offs.y ) * größe ),
-            (int)( data->zTextur()->getBreite() * größe ), (int)( data->zTextur()->getHeight() * größe ), *data->zTextur() );
+                              (int)( data->zTextur()->getBreite() * größe ), (int)( data->zTextur()->getHeight() * größe ), *data->zTextur() );
     }
     }
     // Raster mahlen
     // Raster mahlen
     int xanz = (int)( ram->getBreite() / ( 50 * größe ) );
     int xanz = (int)( ram->getBreite() / ( 50 * größe ) );
@@ -980,7 +934,7 @@ void Editor2D::render( Bild & zRObj )
             for( int j = -1; j < vAnz && vAnz > 0; j++ )
             for( int j = -1; j < vAnz && vAnz > 0; j++ )
             {
             {
                 VertexData *v = j < 0 ? &tmp : p->zVertex( j );
                 VertexData *v = j < 0 ? &tmp : p->zVertex( j );
-                if( l &&v )
+                if( l && v )
                 {
                 {
                     if( l->istSichtbar() && v->istSichtbar() )
                     if( l->istSichtbar() && v->istSichtbar() )
                         zRObj.drawLinie( ( ( l->getPos() - offs ) * größe ), ( ( v->getPos() - offs ) * größe ), 0xFFA0A0A0 );
                         zRObj.drawLinie( ( ( l->getPos() - offs ) * größe ), ( ( v->getPos() - offs ) * größe ), 0xFFA0A0A0 );
@@ -993,7 +947,7 @@ void Editor2D::render( Bild & zRObj )
                     continue;
                     continue;
                 }
                 }
                 if( j == 0 )
                 if( j == 0 )
-                    zRObj.fillRegion( (int)( ( l->getPos().x - offs.x ) *größe ) - 5, (int)( ( l->getPos().y - offs.y ) *größe ) - 5, 10, 10, 0xFF50FF50 );
+                    zRObj.fillRegion( (int)( ( l->getPos().x - offs.x ) * größe ) - 5, (int)( ( l->getPos().y - offs.y ) * größe ) - 5, 10, 10, 0xFF50FF50 );
                 else
                 else
                 {
                 {
                     if( !l->istAusgewählt() )
                     if( !l->istAusgewählt() )
@@ -1042,19 +996,19 @@ void Editor2D::render( Bild & zRObj )
 
 
 // Inhalt der GUI Klasse aus KEDModel2DEditor.h
 // Inhalt der GUI Klasse aus KEDModel2DEditor.h
 // Konstruktor
 // Konstruktor
-GUI::GUI( Schrift * zSchrift )
+GUI::GUI()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    speichern = initKnopf( 660, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Speichern" );
-    abbrechen = initKnopf( 770, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Abbrehen" );
-    textur = initKontrollKnopf( 10, 500, 100, 20, zSchrift, KontrollKnopf::Style::Normal, "Textur" );
-    texturVerknüpfen = initKnopf( 120, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Textur Speichern" );
-    texturLaden = initKnopf( 230, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Textur Laden" );
+    speichern = initKnopf( 660, 500, 100, 20, Knopf::Style::Sichtbar, "Speichern" );
+    abbrechen = initKnopf( 770, 500, 100, 20, Knopf::Style::Sichtbar, "Abbrehen" );
+    textur = initKontrollKnopf( 10, 500, 100, 20, KontrollKnopf::Style::Normal, "Textur" );
+    texturVerknüpfen = initKnopf( 120, 500, 100, 20, Knopf::Style::Sichtbar, "Textur Speichern" );
+    texturLaden = initKnopf( 230, 500, 100, 20, Knopf::Style::Sichtbar, "Textur Laden" );
     data = new Data( 0 );
     data = new Data( 0 );
-    editor = new Editor2D( zSchrift );
-    editor->setDataZ( data->getThis() );
-    liste = new EditorListe( zSchrift );
-    liste->setDataZ( data->getThis() );
+    editor = new Editor2D();
+    editor->setDataZ( dynamic_cast<Data *>( data->getThis() ) );
+    liste = new EditorListe();
+    liste->setDataZ( dynamic_cast<Data *>( data->getThis() ) );
     importDialog = 0;
     importDialog = 0;
     aktion = 0;
     aktion = 0;
     alpha = 0;
     alpha = 0;
@@ -1082,16 +1036,16 @@ void GUI::setSichtbar( bool s )
     sichtbar = s;
     sichtbar = s;
 }
 }
 
 
-void GUI::setModel( Model2DData * data )
+void GUI::setModel( Model2DData *data )
 {
 {
     if( this->data )
     if( this->data )
         this->data->release();
         this->data->release();
     this->data = new Data( data );
     this->data = new Data( data );
-    editor->setDataZ( this->data->getThis() );
-    liste->setDataZ( this->data->getThis() );
+    editor->setDataZ( dynamic_cast<Data *>( this->data->getThis() ) );
+    liste->setDataZ( dynamic_cast<Data *>( this->data->getThis() ) );
 }
 }
 
 
-void GUI::doPublicMausEreignis( MausEreignis & me )
+void GUI::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -1114,7 +1068,7 @@ void GUI::doPublicMausEreignis( MausEreignis & me )
     data->setRTextur( textur->hatStyle( KontrollKnopf::Style::Selected ) );
     data->setRTextur( textur->hatStyle( KontrollKnopf::Style::Selected ) );
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     texturVerknüpfen->doPublicMausEreignis( me );
     texturVerknüpfen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         data->saveTextur();
         data->saveTextur();
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     texturLaden->doPublicMausEreignis( me );
     texturLaden->doPublicMausEreignis( me );
@@ -1134,7 +1088,7 @@ void GUI::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void GUI::doTastaturEreignis( TastaturEreignis & te )
+void GUI::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -1197,7 +1151,7 @@ bool GUI::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void GUI::render( Bild & zRObj )
+void GUI::render( Bild &zRObj )
 {
 {
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha );
     editor->render( zRObj );
     editor->render( zRObj );

+ 7 - 21
KSGClient/NachLogin/Editor/Karte/Dateien/KEDModel2DEditor.h

@@ -13,14 +13,13 @@ using namespace Framework;
 
 
 namespace Model2DEditor
 namespace Model2DEditor
 {
 {
-    class VertexData
+    class VertexData : public virtual ReferenceCounter
     {
     {
     private:
     private:
         Vec2< float > vertex;
         Vec2< float > vertex;
         Vertex textur;
         Vertex textur;
         bool selected;
         bool selected;
         bool sichtbar;
         bool sichtbar;
-        int ref;
 
 
     public:
     public:
         // Konstruktor
         // Konstruktor
@@ -40,19 +39,15 @@ namespace Model2DEditor
         bool istAusgewählt() const;
         bool istAusgewählt() const;
         Vec2< float > getPos() const;
         Vec2< float > getPos() const;
         Vertex getTPos() const;
         Vertex getTPos() const;
-        // Reference Counting
-        VertexData *getThis();
-        VertexData *release();
     };
     };
 
 
-    class PolygonData
+    class PolygonData : public virtual ReferenceCounter
     {
     {
     private:
     private:
         RCArray< VertexData > *vd;
         RCArray< VertexData > *vd;
         Text name;
         Text name;
         bool transparent;
         bool transparent;
         bool sichtbar;
         bool sichtbar;
-        int ref;
 
 
     public:
     public:
         // Konstruktor
         // Konstruktor
@@ -77,12 +72,9 @@ namespace Model2DEditor
         int getVertexAnzahl() const;
         int getVertexAnzahl() const;
         void getM2( Polygon2D &pd, bool textur ) const;
         void getM2( Polygon2D &pd, bool textur ) const;
         bool istTransparent() const;
         bool istTransparent() const;
-        // Reference Counting
-        PolygonData *getThis();
-        PolygonData *release();
     };
     };
 
 
-    class Data
+    class Data : public virtual ReferenceCounter
     {
     {
     private:
     private:
         RCArray< PolygonData > *pd;
         RCArray< PolygonData > *pd;
@@ -90,7 +82,6 @@ namespace Model2DEditor
         Punkt tPos;
         Punkt tPos;
         bool rTextur;
         bool rTextur;
         int sp;
         int sp;
-        int ref;
 
 
     public:
     public:
         // Konstruktor
         // Konstruktor
@@ -117,9 +108,6 @@ namespace Model2DEditor
         Model2DData *getM2() const;
         Model2DData *getM2() const;
         Bild *zTextur() const;
         Bild *zTextur() const;
         Punkt getTPos() const;
         Punkt getTPos() const;
-        // Reference Counting
-        Data *getThis();
-        Data *release();
     };
     };
 
 
     class EditorListe : public Zeichnung
     class EditorListe : public Zeichnung
@@ -129,7 +117,6 @@ namespace Model2DEditor
         VScrollBar *scroll;
         VScrollBar *scroll;
         Data *data;
         Data *data;
         Array< bool > ausgeklappt;
         Array< bool > ausgeklappt;
-        Schrift *schrift;
         TextRenderer *tr;
         TextRenderer *tr;
         TextFeld *pName;
         TextFeld *pName;
         Fenster *koordF;
         Fenster *koordF;
@@ -146,7 +133,7 @@ namespace Model2DEditor
 
 
     public:
     public:
         // Konstruktor
         // Konstruktor
-        EditorListe( Schrift *zSchrift );
+        EditorListe();
         // Destruktor
         // Destruktor
         ~EditorListe();
         ~EditorListe();
         // nicht constant
         // nicht constant
@@ -156,7 +143,7 @@ namespace Model2DEditor
         bool tick( double zeit ) override;
         bool tick( double zeit ) override;
         void render( Bild &zRObj ) override;
         void render( Bild &zRObj ) override;
     };
     };
-    
+
     class Editor2D : public Zeichnung
     class Editor2D : public Zeichnung
     {
     {
     private:
     private:
@@ -165,7 +152,6 @@ namespace Model2DEditor
         Data *data;
         Data *data;
         LRahmen *ram;
         LRahmen *ram;
         LRahmen *select;
         LRahmen *select;
-        Schrift *schrift;
         TextRenderer *tr;
         TextRenderer *tr;
         Punkt mausPos;
         Punkt mausPos;
         Vertex addV;
         Vertex addV;
@@ -174,7 +160,7 @@ namespace Model2DEditor
 
 
     public:
     public:
         // Konstruktor
         // Konstruktor
-        Editor2D( Schrift *zSchrift );
+        Editor2D();
         // Destruktor
         // Destruktor
         ~Editor2D();
         ~Editor2D();
         // nicht constant
         // nicht constant
@@ -203,7 +189,7 @@ namespace Model2DEditor
 
 
     public:
     public:
         // Konstruktor
         // Konstruktor
-        GUI( Schrift *zSchrifto );
+        GUI();
         // Destruktor
         // Destruktor
         ~GUI();
         ~GUI();
         // nicht constant
         // nicht constant

+ 6 - 20
KSGClient/NachLogin/Editor/Karte/Dateien/KEDateien.cpp

@@ -11,22 +11,21 @@ typedef GSL::GSLDateiV *( *GetGSLDatei )( );
 
 
 // Inahlt der KEDateien Klasse aus KEDateien.h
 // Inahlt der KEDateien Klasse aus KEDateien.h
 // Konstruktor
 // Konstruktor
-KEDateien::KEDateien( int karte, Schrift *zSchrift )
+KEDateien::KEDateien( int karte )
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
     Text *kName = infoClient->getKarteName( karte );
     Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Dateien";
     titel += " - Dateien";
     if( kName )
     if( kName )
         kName->release();
         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 KEDEditor( zSchrift );
-    laden = (Animation2D*)ladeAnimation->dublizieren();
+    fenster = initFenster( 10, 40, 880, 550, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    editor = new KEDEditor();
+    laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
-    fenster->addMember( editor->getThis() );
-    fort = initFBalken( 375, 350, 150, 20, zSchrift, FBalken::Style::normal );
+    fenster->addMember( dynamic_cast<KEBEditor *>( editor->getThis() ) );
+    fort = initFBalken( 375, 350, 150, 20, FBalken::Style::normal );
     animation = 0;
     animation = 0;
     tickVal = 0;
     tickVal = 0;
     sichtbar = 0;
     sichtbar = 0;
@@ -45,7 +44,6 @@ KEDateien::~KEDateien()
     editor->release();
     editor->release();
     laden->release();
     laden->release();
     fort->release();
     fort->release();
-    schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -528,16 +526,4 @@ void KEDateien::render( Bild &zRObj )
 bool KEDateien::istSichtbar() const
 bool KEDateien::istSichtbar() const
 {
 {
     return sichtbar || animation;
     return sichtbar || animation;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KEDateien::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 1 - 4
KSGClient/NachLogin/Editor/Karte/Dateien/KEDateien.h

@@ -16,7 +16,6 @@ class KEDateien : public Thread
 private:
 private:
     Fenster *fenster;
     Fenster *fenster;
     Animation2D *laden;
     Animation2D *laden;
-    Schrift *schrift;
     KEDEditor *editor;
     KEDEditor *editor;
     FBalken *fort;
     FBalken *fort;
     int aktion;
     int aktion;
@@ -31,7 +30,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEDateien( int karte, Schrift *zSchrift );
+    KEDateien( int karte );
     // Destruktor
     // Destruktor
     ~KEDateien();
     ~KEDateien();
     // nicht constant
     // nicht constant
@@ -43,6 +42,4 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
     // constant
     // constant
     bool istSichtbar() const;
     bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };

+ 5 - 15
KSGClient/NachLogin/Editor/Karte/Dateien/WAVDatei.cpp

@@ -15,6 +15,7 @@ bool istGleich( char *a, char *b, int l )
 // Inhalt der WAVDatei Klasse aus WAVDatei.h
 // Inhalt der WAVDatei Klasse aus WAVDatei.h
 // Konstruktor
 // Konstruktor
 WAVDatei::WAVDatei()
 WAVDatei::WAVDatei()
+    : ReferenceCounter()
 {}
 {}
 
 
 // nicht constant
 // nicht constant
@@ -23,12 +24,12 @@ bool WAVDatei::lade( char *pfad )
     d.setDatei( pfad );
     d.setDatei( pfad );
     if( !d.open( Datei::Style::lesen ) )
     if( !d.open( Datei::Style::lesen ) )
         return 0;
         return 0;
-    d.lese( (char*)&kpf, sizeof( kpf ) );
+    d.lese( (char *)&kpf, sizeof( kpf ) );
     if( !istGleich( kpf.riff, "RIFF", 4 ) )
     if( !istGleich( kpf.riff, "RIFF", 4 ) )
         return 0;
         return 0;
     if( !istGleich( kpf.wav, "WAVE", 4 ) )
     if( !istGleich( kpf.wav, "WAVE", 4 ) )
         return 0;
         return 0;
-    d.lese( (char*)&fmt, sizeof( fmt ) );
+    d.lese( (char *)&fmt, sizeof( fmt ) );
     if( !istGleich( fmt.fmt, "fmt ", 4 ) )
     if( !istGleich( fmt.fmt, "fmt ", 4 ) )
         return 0;
         return 0;
     if( fmt.channels > 2 || fmt.channels < 1 )
     if( fmt.channels > 2 || fmt.channels < 1 )
@@ -39,11 +40,11 @@ bool WAVDatei::lade( char *pfad )
         return 0;
         return 0;
     if( fmt.blockAlign * fmt.sampleRate != fmt.bytesPerSec )
     if( fmt.blockAlign * fmt.sampleRate != fmt.bytesPerSec )
         return 0;
         return 0;
-    d.lese( (char*)&dBeg, sizeof( dBeg ) );
+    d.lese( (char *)&dBeg, sizeof( dBeg ) );
     while( !istGleich( dBeg.data, "data", 4 ) )
     while( !istGleich( dBeg.data, "data", 4 ) )
     {
     {
         d.setLPosition( 1 + d.getLPosition() - sizeof( dBeg ), 0 );
         d.setLPosition( 1 + d.getLPosition() - sizeof( dBeg ), 0 );
-        d.lese( (char*)&dBeg, sizeof( dBeg ) );
+        d.lese( (char *)&dBeg, sizeof( dBeg ) );
     }
     }
     pos = (int)d.getLPosition();
     pos = (int)d.getLPosition();
     d.close();
     d.close();
@@ -85,15 +86,4 @@ int WAVDatei::getSampleRate() const
 __int64 WAVDatei::getDatLength() const
 __int64 WAVDatei::getDatLength() const
 {
 {
     return d.getSize() - pos;
     return d.getSize() - pos;
-}
-
-// Reference Counting
-Thread *WAVDatei::getThis()
-{
-    return Thread::getThis();
-}
-
-Thread *WAVDatei::release()
-{
-    return Thread::release();
 }
 }

+ 0 - 3
KSGClient/NachLogin/Editor/Karte/Dateien/WAVDatei.h

@@ -63,7 +63,4 @@ public:
     bool istMono() const override;
     bool istMono() const override;
     int getSampleRate() const override;
     int getSampleRate() const override;
     __int64 getDatLength() const override;
     __int64 getDatLength() const override;
-    // Reference Counting
-    Thread *getThis() override;
-    Thread *release() override;
 };
 };

+ 49 - 63
KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.cpp

@@ -7,91 +7,90 @@
 bool kEReleaseHerstellenME( void *p, void *obj, MausEreignis me )
 bool kEReleaseHerstellenME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        return ( (KERelease*)p )->herstellenME( (Knopf*)obj, me );
+        return ( (KERelease *)p )->herstellenME( (Knopf *)obj, me );
     return 1;
     return 1;
 }
 }
 
 
 bool kEReleaseLöschenME( void *p, void *obj, MausEreignis me )
 bool kEReleaseLöschenME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        return ( (KERelease*)p )->removeME( (Knopf*)obj, me );
+        return ( (KERelease *)p )->removeME( (Knopf *)obj, me );
     return 1;
     return 1;
 }
 }
 
 
 bool kEReleaseVeröffME( void *p, void *obj, MausEreignis me )
 bool kEReleaseVeröffME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        return ( (KERelease*)p )->veröffentlichenME( me );
+        return ( (KERelease *)p )->veröffentlichenME( me );
     return 1;
     return 1;
 }
 }
 
 
 bool kEReleaseAbbildErstellenME( void *p, void *obj, MausEreignis me )
 bool kEReleaseAbbildErstellenME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        return ( (KERelease*)p )->abbildErstellenME( me );
+        return ( (KERelease *)p )->abbildErstellenME( me );
     return 1;
     return 1;
 }
 }
 
 
 bool kEReleaseShopÜbernehmenME( void *p, void *obj, MausEreignis me )
 bool kEReleaseShopÜbernehmenME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        return ( (KERelease*)p )->shopÜbernehmenME( me );
+        return ( (KERelease *)p )->shopÜbernehmenME( me );
     return 1;
     return 1;
 }
 }
 
 
 // Inhalt der KERelease Klasse aus KERelease.h
 // Inhalt der KERelease Klasse aus KERelease.h
 // Konstruktor
 // Konstruktor
-KERelease::KERelease( int karte, Schrift *zSchrift )
+KERelease::KERelease( int karte )
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
     Text *kName = infoClient->getKarteName( karte );
     Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Release";
     titel += " - Release";
     if( kName )
     if( kName )
         kName->release();
         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 },
+    fenster = initFenster( 10, 40, 880, 550, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    abbilder = initObjTabelle( 10, 10, 700, 510, OTSTYLE, { { "Name", 270, 270, 270 },
     { "Datum", 200, 200, 200 }, { "Herstellen", 100, 100, 100 }, { "Löschen", 100, 100, 100 } }, 20 );
     { "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 = initKnopf( 720, 10, 150, 20, Knopf::Style::Sichtbar, "Veröffentlichen" );
     veröff->setMausEreignisParameter( this );
     veröff->setMausEreignisParameter( this );
     veröff->setMausEreignis( kEReleaseVeröffME );
     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, hauptScreen );
-    abbildName = initTextFeld( 720, 40, 150, 20, zSchrift, TextFeld::Style::TextFeld, "Abbild Name" );
-    initToolTip( abbildName, "Name eines neu zu erstellenen Kartenabbilds.", schrift, hauptScreen );
-    abbildErstellen = initKnopf( 720, 70, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Abbild Erstellen" );
+    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." );
+    abbildName = initTextFeld( 720, 40, 150, 20, TextFeld::Style::TextFeld, "Abbild Name" );
+    initToolTip( abbildName, "Name eines neu zu erstellenen Kartenabbilds." );
+    abbildErstellen = initKnopf( 720, 70, 150, 20, Knopf::Style::Sichtbar, "Abbild Erstellen" );
     abbildErstellen->setMausEreignisParameter( this );
     abbildErstellen->setMausEreignisParameter( this );
     abbildErstellen->setMausEreignis( kEReleaseAbbildErstellenME );
     abbildErstellen->setMausEreignis( kEReleaseAbbildErstellenME );
-    initToolTip( abbildErstellen, "Erstellt ein Abbild von der aktuellen Kartenversion,\ndas zu einem späteren Zeitpunkt wiederhergestellt werden kann.", schrift, 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, "" );
+    initToolTip( abbildErstellen, "Erstellt ein Abbild von der aktuellen Kartenversion,\ndas zu einem späteren Zeitpunkt wiederhergestellt werden kann." );
+    shopT = initTextFeld( 720, 350, 150, 20, TextFeld::Style::Text, "Im Shop zu kaufen:" );
+    testVersionErwerbbar = initAuswahlBox( 720, 375, 150, 20, ABSTYLE, { "Testversion ja", "Testversion nein" } );
+    vollVersionErwerbbar = initAuswahlBox( 720, 400, 150, 20, ABSTYLE, { "Vollversion ja","Vollversion nein" } );
+    preisT = initTextFeld( 720, 425, 150, 20, TextFeld::Style::Text, "Preis in Kupfer:" );
+    testVersionPreisT = initTextFeld( 720, 450, 100, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Testversion:" );
+    vollVersionPreisT = initTextFeld( 720, 475, 100, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Vollversion:" );
+    testVersionPreis = initTextFeld( 820, 450, 50, 20, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" );
     testVersionPreis->setTastaturEreignis( _nurNummernTE );
     testVersionPreis->setTastaturEreignis( _nurNummernTE );
-    vollVersionPreis = initTextFeld( 820, 475, 50, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" );
+    vollVersionPreis = initTextFeld( 820, 475, 50, 20, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" );
     vollVersionPreis->setTastaturEreignis( _nurNummernTE );
     vollVersionPreis->setTastaturEreignis( _nurNummernTE );
-    shopÜbernehmen = initKnopf( 745, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Übernehmen" );
+    shopÜbernehmen = initKnopf( 745, 500, 100, 20, Knopf::Style::Sichtbar, "Übernehmen" );
     shopÜbernehmen->setMausEreignis( kEReleaseShopÜbernehmenME );
     shopÜbernehmen->setMausEreignis( kEReleaseShopÜbernehmenME );
     shopÜbernehmen->setMausEreignisParameter( this );
     shopÜbernehmen->setMausEreignisParameter( this );
-    laden = (Animation2D*)ladeAnimation->dublizieren();
+    laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     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() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( abbilder->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( veröff->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( abbildName->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( abbildErstellen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( shopT->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( preisT->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( testVersionPreisT->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( vollVersionPreisT->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( testVersionPreis->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( vollVersionPreis->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( shopÜbernehmen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( vollVersionErwerbbar->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( testVersionErwerbbar->getThis() ) );
     animation = 0;
     animation = 0;
     tickVal = 0;
     tickVal = 0;
     sichtbar = 0;
     sichtbar = 0;
@@ -113,7 +112,6 @@ KERelease::~KERelease()
     abbildName->release();
     abbildName->release();
     abbildErstellen->release();
     abbildErstellen->release();
     laden->release();
     laden->release();
-    schrift->release();
     shopT->release();
     shopT->release();
     testVersionErwerbbar->release();
     testVersionErwerbbar->release();
     vollVersionErwerbbar->release();
     vollVersionErwerbbar->release();
@@ -133,7 +131,7 @@ bool KERelease::herstellenME( Knopf *obj, MausEreignis &me )
         int anz = abbilder->getZeilenAnzahl();
         int anz = abbilder->getZeilenAnzahl();
         for( int i = 1; i < anz; i++ )
         for( int i = 1; i < anz; i++ )
         {
         {
-            if( obj == (Knopf*)abbilder->zZeichnung( 2, i ) )
+            if( obj == (Knopf *)abbilder->zZeichnung( 2, i ) )
             {
             {
                 if( !run )
                 if( !run )
                 {
                 {
@@ -155,7 +153,7 @@ bool KERelease::removeME( Knopf *obj, MausEreignis &me )
         int anz = abbilder->getZeilenAnzahl();
         int anz = abbilder->getZeilenAnzahl();
         for( int i = 1; i < anz; i++ )
         for( int i = 1; i < anz; i++ )
         {
         {
-            if( obj == (Knopf*)abbilder->zZeichnung( 3, i ) )
+            if( obj == (Knopf *)abbilder->zZeichnung( 3, i ) )
             {
             {
                 if( !run )
                 if( !run )
                 {
                 {
@@ -302,32 +300,32 @@ void KERelease::thread()
     int anz = abbilder->getZeilenAnzahl();
     int anz = abbilder->getZeilenAnzahl();
     for( int i = 1; i < anz; i++ )
     for( int i = 1; i < anz; i++ )
     {
     {
-        hauptScreen->lock();
+        uiFactory.initParam.bildschirm->lock();
         abbilder->removeZeile( 1 );
         abbilder->removeZeile( 1 );
-        hauptScreen->unlock();
+        uiFactory.initParam.bildschirm->unlock();
     }
     }
     RCArray< Text > *name = new RCArray< Text >();
     RCArray< Text > *name = new RCArray< Text >();
     RCArray< Zeit > *datum = new RCArray< Zeit >();
     RCArray< Zeit > *datum = new RCArray< Zeit >();
     anz = editorClient->getAbbildListe( name, datum );
     anz = editorClient->getAbbildListe( name, datum );
     for( int i = 0; i < anz; i++ )
     for( int i = 0; i < anz; i++ )
     {
     {
-        hauptScreen->lock();
+        uiFactory.initParam.bildschirm->lock();
         abbilder->addZeile( name->z( i )->getText() );
         abbilder->addZeile( name->z( i )->getText() );
-        abbilder->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text, name->z( i )->getText() ) );
+        abbilder->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text, name->z( i )->getText() ) );
         Text *d = datum->z( i )->getZeit( "h:i:s d.m.y" );
         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() ) );
+        abbilder->setZeichnungZ( 1, i + 1, initTextFeld( 0, 0, 0, 0, TextFeld::Style::Text, d->getText() ) );
         d->release();
         d->release();
-        Knopf *k = initKnopf( 0, 0, 100, 20, schrift, Knopf::Style::Sichtbar, "Herstellen" );
-        initToolTip( k, "Stellt die abgespeicherte Version der Karte wiederher.", schrift, hauptScreen );
+        Knopf *k = initKnopf( 0, 0, 100, 20, Knopf::Style::Sichtbar, "Herstellen" );
+        initToolTip( k, "Stellt die abgespeicherte Version der Karte wiederher." );
         k->setMausEreignisParameter( this );
         k->setMausEreignisParameter( this );
         k->setMausEreignis( kEReleaseHerstellenME );
         k->setMausEreignis( kEReleaseHerstellenME );
         abbilder->setZeichnungZ( 2, i + 1, k );
         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, hauptScreen );
+        k = initKnopf( 0, 0, 100, 20, Knopf::Style::Sichtbar, "Löschen" );
+        initToolTip( k, "Löscht die abgespeicherte Version der Karte." );
         k->setMausEreignisParameter( this );
         k->setMausEreignisParameter( this );
         k->setMausEreignis( kEReleaseLöschenME );
         k->setMausEreignis( kEReleaseLöschenME );
         abbilder->setZeichnungZ( 3, i + 1, k );
         abbilder->setZeichnungZ( 3, i + 1, k );
-        hauptScreen->unlock();
+        uiFactory.initParam.bildschirm->unlock();
     }
     }
     name->release();
     name->release();
     datum->release();
     datum->release();
@@ -453,16 +451,4 @@ void KERelease::render( Bild &zRObj )
 bool KERelease::istSichtbar() const
 bool KERelease::istSichtbar() const
 {
 {
     return sichtbar || animation;
     return sichtbar || animation;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KERelease::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 23 - 26
KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.h

@@ -13,13 +13,12 @@ using namespace Framework;
 class KERelease : public Thread
 class KERelease : public Thread
 {
 {
 private:
 private:
-	Fenster *fenster;
-	ObjTabelle *abbilder;
+    Fenster *fenster;
+    ObjTabelle *abbilder;
     Knopf *veröff;
     Knopf *veröff;
     Knopf *abbildErstellen;
     Knopf *abbildErstellen;
     TextFeld *abbildName;
     TextFeld *abbildName;
-	Animation2D *laden;
-    Schrift *schrift;
+    Animation2D *laden;
     TextFeld *shopT;
     TextFeld *shopT;
     AuswahlBox *testVersionErwerbbar;
     AuswahlBox *testVersionErwerbbar;
     AuswahlBox *vollVersionErwerbbar;
     AuswahlBox *vollVersionErwerbbar;
@@ -31,36 +30,34 @@ private:
     Knopf *shopÜbernehmen;
     Knopf *shopÜbernehmen;
     int aktion;
     int aktion;
     int zeile;
     int zeile;
-	bool animation;
-	double tickVal;
-	bool sichtbar;
-	bool rechts;
-	int xStart;
-	int breite;
-	int karte;
-	unsigned char alpha;
+    bool animation;
+    double tickVal;
+    bool sichtbar;
+    bool rechts;
+    int xStart;
+    int breite;
+    int karte;
+    unsigned char alpha;
 
 
 public:
 public:
-	// Konstruktor
-	KERelease( int karte, Schrift *zSchrift );
-	// Destruktor
-	~KERelease();
-	// nicht constant
+    // Konstruktor
+    KERelease( int karte );
+    // Destruktor
+    ~KERelease();
+    // nicht constant
     bool herstellenME( Knopf *obj, MausEreignis &me );
     bool herstellenME( Knopf *obj, MausEreignis &me );
     bool removeME( Knopf *obj, MausEreignis &me );
     bool removeME( Knopf *obj, MausEreignis &me );
     bool veröffentlichenME( MausEreignis &me );
     bool veröffentlichenME( MausEreignis &me );
     bool abbildErstellenME( MausEreignis &me );
     bool abbildErstellenME( MausEreignis &me );
     bool shopÜbernehmenME( MausEreignis &me );
     bool shopÜbernehmenME( MausEreignis &me );
-	void setSichtbar( bool s, bool vr );
-	void thread() override;
-	void doPublicMausEreignis( MausEreignis &me );
+    void setSichtbar( bool s, bool vr );
+    void thread() override;
+    void doPublicMausEreignis( MausEreignis &me );
     void doTastaturEreignis( TastaturEreignis &te );
     void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double z );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    bool tick( double z );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 70 - 36
KSGClient/NachLogin/Editor/Karte/KartenEditor.cpp

@@ -4,22 +4,21 @@
 #include <KSGTDatei.h>
 #include <KSGTDatei.h>
 #include <Globals.h>
 #include <Globals.h>
 
 
-typedef EditorV*( *DllStart )( );
+typedef EditorV *( *DllStart )( );
 
 
 // Inhalt der KartenEditor Klasse aus KartenEditor.h
 // Inhalt der KartenEditor Klasse aus KartenEditor.h
 // Konstruktor
 // Konstruktor
-KartenEditor::KartenEditor( Schrift *schrift )
+KartenEditor::KartenEditor()
 {
 {
-    this->schrift = schrift;
-    karteRelease = initKnopf( 10, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Karte Release" );
-    shopSeite = initKnopf( 120, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Shop Seite" );
-    beschreibung = initKnopf( 230, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Beschreibung" );
-    teams = initKnopf( 340, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Teams" );
-    dateien = initKnopf( 450, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Dateien" );
-    editor = initKnopf( 560, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Editor" );
-    kaufHistorie = initKnopf( 670, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Kauf Historie" );
-    beenden = initKnopf( 790, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Beenden" );
-    laden = (Animation2D*)ladeAnimation->dublizieren();
+    karteRelease = initKnopf( 10, 10, 100, 20, Knopf::Style::Sichtbar, "Karte Release" );
+    shopSeite = initKnopf( 120, 10, 100, 20, Knopf::Style::Sichtbar, "Shop Seite" );
+    beschreibung = initKnopf( 230, 10, 100, 20, Knopf::Style::Sichtbar, "Beschreibung" );
+    teams = initKnopf( 340, 10, 100, 20, Knopf::Style::Sichtbar, "Teams" );
+    dateien = initKnopf( 450, 10, 100, 20, Knopf::Style::Sichtbar, "Dateien" );
+    editor = initKnopf( 560, 10, 100, 20, Knopf::Style::Sichtbar, "Editor" );
+    kaufHistorie = initKnopf( 670, 10, 100, 20, Knopf::Style::Sichtbar, "Kauf Historie" );
+    beenden = initKnopf( 790, 10, 100, 20, Knopf::Style::Sichtbar, "Beenden" );
+    laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     tickVal = 0;
     tickVal = 0;
@@ -41,7 +40,6 @@ KartenEditor::KartenEditor( Schrift *schrift )
 // Destruktor
 // Destruktor
 KartenEditor::~KartenEditor()
 KartenEditor::~KartenEditor()
 {
 {
-    schrift->release();
     karteRelease->release();
     karteRelease->release();
     shopSeite->release();
     shopSeite->release();
     beschreibung->release();
     beschreibung->release();
@@ -52,17 +50,41 @@ KartenEditor::~KartenEditor()
     beenden->release();
     beenden->release();
     laden->release();
     laden->release();
     if( releaseF )
     if( releaseF )
+    {
+        releaseF->warteAufThread( 10000 );
+        releaseF->ende();
         releaseF->release();
         releaseF->release();
+    }
     if( shopSeiteF )
     if( shopSeiteF )
+    {
+        shopSeiteF->warteAufThread( 10000 );
+        shopSeiteF->ende();
         shopSeiteF->release();
         shopSeiteF->release();
+    }
     if( beschreibungF )
     if( beschreibungF )
+    {
+        beschreibungF->warteAufThread( 10000 );
+        beschreibungF->ende();
         beschreibungF->release();
         beschreibungF->release();
+    }
     if( teamsF )
     if( teamsF )
+    {
+        teamsF->warteAufThread( 10000 );
+        teamsF->ende();
         teamsF->release();
         teamsF->release();
+    }
     if( dateienF )
     if( dateienF )
+    {
+        dateienF->warteAufThread( 10000 );
+        dateienF->ende();
         dateienF->release();
         dateienF->release();
+    }
     if( kaufHF )
     if( kaufHF )
+    {
+        kaufHF->warteAufThread( 10000 );
+        kaufHF->ende();
         kaufHF->release();
         kaufHF->release();
+    }
     if( editorF )
     if( editorF )
         editorF->release();
         editorF->release();
     if( editorDll )
     if( editorDll )
@@ -82,7 +104,7 @@ void KartenEditor::thread()
         run = 0;
         run = 0;
         return;
         return;
     }
     }
-    nachLogin->setEditor( editorF->getThis() );
+    nachLogin->setEditor( dynamic_cast<EditorV *>( editorF->getThis() ) );
     aktion = 9;
     aktion = 9;
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     editorF->setSichtbar();
     editorF->setSichtbar();
@@ -91,24 +113,48 @@ void KartenEditor::thread()
 void KartenEditor::setKarte( int id )
 void KartenEditor::setKarte( int id )
 {
 {
     jetzt = 0;
     jetzt = 0;
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     if( releaseF )
     if( releaseF )
+    {
+        releaseF->warteAufThread( 10000 );
+        releaseF->ende();
         releaseF->release();
         releaseF->release();
+    }
     if( shopSeiteF )
     if( shopSeiteF )
+    {
+        shopSeiteF->warteAufThread( 10000 );
+        shopSeiteF->ende();
         shopSeiteF->release();
         shopSeiteF->release();
+    }
     if( beschreibungF )
     if( beschreibungF )
+    {
+        beschreibungF->warteAufThread( 10000 );
+        beschreibungF->ende();
         beschreibungF->release();
         beschreibungF->release();
+    }
     if( teamsF )
     if( teamsF )
+    {
+        teamsF->warteAufThread( 10000 );
+        teamsF->ende();
         teamsF->release();
         teamsF->release();
+    }
     if( dateienF )
     if( dateienF )
+    {
+        dateienF->warteAufThread( 10000 );
+        dateienF->ende();
         dateienF->release();
         dateienF->release();
+    }
     if( kaufHF )
     if( kaufHF )
+    {
+        kaufHF->warteAufThread( 10000 );
+        kaufHF->ende();
         kaufHF->release();
         kaufHF->release();
+    }
     if( editorF )
     if( editorF )
         editorF->release();
         editorF->release();
     if( editorDll )
     if( editorDll )
         Framework::getDLLRegister()->releaseDLL( dllName );
         Framework::getDLLRegister()->releaseDLL( dllName );
-    releaseF = new KERelease( id, schrift );
+    releaseF = new KERelease( id );
     releaseF->setSichtbar( 1, 0 );
     releaseF->setSichtbar( 1, 0 );
     karteRelease->setAlphaFeldFarbe( 0x0000FF00 );
     karteRelease->setAlphaFeldFarbe( 0x0000FF00 );
     shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
     shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
@@ -118,11 +164,11 @@ void KartenEditor::setKarte( int id )
     editor->setAlphaFeldFarbe( 0x5500FF00 );
     editor->setAlphaFeldFarbe( 0x5500FF00 );
     kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
     kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
     jetzt = 1;
     jetzt = 1;
-    shopSeiteF = new KEShopSeite( id, schrift );
-    beschreibungF = new KEBeschreibung( id, schrift );
-    teamsF = new KETeams( id, schrift );
-    dateienF = new KEDateien( id, schrift );
-    kaufHF = new KEKaufHistorie( id, schrift );
+    shopSeiteF = new KEShopSeite( id );
+    beschreibungF = new KEBeschreibung( id );
+    teamsF = new KETeams( id );
+    dateienF = new KEDateien( id );
+    kaufHF = new KEKaufHistorie( id );
     // Editor laden
     // Editor laden
     int spielArt = infoClient->getSpielId( id );
     int spielArt = infoClient->getSpielId( id );
     KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
     KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
@@ -206,8 +252,8 @@ void KartenEditor::setKarte( int id )
                 if( editorF )
                 if( editorF )
                 {
                 {
                     editor->addStyle( Knopf::Style::Erlaubt );
                     editor->addStyle( Knopf::Style::Erlaubt );
-                    editorF->setSchrift( schrift->getThis() );
-                    editorF->setKlient( editorClient->getThis() );
+                    editorF->setUIFactory( uiFactory );
+                    editorF->setKlient( dynamic_cast<KSGClient::EditorServerClient *>( editorClient->getThis() ) );
                     editorF->setLadeAnimation( (Animation2D *)ladeAnimation->dublizieren() );
                     editorF->setLadeAnimation( (Animation2D *)ladeAnimation->dublizieren() );
                     editor->addStyle( Knopf::Style::Sichtbar );
                     editor->addStyle( Knopf::Style::Sichtbar );
                 }
                 }
@@ -221,7 +267,7 @@ void KartenEditor::setKarte( int id )
             }
             }
         }
         }
     }
     }
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
 void KartenEditor::setSichtbar( bool s )
 void KartenEditor::setSichtbar( bool s )
@@ -667,16 +713,4 @@ void KartenEditor::render( Bild &zRObj )
 bool KartenEditor::istSichtbar() const
 bool KartenEditor::istSichtbar() const
 {
 {
     return sichtbar;
     return sichtbar;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KartenEditor::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 26 - 29
KSGClient/NachLogin/Editor/Karte/KartenEditor.h

@@ -17,16 +17,15 @@ using namespace Framework;
 class KartenEditor : public Thread
 class KartenEditor : public Thread
 {
 {
 private:
 private:
-	Schrift *schrift;
-	Knopf *karteRelease;
-	Knopf *shopSeite;
-	Knopf *beschreibung;
-	Knopf *teams;
-	Knopf *dateien;
-	Knopf *editor;
-	Knopf *kaufHistorie;
-	Knopf *beenden;
-	KERelease *releaseF;
+    Knopf *karteRelease;
+    Knopf *shopSeite;
+    Knopf *beschreibung;
+    Knopf *teams;
+    Knopf *dateien;
+    Knopf *editor;
+    Knopf *kaufHistorie;
+    Knopf *beenden;
+    KERelease *releaseF;
     KEShopSeite *shopSeiteF;
     KEShopSeite *shopSeiteF;
     KEBeschreibung *beschreibungF;
     KEBeschreibung *beschreibungF;
     KETeams *teamsF;
     KETeams *teamsF;
@@ -36,29 +35,27 @@ private:
     HINSTANCE editorDll;
     HINSTANCE editorDll;
     Text dllName;
     Text dllName;
     Animation2D *laden;
     Animation2D *laden;
-	double tickVal;
-	int jetzt;
-	unsigned char alpha;
+    double tickVal;
+    int jetzt;
+    unsigned char alpha;
     unsigned char alpha2;
     unsigned char alpha2;
-	bool sichtbar;
+    bool sichtbar;
 
 
 public:
 public:
-	// Konstruktor
-	KartenEditor( Schrift *schrift );
-	// Destruktor
-	~KartenEditor();
-	// nicht constant
+    // Konstruktor
+    KartenEditor();
+    // Destruktor
+    ~KartenEditor();
+    // nicht constant
     void thread() override;
     void thread() override;
-	void setKarte( int id );
-	void setSichtbar( bool s );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    void setKarte( int id );
+    void setSichtbar( bool s );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
 };
 };
 
 
 #endif;
 #endif;

+ 14 - 28
KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.cpp

@@ -6,25 +6,24 @@
 
 
 // Inhalt der KEKaufHistorie Klasse
 // Inhalt der KEKaufHistorie Klasse
 // Konstruktor
 // Konstruktor
-KEKaufHistorie::KEKaufHistorie( int karte, Schrift *zSchrift )
+KEKaufHistorie::KEKaufHistorie( int karte )
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
     Text *kName = infoClient->getKarteName( karte );
     Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Release";
     titel += " - Release";
     if( kName )
     if( kName )
         kName->release();
         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 );
-    aktualisieren = initKnopf( 10, 10, 100, 20, zSchrift, Knopf::Style::Normal, "Aktualisieren" );
-    aktualisieren->setMausEreignis( [ this ]( void *p, void *obj, MausEreignis me ) -> bool
+    fenster = initFenster( 10, 40, 880, 550, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    aktualisieren = initKnopf( 10, 10, 100, 20, Knopf::Style::Normal, "Aktualisieren" );
+    aktualisieren->setMausEreignis( [this]( void *p, void *obj, MausEreignis me ) -> bool
     {
     {
         if( me.id == ME_RLinks && me.verarbeitet == 0 )
         if( me.id == ME_RLinks && me.verarbeitet == 0 )
             start();
             start();
         return 1;
         return 1;
     } );
     } );
-    gesammtVerkauf = initTextFeld( 120, 10, 750, 20, zSchrift, TextFeld::Style::Text, "Gesammt verkauft: " );
-    statistik = initLinienDiagramm( 10, 40, 860, 480, zSchrift, LDiag::Style::DatenRahmen, 0 );
+    gesammtVerkauf = initTextFeld( 120, 10, 750, 20, TextFeld::Style::Text, "Gesammt verkauft: " );
+    statistik = initLinienDiagramm( 10, 40, 860, 480, LDiag::Style::DatenRahmen, 0 );
     statistik->setHIntervallBreite( 36.8 );
     statistik->setHIntervallBreite( 36.8 );
     statistik->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
     statistik->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
     statistik->setRasterDicke( 1 );
     statistik->setRasterDicke( 1 );
@@ -36,9 +35,9 @@ KEKaufHistorie::KEKaufHistorie( int karte, Schrift *zSchrift )
     laden = (Animation2D *)ladeAnimation->dublizieren();
     laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
-    fenster->addMember( aktualisieren->getThis() );
-    fenster->addMember( gesammtVerkauf->getThis() );
-    fenster->addMember( statistik->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( aktualisieren->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( gesammtVerkauf->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( statistik->getThis() ) );
     animation = 0;
     animation = 0;
     tickVal = 0;
     tickVal = 0;
     sichtbar = 0;
     sichtbar = 0;
@@ -58,7 +57,6 @@ KEKaufHistorie::~KEKaufHistorie()
     gesammtVerkauf->release();
     gesammtVerkauf->release();
     fenster->release();
     fenster->release();
     laden->release();
     laden->release();
-    schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -125,13 +123,13 @@ void KEKaufHistorie::thread()
         maxS++;
         maxS++;
         statistik->addVIntervallText( 0, Text() += 0 );
         statistik->addVIntervallText( 0, Text() += 0 );
         statistik->addVIntervallText( maxS + 1, Text() += ( maxS + 1 ) );
         statistik->addVIntervallText( maxS + 1, Text() += ( maxS + 1 ) );
-        Datum * d = Framework::getDatum();
+        Datum *d = Framework::getDatum();
         d->minusTag( 30 );
         d->minusTag( 30 );
         statistik->addHIntervallText( 0, d->getDatum( "y-m-d" ) );
         statistik->addHIntervallText( 0, d->getDatum( "y-m-d" ) );
         d->plusTag( 30 );
         d->plusTag( 30 );
         statistik->addHIntervallText( anz - 1, d->getDatum( "y-m-d" ) );
         statistik->addHIntervallText( anz - 1, d->getDatum( "y-m-d" ) );
         d->release();
         d->release();
-        DiagWert * w = new DiagWert();
+        DiagWert *w = new DiagWert();
         w->farbe = 0xFF00FFFF;
         w->farbe = 0xFF00FFFF;
         w->hintergrund = 0xFF205050;
         w->hintergrund = 0xFF205050;
         w->name->setText( "Einnahmen" );
         w->name->setText( "Einnahmen" );
@@ -160,13 +158,13 @@ void KEKaufHistorie::thread()
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
 }
 }
 
 
-void KEKaufHistorie::doPublicMausEreignis( MausEreignis & me )
+void KEKaufHistorie::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !run )
     if( !run )
         fenster->doPublicMausEreignis( me );
         fenster->doPublicMausEreignis( me );
 }
 }
 
 
-void KEKaufHistorie::doTastaturEreignis( TastaturEreignis & te )
+void KEKaufHistorie::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !run )
     if( !run )
         fenster->doTastaturEreignis( te );
         fenster->doTastaturEreignis( te );
@@ -263,7 +261,7 @@ bool KEKaufHistorie::tick( double z )
     return ret || fenster->tick( z );
     return ret || fenster->tick( z );
 }
 }
 
 
-void KEKaufHistorie::render( Bild & zRObj )
+void KEKaufHistorie::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
     if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
         return;
         return;
@@ -278,16 +276,4 @@ void KEKaufHistorie::render( Bild & zRObj )
 bool KEKaufHistorie::istSichtbar() const
 bool KEKaufHistorie::istSichtbar() const
 {
 {
     return sichtbar || animation;
     return sichtbar || animation;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KEKaufHistorie::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 1 - 4
KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.h

@@ -16,7 +16,6 @@ private:
     Knopf *aktualisieren;
     Knopf *aktualisieren;
     TextFeld *gesammtVerkauf;
     TextFeld *gesammtVerkauf;
     Animation2D *laden;
     Animation2D *laden;
-    Schrift *schrift;
     bool animation;
     bool animation;
     double tickVal;
     double tickVal;
     bool sichtbar;
     bool sichtbar;
@@ -28,7 +27,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEKaufHistorie( int karte, Schrift *zSchrift );
+    KEKaufHistorie( int karte );
     // Destruktor
     // Destruktor
     ~KEKaufHistorie();
     ~KEKaufHistorie();
     // nicht constant
     // nicht constant
@@ -40,6 +39,4 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
     // constant
     // constant
     bool istSichtbar() const;
     bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };

+ 66 - 93
KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSEditor.cpp

@@ -9,7 +9,8 @@
 
 
 // Inhalt der KESSTextSeite Klasse aus KESSEditor.h
 // Inhalt der KESSTextSeite Klasse aus KESSEditor.h
 // Konstruktor
 // Konstruktor
-KESSTextSeite::KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove )
+KESSTextSeite::KESSTextSeite( Knopf *zNeueDatei, Knopf *zDateiRemove )
+    : ReferenceCounter()
 {
 {
     LTDSDatei *sd = new LTDSDatei();
     LTDSDatei *sd = new LTDSDatei();
     sd->setPfad( new Text( "data/schriften/ksgs.ltds" ) );
     sd->setPfad( new Text( "data/schriften/ksgs.ltds" ) );
@@ -23,7 +24,7 @@ KESSTextSeite::KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDate
         if( getKSGScriptEditor )
         if( getKSGScriptEditor )
         {
         {
             text = getKSGScriptEditor();
             text = getKSGScriptEditor();
-            text->setSchriftZ( ( ksgsS ? ksgsS : zSchrift )->getThis() );
+            text->setSchriftZ( dynamic_cast<Schrift *>( ( ksgsS ? ksgsS : uiFactory.initParam.schrift )->getThis() ) );
             text->setSize( 540, 510 );
             text->setSize( 540, 510 );
             text->setPosition( 220, 10 );
             text->setPosition( 220, 10 );
             text->setStyle( ZeichnungHintergrund::Style::HScroll | ZeichnungHintergrund::Style::VScroll | ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Erlaubt | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund );
             text->setStyle( ZeichnungHintergrund::Style::HScroll | ZeichnungHintergrund::Style::VScroll | ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Erlaubt | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund );
@@ -40,7 +41,7 @@ KESSTextSeite::KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDate
             text = 0;
             text = 0;
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_EDITOR_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_EDITOR_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
     }
     }
@@ -53,14 +54,13 @@ KESSTextSeite::KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDate
     }
     }
     if( ksgsS )
     if( ksgsS )
         ksgsS->release();
         ksgsS->release();
-    speichern = initKnopf( 770, 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Speichern" );
-    dateiLöschen = (Knopf *)zDateiRemove->getThis();
-    neueDatei = (Knopf *)zNeueDatei->getThis();
+    speichern = initKnopf( 770, 10, 100, 20, Knopf::Style::Sichtbar, "Speichern" );
+    dateiLöschen = dynamic_cast<Knopf *>( zDateiRemove->getThis() );
+    neueDatei = dynamic_cast<Knopf *>( zNeueDatei->getThis() );
     aktion = 0;
     aktion = 0;
     sichtbar = 0;
     sichtbar = 0;
     alpha = 0;
     alpha = 0;
     tickVal = 0;
     tickVal = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -82,7 +82,7 @@ int KESSTextSeite::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-void KESSTextSeite::setDateiText( Text * txt )
+void KESSTextSeite::setDateiText( Text *txt )
 {
 {
     text->setText( txt );
     text->setText( txt );
 }
 }
@@ -123,33 +123,33 @@ bool KESSTextSeite::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KESSTextSeite::doPublicMausEreignis( MausEreignis & me )
+void KESSTextSeite::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
     text->doPublicMausEreignis( me );
     text->doPublicMausEreignis( me );
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     speichern->doPublicMausEreignis( me );
     speichern->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 1;
         aktion = 1;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     dateiLöschen->doPublicMausEreignis( me );
     dateiLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 2;
         aktion = 2;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     neueDatei->doPublicMausEreignis( me );
     neueDatei->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 3;
         aktion = 3;
 }
 }
 
 
-void KESSTextSeite::doTastaturEreignis( TastaturEreignis & te )
+void KESSTextSeite::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
     text->doTastaturEreignis( te );
     text->doTastaturEreignis( te );
 }
 }
 
 
-void KESSTextSeite::render( Bild & zRObj )
+void KESSTextSeite::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -169,32 +169,18 @@ Text *KESSTextSeite::zDateiText() const
     return text->zText();
     return text->zText();
 }
 }
 
 
-// Reference Counting 
-KESSTextSeite *KESSTextSeite::getThis()
-{
-    ref++;
-    return this;
-}
-
-KESSTextSeite *KESSTextSeite::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der KESSBildSeite Klasse aus KESSEditor.h
 // Inhalt der KESSBildSeite Klasse aus KESSEditor.h
 // Konstruktor
 // Konstruktor
-KESSBildSeite::KESSBildSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zDateiRemove )
+KESSBildSeite::KESSBildSeite( Knopf *zNeueDatei, Knopf *zDateiRemove )
+    : ReferenceCounter()
 {
 {
-    bilder = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
+    bilder = initAuswahlListe( 220, 10, 200, 510, AuswahlListe::Style::Normal, {} );
     bildObj = initBildZ( 430, 10, 440, 440, BildZ::Style::normal | BildZ::Style::Alpha, 0 );
     bildObj = initBildZ( 430, 10, 440, 440, BildZ::Style::normal | BildZ::Style::Alpha, 0 );
-    bildLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bild Löschen" );
-    importieren = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Importieren" );
-    dateiLöschen = (Knopf *)zDateiRemove->getThis();
-    neueDatei = (Knopf *)zNeueDatei->getThis();
+    bildLöschen = initKnopf( 430, 460, 100, 20, Knopf::Style::Sichtbar, "Bild Löschen" );
+    importieren = initKnopf( 430, 490, 100, 20, Knopf::Style::Sichtbar, "Importieren" );
+    dateiLöschen = dynamic_cast<Knopf *>( zDateiRemove->getThis() );
+    neueDatei = dynamic_cast<Knopf *>( zNeueDatei->getThis() );
     importDialog = 0;
     importDialog = 0;
     importPfad = 0;
     importPfad = 0;
     aktion = 0;
     aktion = 0;
@@ -202,7 +188,6 @@ KESSBildSeite::KESSBildSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zD
     alpha = 0;
     alpha = 0;
     alpha2 = 0;
     alpha2 = 0;
     tickVal = 0;
     tickVal = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -228,9 +213,9 @@ int KESSBildSeite::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-void KESSBildSeite::setBildListe( RCArray< Text > * list )
+void KESSBildSeite::setBildListe( RCArray< Text > *list )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     Text txt = bilder->zEintrag( bilder->getAuswahl() ) ? bilder->zEintrag( bilder->getAuswahl() )->zText()->getText() : "";
     Text txt = bilder->zEintrag( bilder->getAuswahl() ) ? bilder->zEintrag( bilder->getAuswahl() )->zText()->getText() : "";
     while( bilder->getEintragAnzahl() )
     while( bilder->getEintragAnzahl() )
         bilder->removeEintrag( 0 );
         bilder->removeEintrag( 0 );
@@ -247,14 +232,14 @@ void KESSBildSeite::setBildListe( RCArray< Text > * list )
     else
     else
         bilder->deSelect();
         bilder->deSelect();
     list->release();
     list->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
-void KESSBildSeite::setBild( Bild * b )
+void KESSBildSeite::setBild( Bild *b )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     bildObj->setBild( b );
     bildObj->setBild( b );
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
 void KESSBildSeite::setSichtbar( bool s )
 void KESSBildSeite::setSichtbar( bool s )
@@ -272,7 +257,7 @@ bool KESSBildSeite::tick( double tv )
                 importPfad->release();
                 importPfad->release();
             importPfad = importDialog->getPfad();
             importPfad = importDialog->getPfad();
             importDialog = (DateiDialogTh *)importDialog->release();
             importDialog = (DateiDialogTh *)importDialog->release();
-            if( sichtbar &&importPfad )
+            if( sichtbar && importPfad )
                 aktion = 3;
                 aktion = 3;
         }
         }
     }
     }
@@ -323,7 +308,7 @@ bool KESSBildSeite::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KESSBildSeite::doPublicMausEreignis( MausEreignis & me )
+void KESSBildSeite::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -338,11 +323,11 @@ void KESSBildSeite::doPublicMausEreignis( MausEreignis & me )
     }
     }
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     dateiLöschen->doPublicMausEreignis( me );
     dateiLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 4;
         aktion = 4;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     neueDatei->doPublicMausEreignis( me );
     neueDatei->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 5;
         aktion = 5;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     importieren->doPublicMausEreignis( me );
     importieren->doPublicMausEreignis( me );
@@ -365,11 +350,11 @@ void KESSBildSeite::doPublicMausEreignis( MausEreignis & me )
     bildObj->doPublicMausEreignis( me );
     bildObj->doPublicMausEreignis( me );
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     bildLöschen->doPublicMausEreignis( me );
     bildLöschen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 2;
         aktion = 2;
 }
 }
 
 
-void KESSBildSeite::render( Bild & zRObj )
+void KESSBildSeite::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -400,21 +385,6 @@ Text *KESSBildSeite::zBildAuswahl() const
     return bilder->zEintrag( bilder->getAuswahl() )->zText();
     return bilder->zEintrag( bilder->getAuswahl() )->zText();
 }
 }
 
 
-// Reference Counting
-KESSBildSeite *KESSBildSeite::getThis()
-{
-    ref++;
-    return this;
-}
-
-KESSBildSeite *KESSBildSeite::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 bool kESSEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
 bool kESSEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
 {
 {
@@ -428,32 +398,35 @@ bool kESSEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
 
 
 // Inhalt der KESSEditor Klasse aus KESSEditor.h
 // Inhalt der KESSEditor Klasse aus KESSEditor.h
 // Konstruktor
 // Konstruktor
-KESSEditor::KESSEditor( Schrift * zSchrift )
+KESSEditor::KESSEditor()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    neueDatei = initKnopf( 0, 0, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Neue Datei" );
-    dateiLöschen = initKnopf( 0, 0, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Datei Löschen" );
-    dateien = initAuswahlListe( 10, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
-    textSeite = new KESSTextSeite( zSchrift, neueDatei, dateiLöschen );
-    bildSeite = new KESSBildSeite( zSchrift, neueDatei, dateiLöschen );
-    vorschau = initKnopf( 770, 470, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Vorschau" );
-    veröffentlichen = initKnopf( 770, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Fertig" );
-    initToolTip( veröffentlichen, "Veröffentlicht die geänderte Version der Shop-Seite.", zSchrift, hauptScreen );
-    neuDateiF = initFenster( 365, 145, 150, 120, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
+    neueDatei = initKnopf( 0, 0, 100, 20, Knopf::Style::Sichtbar, "Neue Datei" );
+    dateiLöschen = initKnopf( 0, 0, 100, 20, Knopf::Style::Sichtbar, "Datei Löschen" );
+    dateien = initAuswahlListe( 10, 10, 200, 510, AuswahlListe::Style::Normal, {} );
+    textSeite = new KESSTextSeite( neueDatei, dateiLöschen );
+    bildSeite = new KESSBildSeite( neueDatei, dateiLöschen );
+    vorschau = initKnopf( 770, 470, 100, 20, Knopf::Style::Sichtbar, "Vorschau" );
+    veröffentlichen = initKnopf( 770, 500, 100, 20, Knopf::Style::Sichtbar, "Fertig" );
+    initToolTip( veröffentlichen, "Veröffentlicht die geänderte Version der Shop-Seite." );
+    neuDateiF = initFenster( 365, 145, 150, 120, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
                              Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
                              Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
                              Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neue Datei" );
                              Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neue Datei" );
     neuDateiF->setKBgFarbe( 0xC0000000 );
     neuDateiF->setKBgFarbe( 0xC0000000 );
     neuDateiF->setSBgFarbe( 0xC0000000 );
     neuDateiF->setSBgFarbe( 0xC0000000 );
     neuDateiF->setTBgFarbe( 0xC0000000 );
     neuDateiF->setTBgFarbe( 0xC0000000 );
     neuDateiF->setClosingMe( kESSEditorNeuDateiOkME );
     neuDateiF->setClosingMe( kESSEditorNeuDateiOkME );
-    neuDateiTyp = initAuswahlBox( 10, 10, 130, 20, zSchrift, ABSTYLE, { "Ordner", "Bild (.ltdb)", "Script (.ksgs)" } );
-    neuDateiName = initTextFeld( 10, 40, 130, 20, zSchrift, TextFeld::Style::TextFeld, "Datei Name" );
-    neuDateiOk = initKnopf( 25, 70, 100, 20, zSchrift, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
+    neuDateiTyp = initAuswahlBox( 10, 10, 130, 20, ABSTYLE, { "Ordner", "Bild (.ltdb)", "Script (.ksgs)" } );
+    neuDateiName = initTextFeld( 10, 40, 130, 20, TextFeld::Style::TextFeld, "Datei Name" );
+    neuDateiOk = initKnopf( 25, 70, 100, 20, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
     neuDateiOk->setMausEreignisParameter( this );
     neuDateiOk->setMausEreignisParameter( this );
     neuDateiOk->setMausEreignis( kESSEditorNeuDateiOkME );
     neuDateiOk->setMausEreignis( kESSEditorNeuDateiOkME );
-    neuDateiF->addMember( neuDateiName->getThis() );
-    neuDateiF->addMember( neuDateiOk->getThis() );
-    neuDateiF->addMember( neuDateiTyp->getThis() );
+#pragma warning(push)
+#pragma warning(disable : 4436)
+    neuDateiF->addMember( dynamic_cast<Zeichnung *>( neuDateiName->getThis() ) );
+    neuDateiF->addMember( dynamic_cast<Zeichnung *>( neuDateiOk->getThis() ) );
+    neuDateiF->addMember( dynamic_cast<Zeichnung *>( neuDateiTyp->getThis() ) );
+#pragma warning(pop)
     aktion = 0;
     aktion = 0;
     sichtbar = 0;
     sichtbar = 0;
     alpha = 0;
     alpha = 0;
@@ -485,7 +458,7 @@ int KESSEditor::getAktion()
     return ret;
     return ret;
 }
 }
 
 
-bool KESSEditor::neuDateiOkME( MausEreignis & me )
+bool KESSEditor::neuDateiOkME( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -495,9 +468,9 @@ bool KESSEditor::neuDateiOkME( MausEreignis & me )
     return 1;
     return 1;
 }
 }
 
 
-void KESSEditor::setDateiListe( RCArray< Text > * list )
+void KESSEditor::setDateiListe( RCArray< Text > *list )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     dateien->deSelect();
     dateien->deSelect();
     while( dateien->getEintragAnzahl() )
     while( dateien->getEintragAnzahl() )
         dateien->removeEintrag( 0 );
         dateien->removeEintrag( 0 );
@@ -508,24 +481,24 @@ void KESSEditor::setDateiListe( RCArray< Text > * list )
     textSeite->setSichtbar( 0 );
     textSeite->setSichtbar( 0 );
     neuDateiF->removeStyle( Fenster::Style::Sichtbar );
     neuDateiF->removeStyle( Fenster::Style::Sichtbar );
     list->release();
     list->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
 }
 }
 
 
-void KESSEditor::setBildListe( RCArray< Text > * list )
+void KESSEditor::setBildListe( RCArray< Text > *list )
 {
 {
     textSeite->setSichtbar( 0 );
     textSeite->setSichtbar( 0 );
     bildSeite->setBildListe( list );
     bildSeite->setBildListe( list );
     bildSeite->setSichtbar( 1 );
     bildSeite->setSichtbar( 1 );
 }
 }
 
 
-void KESSEditor::setDateiText( Text * txt )
+void KESSEditor::setDateiText( Text *txt )
 {
 {
     bildSeite->setSichtbar( 0 );
     bildSeite->setSichtbar( 0 );
     textSeite->setDateiText( txt );
     textSeite->setDateiText( txt );
     textSeite->setSichtbar( 1 );
     textSeite->setSichtbar( 1 );
 }
 }
 
 
-void KESSEditor::setBild( Bild * b )
+void KESSEditor::setBild( Bild *b )
 {
 {
     bildSeite->setBild( b );
     bildSeite->setBild( b );
 }
 }
@@ -625,7 +598,7 @@ bool KESSEditor::tick( double tv )
     return ret;
     return ret;
 }
 }
 
 
-void KESSEditor::doPublicMausEreignis( MausEreignis & me )
+void KESSEditor::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -649,27 +622,27 @@ void KESSEditor::doPublicMausEreignis( MausEreignis & me )
     {
     {
         bool vera = me.verarbeitet;
         bool vera = me.verarbeitet;
         neueDatei->doPublicMausEreignis( me );
         neueDatei->doPublicMausEreignis( me );
-        if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+        if( !vera && me.verarbeitet && me.id == ME_RLinks )
             neuDateiF->addStyle( Fenster::Style::Sichtbar );
             neuDateiF->addStyle( Fenster::Style::Sichtbar );
         if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
         if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
         {
         {
             vera = me.verarbeitet;
             vera = me.verarbeitet;
             dateiLöschen->doPublicMausEreignis( me );
             dateiLöschen->doPublicMausEreignis( me );
-            if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+            if( !vera && me.verarbeitet && me.id == ME_RLinks )
                 aktion = 4;
                 aktion = 4;
         }
         }
     }
     }
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     vorschau->doPublicMausEreignis( me );
     vorschau->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 8;
         aktion = 8;
     vera = me.verarbeitet;
     vera = me.verarbeitet;
     veröffentlichen->doPublicMausEreignis( me );
     veröffentlichen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 9;
         aktion = 9;
 }
 }
 
 
-void KESSEditor::doTastaturEreignis( TastaturEreignis & te )
+void KESSEditor::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( neuDateiF->hatStyle( Fenster::Style::Sichtbar ) )
     if( neuDateiF->hatStyle( Fenster::Style::Sichtbar ) )
     {
     {
@@ -679,7 +652,7 @@ void KESSEditor::doTastaturEreignis( TastaturEreignis & te )
     textSeite->doTastaturEreignis( te );
     textSeite->doTastaturEreignis( te );
 }
 }
 
 
-void KESSEditor::render( Bild & zRObj )
+void KESSEditor::render( Bild &zRObj )
 {
 {
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha2 );
     zRObj.setAlpha( alpha2 );

+ 5 - 13
KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSEditor.h

@@ -13,7 +13,7 @@ using namespace Framework;
 
 
 class KEShopSeite;
 class KEShopSeite;
 
 
-class KESSTextSeite
+class KESSTextSeite : public virtual ReferenceCounter
 {
 {
 private:
 private:
     KSGScript::KSGScriptEditor *text;
     KSGScript::KSGScriptEditor *text;
@@ -25,11 +25,10 @@ private:
     bool sichtbar;
     bool sichtbar;
     unsigned char alpha;
     unsigned char alpha;
     double tickVal;
     double tickVal;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove );
+    KESSTextSeite( Knopf *zNeueDatei, Knopf *zDateiRemove );
     // Destruktor
     // Destruktor
     ~KESSTextSeite();
     ~KESSTextSeite();
     // nicht constant
     // nicht constant
@@ -42,12 +41,9 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
     // constant
     // constant
     Text *zDateiText() const;
     Text *zDateiText() const;
-    // Reference Counting 
-    KESSTextSeite *getThis();
-    KESSTextSeite *release();
 };
 };
 
 
-class KESSBildSeite
+class KESSBildSeite : public virtual ReferenceCounter
 {
 {
 private:
 private:
     AuswahlListe *bilder;
     AuswahlListe *bilder;
@@ -63,11 +59,10 @@ private:
     unsigned char alpha;
     unsigned char alpha;
     unsigned char alpha2;
     unsigned char alpha2;
     double tickVal;
     double tickVal;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KESSBildSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove );
+    KESSBildSeite( Knopf *zNeueDatei, Knopf *zDateiRemove );
     // Destruktor
     // Destruktor
     ~KESSBildSeite();
     ~KESSBildSeite();
     // nicht constant
     // nicht constant
@@ -81,9 +76,6 @@ public:
     // constant
     // constant
     Text *zBildImportPfad() const;
     Text *zBildImportPfad() const;
     Text *zBildAuswahl() const;
     Text *zBildAuswahl() const;
-    // Reference Counting
-    KESSBildSeite *getThis();
-    KESSBildSeite *release();
 };
 };
 
 
 class KESSEditor : public Zeichnung
 class KESSEditor : public Zeichnung
@@ -108,7 +100,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KESSEditor( Schrift *zSchrift );
+    KESSEditor();
     // Destruktor
     // Destruktor
     ~KESSEditor();
     ~KESSEditor();
     // nicht constant
     // nicht constant

+ 54 - 72
KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSVorschau.cpp

@@ -13,7 +13,7 @@ void kESSVorschauKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVa
 
 
 // Inhalt der KESSVorschauKarteScript Klasse aus KESSVorschau.h
 // Inhalt der KESSVorschauKarteScript Klasse aus KESSVorschau.h
 // Konstruktor
 // Konstruktor
-KESSVorschauKarteScript::KESSVorschauKarteScript( Schrift * zSchrift, TextFeld * zLog )
+KESSVorschauKarteScript::KESSVorschauKarteScript( TextFeld *zLog )
     : Thread()
     : Thread()
 {
 {
     ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
     ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
@@ -23,18 +23,18 @@ KESSVorschauKarteScript::KESSVorschauKarteScript( Schrift * zSchrift, TextFeld *
         if( getKSGScript )
         if( getKSGScript )
         {
         {
             fenster = getKSGScript();
             fenster = getKSGScript();
-            fenster->setSchriftZ( zSchrift->getThis() );
+            fenster->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
             fenster->setSize( 555, 380 );
             fenster->setSize( 555, 380 );
-            fenster->setRückrufParam( this );
-            fenster->setRückrufFunktion( kESSVorschauKSGSAktion );
-            fenster->setLog( (TextFeld *)zLog->getThis() );
+            fenster->setCallbackParam( this );
+            fenster->setCallbackFunktion( kESSVorschauKSGSAktion );
+            fenster->setLog( dynamic_cast<TextFeld *>( zLog->getThis() ) );
         }
         }
         else
         else
         {
         {
             fenster = 0;
             fenster = 0;
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
     }
     }
@@ -67,7 +67,7 @@ KESSVorschauKarteScript::~KESSVorschauKarteScript()
 {
 {
     if( fenster )
     if( fenster )
     {
     {
-        fenster->zurücksetzen();
+        fenster->reset();
         fenster->release();
         fenster->release();
     }
     }
     ram->release();
     ram->release();
@@ -120,12 +120,12 @@ void KESSVorschauKarteScript::ladeKarteSeite( char *pfad )
     start();
     start();
 }
 }
 
 
-void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
 {
     KSGSVariable *befehl = parameter->z( 0 );
     KSGSVariable *befehl = parameter->z( 0 );
     if( !befehl )
     if( !befehl )
         return;
         return;
-    Text * b = befehl->getText();
+    Text *b = befehl->getText();
     if( !b )
     if( !b )
         return;
         return;
     if( b->istGleich( "GetBesitzStatus" ) )
     if( b->istGleich( "GetBesitzStatus" ) )
@@ -141,7 +141,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -154,7 +154,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -171,7 +171,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                               new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                              "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                        "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
             }
             }
         }
         }
@@ -190,7 +190,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -209,7 +209,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -227,7 +227,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -240,7 +240,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -254,7 +254,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -265,7 +265,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                               new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                              "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                        "Sie könnte eventuell nicht richtig funktionieren." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
             }
             }
             else
             else
@@ -279,7 +279,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
                     else
                     else
                         p += 6;
                         p += 6;
                     Text nn = Text( pf->getText() ) + "/" + (const char *)( n->getText() + p );
                     Text nn = Text( pf->getText() ) + "/" + (const char *)( n->getText() + p );
-                    Bild * b = bilder->get( nn );
+                    Bild *b = bilder->get( nn );
                     if( b )
                     if( b )
                     {
                     {
                         KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
                         KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
@@ -289,7 +289,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
                         {
                         {
                             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                           new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
                                                                           new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
-                                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                           new Text( "Ok" ), 0 );
                                                                           new Text( "Ok" ), 0 );
                             b->release();
                             b->release();
                         }
                         }
@@ -302,7 +302,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
                 {
                 {
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                   new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                                   new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                                  "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                            "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                 }
                 }
             }
             }
@@ -316,7 +316,7 @@ void KESSVorschauKarteScript::ksgsAktion( RCArray< KSGSVariable > * parameter, K
     }
     }
 }
 }
 
 
-void KESSVorschauKarteScript::doPublicMausEreignis( MausEreignis & me )
+void KESSVorschauKarteScript::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -326,7 +326,7 @@ void KESSVorschauKarteScript::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void KESSVorschauKarteScript::doTastaturEreignis( TastaturEreignis & te )
+void KESSVorschauKarteScript::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( fenster )
     if( fenster )
         fenster->doTastaturEreignis( te );
         fenster->doTastaturEreignis( te );
@@ -343,7 +343,7 @@ bool KESSVorschauKarteScript::tick( double zeit )
             alpha -= (unsigned char)( zeit * 150 );
             alpha -= (unsigned char)( zeit * 150 );
         rend = 1;
         rend = 1;
     }
     }
-    if( sichtbar &&alpha < 255 )
+    if( sichtbar && alpha < 255 )
     {
     {
         if( alpha + zeit * 150 > 255 )
         if( alpha + zeit * 150 > 255 )
             alpha = 255;
             alpha = 255;
@@ -354,7 +354,7 @@ bool KESSVorschauKarteScript::tick( double zeit )
     return rend;
     return rend;
 }
 }
 
 
-void KESSVorschauKarteScript::render( Bild & zRObj )
+void KESSVorschauKarteScript::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
         return;
         return;
@@ -369,13 +369,13 @@ void KESSVorschauKarteScript::render( Bild & zRObj )
 
 
 // Inhalt der KESSVorschauKarte Klasse aus KESSVorschau.h
 // Inhalt der KESSVorschauKarte Klasse aus KESSVorschau.h
 // Konstruktor
 // Konstruktor
-KESSVorschauKarte::KESSVorschauKarte( Schrift * schrift )
+KESSVorschauKarte::KESSVorschauKarte()
+    : ReferenceCounter()
 {
 {
-    auswählen = initKnopf( 173, 73, 22, 22, 0, 0, "" );
+    auswählen = initKnopf( 173, 73, 22, 22, 0, "" );
     auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
     auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
-    initToolTip( auswählen, "Karte auswählen.", schrift, hauptScreen );
-    schrift->release();
+    initToolTip( auswählen, "Karte auswählen." );
     auswählen->setRahmenBreite( 1 );
     auswählen->setRahmenBreite( 1 );
     hintergrund = 0;
     hintergrund = 0;
     ausgewählt = new AlphaFeld();
     ausgewählt = new AlphaFeld();
@@ -389,7 +389,6 @@ KESSVorschauKarte::KESSVorschauKarte( Schrift * schrift )
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
     ausw = 0;
     ausw = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -413,11 +412,11 @@ void KESSVorschauKarte::ladeKarte( char *pfad )
     datei->release();
     datei->release();
 }
 }
 
 
-bool KESSVorschauKarte::doPublicMausEreignis( MausEreignis & me )
+bool KESSVorschauKarte::doPublicMausEreignis( MausEreignis &me )
 {
 {
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     auswählen->doPublicMausEreignis( me );
     auswählen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         ausw = 1;
         ausw = 1;
         return 1;
         return 1;
@@ -453,7 +452,7 @@ bool KESSVorschauKarte::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void KESSVorschauKarte::render( Bild & zRObj )
+void KESSVorschauKarte::render( Bild &zRObj )
 {
 {
     ram->render( zRObj );
     ram->render( zRObj );
     if( !zRObj.setDrawOptions( ram->getX(), ram->getY(), 200, 100 ) )
     if( !zRObj.setDrawOptions( ram->getX(), ram->getY(), 200, 100 ) )
@@ -465,43 +464,27 @@ void KESSVorschauKarte::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// Reference Counting
-KESSVorschauKarte * KESSVorschauKarte::getThis()
-{
-    ref++;
-    return this;
-}
-
-KESSVorschauKarte *KESSVorschauKarte::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der KESSVorschau Klasse aus KESSVorschau.h
 // Inhalt der KESSVorschau Klasse aus KESSVorschau.h
 // Konstruktor
 // Konstruktor
-KESSVorschau::KESSVorschau( Schrift * zSchrift )
+KESSVorschau::KESSVorschau()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift->getThis() );
-    log = initTextFeld( 10, 400, 860, 90, zSchrift, TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt, "Log:\n" );
-    script = new KESSVorschauKarteScript( zSchrift, log );
-    karte = new KESSVorschauKarte( zSchrift->getThis() );
-    beenden = initKnopf( 10, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Zurück" );
-    besitztTestVersion = initAuswahlBox( 10, 120, 200, 20, zSchrift, ABSTYLE, { "Besitzt Testversion nicht", "Besitzt Testversion" } );
-    spieleVerbleibend = initTextFeld( 110, 150, 100, 20, zSchrift, TextFeld::Style::TextFeld, "0" );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
+    log = initTextFeld( 10, 400, 860, 90, TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt, "Log:\n" );
+    script = new KESSVorschauKarteScript( log );
+    karte = new KESSVorschauKarte();
+    beenden = initKnopf( 10, 500, 100, 20, Knopf::Style::Sichtbar, "Zurück" );
+    besitztTestVersion = initAuswahlBox( 10, 120, 200, 20, ABSTYLE, { "Besitzt Testversion nicht", "Besitzt Testversion" } );
+    spieleVerbleibend = initTextFeld( 110, 150, 100, 20, TextFeld::Style::TextFeld, "0" );
     spieleVerbleibend->setTastaturEreignis( _nurNummernTE );
     spieleVerbleibend->setTastaturEreignis( _nurNummernTE );
-    vvErwerbbar = initAuswahlBox( 10, 180, 200, 20, zSchrift, ABSTYLE, { "Vollversion erwerbbar", "Vollversion nicht erwerbbar" } );
-    tvErwerbbar = initAuswahlBox( 10, 210, 200, 20, zSchrift, ABSTYLE, { "Testversion erwerbbar", "Testversion nicht erwerbbar" } );
-    vvPreis = initTextFeld( 110, 240, 100, 20, zSchrift, TextFeld::Style::TextFeld, "0" );
+    vvErwerbbar = initAuswahlBox( 10, 180, 200, 20, ABSTYLE, { "Vollversion erwerbbar", "Vollversion nicht erwerbbar" } );
+    tvErwerbbar = initAuswahlBox( 10, 210, 200, 20, ABSTYLE, { "Testversion erwerbbar", "Testversion nicht erwerbbar" } );
+    vvPreis = initTextFeld( 110, 240, 100, 20, TextFeld::Style::TextFeld, "0" );
     vvPreis->setTastaturEreignis( _nurNummernTE );
     vvPreis->setTastaturEreignis( _nurNummernTE );
-    tvPreis = initTextFeld( 110, 270, 100, 20, zSchrift, TextFeld::Style::TextFeld, "0" );
+    tvPreis = initTextFeld( 110, 270, 100, 20, TextFeld::Style::TextFeld, "0" );
     tvPreis->setTastaturEreignis( _nurNummernTE );
     tvPreis->setTastaturEreignis( _nurNummernTE );
-    kupfer = initTextFeld( 110, 300, 100, 20, zSchrift, TextFeld::Style::TextFeld, "0" );
+    kupfer = initTextFeld( 110, 300, 100, 20, TextFeld::Style::TextFeld, "0" );
     pfad = "";
     pfad = "";
     alpha = 0;
     alpha = 0;
     sichtbar = 0;
     sichtbar = 0;
@@ -513,7 +496,6 @@ KESSVorschau::KESSVorschau( Schrift * zSchrift )
 // Destruktor
 // Destruktor
 KESSVorschau::~KESSVorschau()
 KESSVorschau::~KESSVorschau()
 {
 {
-    schrift->release();
     tr->release();
     tr->release();
     script->release();
     script->release();
     karte->release();
     karte->release();
@@ -547,7 +529,7 @@ void KESSVorschau::setSichtbar( bool sicht )
     sichtbar = sicht;
     sichtbar = sicht;
 }
 }
 
 
-void KESSVorschau::doPublicMausEreignis( MausEreignis & me )
+void KESSVorschau::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
@@ -578,7 +560,7 @@ void KESSVorschau::doPublicMausEreignis( MausEreignis & me )
         script->ladeKarteSeite( pfad );
         script->ladeKarteSeite( pfad );
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     beenden->doPublicMausEreignis( me );
     beenden->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
         aktion = 1;
         aktion = 1;
     vvPreis->doPublicMausEreignis( me );
     vvPreis->doPublicMausEreignis( me );
     tvPreis->doPublicMausEreignis( me );
     tvPreis->doPublicMausEreignis( me );
@@ -587,21 +569,21 @@ void KESSVorschau::doPublicMausEreignis( MausEreignis & me )
     log->doPublicMausEreignis( me );
     log->doPublicMausEreignis( me );
     if( paramUpdate )
     if( paramUpdate )
     {
     {
-        script->setScriptParams( besitztTestVersion->getAuswahl() == 1, (int)* spieleVerbleibend->zText(), vvErwerbbar->getAuswahl() == 0,
-                                 tvErwerbbar->getAuswahl() == 0, (int)* vvPreis->zText(), (int)* tvPreis->zText(), (int)* kupfer->zText() );
+        script->setScriptParams( besitztTestVersion->getAuswahl() == 1, (int)*spieleVerbleibend->zText(), vvErwerbbar->getAuswahl() == 0,
+                                 tvErwerbbar->getAuswahl() == 0, (int)*vvPreis->zText(), (int)*tvPreis->zText(), (int)*kupfer->zText() );
     }
     }
 }
 }
 
 
-void KESSVorschau::doTastaturEreignis( TastaturEreignis & te )
+void KESSVorschau::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar )
     if( !sichtbar )
         return;
         return;
-    if( !te.verarbeitet &&te.id == TE_Release && te.taste == T_Enter )
+    if( !te.verarbeitet && te.id == TE_Release && te.taste == T_Enter )
     {
     {
         if( spieleVerbleibend->hatStyle( TextFeld::Style::Fokus ) || vvPreis->hatStyle( TextFeld::Style::Fokus ) || tvPreis->hatStyle( TextFeld::Style::Fokus ) || kupfer->hatStyle( TextFeld::Style::Fokus ) )
         if( spieleVerbleibend->hatStyle( TextFeld::Style::Fokus ) || vvPreis->hatStyle( TextFeld::Style::Fokus ) || tvPreis->hatStyle( TextFeld::Style::Fokus ) || kupfer->hatStyle( TextFeld::Style::Fokus ) )
         {
         {
-            script->setScriptParams( besitztTestVersion->getAuswahl() == 1, (int)* spieleVerbleibend->zText(), vvErwerbbar->getAuswahl() == 0,
-                                     tvErwerbbar->getAuswahl() == 0, (int)* vvPreis->zText(), (int)* tvPreis->zText(), (int)* kupfer->zText() );
+            script->setScriptParams( besitztTestVersion->getAuswahl() == 1, (int)*spieleVerbleibend->zText(), vvErwerbbar->getAuswahl() == 0,
+                                     tvErwerbbar->getAuswahl() == 0, (int)*vvPreis->zText(), (int)*tvPreis->zText(), (int)*kupfer->zText() );
         }
         }
     }
     }
     script->doTastaturEreignis( te );
     script->doTastaturEreignis( te );
@@ -649,7 +631,7 @@ bool KESSVorschau::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void KESSVorschau::render( Bild & zRObj )
+void KESSVorschau::render( Bild &zRObj )
 {
 {
     zRObj.setAlpha( alpha );
     zRObj.setAlpha( alpha );
     script->render( zRObj );
     script->render( zRObj );

+ 4 - 9
KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSVorschau.h

@@ -31,7 +31,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KESSVorschauKarteScript( Schrift *zSchrift, TextFeld *zLog );
+    KESSVorschauKarteScript( TextFeld *zLog );
     // Destruktor
     // Destruktor
     ~KESSVorschauKarteScript();
     ~KESSVorschauKarteScript();
     // nicht constant
     // nicht constant
@@ -45,7 +45,7 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
 };
 };
 
 
-class KESSVorschauKarte
+class KESSVorschauKarte : public virtual ReferenceCounter
 {
 {
 private:
 private:
     Knopf *auswählen;
     Knopf *auswählen;
@@ -54,11 +54,10 @@ private:
     LRahmen *ram;
     LRahmen *ram;
     bool ausw;
     bool ausw;
     bool rend;
     bool rend;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KESSVorschauKarte( Schrift *schrift );
+    KESSVorschauKarte();
     // Destruktor
     // Destruktor
     ~KESSVorschauKarte();
     ~KESSVorschauKarte();
     // nicht constant
     // nicht constant
@@ -66,15 +65,11 @@ public:
     bool doPublicMausEreignis( MausEreignis &me );
     bool doPublicMausEreignis( MausEreignis &me );
     bool tick( double zeit );
     bool tick( double zeit );
     void render( Bild &zRObj );
     void render( Bild &zRObj );
-    // Reference Counting
-    KESSVorschauKarte *getThis();
-    KESSVorschauKarte *release();
 };
 };
 
 
 class KESSVorschau : public Zeichnung
 class KESSVorschau : public Zeichnung
 {
 {
 private:
 private:
-    Schrift *schrift;
     TextRenderer *tr;
     TextRenderer *tr;
     KESSVorschauKarteScript *script;
     KESSVorschauKarteScript *script;
     KESSVorschauKarte *karte;
     KESSVorschauKarte *karte;
@@ -96,7 +91,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KESSVorschau( Schrift *zSchrift );
+    KESSVorschau();
     // Destruktor
     // Destruktor
     ~KESSVorschau();
     ~KESSVorschau();
     // nicht constant
     // nicht constant

+ 8 - 22
KSGClient/NachLogin/Editor/Karte/ShopSeite/KEShopSeite.cpp

@@ -7,23 +7,22 @@
 
 
 // Inhalt der KEShopSeite Klasse aus KEShopSeite.h
 // Inhalt der KEShopSeite Klasse aus KEShopSeite.h
 // Konstruktor
 // Konstruktor
-KEShopSeite::KEShopSeite( int karte, Schrift *zSchrift )
+KEShopSeite::KEShopSeite( int karte )
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
     Text *kName = infoClient->getKarteName( karte );
     Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Shop Seite";
     titel += " - Shop Seite";
     if( kName )
     if( kName )
         kName->release();
         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();
+    fenster = initFenster( 10, 40, 880, 550, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    editor = new KESSEditor();
+    vorschau = new KESSVorschau();
+    laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
-    fenster->addMember( editor->getThis() );
-    fenster->addMember( vorschau->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( editor->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( vorschau->getThis() ) );
     animation = 0;
     animation = 0;
     tickVal = 0;
     tickVal = 0;
     sichtbar = 0;
     sichtbar = 0;
@@ -43,7 +42,6 @@ KEShopSeite::~KEShopSeite()
     editor->release();
     editor->release();
     vorschau->release();
     vorschau->release();
     laden->release();
     laden->release();
-    schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -135,7 +133,7 @@ void KEShopSeite::thread()
         }
         }
         else
         else
         {
         {
-            if( !editorClient->ssOrdnerÖffnen(zName->getText() ) )
+            if( !editorClient->ssOrdnerÖffnen( zName->getText() ) )
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 break;
                 break;
@@ -406,16 +404,4 @@ void KEShopSeite::render( Bild &zRObj )
 bool KEShopSeite::istSichtbar() const
 bool KEShopSeite::istSichtbar() const
 {
 {
     return sichtbar || animation;
     return sichtbar || animation;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KEShopSeite::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 1 - 4
KSGClient/NachLogin/Editor/Karte/ShopSeite/KEShopSeite.h

@@ -14,7 +14,6 @@ class KEShopSeite : public Thread
 private:
 private:
     Fenster *fenster;
     Fenster *fenster;
     Animation2D *laden;
     Animation2D *laden;
-    Schrift *schrift;
     KESSEditor *editor;
     KESSEditor *editor;
     KESSVorschau *vorschau;
     KESSVorschau *vorschau;
     int aktion;
     int aktion;
@@ -30,7 +29,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KEShopSeite( int karte, Schrift *zSchrift );
+    KEShopSeite( int karte );
     // Destruktor
     // Destruktor
     ~KEShopSeite();
     ~KEShopSeite();
     // nicht constant
     // nicht constant
@@ -42,8 +41,6 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
     // constant
     // constant
     bool istSichtbar() const;
     bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };
 
 
 #endif
 #endif

+ 37 - 51
KSGClient/NachLogin/Editor/Karte/Teams/KETeams.cpp

@@ -5,88 +5,87 @@
 bool KETNachME( void *p, void *obj, MausEreignis me )
 bool KETNachME( void *p, void *obj, MausEreignis me )
 {
 {
     if( p )
     if( p )
-        ( (KETeams*)p )->nachME( obj, me );
+        ( (KETeams *)p )->nachME( obj, me );
     return 1;
     return 1;
 }
 }
 
 
 bool KETNachTE( void *p, void *obj, TastaturEreignis te )
 bool KETNachTE( void *p, void *obj, TastaturEreignis te )
 {
 {
     if( p )
     if( p )
-        ( (KETeams*)p )->nachTE( obj, te );
+        ( (KETeams *)p )->nachTE( obj, te );
     return 1;
     return 1;
 }
 }
 
 
 // Inhalt der KETeams Klasse aus KETeams.h
 // Inhalt der KETeams Klasse aus KETeams.h
 // Konstruktor
 // Konstruktor
-KETeams::KETeams( int karte, Schrift *zSchrift )
+KETeams::KETeams( int karte )
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
     Text *kName = infoClient->getKarteName( karte );
     Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Teams";
     titel += " - Teams";
     if( kName )
     if( kName )
         kName->release();
         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 );
-    teams = initAuswahlListe( 10, 10, 265, 510, zSchrift, AuswahlListe::Style::Normal, {} );
+    fenster = initFenster( 10, 40, 880, 550, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    teams = initAuswahlListe( 10, 10, 265, 510, AuswahlListe::Style::Normal, {} );
     teams->setNMausEreignisParameter( this );
     teams->setNMausEreignisParameter( this );
     teams->setNMausEreignis( KETNachME );
     teams->setNMausEreignis( KETNachME );
-    tName = initTextFeld( 285, 10, 150, 20, zSchrift, TextFeld::Style::TextFeld & ~TextFeld::Style::Erlaubt, "Team Name" );
-    initToolTip( tName, "Name des Teams ändern", zSchrift, hauptScreen );
+    tName = initTextFeld( 285, 10, 150, 20, TextFeld::Style::TextFeld & ~TextFeld::Style::Erlaubt, "Team Name" );
+    initToolTip( tName, "Name des Teams ändern" );
     tName->setNTastaturEreignisParameter( this );
     tName->setNTastaturEreignisParameter( this );
     tName->setNTastaturEreignis( KETNachTE );
     tName->setNTastaturEreignis( KETNachTE );
-    tFarbe = initTextFeld( 285, 40, 150, 20, zSchrift, TextFeld::Style::TextFeld & ~TextFeld::Style::Erlaubt, "Team Farbe" );
-    initToolTip( tFarbe, "Farbe des Teams ändern", zSchrift, hauptScreen );
+    tFarbe = initTextFeld( 285, 40, 150, 20, TextFeld::Style::TextFeld & ~TextFeld::Style::Erlaubt, "Team Farbe" );
+    initToolTip( tFarbe, "Farbe des Teams ändern" );
     tFarbe->setTastaturEreignis( _nurHexTE );
     tFarbe->setTastaturEreignis( _nurHexTE );
     tFarbe->setNTastaturEreignisParameter( this );
     tFarbe->setNTastaturEreignisParameter( this );
     tFarbe->setNTastaturEreignis( KETNachTE );
     tFarbe->setNTastaturEreignis( KETNachTE );
     tFarbeV = initZeichnungHintergrund( 285, 70, 150, 20, ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Hintergrund, 0 );
     tFarbeV = initZeichnungHintergrund( 285, 70, 150, 20, ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Hintergrund, 0 );
-    tNeu = initKnopf( 285, 100, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Neues Team" );
+    tNeu = initKnopf( 285, 100, 150, 20, Knopf::Style::Sichtbar, "Neues Team" );
     tNeu->setNMausEreignisParameter( this );
     tNeu->setNMausEreignisParameter( this );
     tNeu->setNMausEreignis( KETNachME );
     tNeu->setNMausEreignis( KETNachME );
-    tLöschen = initKnopf( 285, 130, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Team remove" );
+    tLöschen = initKnopf( 285, 130, 150, 20, Knopf::Style::Sichtbar, "Team remove" );
     tLöschen->removeStyle( Knopf::Style::Erlaubt );
     tLöschen->removeStyle( Knopf::Style::Erlaubt );
     tLöschen->setNMausEreignisParameter( this );
     tLöschen->setNMausEreignisParameter( this );
     tLöschen->setNMausEreignis( KETNachME );
     tLöschen->setNMausEreignis( KETNachME );
-    spieler = initAuswahlListe( 445, 10, 265, 510, zSchrift, AuswahlListe::Style::Normal & ~AuswahlListe::Style::Erlaubt, {} );
+    spieler = initAuswahlListe( 445, 10, 265, 510, AuswahlListe::Style::Normal & ~AuswahlListe::Style::Erlaubt, {} );
     spieler->setNMausEreignisParameter( this );
     spieler->setNMausEreignisParameter( this );
     spieler->setNMausEreignis( KETNachME );
     spieler->setNMausEreignis( KETNachME );
-    sFarbe = initTextFeld( 720, 10, 150, 20, zSchrift, TextFeld::Style::TextFeld & ~TextFeld::Style::Erlaubt, "Spieler Farbe" );
-    initToolTip( sFarbe, "Farbe des Spielers ändern", zSchrift, hauptScreen );
+    sFarbe = initTextFeld( 720, 10, 150, 20, TextFeld::Style::TextFeld & ~TextFeld::Style::Erlaubt, "Spieler Farbe" );
+    initToolTip( sFarbe, "Farbe des Spielers ändern" );
     sFarbe->setTastaturEreignis( _nurHexTE );
     sFarbe->setTastaturEreignis( _nurHexTE );
     sFarbe->setNTastaturEreignisParameter( this );
     sFarbe->setNTastaturEreignisParameter( this );
     sFarbe->setNTastaturEreignis( KETNachTE );
     sFarbe->setNTastaturEreignis( KETNachTE );
     sFarbeV = initZeichnungHintergrund( 720, 40, 150, 20, ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Hintergrund, 0 );
     sFarbeV = initZeichnungHintergrund( 720, 40, 150, 20, ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Hintergrund, 0 );
-    sNeu = initKnopf( 720, 70, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Neuer Spieler" );
+    sNeu = initKnopf( 720, 70, 150, 20, Knopf::Style::Sichtbar, "Neuer Spieler" );
     sNeu->removeStyle( Knopf::Style::Erlaubt );
     sNeu->removeStyle( Knopf::Style::Erlaubt );
     sNeu->setNMausEreignisParameter( this );
     sNeu->setNMausEreignisParameter( this );
     sNeu->setNMausEreignis( KETNachME );
     sNeu->setNMausEreignis( KETNachME );
-    sLöschen = initKnopf( 720, 100, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Spieler remove" );
+    sLöschen = initKnopf( 720, 100, 150, 20, Knopf::Style::Sichtbar, "Spieler remove" );
     sLöschen->removeStyle( Knopf::Style::Erlaubt );
     sLöschen->removeStyle( Knopf::Style::Erlaubt );
     sLöschen->setNMausEreignisParameter( this );
     sLöschen->setNMausEreignisParameter( this );
     sLöschen->setNMausEreignis( KETNachME );
     sLöschen->setNMausEreignis( KETNachME );
-    abbrechen = initKnopf( 720, 470, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Abbrechen" );
-    initToolTip( abbrechen, "Verwirft alle änderungen an den Team Einstellungen", zSchrift, hauptScreen );
+    abbrechen = initKnopf( 720, 470, 150, 20, Knopf::Style::Sichtbar, "Abbrechen" );
+    initToolTip( abbrechen, "Verwirft alle änderungen an den Team Einstellungen" );
     abbrechen->setNMausEreignisParameter( this );
     abbrechen->setNMausEreignisParameter( this );
     abbrechen->setNMausEreignis( KETNachME );
     abbrechen->setNMausEreignis( KETNachME );
-    speichern = initKnopf( 720, 500, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Speichern" );
-    initToolTip( speichern, "Speichert alle Änderungen an den Team Einstellungen", zSchrift, hauptScreen );
+    speichern = initKnopf( 720, 500, 150, 20, Knopf::Style::Sichtbar, "Speichern" );
+    initToolTip( speichern, "Speichert alle Änderungen an den Team Einstellungen" );
     speichern->setNMausEreignisParameter( this );
     speichern->setNMausEreignisParameter( this );
     speichern->setNMausEreignis( KETNachME );
     speichern->setNMausEreignis( KETNachME );
-    fenster->addMember( teams->getThis() );
-    fenster->addMember( tName->getThis() );
-    fenster->addMember( tFarbe->getThis() );
-    fenster->addMember( tFarbeV->getThis() );
-    fenster->addMember( tNeu->getThis() );
-    fenster->addMember( tLöschen->getThis() );
-    fenster->addMember( spieler->getThis() );
-    fenster->addMember( sFarbe->getThis() );
-    fenster->addMember( sFarbeV->getThis() );
-    fenster->addMember( sNeu->getThis() );
-    fenster->addMember( sLöschen->getThis() );
-    fenster->addMember( abbrechen->getThis() );
-    fenster->addMember( speichern->getThis() );
-    laden = (Animation2D*)ladeAnimation->dublizieren();
+    fenster->addMember( dynamic_cast<Zeichnung *>( teams->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( tName->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( tFarbe->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( tFarbeV->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( tNeu->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( tLöschen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( spieler->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( sFarbe->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( sFarbeV->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( sNeu->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( sLöschen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( abbrechen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( speichern->getThis() ) );
+    laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 425, 275 );
     laden->setPosition( 425, 275 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     sts = new SpielerTeamStruktur();
     sts = new SpielerTeamStruktur();
@@ -106,7 +105,6 @@ KETeams::~KETeams()
 {
 {
     fenster->release();
     fenster->release();
     laden->release();
     laden->release();
-    schrift->release();
     teams->release();
     teams->release();
     tName->release();
     tName->release();
     tFarbe->release();
     tFarbe->release();
@@ -128,7 +126,7 @@ void KETeams::updateGUI()
 {
 {
     Text *teamAusw = teams->zEintrag( teams->getAuswahl() ) ? teams->zEintrag( teams->getAuswahl() )->getText() : 0;
     Text *teamAusw = teams->zEintrag( teams->getAuswahl() ) ? teams->zEintrag( teams->getAuswahl() )->getText() : 0;
     Text *spielerAusw = spieler->zEintrag( spieler->getAuswahl() ) ? spieler->zEintrag( spieler->getAuswahl() )->getText() : 0;
     Text *spielerAusw = spieler->zEintrag( spieler->getAuswahl() ) ? spieler->zEintrag( spieler->getAuswahl() )->getText() : 0;
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     teams->deSelect();
     teams->deSelect();
     spieler->deSelect();
     spieler->deSelect();
     while( teams->getEintragAnzahl() )
     while( teams->getEintragAnzahl() )
@@ -172,7 +170,7 @@ void KETeams::updateGUI()
     sts->spielerAnzahl = 0;
     sts->spielerAnzahl = 0;
     for( int i = 0; i < sts->teamAnzahl; i++ )
     for( int i = 0; i < sts->teamAnzahl; i++ )
         sts->spielerAnzahl += sts->teamSize->get( i );
         sts->spielerAnzahl += sts->teamSize->get( i );
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
     bool sAusw = spieler->zEintrag( spieler->getAuswahl() ) != 0;
     bool sAusw = spieler->zEintrag( spieler->getAuswahl() ) != 0;
     tName->setStyle( TextFeld::Style::Erlaubt, tausw );
     tName->setStyle( TextFeld::Style::Erlaubt, tausw );
     tFarbe->setStyle( TextFeld::Style::Erlaubt, tausw );
     tFarbe->setStyle( TextFeld::Style::Erlaubt, tausw );
@@ -222,7 +220,7 @@ void KETeams::nachME( void *obj, MausEreignis &me )
                 }
                 }
             }
             }
         }
         }
-        sts->teamName->set( new Text( (char*)tn ), sts->teamAnzahl );
+        sts->teamName->set( new Text( (char *)tn ), sts->teamAnzahl );
         sts->teamAnzahl++;
         sts->teamAnzahl++;
         updateGUI();
         updateGUI();
     }
     }
@@ -453,16 +451,4 @@ void KETeams::render( Bild &zRObj )
 bool KETeams::istSichtbar() const
 bool KETeams::istSichtbar() const
 {
 {
     return sichtbar || animation;
     return sichtbar || animation;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KETeams::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 1 - 4
KSGClient/NachLogin/Editor/Karte/Teams/KETeams.h

@@ -14,7 +14,6 @@ class KETeams : public Thread
 private:
 private:
     Fenster *fenster;
     Fenster *fenster;
     Animation2D *laden;
     Animation2D *laden;
-    Schrift *schrift;
     AuswahlListe *teams;
     AuswahlListe *teams;
     TextFeld *tName;
     TextFeld *tName;
     TextFeld *tFarbe;
     TextFeld *tFarbe;
@@ -44,7 +43,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KETeams( int karte, Schrift *zSchrift );
+    KETeams( int karte );
     // Destruktor
     // Destruktor
     ~KETeams();
     ~KETeams();
     // nicht constant
     // nicht constant
@@ -58,6 +57,4 @@ public:
     void render( Bild &zRObj );
     void render( Bild &zRObj );
     // constant
     // constant
     bool istSichtbar() const;
     bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };

+ 27 - 42
KSGClient/NachLogin/Einstellungen/Einstellungen.cpp

@@ -7,9 +7,10 @@
 
 
 // Inhalt der Einstellungen Klasse aus Einstellungen.h
 // Inhalt der Einstellungen Klasse aus Einstellungen.h
 // Konstruktor
 // Konstruktor
-Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF )
+Einstellungen::Einstellungen( Fenster *zF )
+    : ReferenceCounter()
 {
 {
-    f = initFenster( zF->getBreite() / 2 - 250, zF->getHeight() / 2 - 250, 500, 500, zSchrift,
+    f = initFenster( zF->getBreite() / 2 - 250, zF->getHeight() / 2 - 250, 500, 500,
                      Fenster::Style::normal | Fenster::Style::BodyHAlpha | Fenster::Style::BodyHintergrund |
                      Fenster::Style::normal | Fenster::Style::BodyHAlpha | Fenster::Style::BodyHintergrund |
                      Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha, "Einstellungen" );
                      Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha, "Einstellungen" );
     f->removeStyle( Fenster::Style::Sichtbar );
     f->removeStyle( Fenster::Style::Sichtbar );
@@ -18,9 +19,9 @@ Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF )
     f->setSBgFarbe( 0xF0000000 );
     f->setSBgFarbe( 0xF0000000 );
     f->setClosingMeParam( this );
     f->setClosingMeParam( this );
     f->setClosingMe( einstellungenSchließenME );
     f->setClosingMe( einstellungenSchließenME );
-    TextFeld *gat = initTextFeld( 5, 5, 300, 20, zSchrift, TextFeld::Style::Text, "Grafik Engine (Neustart erforderlich)" );
+    TextFeld *gat = initTextFeld( 5, 5, 300, 20, TextFeld::Style::Text, "Grafik Engine (Neustart erforderlich)" );
     f->addMember( gat );
     f->addMember( gat );
-    AuswahlBox *graphicAPI = initAuswahlBox( 5, 25, 100, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, { "Aktuellste", "DirectX 9" } );
+    AuswahlBox *graphicAPI = initAuswahlBox( 5, 25, 100, 20, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, { "Aktuellste", "DirectX 9" } );
     if( DirectX11::isAvailable() )
     if( DirectX11::isAvailable() )
         graphicAPI->addEintrag( "DirectX 11" );
         graphicAPI->addEintrag( "DirectX 11" );
     if( DirectX12::isAvailable() )
     if( DirectX12::isAvailable() )
@@ -32,7 +33,7 @@ Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF )
         graphicAPI->setAuswahl( 2 );
         graphicAPI->setAuswahl( 2 );
     if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX12" ) )
     if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX12" ) )
         graphicAPI->setAuswahl( 3 );
         graphicAPI->setAuswahl( 3 );
-    graphicAPI->setEventAktion( [ this ]( void *p, AuswahlBox * b, int unused, int auswahl )
+    graphicAPI->setEventAktion( [this]( void *p, AuswahlBox *b, int unused, int auswahl )
     {
     {
         userOptions->addWert( "GraphicAPI", "BEST" );
         userOptions->addWert( "GraphicAPI", "BEST" );
         switch( auswahl )
         switch( auswahl )
@@ -51,19 +52,19 @@ Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF )
             break;
             break;
         }
         }
     } );
     } );
-    TextFeld *mft = initTextFeld( 5, 50, 200, 20, zSchrift, TextFeld::Style::Text, "Maximale FPS" );
+    TextFeld *mft = initTextFeld( 5, 50, 200, 20, TextFeld::Style::Text, "Maximale FPS" );
     f->addMember( mft );
     f->addMember( mft );
-    maxFPS = initTextFeld( 5, 70, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "MaxFPS" ) ? userOptions->zWert( "MaxFPS" )->getText() : "30" );
+    maxFPS = initTextFeld( 5, 70, 50, 20, TextFeld::Style::TextFeld, userOptions->wertExistiert( "MaxFPS" ) ? userOptions->zWert( "MaxFPS" )->getText() : "30" );
     maxFPS->setTastaturEreignis( _nurNummernTE );
     maxFPS->setTastaturEreignis( _nurNummernTE );
-    f->addMember( maxFPS->getThis() );
-    TextFeld * gst = initTextFeld( 5, 95, 200, 20, zSchrift, TextFeld::Style::Text, "GUI Lautstärke (0 bis 100)" );
+    f->addMember( dynamic_cast<Zeichnung *>( maxFPS->getThis() ) );
+    TextFeld *gst = initTextFeld( 5, 95, 200, 20, TextFeld::Style::Text, "GUI Lautstärke (0 bis 100)" );
     f->addMember( gst );
     f->addMember( gst );
-    guiSound = initTextFeld( 5, 115, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "GUISound" ) ? userOptions->zWert( "GUISound" )->getText() : "100" );
+    guiSound = initTextFeld( 5, 115, 50, 20, TextFeld::Style::TextFeld, userOptions->wertExistiert( "GUISound" ) ? userOptions->zWert( "GUISound" )->getText() : "100" );
     guiSound->setTastaturEreignis( _nurNummernTE );
     guiSound->setTastaturEreignis( _nurNummernTE );
-    f->addMember( guiSound->getThis() );
-    TextFeld * mt = initTextFeld( 255, 5, 200, 20, zSchrift, TextFeld::Style::Text, "Monitor (Neustart erforderlich)" );
+    f->addMember( dynamic_cast<Zeichnung *>( guiSound->getThis() ) );
+    TextFeld *mt = initTextFeld( 255, 5, 200, 20, TextFeld::Style::Text, "Monitor (Neustart erforderlich)" );
     f->addMember( mt );
     f->addMember( mt );
-    AuswahlBox * monitorAuswahl = initAuswahlBox( 255, 25, 200, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} );
+    AuswahlBox *monitorAuswahl = initAuswahlBox( 255, 25, 200, 20, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} );
     Monitor m = getMonitor( 0 );
     Monitor m = getMonitor( 0 );
     int index = 0;
     int index = 0;
     do
     do
@@ -73,7 +74,7 @@ Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF )
     } while( m.existiert );
     } while( m.existiert );
     if( userOptions->wertExistiert( "Monitor" ) )
     if( userOptions->wertExistiert( "Monitor" ) )
         monitorAuswahl->setAuswahl( *userOptions->zWert( "Monitor" ) );
         monitorAuswahl->setAuswahl( *userOptions->zWert( "Monitor" ) );
-    monitorAuswahl->setEventAktion( [ this ]( void *p, AuswahlBox * b, int unused, int auswahl )
+    monitorAuswahl->setEventAktion( [this]( void *p, AuswahlBox *b, int unused, int auswahl )
     {
     {
         if( !userOptions->wertExistiert( "Monitor" ) )
         if( !userOptions->wertExistiert( "Monitor" ) )
             userOptions->addWert( "Monitor", Text( auswahl ) );
             userOptions->addWert( "Monitor", Text( auswahl ) );
@@ -91,28 +92,27 @@ Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF )
         breite->setText( Text( m.breite ) );
         breite->setText( Text( m.breite ) );
         height->setText( Text( m.height ) );
         height->setText( Text( m.height ) );
     } );
     } );
-    TextFeld *at = initTextFeld( 255, 50, 200, 20, zSchrift, TextFeld::Style::Text, "Auflösung (Neustart erforderlich)" );
+    TextFeld *at = initTextFeld( 255, 50, 200, 20, TextFeld::Style::Text, "Auflösung (Neustart erforderlich)" );
     f->addMember( at );
     f->addMember( at );
-    breite = initTextFeld( 255, 70, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "ScreenWidth" ) ? userOptions->zWert( "ScreenWidth" )->getText() : 
+    breite = initTextFeld( 255, 70, 50, 20, TextFeld::Style::TextFeld, userOptions->wertExistiert( "ScreenWidth" ) ? userOptions->zWert( "ScreenWidth" )->getText() :
                            Text( getMonitor( userOptions->wertExistiert( "Monitor" ) ? *userOptions->zWert( "Monitor" ) : 0 ).breite ) );
                            Text( getMonitor( userOptions->wertExistiert( "Monitor" ) ? *userOptions->zWert( "Monitor" ) : 0 ).breite ) );
-    height = initTextFeld( 312, 70, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "ScreenHeight" ) ? userOptions->zWert( "ScreenHeight" )->getText() :
+    height = initTextFeld( 312, 70, 50, 20, TextFeld::Style::TextFeld, userOptions->wertExistiert( "ScreenHeight" ) ? userOptions->zWert( "ScreenHeight" )->getText() :
                            Text( getMonitor( userOptions->wertExistiert( "Monitor" ) ? *userOptions->zWert( "Monitor" ) : 0 ).height ) );
                            Text( getMonitor( userOptions->wertExistiert( "Monitor" ) ? *userOptions->zWert( "Monitor" ) : 0 ).height ) );
     breite->setTastaturEreignis( _nurNummernTE );
     breite->setTastaturEreignis( _nurNummernTE );
     height->setTastaturEreignis( _nurNummernTE );
     height->setTastaturEreignis( _nurNummernTE );
-    f->addMember( breite->getThis() );
-    f->addMember( initTextFeld( 305, 70, 5, 20, zSchrift, TextFeld::Style::Text, "x" ) );
-    f->addMember( height->getThis() );
-    ok = initKnopf( 390, 450, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Ok" );
+    f->addMember( dynamic_cast<Zeichnung *>( breite->getThis() ) );
+    f->addMember( initTextFeld( 305, 70, 5, 20, TextFeld::Style::Text, "x" ) );
+    f->addMember( dynamic_cast<Zeichnung *>( height->getThis() ) );
+    ok = initKnopf( 390, 450, 100, 20, Knopf::Style::Sichtbar, "Ok" );
     ok->setMausEreignisParameter( this );
     ok->setMausEreignisParameter( this );
     ok->setMausEreignis( einstellungenOkME );
     ok->setMausEreignis( einstellungenOkME );
-    f->addMember( ok->getThis() );
+    f->addMember( dynamic_cast<Zeichnung *>( ok->getThis() ) );
 
 
     // add AuswahlBoxen
     // add AuswahlBoxen
     f->addMember( graphicAPI );
     f->addMember( graphicAPI );
     f->addMember( monitorAuswahl );
     f->addMember( monitorAuswahl );
 
 
-    zF->addMember( f->getThis() );
-    ref = 1;
+    zF->addMember( dynamic_cast<Zeichnung *>( f->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -139,7 +139,7 @@ bool Einstellungen::closeME( MausEreignis &me )
     return 1;
     return 1;
 }
 }
 
 
-bool Einstellungen::okME( MausEreignis & me )
+bool Einstellungen::okME( MausEreignis &me )
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -150,7 +150,7 @@ bool Einstellungen::okME( MausEreignis & me )
         if( fps > 0 && sound >= 0 && sound <= 100 && wi > 0 && hi > 0 )
         if( fps > 0 && sound >= 0 && sound <= 100 && wi > 0 && hi > 0 )
         {
         {
             f->removeStyle( Fenster::Style::Sichtbar );
             f->removeStyle( Fenster::Style::Sichtbar );
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( !userOptions->wertExistiert( "MaxFPS" ) )
             if( !userOptions->wertExistiert( "MaxFPS" ) )
                 userOptions->addWert( "MaxFPS", maxFPS->zText()->getText() );
                 userOptions->addWert( "MaxFPS", maxFPS->zText()->getText() );
             else
             else
@@ -167,28 +167,13 @@ bool Einstellungen::okME( MausEreignis & me )
                 userOptions->addWert( "ScreenHeight", Text( hi ) );
                 userOptions->addWert( "ScreenHeight", Text( hi ) );
             else
             else
                 userOptions->setWert( "ScreenHeight", Text( hi ) );
                 userOptions->setWert( "ScreenHeight", Text( hi ) );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             userOptions->speichern();
             userOptions->speichern();
         }
         }
     }
     }
     return 1;
     return 1;
 }
 }
 
 
-// Reference Counting
-Einstellungen *Einstellungen::getThis()
-{
-    ref++;
-    return this;
-}
-
-Einstellungen *Einstellungen::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Ereignisse
 // Ereignisse
 bool einstellungenSchließenME( void *p, void *obj, MausEreignis me )
 bool einstellungenSchließenME( void *p, void *obj, MausEreignis me )

+ 11 - 15
KSGClient/NachLogin/Einstellungen/Einstellungen.h

@@ -6,29 +6,25 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class Einstellungen
+class Einstellungen : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Fenster *f;
-	Knopf *ok;
+    Fenster *f;
+    Knopf *ok;
     TextFeld *maxFPS;
     TextFeld *maxFPS;
     TextFeld *guiSound;
     TextFeld *guiSound;
     TextFeld *breite;
     TextFeld *breite;
     TextFeld *height;
     TextFeld *height;
-	int ref;
 
 
 public:
 public:
-	// Konstruktor
-	Einstellungen( Schrift *zSchrift, Fenster *zF );
-	// Destruktor
-	~Einstellungen();
-	// nicht constant
-	void setSichtbar();
-	bool closeME( MausEreignis &me );
-	bool okME( MausEreignis &me );
-	// Reference Counting
-	Einstellungen *getThis();
-	Einstellungen *release();
+    // Konstruktor
+    Einstellungen( Fenster *zF );
+    // Destruktor
+    ~Einstellungen();
+    // nicht constant
+    void setSichtbar();
+    bool closeME( MausEreignis &me );
+    bool okME( MausEreignis &me );
 };
 };
 
 
 // Ereignisse
 // Ereignisse

+ 150 - 149
KSGClient/NachLogin/ImSpiel/ImSpiel.cpp

@@ -5,146 +5,148 @@
 #include "..\..\Global\Variablen.h"
 #include "..\..\Global\Variablen.h"
 #include <Globals.h>
 #include <Globals.h>
 
 
-typedef SpielV* ( *DllStart )( void );
+typedef SpielV *( *DllStart )( void );
 
 
 // Inhalt der ImSpielObj Klasse aus ImSpiel.h
 // Inhalt der ImSpielObj Klasse aus ImSpiel.h
 // Konstruktor
 // Konstruktor
-ImSpiel::ImSpiel( Schrift *zSchrift )
-	: Thread()
-{
-	sichtbar = 0;
-	ladenFenster = 0;
-	spielFenster = 0;
-	schrift = zSchrift->getThis();
-	ladenStatus = 0;
-	karteId = 0;
-	mainDll = 0;
-	dllName = 0;
-	rend = 0;
+ImSpiel::ImSpiel()
+    : Thread()
+{
+    sichtbar = 0;
+    ladenFenster = 0;
+    spielFenster = 0;
+    ladenStatus = 0;
+    karteId = 0;
+    mainDll = 0;
+    dllName = 0;
+    rend = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 ImSpiel::~ImSpiel()
 ImSpiel::~ImSpiel()
 {
 {
-	if( sichtbar )
-		setSichtbar( 0 );
-	schrift->release();
+    if( sichtbar )
+        setSichtbar( 0 );
 }
 }
 
 
 // nicht constant
 // nicht constant
 void ImSpiel::setSichtbar( bool sichtbar )
 void ImSpiel::setSichtbar( bool sichtbar )
 {
 {
-	if( sichtbar && !this->sichtbar )
-	{
-		ladenFenster = new SpielLaden( schrift );
-		spielFenster = 0;
-		ladenStatus = 0;
-		karteId = 0;
-		mainDll = 0;
-		dllName = new Text( "" );
-		this->sichtbar = 1;
-	}
-	else if( !sichtbar && this->sichtbar )
-	{
-		if( ladenFenster )
-			ladenFenster->release();
-		if( spielFenster )
-			spielFenster->release();
-		if( mainDll )
-			Framework::getDLLRegister()->releaseDLL( *dllName );
-		dllName->release();
-		this->sichtbar = 0;
-	}
+    if( sichtbar && !this->sichtbar )
+    {
+        ladenFenster = new SpielLaden();
+        spielFenster = 0;
+        ladenStatus = 0;
+        karteId = 0;
+        mainDll = 0;
+        dllName = new Text( "" );
+        this->sichtbar = 1;
+    }
+    else if( !sichtbar && this->sichtbar )
+    {
+        if( ladenFenster )
+        {
+            ladenFenster->warteAufThread( 10000 );
+            dynamic_cast<Thread *>( ladenFenster )->ende();
+            ladenFenster->release();
+        }
+        if( spielFenster )
+            spielFenster->release();
+        if( mainDll )
+            Framework::getDLLRegister()->releaseDLL( *dllName );
+        dllName->release();
+        this->sichtbar = 0;
+    }
 }
 }
 void ImSpiel::beginnLaden( int karteId, SpielerTeamStruktur *sts )
 void ImSpiel::beginnLaden( int karteId, SpielerTeamStruktur *sts )
 {
 {
-	if( !sichtbar )
-		return;
-	ladenFenster->setSpielerTeamStruktur( sts );
-	ladenFenster->setKarte( karteId );
-	ladenFenster->setSichtbar( 1 );
-	this->karteId = karteId;
-	spielClient->bereitZumLaden();
-	rend = 1;
-	start();
+    if( !sichtbar )
+        return;
+    ladenFenster->setSpielerTeamStruktur( sts );
+    ladenFenster->setKarte( karteId );
+    ladenFenster->setSichtbar( 1 );
+    this->karteId = karteId;
+    spielClient->bereitZumLaden();
+    rend = 1;
+    start();
 }
 }
 
 
 void ImSpiel::lBAddSpieler( int accountId, int spielerNummer )
 void ImSpiel::lBAddSpieler( int accountId, int spielerNummer )
 {
 {
-	if( !sichtbar )
-		return;
-	ladenFenster->addSpieler( accountId, spielerNummer );
-	rend = 1;
+    if( !sichtbar )
+        return;
+    ladenFenster->addSpieler( accountId, spielerNummer );
+    rend = 1;
 }
 }
 
 
 void ImSpiel::lBSetSpielerProzent( int accountId, int prozent )
 void ImSpiel::lBSetSpielerProzent( int accountId, int prozent )
 {
 {
-	if( !sichtbar )
-		return;
-	ladenFenster->setSpielerFortschritt( accountId, prozent );
-	rend = 1;
+    if( !sichtbar )
+        return;
+    ladenFenster->setSpielerFortschritt( accountId, prozent );
+    rend = 1;
 }
 }
 
 
 void ImSpiel::lBSetSpielerPing( int accountId, int ping )
 void ImSpiel::lBSetSpielerPing( int accountId, int ping )
 {
 {
-	if( !sichtbar )
-		return;
-	ladenFenster->setSpielerPing( accountId, ping );
-	rend = 1;
+    if( !sichtbar )
+        return;
+    ladenFenster->setSpielerPing( accountId, ping );
+    rend = 1;
 }
 }
 
 
 void ImSpiel::spielNachricht( int län, char *bytes )
 void ImSpiel::spielNachricht( int län, char *bytes )
 {
 {
-	if( !sichtbar )
-		return;
-	if( ladenStatus > 1 )
-		spielFenster->nachricht( län, bytes );
+    if( !sichtbar )
+        return;
+    if( ladenStatus > 1 )
+        spielFenster->nachricht( län, bytes );
 }
 }
 
 
 void ImSpiel::endLaden()
 void ImSpiel::endLaden()
 {
 {
-	if( !sichtbar )
-		return;
-	ladenFenster->setSichtbar( 0 );
+    if( !sichtbar )
+        return;
+    ladenFenster->setSichtbar( 0 );
 }
 }
 
 
 void ImSpiel::thread()
 void ImSpiel::thread()
 {
 {
-	KartenLeser *reader = KartenLeser::getInstance();
+    KartenLeser *reader = KartenLeser::getInstance();
     reader->lock();
     reader->lock();
-	reader->setKarteId( karteId );
-	Text *pfad = reader->getSpielPfad();
-	pfad->append( "bin/" );
-	pfad->append( reader->getSpielName() );
-	pfad->append( ".dll" );
-	dllName->setText( "Spiele/" );
-	dllName->append( reader->getSpielName() );
+    reader->setKarteId( karteId );
+    Text *pfad = reader->getSpielPfad();
+    pfad->append( "bin/" );
+    pfad->append( reader->getSpielName() );
+    pfad->append( ".dll" );
+    dllName->setText( "Spiele/" );
+    dllName->append( reader->getSpielName() );
     reader->unlock();
     reader->unlock();
-	reader->release();
-	dllName->append( ".dll" );
-	mainDll = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
-	if( !mainDll )
-	{
-		Text *nachricht = new Text( "Die Spiel DLL " );
-		nachricht->append( pfad->getText() );
-		nachricht->append( " konnte nicht geladen werden.\n" );
-		nachricht->append( "Wenn sie nicht existiert dann installiere das Spiel neu." );
-		WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
-		//------------------------------
-		exit( 0 );
-	}
-	pfad->release();
-	DllStart getSpielKlasse = (DllStart)GetProcAddress( mainDll, "getSpielKlasse" );
-	if( !getSpielKlasse )
-	{
-		Text *nachricht = new Text( "Die Spiel DLL " );
-		nachricht->append( pfad->getText() );
-		nachricht->append( " konnte nicht geladen werden.\n" );
-		nachricht->append( "Die Einstiegsfunktion getSpielKlasse() wurde nicht gefunden." );
-		WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
-		//------------------------------
-		exit( 0 );
-	}
+    reader->release();
+    dllName->append( ".dll" );
+    mainDll = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
+    if( !mainDll )
+    {
+        Text *nachricht = new Text( "Die Spiel DLL " );
+        nachricht->append( pfad->getText() );
+        nachricht->append( " konnte nicht geladen werden.\n" );
+        nachricht->append( "Wenn sie nicht existiert dann installiere das Spiel neu." );
+        WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
+        //------------------------------
+        exit( 0 );
+    }
+    pfad->release();
+    DllStart getSpielKlasse = (DllStart)GetProcAddress( mainDll, "getSpielKlasse" );
+    if( !getSpielKlasse )
+    {
+        Text *nachricht = new Text( "Die Spiel DLL " );
+        nachricht->append( pfad->getText() );
+        nachricht->append( " konnte nicht geladen werden.\n" );
+        nachricht->append( "Die Einstiegsfunktion getSpielKlasse() wurde nicht gefunden." );
+        WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
+        //------------------------------
+        exit( 0 );
+    }
     int port = 0;
     int port = 0;
     Text ip;
     Text ip;
     KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
     KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
@@ -155,80 +157,79 @@ void ImSpiel::thread()
     }
     }
     if( kartenClient )
     if( kartenClient )
         kartenClient->release();
         kartenClient->release();
-	spielFenster = getSpielKlasse();
-	ladenStatus = 1;
-	spielFenster->setKarteId( karteId );
-	spielFenster->setKlients( infoClient->getThis(), spielClient->getThis() );
-	spielFenster->setBildschirm( hauptScreen );
-	spielFenster->setSchrift( schrift->getThis() );
-	spielFenster->ladeDaten();
-	ladenStatus = 2;
-	run = 0;
+    spielFenster = getSpielKlasse();
+    ladenStatus = 1;
+    spielFenster->setKarteId( karteId );
+    spielFenster->setKlients( dynamic_cast<KSGClient::InformationServerClient *>( infoClient->getThis() ), dynamic_cast<KSGClient::SpielServerClient *>( spielClient->getThis() ) );
+    spielFenster->setUIFactory( uiFactory );
+    spielFenster->ladeDaten();
+    ladenStatus = 2;
+    run = 0;
 }
 }
 
 
 bool ImSpiel::tick( double tickVal )
 bool ImSpiel::tick( double tickVal )
 {
 {
-	if( !sichtbar )
-		return 0;
-	if( ladenStatus < 3 ) // Vor dem Spiel
-		rend |= ladenFenster->tick( tickVal );
-	if( ladenStatus == 2 ) // Im spiel
-	{
-		rend |= spielFenster->tick( tickVal );
-		if( spielFenster->läuft() == 1 )
-		{
-			ladenStatus = 3;
-			rend = 1;
-		}
-	}
-	if( ladenStatus == 3 ) // Ende des Spiels
-	{
-		rend |= spielFenster->tick( tickVal );
-		if( !spielFenster->läuft() )
-		{
-			ladenStatus = 4;
-			aktion = 6; // Spiel Statistik laden (Render => new AktionsThread( 20, 0, 0, 0, 0, 0 ))
-			rend = 1;
-		}
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    if( !sichtbar )
+        return 0;
+    if( ladenStatus < 3 ) // Vor dem Spiel
+        rend |= ladenFenster->tick( tickVal );
+    if( ladenStatus == 2 ) // Im spiel
+    {
+        rend |= spielFenster->tick( tickVal );
+        if( spielFenster->läuft() == 1 )
+        {
+            ladenStatus = 3;
+            rend = 1;
+        }
+    }
+    if( ladenStatus == 3 ) // Ende des Spiels
+    {
+        rend |= spielFenster->tick( tickVal );
+        if( !spielFenster->läuft() )
+        {
+            ladenStatus = 4;
+            aktion = 6; // Spiel Statistik laden (Render => new AktionsThread( 20, 0, 0, 0, 0, 0 ))
+            rend = 1;
+        }
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void ImSpiel::doPublicMausEreignis( MausEreignis &me )
 void ImSpiel::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !sichtbar )
-		return;
-	if( ladenStatus > 1 )
-		spielFenster->doPublicMausEreignis( me );
+    if( !sichtbar )
+        return;
+    if( ladenStatus > 1 )
+        spielFenster->doPublicMausEreignis( me );
 }
 }
 
 
 void ImSpiel::doTastaturEreignis( TastaturEreignis &te )
 void ImSpiel::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( !sichtbar )
-		return;
-	if( ladenStatus > 1 )
-		spielFenster->doTastaturEreignis( te );
+    if( !sichtbar )
+        return;
+    if( ladenStatus > 1 )
+        spielFenster->doTastaturEreignis( te );
 }
 }
 
 
 void ImSpiel::render( Bild &zRObj )
 void ImSpiel::render( Bild &zRObj )
 {
 {
-	if( !sichtbar )
-		return;
-	if( ladenStatus < 3 && ( !spielFenster || spielFenster->läuft() == 3 ) )
-		ladenFenster->render( zRObj );
-	if( ladenStatus == 3 || ladenStatus == 2 )
-		spielFenster->render( zRObj );
+    if( !sichtbar )
+        return;
+    if( ladenStatus < 3 && ( !spielFenster || spielFenster->läuft() == 3 ) )
+        ladenFenster->render( zRObj );
+    if( ladenStatus == 3 || ladenStatus == 2 )
+        spielFenster->render( zRObj );
 }
 }
 
 
 // constant
 // constant
 int ImSpiel::getKarteId() const
 int ImSpiel::getKarteId() const
 {
 {
-	return karteId;
+    return karteId;
 }
 }
 
 
 bool ImSpiel::istSichtbar() const
 bool ImSpiel::istSichtbar() const
 {
 {
-	return sichtbar;
+    return sichtbar;
 }
 }

+ 28 - 29
KSGClient/NachLogin/ImSpiel/ImSpiel.h

@@ -8,37 +8,36 @@
 class ImSpiel : public Thread
 class ImSpiel : public Thread
 {
 {
 private:
 private:
-	SpielLaden *ladenFenster;
-	SpielV *spielFenster;
-	Schrift *schrift;
-	int ladenStatus;
-	int karteId;
-	HINSTANCE mainDll;
-	Text *dllName;
-	bool sichtbar;
-	bool rend;
+    SpielLaden *ladenFenster;
+    SpielV *spielFenster;
+    int ladenStatus;
+    int karteId;
+    HINSTANCE mainDll;
+    Text *dllName;
+    bool sichtbar;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	ImSpiel( Schrift *zSchrift );
-	// Destruktor
-	~ImSpiel();
-	// nicht constant
-	void setSichtbar( bool sichtbar );
-	void beginnLaden( int karteId, SpielerTeamStruktur *sts );
-	void lBAddSpieler( int accountId, int spielerNummer );
-	void lBSetSpielerProzent( int accountId, int prozent );
-	void lBSetSpielerPing( int accountId, int ping );
-	void spielNachricht( int län, char *bytes );
-	void endLaden();
-	void thread() override;
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-	int getKarteId() const;
-	bool istSichtbar() const;
+    // Konstruktor
+    ImSpiel();
+    // Destruktor
+    ~ImSpiel();
+    // nicht constant
+    void setSichtbar( bool sichtbar );
+    void beginnLaden( int karteId, SpielerTeamStruktur *sts );
+    void lBAddSpieler( int accountId, int spielerNummer );
+    void lBSetSpielerProzent( int accountId, int prozent );
+    void lBSetSpielerPing( int accountId, int ping );
+    void spielNachricht( int län, char *bytes );
+    void endLaden();
+    void thread() override;
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
+    // constant
+    int getKarteId() const;
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 384 - 427
KSGClient/NachLogin/ImSpiel/Laden/SpielLaden.cpp

@@ -10,570 +10,527 @@
 
 
 // Inhalt der SpielLadenListeSpieler Klasse aus SpielLaden.h
 // Inhalt der SpielLadenListeSpieler Klasse aus SpielLaden.h
 // Konstruktor
 // Konstruktor
-SpielLadenListeSpieler::SpielLadenListeSpieler( int accountId, Schrift *zSchrift )
-{
-	rahmen = new LRahmen();
-	rahmen->setSize( 862, 22 );
-	rahmen->setRamenBreite( 1 );
-	rahmen->setFarbe( 0xFFFFFFFF );
-	this->accountId = accountId;
-	Text *n = infoClient->getSpielerName( accountId );
-	name = initTextFeld( 1, 1, 149, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
-	n->release();
-	team = initTextFeld( 230, 1, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
-	ping = initTextFeld( 410, 1, 50, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
-	fortschritt = new FBalken();
-	fortschritt->setStyle( FBalken::Style::Hintergrund | FBalken::Style::HBild | FBalken::Style::L_R | FBalken::Style::FBild | FBalken::Style::Prozent | FBalken::Style::Sichtbar );
-	fortschritt->setSchriftZ( zSchrift->getThis() );
-	fortschritt->setSFarbe( 0xFFFFFFFF );
-	fortschritt->setSSize( 12 );
-	fortschritt->setPosition( 461, 1 );
-	fortschritt->setSize( 400, 20 );
-	fortschritt->reset();
-	fortschritt->setAktionAnzahl( 100 );
-	Bild *fbhb = bilder->get( "data/bilder/system.ltdb/fortschrittleh" );
-	Bild *fbfhb = bilder->get( "data/bilder/system.ltdb/fortschrittvol" );
-	fortschritt->setHintergrundBildZ( fbhb );
-	fortschritt->setFBgBildZ( fbfhb );
-	spielerFarbe = 0;
-	teamFarbe = 0;
-	p = 0;
-	teamName = new Text( "" );
-	rend = 0;
-	ref = 1;
+SpielLadenListeSpieler::SpielLadenListeSpieler( int accountId )
+    : ReferenceCounter()
+{
+    rahmen = new LRahmen();
+    rahmen->setSize( 862, 22 );
+    rahmen->setRamenBreite( 1 );
+    rahmen->setFarbe( 0xFFFFFFFF );
+    this->accountId = accountId;
+    Text *n = infoClient->getSpielerName( accountId );
+    name = initTextFeld( 1, 1, 149, 20, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
+    n->release();
+    team = initTextFeld( 230, 1, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
+    ping = initTextFeld( 410, 1, 50, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
+    fortschritt = uiFactory.createFBalken( uiFactory.initParam );
+    fortschritt->setStyle( FBalken::Style::Hintergrund | FBalken::Style::HBild | FBalken::Style::L_R | FBalken::Style::FBild | FBalken::Style::Prozent | FBalken::Style::Sichtbar );
+    fortschritt->setPosition( 461, 1 );
+    fortschritt->setSize( 400, 20 );
+    fortschritt->reset();
+    fortschritt->setAktionAnzahl( 100 );
+    Bild *fbhb = bilder->get( "data/bilder/system.ltdb/fortschrittleh" );
+    Bild *fbfhb = bilder->get( "data/bilder/system.ltdb/fortschrittvol" );
+    fortschritt->setHintergrundBildZ( fbhb );
+    fortschritt->setFBgBildZ( fbfhb );
+    spielerFarbe = 0;
+    teamFarbe = 0;
+    p = 0;
+    teamName = new Text( "" );
+    rend = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 SpielLadenListeSpieler::~SpielLadenListeSpieler()
 SpielLadenListeSpieler::~SpielLadenListeSpieler()
 {
 {
-	rahmen->release();
-	name->release();
-	team->release();
-	ping->release();
-	fortschritt->release();
-	teamName->release();
+    rahmen->release();
+    name->release();
+    team->release();
+    ping->release();
+    fortschritt->release();
+    teamName->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void SpielLadenListeSpieler::setFortschritt( int prozent )
 void SpielLadenListeSpieler::setFortschritt( int prozent )
 {
 {
-	fortschritt->aktionPlus( prozent - fortschritt->getAktion() );
-	rend = 1;
+    fortschritt->aktionPlus( prozent - fortschritt->getAktion() );
+    rend = 1;
 }
 }
 
 
 void SpielLadenListeSpieler::setPing( int ping )
 void SpielLadenListeSpieler::setPing( int ping )
 {
 {
-	p = ping;
-	rend = 1;
+    p = ping;
+    rend = 1;
 }
 }
 
 
 void SpielLadenListeSpieler::setTeamName( Text *zName )
 void SpielLadenListeSpieler::setTeamName( Text *zName )
 {
 {
-	teamName->setText( zName->getText() );
-	rend = 1;
+    teamName->setText( zName->getText() );
+    rend = 1;
 }
 }
 
 
 void SpielLadenListeSpieler::setSpielerFarbe( int farbe )
 void SpielLadenListeSpieler::setSpielerFarbe( int farbe )
 {
 {
-	spielerFarbe = farbe;
-	rend = 1;
+    spielerFarbe = farbe;
+    rend = 1;
 }
 }
 
 
 void SpielLadenListeSpieler::setTeamFarbe( int farbe )
 void SpielLadenListeSpieler::setTeamFarbe( int farbe )
 {
 {
-	teamFarbe = farbe;
-	rend = 1;
+    teamFarbe = farbe;
+    rend = 1;
 }
 }
 
 
 bool SpielLadenListeSpieler::tick( double tickVal )
 bool SpielLadenListeSpieler::tick( double tickVal )
 {
 {
-	if( !team->zText()->istGleich( teamName->getText() ) )
-	{
-		team->setText( teamName->getText() );
-		rend = 1;
-	}
-	if( TextZuInt( ping->zText()->getText(), 10 ) != p )
-	{
-		ping->setText( "" );
-		ping->zText()->append( p );
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    if( !team->zText()->istGleich( teamName->getText() ) )
+    {
+        team->setText( teamName->getText() );
+        rend = 1;
+    }
+    if( TextZuInt( ping->zText()->getText(), 10 ) != p )
+    {
+        ping->setText( "" );
+        ping->zText()->append( p );
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void SpielLadenListeSpieler::render( int y, Bild &zRObj )
 void SpielLadenListeSpieler::render( int y, Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( 0, y, 862, 22 ) )
-		return;
-	rahmen->render( zRObj );
-	name->render( zRObj );
-	zRObj.alphaRegion( 170, 1, 40, 20, spielerFarbe );
-	team->render( zRObj );
-	zRObj.alphaRegion( 350, 1, 40, 20, teamFarbe );
-	ping->render( zRObj );
-	fortschritt->render( zRObj );
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( 0, y, 862, 22 ) )
+        return;
+    rahmen->render( zRObj );
+    name->render( zRObj );
+    zRObj.alphaRegion( 170, 1, 40, 20, spielerFarbe );
+    team->render( zRObj );
+    zRObj.alphaRegion( 350, 1, 40, 20, teamFarbe );
+    ping->render( zRObj );
+    fortschritt->render( zRObj );
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int SpielLadenListeSpieler::getAccountId() const
 int SpielLadenListeSpieler::getAccountId() const
 {
 {
-	return accountId;
-}
-
-// Reference Counting
-SpielLadenListeSpieler *SpielLadenListeSpieler::getThis()
-{
-	ref++;
-	return this;
-}
-
-SpielLadenListeSpieler *SpielLadenListeSpieler::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return accountId;
 }
 }
 
 
 // Inhalt der SpielLadenListe Klasse aus SpielLaden.h
 // Inhalt der SpielLadenListe Klasse aus SpielLaden.h
 // Konstruktor
 // Konstruktor
-SpielLadenListe::SpielLadenListe( Schrift *zSchrift )
-{
-	bildschirmGröße = hauptScreen->getBackBufferSize();
-	spielerAnzahl = 0;
-	höhe = 0;
-	breite = 0;
-	tickVal = 0;
-	spielerName = initTextFeld( 1, 1, 149, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler Name" );
-	spielerFarbe = initTextFeld( 150, 1, 90, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler Farbe" );
-	teamName = initTextFeld( 230, 1, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Team Name" );
-	teamFarbe = initTextFeld( 330, 1, 80, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Team Farbe" );
-	ping = initTextFeld( 410, 1, 50, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Ping" );
-	fortschritt = initTextFeld( 460, 1, 400, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Fortschritt" );
-	rahmen = new LRahmen();
-	rahmen->setFarbe( 0xFFFFFFFF );
-	rahmen->setRamenBreite( 1 );
-	titel = new AlphaFeld();
-	titel->setFarbe( 0x1000FF00 );
-	titel->setStrength( -15 );
-	spieler = new RCArray < SpielLadenListeSpieler >();
-	sts = 0;
-	schrift = zSchrift->getThis();
-	alpha = 0;
-	animation = 0;
-	rend = 0;
-	ref = 1;
+SpielLadenListe::SpielLadenListe()
+    : ReferenceCounter()
+{
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    spielerAnzahl = 0;
+    höhe = 0;
+    breite = 0;
+    tickVal = 0;
+    spielerName = initTextFeld( 1, 1, 149, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler Name" );
+    spielerFarbe = initTextFeld( 150, 1, 90, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler Farbe" );
+    teamName = initTextFeld( 230, 1, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Team Name" );
+    teamFarbe = initTextFeld( 330, 1, 80, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Team Farbe" );
+    ping = initTextFeld( 410, 1, 50, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Ping" );
+    fortschritt = initTextFeld( 460, 1, 400, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Fortschritt" );
+    rahmen = new LRahmen();
+    rahmen->setFarbe( 0xFFFFFFFF );
+    rahmen->setRamenBreite( 1 );
+    titel = new AlphaFeld();
+    titel->setFarbe( 0x1000FF00 );
+    titel->setStrength( -15 );
+    spieler = new RCArray < SpielLadenListeSpieler >();
+    sts = 0;
+    alpha = 0;
+    animation = 0;
+    rend = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 SpielLadenListe::~SpielLadenListe()
 SpielLadenListe::~SpielLadenListe()
 {
 {
-	spielerName->release();
-	spielerFarbe->release();
-	teamName->release();
-	teamFarbe->release();
-	ping->release();
-	fortschritt->release();
-	rahmen->release();
-	titel->release();
-	spieler->release();
-	schrift->release();
-	if( sts )
-		sts->release();
+    spielerName->release();
+    spielerFarbe->release();
+    teamName->release();
+    teamFarbe->release();
+    ping->release();
+    fortschritt->release();
+    rahmen->release();
+    titel->release();
+    spieler->release();
+    if( sts )
+        sts->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void SpielLadenListe::setSTS( SpielerTeamStruktur *sts )
 void SpielLadenListe::setSTS( SpielerTeamStruktur *sts )
 {
 {
-	if( this->sts )
-		this->sts->release();
-	this->sts = sts;
-	rend = 1;
+    if( this->sts )
+        this->sts->release();
+    this->sts = sts;
+    rend = 1;
 }
 }
 
 
 void SpielLadenListe::setSichtbar( bool sichtbar )
 void SpielLadenListe::setSichtbar( bool sichtbar )
 {
 {
-	animation = sichtbar ? 1 : 3;
+    animation = sichtbar ? 1 : 3;
 }
 }
 
 
 void SpielLadenListe::addSpieler( int accountId, int spielerNummer )
 void SpielLadenListe::addSpieler( int accountId, int spielerNummer )
 {
 {
-	SpielLadenListeSpieler *tmp = new SpielLadenListeSpieler( accountId, schrift );
-	int team = 0;
-	int max = 0;
-	int min = 0;
-	for( int i = 0; i < sts->teamAnzahl; i++ )
-	{
-		min = max;
-		max += sts->teamSize->get( i );
-		if( spielerNummer >= min && spielerNummer < max )
-		{
-			team = i;
-			break;
-		}
-	}
-	tmp->setSpielerFarbe( sts->spielerFarbe->hat( spielerNummer ) ? sts->spielerFarbe->get( spielerNummer ) : 0 );
-	tmp->setTeamFarbe( sts->teamFarbe->hat( team ) ? sts->teamFarbe->get( team ) : 0 );
-	tmp->setTeamName( sts->teamName->z( team ) );
-	spieler->set( tmp, spielerAnzahl );
-	spielerAnzahl++;
-	rend = 1;
+    SpielLadenListeSpieler *tmp = new SpielLadenListeSpieler( accountId );
+    int team = 0;
+    int max = 0;
+    int min = 0;
+    for( int i = 0; i < sts->teamAnzahl; i++ )
+    {
+        min = max;
+        max += sts->teamSize->get( i );
+        if( spielerNummer >= min && spielerNummer < max )
+        {
+            team = i;
+            break;
+        }
+    }
+    tmp->setSpielerFarbe( sts->spielerFarbe->hat( spielerNummer ) ? sts->spielerFarbe->get( spielerNummer ) : 0 );
+    tmp->setTeamFarbe( sts->teamFarbe->hat( team ) ? sts->teamFarbe->get( team ) : 0 );
+    tmp->setTeamName( sts->teamName->z( team ) );
+    spieler->set( tmp, spielerAnzahl );
+    spielerAnzahl++;
+    rend = 1;
 }
 }
 
 
 void SpielLadenListe::setSpielerFortschritt( int accountId, int prozent )
 void SpielLadenListe::setSpielerFortschritt( int accountId, int prozent )
 {
 {
-	for( int i = 0; i < spielerAnzahl; i++ )
-	{
-		if( spieler->z( i )->getAccountId() == accountId )
-		{
-			spieler->z( i )->setFortschritt( prozent );
-			break;
-		}
-	}
+    for( int i = 0; i < spielerAnzahl; i++ )
+    {
+        if( spieler->z( i )->getAccountId() == accountId )
+        {
+            spieler->z( i )->setFortschritt( prozent );
+            break;
+        }
+    }
 }
 }
 
 
 void SpielLadenListe::setSpielerPing( int accountId, int ping )
 void SpielLadenListe::setSpielerPing( int accountId, int ping )
 {
 {
-	for( int i = 0; i < spielerAnzahl; i++ )
-	{
-		if( spieler->z( i )->getAccountId() == accountId )
-		{
-			spieler->z( i )->setPing( ping );
-			break;
-		}
-	}
+    for( int i = 0; i < spielerAnzahl; i++ )
+    {
+        if( spieler->z( i )->getAccountId() == accountId )
+        {
+            spieler->z( i )->setPing( ping );
+            break;
+        }
+    }
 }
 }
 
 
 bool SpielLadenListe::tick( double tickVal )
 bool SpielLadenListe::tick( double tickVal )
 {
 {
-	for( int i = 0; i < spielerAnzahl; i++ )
-		rend |= spieler->z( i )->tick( tickVal );
-	this->tickVal += tickVal * 500;
-	int val = ( int )this->tickVal;
-	if( !val )
-	{
-		bool ret = rend;
-		rend = 0;
-		return ret;
-	}
-	this->tickVal -= val;
-	if( breite && animation != 4 && höhe != spielerAnzahl * 22 + 23 )
-	{
-		höhe += val / 2;
-		if( höhe > spielerAnzahl * 22 + 23 )
-			höhe = spielerAnzahl * 22 + 23;
-		rend = 1;
-	}
-	switch( animation )
-	{
-	case 1: // größe ++
-		breite += val;
-		if( breite >= 864 )
-		{
-			breite = 864;
-			animation = 2;
-		}
-		rend = 1;
-		break;
-	case 2: // alpha ++
-		if( alpha + val > 255 )
-		{
-			alpha = 255;
-			animation = 0;
-		}
-		else
-			alpha += val;
-		rend = 1;
-		break;
-	case 3: // alpha --
-		if( alpha - val < 0 )
-		{
-			alpha = 0;
-			animation = 4;
-		}
-		else
-			alpha -= val;
-		rend = 1;
-		break;
-	case 4: // größe --
-		breite -= val;
-		if( breite <= 0 )
-		{
-			breite = 0;
-			höhe = 0;
-			animation = 0;
-		}
-		else if( breite < spielerAnzahl * 22 + 23 )
-			höhe = breite;
-		rend = 1;
-		break;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    for( int i = 0; i < spielerAnzahl; i++ )
+        rend |= spieler->z( i )->tick( tickVal );
+    this->tickVal += tickVal * 500;
+    int val = (int)this->tickVal;
+    if( !val )
+    {
+        bool ret = rend;
+        rend = 0;
+        return ret;
+    }
+    this->tickVal -= val;
+    if( breite && animation != 4 && höhe != spielerAnzahl * 22 + 23 )
+    {
+        höhe += val / 2;
+        if( höhe > spielerAnzahl * 22 + 23 )
+            höhe = spielerAnzahl * 22 + 23;
+        rend = 1;
+    }
+    switch( animation )
+    {
+    case 1: // größe ++
+        breite += val;
+        if( breite >= 864 )
+        {
+            breite = 864;
+            animation = 2;
+        }
+        rend = 1;
+        break;
+    case 2: // alpha ++
+        if( alpha + val > 255 )
+        {
+            alpha = 255;
+            animation = 0;
+        }
+        else
+            alpha += val;
+        rend = 1;
+        break;
+    case 3: // alpha --
+        if( alpha - val < 0 )
+        {
+            alpha = 0;
+            animation = 4;
+        }
+        else
+            alpha -= val;
+        rend = 1;
+        break;
+    case 4: // größe --
+        breite -= val;
+        if( breite <= 0 )
+        {
+            breite = 0;
+            höhe = 0;
+            animation = 0;
+        }
+        else if( breite < spielerAnzahl * 22 + 23 )
+            höhe = breite;
+        rend = 1;
+        break;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void SpielLadenListe::render( Bild &zRObj )
 void SpielLadenListe::render( Bild &zRObj )
 {
 {
-	if( !breite )
-		return;
-	int x = bildschirmGröße.x / 2 - breite / 2;
-	int y = bildschirmGröße.y / 2 - höhe / 2;
-	if( !zRObj.setDrawOptions( x, y, breite, höhe ) )
-		return;
-	rahmen->setSize( breite, höhe );
-	rahmen->render( zRObj );
-	zRObj.setAlpha( alpha );
-	titel->setPosition( 1, 1 );
-	titel->setSize( breite - 2, 20 );
-	titel->render( zRObj );
-	spielerName->render( zRObj );
-	spielerFarbe->render( zRObj );
-	spielerName->render( zRObj );
-	teamFarbe->render( zRObj );
-	ping->render( zRObj );
-	fortschritt->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.drawLinieH( 1, 21, breite - 2, 0xFFFFFFFF );
-	if( höhe > 22 )
-	{
-		if( !zRObj.setDrawOptions( 1, 22, breite - 2, höhe - 2 ) )
-		{
-			zRObj.releaseDrawOptions();
-			return;
-		}
-		zRObj.alphaRegion( 0, 0, breite - 2, höhe - 23, 0x50000000 );
-		zRObj.setAlpha( alpha );
-		for( int i = 0; i < spielerAnzahl; i++ )
-			spieler->z( i )->render( i * 22, zRObj );
-		zRObj.releaseAlpha();
-		zRObj.releaseDrawOptions();
-	}
-	zRObj.releaseDrawOptions();
+    if( !breite )
+        return;
+    int x = bildschirmGröße.x / 2 - breite / 2;
+    int y = bildschirmGröße.y / 2 - höhe / 2;
+    if( !zRObj.setDrawOptions( x, y, breite, höhe ) )
+        return;
+    rahmen->setSize( breite, höhe );
+    rahmen->render( zRObj );
+    zRObj.setAlpha( alpha );
+    titel->setPosition( 1, 1 );
+    titel->setSize( breite - 2, 20 );
+    titel->render( zRObj );
+    spielerName->render( zRObj );
+    spielerFarbe->render( zRObj );
+    spielerName->render( zRObj );
+    teamFarbe->render( zRObj );
+    ping->render( zRObj );
+    fortschritt->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.drawLinieH( 1, 21, breite - 2, 0xFFFFFFFF );
+    if( höhe > 22 )
+    {
+        if( !zRObj.setDrawOptions( 1, 22, breite - 2, höhe - 2 ) )
+        {
+            zRObj.releaseDrawOptions();
+            return;
+        }
+        zRObj.alphaRegion( 0, 0, breite - 2, höhe - 23, 0x50000000 );
+        zRObj.setAlpha( alpha );
+        for( int i = 0; i < spielerAnzahl; i++ )
+            spieler->z( i )->render( i * 22, zRObj );
+        zRObj.releaseAlpha();
+        zRObj.releaseDrawOptions();
+    }
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 int SpielLadenListe::getHeight() const
 int SpielLadenListe::getHeight() const
 {
 {
-	return höhe;
+    return höhe;
 }
 }
 
 
 int SpielLadenListe::getAlpha() const
 int SpielLadenListe::getAlpha() const
 {
 {
-	return (int)alpha;
-}
-
-// Reference Counting
-SpielLadenListe *SpielLadenListe::getThis()
-{
-	ref++;
-	return this;
-}
-
-SpielLadenListe *SpielLadenListe::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return (int)alpha;
 }
 }
 
 
 // Inhalt der SpielLaden Klasse aus SpielLaden.h
 // Inhalt der SpielLaden Klasse aus SpielLaden.h
 // Konstruktor
 // Konstruktor
-SpielLaden::SpielLaden( Schrift *zSchrift )
-	: Thread()
-{
-	karteId = 0;
-	bildschirmGröße = hauptScreen->getBackBufferSize();
-	hintergrundBild = 0;
-	ladenAlpha = 0;
-	hintergrundAlpha = 0;
-	ladenBild = 0;
-	tickVal = 0;
-	geladen = 0;
-	liste = new SpielLadenListe( zSchrift );
-	animation = 0;
-	ende = 0;
-	rend = 0;
+SpielLaden::SpielLaden()
+    : Thread()
+{
+    karteId = 0;
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    hintergrundBild = 0;
+    ladenAlpha = 0;
+    hintergrundAlpha = 0;
+    ladenBild = 0;
+    tickVal = 0;
+    geladen = 0;
+    liste = new SpielLadenListe();
+    animation = 0;
+    ende = 0;
+    rend = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 SpielLaden::~SpielLaden()
 SpielLaden::~SpielLaden()
 {
 {
-	if( geladen )
-		hintergrundBild->release();
-	liste->release();
+    if( geladen )
+        hintergrundBild->release();
+    liste->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void SpielLaden::setSpielerTeamStruktur( SpielerTeamStruktur *sts )
 void SpielLaden::setSpielerTeamStruktur( SpielerTeamStruktur *sts )
 {
 {
-	liste->setSTS( sts );
-	rend = 1;
+    liste->setSTS( sts );
+    rend = 1;
 }
 }
 
 
 void SpielLaden::setKarte( int karteId )
 void SpielLaden::setKarte( int karteId )
 {
 {
-	this->karteId = karteId;
-	start();
-	rend = 1;
+    this->karteId = karteId;
+    start();
+    rend = 1;
 }
 }
 
 
 void SpielLaden::setSichtbar( bool sichtbar )
 void SpielLaden::setSichtbar( bool sichtbar )
 {
 {
-	animation = sichtbar ? 1 : 4;
+    animation = sichtbar ? 1 : 4;
 }
 }
 
 
 void SpielLaden::thread()
 void SpielLaden::thread()
 {
 {
-	KartenLeser *reader = KartenLeser::getInstance();
+    KartenLeser *reader = KartenLeser::getInstance();
     reader->lock();
     reader->lock();
-	reader->setKarteId( karteId );
-	hintergrundBild = reader->getLadeBild();
+    reader->setKarteId( karteId );
+    hintergrundBild = reader->getLadeBild();
     reader->unlock();
     reader->unlock();
-	reader->release();
-	if( hintergrundBild )
-		geladen = 1;
-	else
-		run = 0;
+    reader->release();
+    if( hintergrundBild )
+        geladen = 1;
+    else
+        run = 0;
 }
 }
 
 
 void SpielLaden::addSpieler( int accountId, int spielerNummer )
 void SpielLaden::addSpieler( int accountId, int spielerNummer )
 {
 {
-	liste->addSpieler( accountId, spielerNummer );
+    liste->addSpieler( accountId, spielerNummer );
 }
 }
 
 
 void SpielLaden::setSpielerFortschritt( int accountId, int prozent )
 void SpielLaden::setSpielerFortschritt( int accountId, int prozent )
 {
 {
-	liste->setSpielerFortschritt( accountId, prozent );
+    liste->setSpielerFortschritt( accountId, prozent );
 }
 }
 
 
 void SpielLaden::setSpielerPing( int accountId, int ping )
 void SpielLaden::setSpielerPing( int accountId, int ping )
 {
 {
-	liste->setSpielerPing( accountId, ping );
+    liste->setSpielerPing( accountId, ping );
 }
 }
 
 
 bool SpielLaden::tick( double tickVal )
 bool SpielLaden::tick( double tickVal )
 {
 {
-	if( ende )
-		return 0;
-	rend |= liste->tick( tickVal );
-	if( ladenAlpha )
-		rend = 1;
-	ladenBild++;
-	if( ladenBild >= ladeAnimation->zAnimationData()->getBildAnzahl() )
-		ladenBild = 0;
-	if( !animation && geladen && ladenAlpha && !ende )
-		animation = 2;
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	if( !val )
-	{
-		bool ret = rend;
-		rend = 0;
-		return ret;
-	}
-	this->tickVal -= val;
-	switch( animation )
-	{ // ------- Beginne zu laden -------
-	case 1: // Sichtbar machen der Ladeanimation
-		if( ladenAlpha + val >= 255 )
-		{
-			ladenAlpha = 255;
-			animation = 0;
-			if( geladen )
-				animation = 2;
-		}
-		else
-			ladenAlpha += val;
-		rend = 1;
-		break;
-	case 2: // Sichtbar machen des Hintergrund Bildes
-		if( hintergrundAlpha + val > 255 )
-		{
-			hintergrundAlpha = 255;
-			animation = 3;
-		}
-		else
-			hintergrundAlpha += val;
-		rend = 1;
-		break;
-	case 3: // Unsichtbar machen der Lade Animation
-		if( ladenAlpha == 255 )
-			liste->setSichtbar( 1 ); // während dessen die Liste sichtbar machen
-		if( ladenAlpha - val < 0 )
-		{
-			ladenAlpha = 0;
-			animation = 0;
-		}
-		else
-			ladenAlpha -= val;
-		rend = 1;
-		break;
-		// ------- Laden beenden -------
-	case 4: // Ladeanimation sichtbar machen
-		if( !ladenAlpha && liste->getAlpha() == 255 )
-			liste->setSichtbar( 0 ); // während dessen die Liste unsichtbar machen
-		if( ladenAlpha + val > 255 )
-		{
-			ladenAlpha = 255;
-			animation = 5;
-		}
-		else
-			ladenAlpha += val;
-		rend = 1;
-		break;
-	case 5: // Hintergrund Bild mit Lade Animation unsichtbar machen
-		if( hintergrundAlpha - val < 0 )
-		{
-			hintergrundAlpha = 0;
-			ladenAlpha = 0;
-			ende = 1;
-			animation = 0;
-			spielClient->bereitZumSpiel();
-		}
-		else
-		{
-			hintergrundAlpha -= val;
-			ladenAlpha -= val;
-		}
-		rend = 1;
-		break;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    if( ende )
+        return 0;
+    rend |= liste->tick( tickVal );
+    if( ladenAlpha )
+        rend = 1;
+    ladenBild++;
+    if( ladenBild >= ladeAnimation->zAnimationData()->getBildAnzahl() )
+        ladenBild = 0;
+    if( !animation && geladen && ladenAlpha && !ende )
+        animation = 2;
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    if( !val )
+    {
+        bool ret = rend;
+        rend = 0;
+        return ret;
+    }
+    this->tickVal -= val;
+    switch( animation )
+    { // ------- Beginne zu laden -------
+    case 1: // Sichtbar machen der Ladeanimation
+        if( ladenAlpha + val >= 255 )
+        {
+            ladenAlpha = 255;
+            animation = 0;
+            if( geladen )
+                animation = 2;
+        }
+        else
+            ladenAlpha += val;
+        rend = 1;
+        break;
+    case 2: // Sichtbar machen des Hintergrund Bildes
+        if( hintergrundAlpha + val > 255 )
+        {
+            hintergrundAlpha = 255;
+            animation = 3;
+        }
+        else
+            hintergrundAlpha += val;
+        rend = 1;
+        break;
+    case 3: // Unsichtbar machen der Lade Animation
+        if( ladenAlpha == 255 )
+            liste->setSichtbar( 1 ); // während dessen die Liste sichtbar machen
+        if( ladenAlpha - val < 0 )
+        {
+            ladenAlpha = 0;
+            animation = 0;
+        }
+        else
+            ladenAlpha -= val;
+        rend = 1;
+        break;
+        // ------- Laden beenden -------
+    case 4: // Ladeanimation sichtbar machen
+        if( !ladenAlpha && liste->getAlpha() == 255 )
+            liste->setSichtbar( 0 ); // während dessen die Liste unsichtbar machen
+        if( ladenAlpha + val > 255 )
+        {
+            ladenAlpha = 255;
+            animation = 5;
+        }
+        else
+            ladenAlpha += val;
+        rend = 1;
+        break;
+    case 5: // Hintergrund Bild mit Lade Animation unsichtbar machen
+        if( hintergrundAlpha - val < 0 )
+        {
+            hintergrundAlpha = 0;
+            ladenAlpha = 0;
+            ende = 1;
+            animation = 0;
+            spielClient->bereitZumSpiel();
+        }
+        else
+        {
+            hintergrundAlpha -= val;
+            ladenAlpha -= val;
+        }
+        rend = 1;
+        break;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void SpielLaden::render( Bild &zRObj )
 void SpielLaden::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( hintergrundAlpha );
-	if( hintergrundBild )
-	{
-		zRObj.drawBild( bildschirmGröße.x / 2 - hintergrundBild->getBreite() / 2, bildschirmGröße.y / 2 - hintergrundBild->getHeight() / 2,
-						hintergrundBild->getBreite(), hintergrundBild->getHeight(), *hintergrundBild );
-	}
-	zRObj.releaseAlpha();
-	liste->render( zRObj );
-	zRObj.setAlpha( ladenAlpha );
-	Bild *zLadenBild = ladeAnimation->zAnimationData()->zBild( ladenBild );
-	zRObj.drawBild( bildschirmGröße.x / 2 - 25, bildschirmGröße.y / 2 - 25, zLadenBild->getBreite(), zLadenBild->getHeight(), *zLadenBild );
-	zRObj.releaseAlpha();
+    zRObj.setAlpha( hintergrundAlpha );
+    if( hintergrundBild )
+    {
+        zRObj.drawBild( bildschirmGröße.x / 2 - hintergrundBild->getBreite() / 2, bildschirmGröße.y / 2 - hintergrundBild->getHeight() / 2,
+                        hintergrundBild->getBreite(), hintergrundBild->getHeight(), *hintergrundBild );
+    }
+    zRObj.releaseAlpha();
+    liste->render( zRObj );
+    zRObj.setAlpha( ladenAlpha );
+    Bild *zLadenBild = ladeAnimation->zAnimationData()->zBild( ladenBild );
+    zRObj.drawBild( bildschirmGröße.x / 2 - 25, bildschirmGröße.y / 2 - 25, zLadenBild->getBreite(), zLadenBild->getHeight(), *zLadenBild );
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 int SpielLaden::getAlpha() const
 int SpielLaden::getAlpha() const
 {
 {
-	return hintergrundAlpha;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *SpielLaden::release()
-{
-    if( ref == 2 && run )
-        warteAufThread( 1000 );
-    return Thread::release();
+    return hintergrundAlpha;
 }
 }

+ 88 - 99
KSGClient/NachLogin/ImSpiel/Laden/SpielLaden.h

@@ -11,122 +11,111 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class SpielLadenListeSpieler
+class SpielLadenListeSpieler : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	int accountId;
-	TextFeld *name;
-	TextFeld *team;
-	TextFeld *ping;
-	FBalken *fortschritt;
-	LRahmen *rahmen;
-	Text *teamName;
-	int p;
-	int spielerFarbe;
-	int teamFarbe;
-	bool rend;
-	int ref;
+    int accountId;
+    TextFeld *name;
+    TextFeld *team;
+    TextFeld *ping;
+    FBalken *fortschritt;
+    LRahmen *rahmen;
+    Text *teamName;
+    int p;
+    int spielerFarbe;
+    int teamFarbe;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	SpielLadenListeSpieler( int accountId, Schrift *zSchrift );
-	// Destruktor
-	~SpielLadenListeSpieler();
-	// nicht constant
-	void setFortschritt( int prozent );
-	void setPing( int ping );
-	void setTeamName( Text *zName );
-	void setSpielerFarbe( int farbe );
-	void setTeamFarbe( int farbe );
-	bool tick( double tickVal );
-	void render( int y, Bild &zRObj );
-	// constant
-	int getAccountId() const;
-	// Reference Counting
-	SpielLadenListeSpieler *getThis();
-	SpielLadenListeSpieler *release();
+    // Konstruktor
+    SpielLadenListeSpieler( int accountId );
+    // Destruktor
+    ~SpielLadenListeSpieler();
+    // nicht constant
+    void setFortschritt( int prozent );
+    void setPing( int ping );
+    void setTeamName( Text *zName );
+    void setSpielerFarbe( int farbe );
+    void setTeamFarbe( int farbe );
+    bool tick( double tickVal );
+    void render( int y, Bild &zRObj );
+    // constant
+    int getAccountId() const;
 };
 };
 
 
-class SpielLadenListe
+class SpielLadenListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	int spielerAnzahl;
-	int höhe;
-	int breite;
-	double tickVal;
-	TextFeld *spielerName;
-	TextFeld *spielerFarbe;
-	TextFeld *teamName;
-	TextFeld *teamFarbe;
-	TextFeld *ping;
-	TextFeld *fortschritt;
-	LRahmen *rahmen;
-	AlphaFeld *titel;
-	RCArray < SpielLadenListeSpieler > *spieler;
-	SpielerTeamStruktur *sts;
-	Schrift *schrift;
-	Punkt bildschirmGröße;
-	unsigned char alpha;
-	int animation;
-	bool rend;
-	int ref;
+    int spielerAnzahl;
+    int höhe;
+    int breite;
+    double tickVal;
+    TextFeld *spielerName;
+    TextFeld *spielerFarbe;
+    TextFeld *teamName;
+    TextFeld *teamFarbe;
+    TextFeld *ping;
+    TextFeld *fortschritt;
+    LRahmen *rahmen;
+    AlphaFeld *titel;
+    RCArray < SpielLadenListeSpieler > *spieler;
+    SpielerTeamStruktur *sts;
+    Punkt bildschirmGröße;
+    unsigned char alpha;
+    int animation;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	SpielLadenListe( Schrift *zSchrift );
-	// Destruktor
-	~SpielLadenListe();
-	// nicht constant
-	void setSTS( SpielerTeamStruktur *sts );
-	void setSichtbar( bool sichtbar );
-	void addSpieler( int accountId, int spielerNummer );
-	void setSpielerFortschritt( int accountId, int prozent );
-	void setSpielerPing( int accountId, int ping );
-	bool tick( double tickval );
-	void render( Bild &zRObj );
-	// constant
-	int getHeight() const;
-	int getAlpha() const;
-	// Reference Counting
-	SpielLadenListe *getThis();
-	SpielLadenListe *release();
+    // Konstruktor
+    SpielLadenListe();
+    // Destruktor
+    ~SpielLadenListe();
+    // nicht constant
+    void setSTS( SpielerTeamStruktur *sts );
+    void setSichtbar( bool sichtbar );
+    void addSpieler( int accountId, int spielerNummer );
+    void setSpielerFortschritt( int accountId, int prozent );
+    void setSpielerPing( int accountId, int ping );
+    bool tick( double tickval );
+    void render( Bild &zRObj );
+    // constant
+    int getHeight() const;
+    int getAlpha() const;
 };
 };
 
 
 class SpielLaden : public Thread
 class SpielLaden : public Thread
 {
 {
 private:
 private:
-	int karteId;
-	Punkt bildschirmGröße;
-	Bild *hintergrundBild;
-	unsigned char ladenAlpha;
-	unsigned char hintergrundAlpha;
-	int ladenBild;
-	double tickVal;
-	bool geladen;
-	SpielLadenListe *liste;
-	int animation;
-	bool ende;
-	bool rend;
+    int karteId;
+    Punkt bildschirmGröße;
+    Bild *hintergrundBild;
+    unsigned char ladenAlpha;
+    unsigned char hintergrundAlpha;
+    int ladenBild;
+    double tickVal;
+    bool geladen;
+    SpielLadenListe *liste;
+    int animation;
+    bool ende;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	SpielLaden( Schrift *zSchrift );
-	// Destruktor
-	~SpielLaden();
-	// nicht constant
-	void setSpielerTeamStruktur( SpielerTeamStruktur *sts );
-	void setKarte( int karteId );
-	void setSichtbar( bool sichtbar );
-	void thread() override;
-	void addSpieler( int accountId, int spielerNummer );
-	void setSpielerFortschritt( int accountId, int prozent );
-	void setSpielerPing( int accountId, int ping );
-	bool tick( double tickVal );
-	void render( Bild &zRObj );
-	// constant
-	int getAlpha() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    SpielLaden();
+    // Destruktor
+    ~SpielLaden();
+    // nicht constant
+    void setSpielerTeamStruktur( SpielerTeamStruktur *sts );
+    void setKarte( int karteId );
+    void setSichtbar( bool sichtbar );
+    void thread() override;
+    void addSpieler( int accountId, int spielerNummer );
+    void setSpielerFortschritt( int accountId, int prozent );
+    void setSpielerPing( int accountId, int ping );
+    bool tick( double tickVal );
+    void render( Bild &zRObj );
+    // constant
+    int getAlpha() const;
 };
 };
 
 
 #endif
 #endif

+ 227 - 242
KSGClient/NachLogin/MiniGames/MiniGame.cpp

@@ -8,282 +8,267 @@
 // Inhalt der Minigame Klasse aus MiniGame.h
 // Inhalt der Minigame Klasse aus MiniGame.h
 // Konstruktor
 // Konstruktor
 MiniGame::MiniGame( char *name )
 MiniGame::MiniGame( char *name )
+    : ReferenceCounter()
 {
 {
-	xPos = 0;
-	yPos = 0;
-	xAbs = 0;
-	yAbs = 0;
-	zXPos = 0;
-	zYPos = 0;
-	xSpeed = 0;
-	ySpeed = 0;
-	this->name = new Text( name );
-	bgBild = 0;
-	mausAlpha = new AlphaFeld();
-	mausAlpha->setSize( 248, 98 );
-	mausAlpha->setFarbe( 0xFF00FF00 );
-	mausAlpha->setStrength( 50 );
-	rahmen = new LRahmen();
-	rahmen->setSize( 250, 100 );
-	rahmen->setFarbe( 0xFFFFFFFF );
-	rahmen->setRamenBreite( 1 );
-	sichtbar = 1;
-	alpha = 0;
-	mausIn = 0;
-	ok = 1;
-	rend = 0;
-	ref = 1;
-	Text *pfad = new Text( "data/Minigames/" );
-	pfad->append( name );
-	if( !DateiExistiert( pfad->getThis() ) )
-	{
-		ok = 0;
-		pfad->release();
-		return;
-	}
-	pfad->append( "/mg.ini" );
-	if( !DateiExistiert( pfad->getThis() ) )
-	{
-		ok = 0;
-		pfad->release();
-		return;
-	}
-	InitDatei *mgIni = new InitDatei( pfad );
-	if( !mgIni->laden() )
-	{
-		ok = 0;
-		mgIni->release();
-		return;
-	}
-	if( !mgIni->wertExistiert( "TitelBild" ) || !mgIni->wertExistiert( "TitelBildPfad" ) || !mgIni->wertExistiert( "DllPfad" ) )
-	{
-		ok = 0;
-		mgIni->release();
-		return;
-	}
-	Text *bPfad = new Text( "data/Minigames/" );
-	bPfad->append( name );
-	bPfad->append( "/" );
-	bPfad->append( mgIni->zWert( "TitelBildPfad" )->getText() );
-	if( !DateiExistiert( bPfad->getThis() ) )
-	{
-		ok = 0;
-		bPfad->release();
-		mgIni->release();
-		return;
-	}
-	LTDBDatei *bDat = new LTDBDatei();
-	bDat->setDatei( bPfad );
-	bDat->leseDaten( 0 );
-	bgBild = bDat->laden( 0, mgIni->getWert( "TitelBild" ) );
-	bDat->release();
-	mgIni->release();
-	if( !bgBild )
-		ok = 0;
+    xPos = 0;
+    yPos = 0;
+    xAbs = 0;
+    yAbs = 0;
+    zXPos = 0;
+    zYPos = 0;
+    xSpeed = 0;
+    ySpeed = 0;
+    this->name = new Text( name );
+    bgBild = 0;
+    mausAlpha = new AlphaFeld();
+    mausAlpha->setSize( 248, 98 );
+    mausAlpha->setFarbe( 0xFF00FF00 );
+    mausAlpha->setStrength( 50 );
+    rahmen = new LRahmen();
+    rahmen->setSize( 250, 100 );
+    rahmen->setFarbe( 0xFFFFFFFF );
+    rahmen->setRamenBreite( 1 );
+    sichtbar = 1;
+    alpha = 0;
+    mausIn = 0;
+    ok = 1;
+    rend = 0;
+    Text *pfad = new Text( "data/Minigames/" );
+    pfad->append( name );
+    if( !DateiExistiert( pfad->getText() ) )
+    {
+        ok = 0;
+        pfad->release();
+        return;
+    }
+    pfad->append( "/mg.ini" );
+    if( !DateiExistiert( pfad->getText() ) )
+    {
+        ok = 0;
+        pfad->release();
+        return;
+    }
+    InitDatei *mgIni = new InitDatei( pfad );
+    if( !mgIni->laden() )
+    {
+        ok = 0;
+        mgIni->release();
+        return;
+    }
+    if( !mgIni->wertExistiert( "TitelBild" ) || !mgIni->wertExistiert( "TitelBildPfad" ) || !mgIni->wertExistiert( "DllPfad" ) )
+    {
+        ok = 0;
+        mgIni->release();
+        return;
+    }
+    Text *bPfad = new Text( "data/Minigames/" );
+    bPfad->append( name );
+    bPfad->append( "/" );
+    bPfad->append( mgIni->zWert( "TitelBildPfad" )->getText() );
+    if( !DateiExistiert( bPfad->getText() ) )
+    {
+        ok = 0;
+        bPfad->release();
+        mgIni->release();
+        return;
+    }
+    LTDBDatei *bDat = new LTDBDatei();
+    bDat->setDatei( bPfad );
+    bDat->leseDaten( 0 );
+    bgBild = bDat->laden( 0, mgIni->getWert( "TitelBild" ) );
+    bDat->release();
+    mgIni->release();
+    if( !bgBild )
+        ok = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 MiniGame::~MiniGame()
 MiniGame::~MiniGame()
 {
 {
-	name->release();
-	if( bgBild )
-		bgBild->release();
-	mausAlpha->release();
-	rahmen->release();
+    name->release();
+    if( bgBild )
+        bgBild->release();
+    mausAlpha->release();
+    rahmen->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void MiniGame::setPosition( int x, int y )
 void MiniGame::setPosition( int x, int y )
 {
 {
-	if( !xPos && !yPos )
-	{
-		xPos = x;
-		yPos = y;
-	}
-	zXPos = x;
-	zYPos = y;
-	xAbs = (int)( zXPos - xPos );
-	yAbs = (int)( zYPos - yPos );
+    if( !xPos && !yPos )
+    {
+        xPos = x;
+        yPos = y;
+    }
+    zXPos = x;
+    zYPos = y;
+    xAbs = (int)( zXPos - xPos );
+    yAbs = (int)( zYPos - yPos );
 }
 }
 
 
 void MiniGame::setSichtbar( bool sichtbar )
 void MiniGame::setSichtbar( bool sichtbar )
 {
 {
-	this->sichtbar = sichtbar;
+    this->sichtbar = sichtbar;
 }
 }
 
 
 void MiniGame::doPublicMausEreignis( MausEreignis &me )
 void MiniGame::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !this->sichtbar )
-		return;
-	if( me.mx > xPos && me.mx < xPos + 250 && me.my > yPos && me.my < yPos + 100 )
-	{
-		if( !mausIn )
-		{
-			rend = 1;
-			rahmen->setFarbe( 0xFF00FF00 );
-		}
-		mausIn = 1;
-	}
-	else
-	{
-		if( mausIn )
-		{
-			rend = 1;
-			rahmen->setFarbe( 0xFFFFFFFF );
-		}
-		mausIn = 0;
-	}
-	me.verarbeitet |= mausIn;
+    if( !this->sichtbar )
+        return;
+    if( me.mx > xPos && me.mx < xPos + 250 && me.my > yPos && me.my < yPos + 100 )
+    {
+        if( !mausIn )
+        {
+            rend = 1;
+            rahmen->setFarbe( 0xFF00FF00 );
+        }
+        mausIn = 1;
+    }
+    else
+    {
+        if( mausIn )
+        {
+            rend = 1;
+            rahmen->setFarbe( 0xFFFFFFFF );
+        }
+        mausIn = 0;
+    }
+    me.verarbeitet |= mausIn;
 }
 }
 
 
 bool MiniGame::tick( double z )
 bool MiniGame::tick( double z )
 {
 {
-	bool ret = rend;
-	rend = 0;
-	int val = (int)( z * 150 );
-	if( sichtbar && alpha != 255 )
-	{
-		if( alpha + val > 255 )
-			alpha = 255;
-		else
-			alpha += val;
-		ret = 1;
-	}
-	if( !sichtbar && alpha )
-	{
-		if( alpha - val < 0 )
-			alpha = 0;
-		else
-			alpha -= val;
-		ret = 1;
-	}
-	if( xPos != zXPos || yPos != zYPos )
-	{
-		if( xPos != zXPos )
-		{
-			if( xAbs > 0 )
-			{
-				if( zXPos - xPos >= xAbs / 2 )
-					xSpeed += xAbs * z;
-				else
-				{
-					xSpeed -= xAbs * z;
-					if( xSpeed < zXPos - xPos )
-						xSpeed += xAbs * z;
-				}
-			}
-			else
-			{
-				if( zXPos - xPos <= xAbs / 2 )
-					xSpeed += xAbs * z;
-				else
-				{
-					xSpeed -= xAbs * z;
-					if( xSpeed > zXPos - xPos )
-						xSpeed += xAbs * z;
-				}
-			}
-		}
-		if( yPos != zYPos )
-		{
-			if( yAbs > 0 )
-			{
-				if( zYPos - yPos >= yAbs / 2 )
-					ySpeed += yAbs * z;
-				else
-				{
-					ySpeed -= yAbs * z;
-					if( ySpeed < zYPos - yPos )
-						ySpeed += yAbs * z;
-				}
-			}
-			else
-			{
-				if( zYPos - yPos <= yAbs / 2 )
-					ySpeed += yAbs * z;
-				else
-				{
-					ySpeed -= yAbs * z;
-					if( ySpeed > zYPos - yPos )
-						ySpeed += yAbs * z;
-				}
-			}
-		}
-		xPos += xSpeed * z;
-		yPos += ySpeed * z;
-		if( xAbs > 0 )
-		{
-			if( xPos >= zXPos )
-			{
-				xPos = zXPos;
-				xSpeed = 0;
-			}
-		}
-		else
-		{
-			if( xPos <= zXPos )
-			{
-				xPos = zXPos;
-				xSpeed = 0;
-			}
-		}
-		if( yAbs > 0 )
-		{
-			if( yPos >= zYPos )
-			{
-				yPos = zYPos;
-				ySpeed = 0;
-			}
-		}
-		else
-		{
-			if( yPos <= zYPos )
-			{
-				yPos = zYPos;
-				ySpeed = 0;
-			}
-		}
-		ret = 1;
-	}
-	return ret;
+    bool ret = rend;
+    rend = 0;
+    int val = (int)( z * 150 );
+    if( sichtbar && alpha != 255 )
+    {
+        if( alpha + val > 255 )
+            alpha = 255;
+        else
+            alpha += val;
+        ret = 1;
+    }
+    if( !sichtbar && alpha )
+    {
+        if( alpha - val < 0 )
+            alpha = 0;
+        else
+            alpha -= val;
+        ret = 1;
+    }
+    if( xPos != zXPos || yPos != zYPos )
+    {
+        if( xPos != zXPos )
+        {
+            if( xAbs > 0 )
+            {
+                if( zXPos - xPos >= xAbs / 2 )
+                    xSpeed += xAbs * z;
+                else
+                {
+                    xSpeed -= xAbs * z;
+                    if( xSpeed < zXPos - xPos )
+                        xSpeed += xAbs * z;
+                }
+            }
+            else
+            {
+                if( zXPos - xPos <= xAbs / 2 )
+                    xSpeed += xAbs * z;
+                else
+                {
+                    xSpeed -= xAbs * z;
+                    if( xSpeed > zXPos - xPos )
+                        xSpeed += xAbs * z;
+                }
+            }
+        }
+        if( yPos != zYPos )
+        {
+            if( yAbs > 0 )
+            {
+                if( zYPos - yPos >= yAbs / 2 )
+                    ySpeed += yAbs * z;
+                else
+                {
+                    ySpeed -= yAbs * z;
+                    if( ySpeed < zYPos - yPos )
+                        ySpeed += yAbs * z;
+                }
+            }
+            else
+            {
+                if( zYPos - yPos <= yAbs / 2 )
+                    ySpeed += yAbs * z;
+                else
+                {
+                    ySpeed -= yAbs * z;
+                    if( ySpeed > zYPos - yPos )
+                        ySpeed += yAbs * z;
+                }
+            }
+        }
+        xPos += xSpeed * z;
+        yPos += ySpeed * z;
+        if( xAbs > 0 )
+        {
+            if( xPos >= zXPos )
+            {
+                xPos = zXPos;
+                xSpeed = 0;
+            }
+        }
+        else
+        {
+            if( xPos <= zXPos )
+            {
+                xPos = zXPos;
+                xSpeed = 0;
+            }
+        }
+        if( yAbs > 0 )
+        {
+            if( yPos >= zYPos )
+            {
+                yPos = zYPos;
+                ySpeed = 0;
+            }
+        }
+        else
+        {
+            if( yPos <= zYPos )
+            {
+                yPos = zYPos;
+                ySpeed = 0;
+            }
+        }
+        ret = 1;
+    }
+    return ret;
 }
 }
 
 
 void MiniGame::render( Bild &zRObj )
 void MiniGame::render( Bild &zRObj )
 {
 {
-	zRObj.setAlpha( alpha );
-	zRObj.drawBild( (int)( xPos ), (int)( yPos ), 250, 100, *bgBild );
-	rahmen->setPosition( (int)xPos, (int)yPos );
-	rahmen->render( zRObj );
-	if( mausIn )
-	{
-		mausAlpha->setPosition( (int)xPos + 1, (int)yPos + 1 );
-		mausAlpha->render( zRObj );
-	}
-	zRObj.releaseAlpha();
+    zRObj.setAlpha( alpha );
+    zRObj.drawBild( (int)( xPos ), (int)( yPos ), 250, 100, *bgBild );
+    rahmen->setPosition( (int)xPos, (int)yPos );
+    rahmen->render( zRObj );
+    if( mausIn )
+    {
+        mausAlpha->setPosition( (int)xPos + 1, (int)yPos + 1 );
+        mausAlpha->render( zRObj );
+    }
+    zRObj.releaseAlpha();
 }
 }
 
 
 // constant
 // constant
 Text *MiniGame::zName()
 Text *MiniGame::zName()
 {
 {
-	return name;
+    return name;
 }
 }
 
 
 bool MiniGame::istOk() const
 bool MiniGame::istOk() const
 {
 {
-	return ok;
-}
-
-// Reference Counting
-MiniGame *MiniGame::getThis()
-{
-	ref++;
-	return this;
-}
-
-MiniGame *MiniGame::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return ok;
 }
 }

+ 31 - 35
KSGClient/NachLogin/MiniGames/MiniGame.h

@@ -8,45 +8,41 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class MiniGame
+class MiniGame : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	double xPos;
-	double yPos;
-	int xAbs;
-	int yAbs;
-	int zXPos;
-	int zYPos;
-	double xSpeed;
-	double ySpeed;
-	Text *name;
-	Bild *bgBild;
-	AlphaFeld *mausAlpha;
-	LRahmen *rahmen;
-	bool sichtbar;
-	unsigned char alpha;
-	bool mausIn;
-	bool ok;
-	bool rend;
-	int ref;
+    double xPos;
+    double yPos;
+    int xAbs;
+    int yAbs;
+    int zXPos;
+    int zYPos;
+    double xSpeed;
+    double ySpeed;
+    Text *name;
+    Bild *bgBild;
+    AlphaFeld *mausAlpha;
+    LRahmen *rahmen;
+    bool sichtbar;
+    unsigned char alpha;
+    bool mausIn;
+    bool ok;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	MiniGame( char *name );
-	// Destruktor
-	~MiniGame();
-	// nicht constant
-	void setPosition( int x, int y );
-	void setSichtbar( bool sichtbar );
-	void doPublicMausEreignis( MausEreignis &me );
-	bool tick( double z );
-	void render( Bild &zRObj );
-	// constant
-	Text *zName();
-	bool istOk() const;
-	// Reference Counting
-	MiniGame *getThis();
-	MiniGame *release();
+    // Konstruktor
+    MiniGame( char *name );
+    // Destruktor
+    ~MiniGame();
+    // nicht constant
+    void setPosition( int x, int y );
+    void setSichtbar( bool sichtbar );
+    void doPublicMausEreignis( MausEreignis &me );
+    bool tick( double z );
+    void render( Bild &zRObj );
+    // constant
+    Text *zName();
+    bool istOk() const;
 };
 };
 
 
 #endif
 #endif

+ 23 - 25
KSGClient/NachLogin/MiniGames/Minigames.cpp

@@ -98,14 +98,14 @@ void MGLaden::thread()
 {
 {
     Text *pfad = new Text( "data/Minigames/" );
     Text *pfad = new Text( "data/Minigames/" );
     pfad->append( name->getText() );
     pfad->append( name->getText() );
-    if( !DateiExistiert( pfad->getThis() ) )
+    if( !DateiExistiert( pfad->getText() ) )
     {
     {
         pfad->release();
         pfad->release();
         run = 0;
         run = 0;
         return;
         return;
     }
     }
     pfad->append( "/mg.ini" );
     pfad->append( "/mg.ini" );
-    if( !DateiExistiert( pfad->getThis() ) )
+    if( !DateiExistiert( pfad->getText() ) )
     {
     {
         pfad->release();
         pfad->release();
         run = 0;
         run = 0;
@@ -129,7 +129,7 @@ void MGLaden::thread()
     dllPfad->append( "/" );
     dllPfad->append( "/" );
     dllPfad->append( mgIni->zWert( "DllPfad" )->getText() );
     dllPfad->append( mgIni->zWert( "DllPfad" )->getText() );
     mgIni->release();
     mgIni->release();
-    if( !DateiExistiert( dllPfad->getThis() ) )
+    if( !DateiExistiert( dllPfad->getText() ) )
     {
     {
         dllPfad->release();
         dllPfad->release();
         run = 0;
         run = 0;
@@ -159,10 +159,10 @@ void MGLaden::thread()
     if( !minigameClient )
     if( !minigameClient )
         minigameClient = mainClient->createMinigameServerClient();
         minigameClient = mainClient->createMinigameServerClient();
     if( minigameClient )
     if( minigameClient )
-        game->setMinigameClientZ( minigameClient->getThis() );
+        game->setMinigameClientZ( dynamic_cast<KSGClient::MinigameServerClient *>( minigameClient->getThis() ) );
     if( !game->laden() )
     if( !game->laden() )
     {
     {
-        game = game->release();
+        game = (MiniGameV *)game->release();
         Framework::getDLLRegister()->releaseDLL( name->getText() );
         Framework::getDLLRegister()->releaseDLL( name->getText() );
     }
     }
     run = 0;
     run = 0;
@@ -182,11 +182,10 @@ MiniGameV *MGLaden::zGame() const
 
 
 // Inhalt der MiniGames Klasse aus MiniGames.h
 // Inhalt der MiniGames Klasse aus MiniGames.h
 // Konstruktor
 // Konstruktor
-MiniGames::MiniGames( Schrift * zSchrift, Fenster * zNachLoginFenster, int x )
+MiniGames::MiniGames( Fenster *zNachLoginFenster, int x )
     : Zeichnung()
     : Zeichnung()
 {
 {
-    schrift = zSchrift->getThis();
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     pos = Punkt( x, 67 );
     pos = Punkt( x, 67 );
     gr = Punkt( 102, 32 );
     gr = Punkt( 102, 32 );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
@@ -209,28 +208,28 @@ MiniGames::MiniGames( Schrift * zSchrift, Fenster * zNachLoginFenster, int x )
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     laden->setPosition( 375, 225 );
     laden->setPosition( 375, 225 );
     games = new RCArray< MiniGame >();
     games = new RCArray< MiniGame >();
-    suchFilter = initTextFeld( 10, 10, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Suchfilter:" );
-    TextRenderer tr( zSchrift->getThis() );
+    suchFilter = initTextFeld( 10, 10, 100, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Suchfilter:" );
+    TextRenderer tr( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     tr.setSchriftSize( 12 );
     tr.setSchriftSize( 12 );
     suchFilter->setSize( tr.getTextBreite( suchFilter->zText()->getText() ), 20 );
     suchFilter->setSize( tr.getTextBreite( suchFilter->zText()->getText() ), 20 );
-    suchName = initTextFeld( 20 + suchFilter->getBreite(), 10, 200, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    suchen = initKnopf( 230 + suchFilter->getBreite(), 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Suchen" );
+    suchName = initTextFeld( 20 + suchFilter->getBreite(), 10, 200, 20, TextFeld::Style::TextFeld, "" );
+    suchen = initKnopf( 230 + suchFilter->getBreite(), 10, 100, 20, Knopf::Style::Sichtbar, "Suchen" );
     gefiltert = 0;
     gefiltert = 0;
-    zNachLoginFenster->addMember( getThis() );
+    getThis();
+    zNachLoginFenster->addMember( this );
     dg = 0;
     dg = 0;
     mgl = 0;
     mgl = 0;
     mgInitialized = 0;
     mgInitialized = 0;
     fullscreen = 0;
     fullscreen = 0;
     slo = 0;
     slo = 0;
     minAlpha = 0;
     minAlpha = 0;
-    new MGSuchen( (MiniGames *)getThis() );
+    getThis();
+    new MGSuchen( this );
 }
 }
 
 
 // Destruktor
 // Destruktor
 MiniGames::~MiniGames()
 MiniGames::~MiniGames()
 {
 {
-    if( schrift )
-        schrift->release();
     rahmen->release();
     rahmen->release();
     suchName->release();
     suchName->release();
     suchFilter->release();
     suchFilter->release();
@@ -250,7 +249,7 @@ void MiniGames::setSichtbar( bool sicht )
     rend = 1;
     rend = 1;
 }
 }
 
 
-void MiniGames::addMiniGame( MiniGame * mg )
+void MiniGames::addMiniGame( MiniGame *mg )
 {
 {
     games->add( mg );
     games->add( mg );
     if( gefiltert )
     if( gefiltert )
@@ -266,13 +265,13 @@ void MiniGames::setAktuell( bool aktuell, int dg )
 {
 {
     this->aktuell = aktuell;
     this->aktuell = aktuell;
     if( aktuell )
     if( aktuell )
-        new MGSuchen( (MiniGames *)getThis() );
+        new MGSuchen( dynamic_cast<MiniGames *>( getThis() ) );
     if( !this->dg )
     if( !this->dg )
         this->dg = dg;
         this->dg = dg;
     if( !aktuell && !updateH->hat( dg ) )
     if( !aktuell && !updateH->hat( dg ) )
     {
     {
-        nachLogin->zNachrichtenListe()->addNachricht( new SpielUpdateNachricht( schrift, new Text( "Update" ), new Text( "Die minigames müssen aktualisiert werden." ), dg,
-                                                      []()
+        nachLogin->zNachrichtenListe()->addNachricht( new SpielUpdateNachricht( new Text( "Update" ), new Text( "Die minigames müssen aktualisiert werden." ), dg,
+                                                                                []()
         {
         {
             if( nachLogin && nachLogin->zMGFenster() )
             if( nachLogin && nachLogin->zMGFenster() )
                 nachLogin->zMGFenster()->setAktuell( 1 );
                 nachLogin->zMGFenster()->setAktuell( 1 );
@@ -345,7 +344,7 @@ void MiniGames::filter()
     delete[] fertig;
     delete[] fertig;
 }
 }
 
 
-void MiniGames::doPublicMausEreignis( MausEreignis & me )
+void MiniGames::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( laden->istSichtbar() || !sichtbar )
     if( laden->istSichtbar() || !sichtbar )
         return;
         return;
@@ -379,7 +378,7 @@ void MiniGames::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void MiniGames::doTastaturEreignis( TastaturEreignis & te )
+void MiniGames::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( laden->istSichtbar() || !sichtbar )
     if( laden->istSichtbar() || !sichtbar )
         return;
         return;
@@ -408,8 +407,7 @@ bool MiniGames::tick( double z )
         else if( !mgInitialized )
         else if( !mgInitialized )
         {
         {
             mgl->zGame()->setMinigameAPI( this );
             mgl->zGame()->setMinigameAPI( this );
-            mgl->zGame()->setSchriftZ( schrift->getThis() );
-            mgl->zGame()->setBildschirmZ( hauptScreen );
+            mgl->zGame()->setUIFactory( uiFactory );
             mgInitialized = 1;
             mgInitialized = 1;
         }
         }
         if( !slo )
         if( !slo )
@@ -559,7 +557,7 @@ bool MiniGames::tick( double z )
     return ret;
     return ret;
 }
 }
 
 
-void MiniGames::render( Bild & zRObj )
+void MiniGames::render( Bild &zRObj )
 {
 {
     if( pos == pos1 )
     if( pos == pos1 )
         return;
         return;

+ 58 - 59
KSGClient/NachLogin/MiniGames/Minigames.h

@@ -15,88 +15,87 @@ class MiniGames; // aus dieser Datei
 class MGSuchen : private Thread
 class MGSuchen : private Thread
 {
 {
 private:
 private:
-	MiniGames *mGames;
+    MiniGames *mGames;
 public:
 public:
-	// Konstruktor
-	MGSuchen( MiniGames *mGames );
-	// Destruktor
-	~MGSuchen();
-	// nicht constant
-	void thread() override;
+    // Konstruktor
+    MGSuchen( MiniGames *mGames );
+    // Destruktor
+    ~MGSuchen();
+    // nicht constant
+    void thread() override;
 };
 };
 
 
 class MGLaden : public Thread
 class MGLaden : public Thread
 {
 {
 private:
 private:
-	Text *name;
-	MiniGameV *game;
+    Text *name;
+    MiniGameV *game;
 
 
 public:
 public:
-	// Konstruktor
-	MGLaden( char *name );
-	// Destruktor
-	~MGLaden();
-	// nicht constant
-	void thread();
-	// constant
-	bool fertig() const;
-	MiniGameV *zGame() const;
+    // Konstruktor
+    MGLaden( char *name );
+    // Destruktor
+    ~MGLaden();
+    // nicht constant
+    void thread();
+    // constant
+    bool fertig() const;
+    MiniGameV *zGame() const;
 };
 };
 
 
 class MiniGames : public Zeichnung, MinigameAPI
 class MiniGames : public Zeichnung, MinigameAPI
 {
 {
 private:
 private:
-	Punkt begPos;
-	Punkt begGröße;
-	Punkt pos1;
-	Punkt größe1;
-	Punkt pos2;
-	Punkt größe2;
-	Punkt bildschirmGröße;
-	LRahmen *rahmen;
-	Animation2D *laden;
-	TextFeld *suchFilter;
-	TextFeld *suchName;
-	Knopf *suchen;
-	RCArray< MiniGame > *games;
-	MGLaden *mgl;
-	Schrift *schrift;
+    Punkt begPos;
+    Punkt begGröße;
+    Punkt pos1;
+    Punkt größe1;
+    Punkt pos2;
+    Punkt größe2;
+    Punkt bildschirmGröße;
+    LRahmen *rahmen;
+    Animation2D *laden;
+    TextFeld *suchFilter;
+    TextFeld *suchName;
+    Knopf *suchen;
+    RCArray< MiniGame > *games;
+    MGLaden *mgl;
     bool mgInitialized;
     bool mgInitialized;
-	int dg;
-	bool aktuell;
-	bool gefiltert;
-	int animation;
-	int alpha;
-	bool sichtbar;
-	int prozent1;
-	int prozent2;
-	double tickVal;
+    int dg;
+    bool aktuell;
+    bool gefiltert;
+    int animation;
+    int alpha;
+    bool sichtbar;
+    int prozent1;
+    int prozent2;
+    double tickVal;
     bool fullscreen;
     bool fullscreen;
-	int alpha2;
+    int alpha2;
     int slo;
     int slo;
     unsigned char minAlpha;
     unsigned char minAlpha;
 
 
 public:
 public:
-	// Konstruktor
-	MiniGames( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
-	// Destruktor
-	~MiniGames();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	void addMiniGame( MiniGame *mg );
-	void setAktuell( bool aktuell, int dg = 0 );
+    // Konstruktor
+    MiniGames( Fenster *zNachLoginFenster, int x );
+    // Destruktor
+    ~MiniGames();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    void addMiniGame( MiniGame *mg );
+    void setAktuell( bool aktuell, int dg = 0 );
     void setFullScreenMode( bool enabled ) override;
     void setFullScreenMode( bool enabled ) override;
     void showLoadingOverlay( unsigned char minAlpha ) override;
     void showLoadingOverlay( unsigned char minAlpha ) override;
     void hideLoadingOverlay() override;
     void hideLoadingOverlay() override;
     Bild *loadBild( const char *path ) override;
     Bild *loadBild( const char *path ) override;
-	void filter();
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	bool tick( double z ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istAnimiert() const;
-	bool istSichtbar() const;
+    void filter();
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    bool tick( double z ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istAnimiert() const;
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 47 - 51
KSGClient/NachLogin/NachLogin.cpp

@@ -7,13 +7,9 @@
 
 
 // Inhalt der NachLogin Klasse aus NachLogin.h
 // Inhalt der NachLogin Klasse aus NachLogin.h
 // Konstruktor
 // Konstruktor
-NachLogin::NachLogin( Schrift *zSchrift, Bildschirm *zBildschirm )
+NachLogin::NachLogin()
     : Zeichnung()
     : Zeichnung()
 {
 {
-    if( zSchrift )
-        schrift = zSchrift->getThis();
-    if( zBildschirm )
-        bildschirm = zBildschirm->getThis();
     fenster = 0;
     fenster = 0;
     titel = 0;
     titel = 0;
     freunde = 0;
     freunde = 0;
@@ -36,10 +32,6 @@ NachLogin::~NachLogin()
 {
 {
     if( fenster )
     if( fenster )
         setAnzeige( NLALogin );
         setAnzeige( NLALogin );
-    if( schrift )
-        schrift = schrift->release();
-    if( bildschirm )
-        bildschirm = bildschirm->release();
     if( editor )
     if( editor )
         editor->release();
         editor->release();
 }
 }
@@ -50,31 +42,31 @@ void NachLogin::login() // Initialisiert die Oberfl
     lockZeichnung();
     lockZeichnung();
     if( fenster )
     if( fenster )
         logout();
         logout();
-    fenster = new Fenster();
-    fenster->addStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar );
-    fenster->setSize( bildschirm->getBackBufferSize() );
-    leistenFenster = new Fenster();
-    leistenFenster->addStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar | Fenster::Style::METransparenz );
-    leistenFenster->setSize( bildschirm->getBackBufferSize() );
-    titel = new TitelLeiste( leistenFenster, schrift );
-    spielenFenster = new Spiele( schrift, fenster, titel->getSpielenX() );
-    shopFenster = new Shop( schrift, fenster, titel->getSpielenX() + 101 );
-    accountAnsehenFenster = new AccountAnsehen( schrift, fenster, titel->getSpielenX() + 202 );
-    mgFenster = new MiniGames( schrift, fenster, titel->getSpielenX() + 303 );
-    newsFenster = new Neuigkeiten( schrift, fenster, titel->getSpielenX() + 404 );
-    editorFenster = new Editor( schrift, fenster, titel->getSpielenX() );
-    nachrichtenListe = new NachrichtenListe( schrift, leistenFenster );
-    freunde = new FreundesListe( schrift, leistenFenster );
-    chatLeiste = new ChatLeiste( schrift, leistenFenster );
-    op = new Einstellungen( schrift, leistenFenster );
-    imSpiel = new ImSpiel( schrift );
-    fenster->addMember( leistenFenster->getThis() );
-    bildschirm->addMember( getThis() );
+    fenster = uiFactory.createFenster( uiFactory.initParam );
+    fenster->setStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar );
+    fenster->setSize( uiFactory.initParam.bildschirm->getBackBufferSize() );
+    leistenFenster = uiFactory.createFenster( uiFactory.initParam );
+    leistenFenster->setStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar | Fenster::Style::METransparenz );
+    leistenFenster->setSize( uiFactory.initParam.bildschirm->getBackBufferSize() );
+    titel = new TitelLeiste( leistenFenster );
+    spielenFenster = new Spiele( fenster, titel->getSpielenX() );
+    shopFenster = new Shop( fenster, titel->getSpielenX() + 101 );
+    accountAnsehenFenster = new AccountAnsehen( fenster, titel->getSpielenX() + 202 );
+    mgFenster = new MiniGames( fenster, titel->getSpielenX() + 303 );
+    newsFenster = new Neuigkeiten( fenster, titel->getSpielenX() + 404 );
+    editorFenster = new Editor( fenster, titel->getSpielenX() );
+    nachrichtenListe = new NachrichtenListe( leistenFenster );
+    freunde = new FreundesListe( leistenFenster );
+    chatLeiste = new ChatLeiste( leistenFenster );
+    op = new Einstellungen( leistenFenster );
+    imSpiel = new ImSpiel();
+    fenster->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
+    uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( getThis() ) );
     MausEreignis me;
     MausEreignis me;
     me.id = ME_RLinks;
     me.id = ME_RLinks;
-    bildschirm->lock();
+    uiFactory.initParam.bildschirm->lock();
     titel->druckSpielen( me );
     titel->druckSpielen( me );
-    bildschirm->unlock();
+    uiFactory.initParam.bildschirm->unlock();
     status = NLANormal;
     status = NLANormal;
     unlockZeichnung();
     unlockZeichnung();
 }
 }
@@ -83,8 +75,7 @@ void NachLogin::logout() // Setzt die Oberfl
 {
 {
     lockZeichnung();
     lockZeichnung();
     status = NLALogin;
     status = NLALogin;
-    if( bildschirm )
-        bildschirm->removeMember( this );
+    uiFactory.initParam.bildschirm->removeMember( this );
     if( spielenFenster )
     if( spielenFenster )
         spielenFenster = (Spiele *)spielenFenster->release();
         spielenFenster = (Spiele *)spielenFenster->release();
     if( shopFenster )
     if( shopFenster )
@@ -99,15 +90,20 @@ void NachLogin::logout() // Setzt die Oberfl
         editorFenster = (Editor *)editorFenster->release();
         editorFenster = (Editor *)editorFenster->release();
     if( titel )
     if( titel )
     {
     {
+        titel->warteAufThread( 10000 );
         titel->ende();
         titel->ende();
         titel = (TitelLeiste *)titel->release();
         titel = (TitelLeiste *)titel->release();
     }
     }
     if( freunde )
     if( freunde )
+    {
+        freunde->warteAufThread( 10000 );
+        freunde->ende();
         freunde = (FreundesListe *)freunde->release();
         freunde = (FreundesListe *)freunde->release();
+    }
     if( chatLeiste )
     if( chatLeiste )
         chatLeiste = (ChatLeiste *)chatLeiste->release();
         chatLeiste = (ChatLeiste *)chatLeiste->release();
     if( nachrichtenListe )
     if( nachrichtenListe )
-        nachrichtenListe = nachrichtenListe->release();
+        nachrichtenListe = (NachrichtenListe *)nachrichtenListe->release();
     if( leistenFenster )
     if( leistenFenster )
         leistenFenster = (Fenster *)leistenFenster->release();
         leistenFenster = (Fenster *)leistenFenster->release();
     if( fenster )
     if( fenster )
@@ -119,12 +115,12 @@ void NachLogin::logout() // Setzt die Oberfl
     unlockZeichnung();
     unlockZeichnung();
 }
 }
 
 
-void NachLogin::setSpielAufzeichnung( AufzeichnungV * video ) // Setzt die Spiel Aufzeichnung
+void NachLogin::setSpielAufzeichnung( AufzeichnungV *video ) // Setzt die Spiel Aufzeichnung
 {
 {
     spielAufzeichnung = video;
     spielAufzeichnung = video;
 }
 }
 
 
-void NachLogin::setEditor( EditorV * editor ) // Setzt die Spiel Aufzeichnung
+void NachLogin::setEditor( EditorV *editor ) // Setzt die Spiel Aufzeichnung
 {
 {
     if( this->editor )
     if( this->editor )
         this->editor->release();
         this->editor->release();
@@ -141,14 +137,14 @@ void NachLogin::setAnzeige( NachLoginAnzeige s ) // Setzt den Status des Program
         leistenFenster->doPublicMausEreignis( me );
         leistenFenster->doPublicMausEreignis( me );
         leistenFenster->removeStyle( Fenster::Style::Sichtbar );
         leistenFenster->removeStyle( Fenster::Style::Sichtbar );
         fenster->removeMember( leistenFenster );
         fenster->removeMember( leistenFenster );
-        bildschirm->addMember( leistenFenster->getThis() );
+        uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
         titel->setImSpiel( 1 );
         titel->setImSpiel( 1 );
     }
     }
     else if( status == NLAImSpiel )
     else if( status == NLAImSpiel )
     {
     {
         imSpiel->setSichtbar( 0 );
         imSpiel->setSichtbar( 0 );
-        fenster->addMember( leistenFenster->getThis() );
-        bildschirm->removeMember( leistenFenster );
+        fenster->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
+        uiFactory.initParam.bildschirm->removeMember( leistenFenster );
         leistenFenster->addStyle( Fenster::Style::Sichtbar );
         leistenFenster->addStyle( Fenster::Style::Sichtbar );
         titel->setImSpiel( 0 );
         titel->setImSpiel( 0 );
     }
     }
@@ -158,15 +154,15 @@ void NachLogin::setAnzeige( NachLoginAnzeige s ) // Setzt den Status des Program
         leistenFenster->doPublicMausEreignis( me );
         leistenFenster->doPublicMausEreignis( me );
         leistenFenster->removeStyle( Fenster::Style::Sichtbar );
         leistenFenster->removeStyle( Fenster::Style::Sichtbar );
         fenster->removeMember( leistenFenster );
         fenster->removeMember( leistenFenster );
-        bildschirm->addMember( leistenFenster->getThis() );
+        uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
         titel->setImVideo( 1 );
         titel->setImVideo( 1 );
     }
     }
     else if( status == NLASpielVideo )
     else if( status == NLASpielVideo )
     {
     {
-        fenster->addMember( leistenFenster->getThis() );
-        bildschirm->removeMember( leistenFenster );
+        fenster->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
+        uiFactory.initParam.bildschirm->removeMember( leistenFenster );
         leistenFenster->addStyle( Fenster::Style::Sichtbar );
         leistenFenster->addStyle( Fenster::Style::Sichtbar );
-        spielAufzeichnung = spielAufzeichnung->release();
+        spielAufzeichnung = (AufzeichnungV *)spielAufzeichnung->release();
         titel->setImVideo( 0 );
         titel->setImVideo( 0 );
     }
     }
     if( s == NLAEditor )
     if( s == NLAEditor )
@@ -175,15 +171,15 @@ void NachLogin::setAnzeige( NachLoginAnzeige s ) // Setzt den Status des Program
         leistenFenster->doPublicMausEreignis( me );
         leistenFenster->doPublicMausEreignis( me );
         leistenFenster->removeStyle( Fenster::Style::Sichtbar );
         leistenFenster->removeStyle( Fenster::Style::Sichtbar );
         fenster->removeMember( leistenFenster );
         fenster->removeMember( leistenFenster );
-        bildschirm->addMember( leistenFenster->getThis() );
+        uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
         titel->setImSpiel( 1 );
         titel->setImSpiel( 1 );
     }
     }
     else if( status == NLAEditor )
     else if( status == NLAEditor )
     {
     {
-        fenster->addMember( leistenFenster->getThis() );
-        bildschirm->removeMember( leistenFenster );
+        fenster->addMember( dynamic_cast<Zeichnung *>( leistenFenster->getThis() ) );
+        uiFactory.initParam.bildschirm->removeMember( leistenFenster );
         leistenFenster->addStyle( Fenster::Style::Sichtbar );
         leistenFenster->addStyle( Fenster::Style::Sichtbar );
-        editor = editor->release();
+        editor = (EditorV *)editor->release();
         titel->setImSpiel( 0 );
         titel->setImSpiel( 0 );
     }
     }
     if( s == NLALogin )
     if( s == NLALogin )
@@ -208,7 +204,7 @@ void NachLogin::showBars()
     leistenFenster->addStyle( Fenster::Style::Sichtbar );
     leistenFenster->addStyle( Fenster::Style::Sichtbar );
 }
 }
 
 
-void NachLogin::doPublicMausEreignis( MausEreignis & me )
+void NachLogin::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( status == NLASpielVideo )
     if( status == NLASpielVideo )
     {
     {
@@ -264,7 +260,7 @@ void NachLogin::doPublicMausEreignis( MausEreignis & me )
     unlockZeichnung();
     unlockZeichnung();
 }
 }
 
 
-void NachLogin::doTastaturEreignis( TastaturEreignis & te )
+void NachLogin::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( status == NLASpielVideo )
     if( status == NLASpielVideo )
     {
     {
@@ -382,7 +378,7 @@ bool NachLogin::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void NachLogin::render( Bild & zRObj )
+void NachLogin::render( Bild &zRObj )
 {
 {
     if( status == NLASpielVideo )
     if( status == NLASpielVideo )
     {
     {
@@ -420,7 +416,7 @@ void NachLogin::render( Bild & zRObj )
 }
 }
 
 
 // constant
 // constant
-TitelLeiste * NachLogin::zTitelLeiste() const // gibt die Titelleiste zurück
+TitelLeiste *NachLogin::zTitelLeiste() const // gibt die Titelleiste zurück
 {
 {
     return titel;
     return titel;
 }
 }

+ 47 - 49
KSGClient/NachLogin/NachLogin.h

@@ -19,66 +19,64 @@ using namespace Framework;
 
 
 enum NachLoginAnzeige
 enum NachLoginAnzeige
 {
 {
-	NLALogin,
-	NLANormal,
-	NLAImSpiel,
-	NLASpielVideo,
+    NLALogin,
+    NLANormal,
+    NLAImSpiel,
+    NLASpielVideo,
     NLAEditor
     NLAEditor
 };
 };
 
 
 class NachLogin : public Zeichnung
 class NachLogin : public Zeichnung
 {
 {
 private:
 private:
-	Fenster *fenster;
-	Fenster *leistenFenster;
-	Schrift *schrift;
-	Bildschirm *bildschirm;
-	TitelLeiste *titel;
-	FreundesListe *freunde;
-	ChatLeiste *chatLeiste;
-	NachrichtenListe *nachrichtenListe;
-	Spiele *spielenFenster;
-	Shop *shopFenster;
-	AccountAnsehen *accountAnsehenFenster;
-	MiniGames *mgFenster;
-	Neuigkeiten *newsFenster;
-	Editor *editorFenster;
-	ImSpiel *imSpiel;
-	AufzeichnungV *spielAufzeichnung;
-	Einstellungen *op;
-	NachLoginAnzeige status;
+    Fenster *fenster;
+    Fenster *leistenFenster;
+    TitelLeiste *titel;
+    FreundesListe *freunde;
+    ChatLeiste *chatLeiste;
+    NachrichtenListe *nachrichtenListe;
+    Spiele *spielenFenster;
+    Shop *shopFenster;
+    AccountAnsehen *accountAnsehenFenster;
+    MiniGames *mgFenster;
+    Neuigkeiten *newsFenster;
+    Editor *editorFenster;
+    ImSpiel *imSpiel;
+    AufzeichnungV *spielAufzeichnung;
+    Einstellungen *op;
+    NachLoginAnzeige status;
     EditorV *editor;
     EditorV *editor;
 
 
 public:
 public:
-	// Konstruktor
-	NachLogin( Schrift *zSchrift, Bildschirm *zBildschirm );
-	// Destruktor
-	~NachLogin();
-	// nicht constant
-	void login(); // Initialisiert die Oberfläche
-	void logout(); // Setzt die Oberfläche zurück
-	void setSpielAufzeichnung( AufzeichnungV *video ); // Setzt die Spiel Aufzeichnung
-	void setEditor( EditorV *editor ); // Setzt den Editor
-	void setAnzeige( NachLoginAnzeige s ); // Setzt den Status des Programms
+    // Konstruktor
+    NachLogin();
+    // Destruktor
+    ~NachLogin();
+    // nicht constant
+    void login(); // Initialisiert die Oberfläche
+    void logout(); // Setzt die Oberfläche zurück
+    void setSpielAufzeichnung( AufzeichnungV *video ); // Setzt die Spiel Aufzeichnung
+    void setEditor( EditorV *editor ); // Setzt den Editor
+    void setAnzeige( NachLoginAnzeige s ); // Setzt den Status des Programms
     void hideBars();
     void hideBars();
     void showBars();
     void showBars();
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	bool tick( double tickVal ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	TitelLeiste *zTitelLeiste() const;// gibt die Titelleiste zurück
-	FreundesListe *zFreundesListe() const; // gibt die FreundesListe zurück
-	ChatLeiste *zChatLeiste() const; // gibt die ChatLeiste zurück
-	NachrichtenListe *zNachrichtenListe() const; // gibt die NachrichtenListe zurück
-	Spiele *zSpielenFenster() const; // gibt das Spiele Fenster zurück
-	Shop *zShopFenster() const; // gibt das Shop Fenster zurück
-	AccountAnsehen *zAccountAnsehenFenster() const; // gibt das Account Ansehen Fenster zurück
-	MiniGames *zMGFenster() const; // gibt das MiniGames Fenster zurück
-	Neuigkeiten *zNewsFenster() const; // gibt das News Fenster zurück
-	Editor *zEditorFenster() const; // Gibt das Editor Fenster zurück
-	ImSpiel *zImSpiel() const; // Gibt das Im Spiel Zeichnung zurück
-	Einstellungen *zEinstellungen() const; // Gibt das Einstellungen Zeichnung zurück
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    bool tick( double tickVal ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    TitelLeiste *zTitelLeiste() const;// gibt die Titelleiste zurück
+    FreundesListe *zFreundesListe() const; // gibt die FreundesListe zurück
+    ChatLeiste *zChatLeiste() const; // gibt die ChatLeiste zurück
+    NachrichtenListe *zNachrichtenListe() const; // gibt die NachrichtenListe zurück
+    Spiele *zSpielenFenster() const; // gibt das Spiele Fenster zurück
+    Shop *zShopFenster() const; // gibt das Shop Fenster zurück
+    AccountAnsehen *zAccountAnsehenFenster() const; // gibt das Account Ansehen Fenster zurück
+    MiniGames *zMGFenster() const; // gibt das MiniGames Fenster zurück
+    Neuigkeiten *zNewsFenster() const; // gibt das News Fenster zurück
+    Editor *zEditorFenster() const; // Gibt das Editor Fenster zurück
+    ImSpiel *zImSpiel() const; // Gibt das Im Spiel Zeichnung zurück
+    Einstellungen *zEinstellungen() const; // Gibt das Einstellungen Zeichnung zurück
 };
 };
 
 
 #endif;
 #endif;

+ 22 - 20
KSGClient/NachLogin/Neuigkeiten/Neuigkeiten.cpp

@@ -75,10 +75,10 @@ void KSGSR
 
 
 // Inhalt der Neuigkeiten Klasse aus Neuigkeiten.h
 // Inhalt der Neuigkeiten Klasse aus Neuigkeiten.h
 // Konstruktor
 // Konstruktor
-Neuigkeiten::Neuigkeiten( Schrift * zSchrift, Fenster * zNachLoginFenster, int x )
+Neuigkeiten::Neuigkeiten( Fenster *zNachLoginFenster, int x )
     : Zeichnung()
     : Zeichnung()
 {
 {
-    bildschirmGröße = hauptScreen->getBackBufferSize();
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     pos = Punkt( x, 67 );
     pos = Punkt( x, 67 );
     gr = Punkt( 102, 32 );
     gr = Punkt( 102, 32 );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
@@ -97,11 +97,12 @@ Neuigkeiten::Neuigkeiten( Schrift * zSchrift, Fenster * zNachLoginFenster, int x
     pos1 = Punkt( x, 67 );
     pos1 = Punkt( x, 67 );
     größe2 = Punkt( 800, 500 );
     größe2 = Punkt( 800, 500 );
     pos2 = bildschirmGröße / 2 - größe2 / 2;
     pos2 = bildschirmGröße / 2 - größe2 / 2;
-    fehler = initTextFeld( 5, 5, 790, 490, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "" );
+    fehler = initTextFeld( 5, 5, 790, 490, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "" );
     laden = (Animation2D *)ladeAnimation->dublizieren();
     laden = (Animation2D *)ladeAnimation->dublizieren();
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     laden->setPosition( 375, 225 );
     laden->setPosition( 375, 225 );
-    zNachLoginFenster->addMember( getThis() );
+    getThis();
+    zNachLoginFenster->addMember( this );
     ksgsDLL = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
     ksgsDLL = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
     if( !ksgsDLL )
     if( !ksgsDLL )
     {
     {
@@ -122,13 +123,14 @@ Neuigkeiten::Neuigkeiten( Schrift * zSchrift, Fenster * zNachLoginFenster, int x
         {
         {
             script = getKSGSZeichnung();
             script = getKSGSZeichnung();
             script->setSize( 800, 500 );
             script->setSize( 800, 500 );
-            script->setBildschirmZ( hauptScreen->getThis() );
-            script->setSchriftZ( zSchrift->getThis() );
-            script->setRückrufParam( this );
-            script->setRückrufFunktion( KSGSRückruf );
+            script->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
+            script->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
+            script->setCallbackParam( this );
+            script->setCallbackFunktion( KSGSRückruf );
             wirdGeladen = 1;
             wirdGeladen = 1;
             laden->setSichtbar( 1 );
             laden->setSichtbar( 1 );
-            new NewsThread( "Client/Start", dynamic_cast<KSGScriptObj *>( script->getThis() ), (Neuigkeiten *)getThis() );
+            getThis();
+            new NewsThread( "Client/Start", dynamic_cast<KSGScriptObj *>( script->getThis() ), this );
         }
         }
     }
     }
 }
 }
@@ -139,7 +141,7 @@ Neuigkeiten::~Neuigkeiten()
     rahmen->release();
     rahmen->release();
     if( script )
     if( script )
     {
     {
-        script->zurücksetzen();
+        script->reset();
         script->release();
         script->release();
     }
     }
     if( ksgsDLL )
     if( ksgsDLL )
@@ -173,14 +175,14 @@ void Neuigkeiten::endLaden( char *err )
     }
     }
 }
 }
 
 
-void Neuigkeiten::rückruf( RCArray< KSGSVariable > * parameter, KSGSVariable * *ret )
+void Neuigkeiten::rückruf( RCArray< KSGSVariable > *parameter, KSGSVariable **ret )
 {
 {
     if( wirdGeladen )
     if( wirdGeladen )
         return;
         return;
-    KSGSVariable * befehl = parameter->z( 0 );
+    KSGSVariable *befehl = parameter->z( 0 );
     if( !befehl )
     if( !befehl )
         return;
         return;
-    Text * b = befehl->getText();
+    Text *b = befehl->getText();
     if( !b || !b->getLength() )
     if( !b || !b->getLength() )
     {
     {
         if( b )
         if( b )
@@ -189,27 +191,27 @@ void Neuigkeiten::r
     }
     }
     wirdGeladen = 1;
     wirdGeladen = 1;
     laden->setSichtbar( 1 );
     laden->setSichtbar( 1 );
-    new NewsThread( b->getText(), dynamic_cast<KSGScriptObj *>( script->getThis() ), (Neuigkeiten *)getThis() );
+    new NewsThread( b->getText(), dynamic_cast<KSGScriptObj *>( script->getThis() ), dynamic_cast<Neuigkeiten *>( getThis() ) );
     b->release();
     b->release();
 }
 }
 
 
-void Neuigkeiten::doPublicMausEreignis( MausEreignis & me )
+void Neuigkeiten::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( wirdGeladen )
     if( wirdGeladen )
         return;
         return;
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
-    if( script &&sichtbar )
+    if( script && sichtbar )
         script->doPublicMausEreignis( me );
         script->doPublicMausEreignis( me );
     me.mx += pos.x;
     me.mx += pos.x;
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void Neuigkeiten::doTastaturEreignis( TastaturEreignis & te )
+void Neuigkeiten::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( wirdGeladen )
     if( wirdGeladen )
         return;
         return;
-    if( script &&sichtbar )
+    if( script && sichtbar )
         script->doTastaturEreignis( te );
         script->doTastaturEreignis( te );
 }
 }
 
 
@@ -223,7 +225,7 @@ bool Neuigkeiten::tick( double z )
         rend = 0;
         rend = 0;
         return ret;
         return ret;
     }
     }
-    if( script &&sichtbar )
+    if( script && sichtbar )
         rend |= script->tick( z );
         rend |= script->tick( z );
     tickVal += z * 150;
     tickVal += z * 150;
     int val = (int)tickVal;
     int val = (int)tickVal;
@@ -286,7 +288,7 @@ bool Neuigkeiten::tick( double z )
     return ret;
     return ret;
 }
 }
 
 
-void Neuigkeiten::render( Bild & zRObj )
+void Neuigkeiten::render( Bild &zRObj )
 {
 {
     if( pos == pos1 )
     if( pos == pos1 )
         return;
         return;

+ 44 - 44
KSGClient/NachLogin/Neuigkeiten/Neuigkeiten.h

@@ -13,58 +13,58 @@ class Neuigkeiten; // Aus dieser Datei
 class NewsThread : private Thread
 class NewsThread : private Thread
 {
 {
 private:
 private:
-	Text *scriptName;
-	KSGScriptObj *obj;
-	Neuigkeiten *news;
-	
+    Text *scriptName;
+    KSGScriptObj *obj;
+    Neuigkeiten *news;
+
 public:
 public:
-	// Konstruktor
-	NewsThread( char *name, KSGScriptObj *obj, Neuigkeiten *n );
-	// Destruktor
-	~NewsThread();
-	// nicht constant
-	void thread();
+    // Konstruktor
+    NewsThread( char *name, KSGScriptObj *obj, Neuigkeiten *n );
+    // Destruktor
+    ~NewsThread();
+    // nicht constant
+    void thread();
 };
 };
 
 
 class Neuigkeiten : public Zeichnung
 class Neuigkeiten : public Zeichnung
 {
 {
 private:
 private:
-	Punkt begPos;
-	Punkt begGröße;
-	Punkt pos1;
-	Punkt größe1;
-	Punkt pos2;
-	Punkt größe2;
-	Punkt bildschirmGröße;
-	LRahmen *rahmen;
-	HMODULE ksgsDLL;
-	KSGScriptObj *script;
-	TextFeld *fehler;
-	Animation2D *laden;
-	int animation;
-	bool wirdGeladen;
-	int alpha;
-	bool sichtbar;
-	int prozent1;
-	int prozent2;
-	double tickVal;
+    Punkt begPos;
+    Punkt begGröße;
+    Punkt pos1;
+    Punkt größe1;
+    Punkt pos2;
+    Punkt größe2;
+    Punkt bildschirmGröße;
+    LRahmen *rahmen;
+    HMODULE ksgsDLL;
+    KSGScriptObj *script;
+    TextFeld *fehler;
+    Animation2D *laden;
+    int animation;
+    bool wirdGeladen;
+    int alpha;
+    bool sichtbar;
+    int prozent1;
+    int prozent2;
+    double tickVal;
 
 
 public:
 public:
-	// Konstruktor
-	Neuigkeiten( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
-	// Destruktor
-	~Neuigkeiten();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	void endLaden( char *err );
-	void rückruf( RCArray< KSGSVariable > *parameter, KSGSVariable **ret );
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	bool tick( double z ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istAnimiert() const;
-	bool istSichtbar() const;
+    // Konstruktor
+    Neuigkeiten( Fenster *zNachLoginFenster, int x );
+    // Destruktor
+    ~Neuigkeiten();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    void endLaden( char *err );
+    void rückruf( RCArray< KSGSVariable > *parameter, KSGSVariable **ret );
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    bool tick( double z ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istAnimiert() const;
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 73 - 138
KSGClient/NachLogin/Shop/Karten/KartenKaufen.cpp

@@ -17,7 +17,7 @@ void KarteKaufenKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVar
 
 
 // Inhalt der KartenKaufenAuswahl Klasse aus KartenKaufen.h
 // Inhalt der KartenKaufenAuswahl Klasse aus KartenKaufen.h
 // Konstruktor
 // Konstruktor
-KartenKaufenAuswahl::KartenKaufenAuswahl( Schrift * zSchrift )
+KartenKaufenAuswahl::KartenKaufenAuswahl()
     : Thread()
     : Thread()
 {
 {
     karteId = 0;
     karteId = 0;
@@ -29,17 +29,17 @@ KartenKaufenAuswahl::KartenKaufenAuswahl( Schrift * zSchrift )
         if( getKSGScript )
         if( getKSGScript )
         {
         {
             fenster = getKSGScript();
             fenster = getKSGScript();
-            fenster->setSchriftZ( zSchrift->getThis() );
+            fenster->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
             fenster->setSize( 555, 380 );
             fenster->setSize( 555, 380 );
-            fenster->setRückrufParam( this );
-            fenster->setRückrufFunktion( KarteKaufenKSGSAktion );
+            fenster->setCallbackParam( this );
+            fenster->setCallbackFunktion( KarteKaufenKSGSAktion );
         }
         }
         else
         else
         {
         {
             fenster = 0;
             fenster = 0;
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
     }
     }
@@ -53,7 +53,7 @@ KartenKaufenAuswahl::KartenKaufenAuswahl( Schrift * zSchrift )
     ram = new LRahmen();
     ram = new LRahmen();
     ram->setSize( 555, 380 );
     ram->setSize( 555, 380 );
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
-    laden = ( Framework::Animation2D * )ladeAnimation->dublizieren();
+    laden = (Framework::Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 252, 165 );
     laden->setPosition( 252, 165 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     pos = Punkt( 220, 55 );
     pos = Punkt( 220, 55 );
@@ -65,7 +65,7 @@ KartenKaufenAuswahl::~KartenKaufenAuswahl()
 {
 {
     if( fenster )
     if( fenster )
     {
     {
-        fenster->zurücksetzen();
+        fenster->reset();
         fenster->release();
         fenster->release();
     }
     }
     ram->release();
     ram->release();
@@ -106,7 +106,7 @@ void KartenKaufenAuswahl::thread()
         if( !aktion )
         if( !aktion )
             karteId = 0;
             karteId = 0;
         if( fenster )
         if( fenster )
-            fenster->zurücksetzen();
+            fenster->reset();
     }
     }
     if( aktion )
     if( aktion )
     {
     {
@@ -114,7 +114,7 @@ void KartenKaufenAuswahl::thread()
             Sleep( 100 );
             Sleep( 100 );
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             shopClient->ladeKarteSeite( karteId );
             shopClient->ladeKarteSeite( karteId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -132,12 +132,12 @@ void KartenKaufenAuswahl::thread()
     run = 0;
     run = 0;
 }
 }
 
 
-void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
 {
     KSGSVariable *befehl = parameter->z( 0 );
     KSGSVariable *befehl = parameter->z( 0 );
     if( !befehl )
     if( !befehl )
         return;
         return;
-    Text * b = befehl->getText();
+    Text *b = befehl->getText();
     if( !b )
     if( !b )
         return;
         return;
     if( b->istGleich( "GetBesitzStatus" ) )
     if( b->istGleich( "GetBesitzStatus" ) )
@@ -145,7 +145,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         int besitz = 0;
         int besitz = 0;
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             besitz = shopClient->getKarteBesitzStatus( karteId );
             besitz = shopClient->getKarteBesitzStatus( karteId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -160,7 +160,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -173,7 +173,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -182,7 +182,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
             int preis = 0;
             int preis = 0;
             if( !shopClient )
             if( !shopClient )
                 shopClient = mainClient->createShopServerClient();
                 shopClient = mainClient->createShopServerClient();
-            if( shopClient &&shopClient->verbinde() )
+            if( shopClient && shopClient->verbinde() )
             {
             {
                 preis = shopClient->getKartePreis( karteId, testVersion );
                 preis = shopClient->getKartePreis( karteId, testVersion );
                 shopClient->trenne( 0 );
                 shopClient->trenne( 0 );
@@ -197,7 +197,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                               new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                              "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                        "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
             }
             }
         }
         }
@@ -209,7 +209,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         int verbleibend = 0;
         int verbleibend = 0;
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             verbleibend = shopClient->getKarteTestversion( karteId );
             verbleibend = shopClient->getKarteTestversion( karteId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -224,7 +224,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -235,7 +235,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         int erwerbbar = 0;
         int erwerbbar = 0;
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             erwerbbar = shopClient->istKarteErwerbbar( karteId );
             erwerbbar = shopClient->istKarteErwerbbar( karteId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -250,7 +250,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -269,7 +269,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -282,7 +282,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -333,7 +333,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -344,7 +344,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                               new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                              "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                        "Sie könnte eventuell nicht richtig funktionieren." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
             }
             }
             else
             else
@@ -358,7 +358,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
                     else
                     else
                         p += 6;
                         p += 6;
                     Text nn = Text( pf->getText() ) + "/" + (const char *)( n->getText() + p );
                     Text nn = Text( pf->getText() ) + "/" + (const char *)( n->getText() + p );
-                    Bild * b = bilder->get( nn );
+                    Bild *b = bilder->get( nn );
                     if( b )
                     if( b )
                     {
                     {
                         KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
                         KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
@@ -368,7 +368,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
                         {
                         {
                             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                           new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
                                                                           new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
-                                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                           new Text( "Ok" ), 0 );
                                                                           new Text( "Ok" ), 0 );
                             b->release();
                             b->release();
                         }
                         }
@@ -381,7 +381,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
                 {
                 {
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                   new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                                   new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                                  "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                            "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                 }
                 }
             }
             }
@@ -395,7 +395,7 @@ void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
     }
     }
 }
 }
 
 
-void KartenKaufenAuswahl::doPublicMausEreignis( MausEreignis & me )
+void KartenKaufenAuswahl::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( run )
     if( run )
         return;
         return;
@@ -407,7 +407,7 @@ void KartenKaufenAuswahl::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void KartenKaufenAuswahl::doTastaturEreignis( TastaturEreignis & te )
+void KartenKaufenAuswahl::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( run )
     if( run )
         return;
         return;
@@ -427,7 +427,7 @@ bool KartenKaufenAuswahl::tick( double zeit )
             alpha -= (unsigned char)( zeit * 150 );
             alpha -= (unsigned char)( zeit * 150 );
         rend = 1;
         rend = 1;
     }
     }
-    if( !run && karteId &&alpha < 255 )
+    if( !run && karteId && alpha < 255 )
     {
     {
         if( alpha + zeit * 150 > 255 )
         if( alpha + zeit * 150 > 255 )
             alpha = 255;
             alpha = 255;
@@ -438,7 +438,7 @@ bool KartenKaufenAuswahl::tick( double zeit )
     return rend;
     return rend;
 }
 }
 
 
-void KartenKaufenAuswahl::render( Bild & zRObj )
+void KartenKaufenAuswahl::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
         return;
         return;
@@ -451,32 +451,20 @@ void KartenKaufenAuswahl::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread * KartenKaufenAuswahl::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 2000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
-}
-
 
 
 // Inhalt der KartenKaufenListeEintrag Klasse aus KartenKaufen.h
 // Inhalt der KartenKaufenListeEintrag Klasse aus KartenKaufen.h
 // Konstruktor
 // Konstruktor
-KartenKaufenListeEintrag::KartenKaufenListeEintrag( int id, Schrift * schrift )
+KartenKaufenListeEintrag::KartenKaufenListeEintrag( int id )
+    : ReferenceCounter()
 {
 {
     karteId = id;
     karteId = id;
-    auswählen = initKnopf( 173, 73, 22, 22, 0, 0, "" );
+    auswählen = initKnopf( 173, 73, 22, 22, 0, "" );
     auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
     auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
-    initToolTip( auswählen, "Karte auswählen.", schrift, hauptScreen );
-    schrift->release();
+    initToolTip( auswählen, "Karte auswählen." );
     auswählen->setRahmenBreite( 1 );
     auswählen->setRahmenBreite( 1 );
-    LTDBDatei * datei = new LTDBDatei();
-    Text * bdpf = new Text( "data/tmp/shop/kaufen/karten/" );
+    LTDBDatei *datei = new LTDBDatei();
+    Text *bdpf = new Text( "data/tmp/shop/kaufen/karten/" );
     bdpf->append( id );
     bdpf->append( id );
     bdpf->append( "/titelbg.ltdb" );
     bdpf->append( "/titelbg.ltdb" );
     datei->setDatei( bdpf );
     datei->setDatei( bdpf );
@@ -492,7 +480,6 @@ KartenKaufenListeEintrag::KartenKaufenListeEintrag( int id, Schrift * schrift )
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
     ausw = 0;
     ausw = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -511,11 +498,11 @@ void KartenKaufenListeEintrag::resetAuswahl()
     ausw = 0;
     ausw = 0;
 }
 }
 
 
-bool KartenKaufenListeEintrag::doPublicMausEreignis( MausEreignis & me )
+bool KartenKaufenListeEintrag::doPublicMausEreignis( MausEreignis &me )
 {
 {
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     auswählen->doPublicMausEreignis( me );
     auswählen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         ausw = 1;
         ausw = 1;
         return 1;
         return 1;
@@ -551,7 +538,7 @@ bool KartenKaufenListeEintrag::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void KartenKaufenListeEintrag::render( int yOff, Bild & zRObj )
+void KartenKaufenListeEintrag::render( int yOff, Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
     if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
         return;
         return;
@@ -569,27 +556,12 @@ int KartenKaufenListeEintrag::getKarteId() const
     return karteId;
     return karteId;
 }
 }
 
 
-// Reference Counting
-KartenKaufenListeEintrag *KartenKaufenListeEintrag::getThis()
-{
-    ref++;
-    return this;
-}
-
-KartenKaufenListeEintrag *KartenKaufenListeEintrag::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der KartenKaufenListe Klasse aus KartenKaufen.h
 // Inhalt der KartenKaufenListe Klasse aus KartenKaufen.h
 // Konstruktor
 // Konstruktor
-KartenKaufenListe::KartenKaufenListe( Schrift * schrift )
+KartenKaufenListe::KartenKaufenListe()
+    : ReferenceCounter()
 {
 {
-    s = schrift;
     pos = Punkt( 5, 55 );
     pos = Punkt( 5, 55 );
     ram = new LRahmen();
     ram = new LRahmen();
     ram->setSize( 215, 380 );
     ram->setSize( 215, 380 );
@@ -599,31 +571,29 @@ KartenKaufenListe::KartenKaufenListe( Schrift * schrift )
     vScroll->setKlickScroll( 10 );
     vScroll->setKlickScroll( 10 );
     vScroll->update( 0, 380 );
     vScroll->update( 0, 380 );
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
 KartenKaufenListe::~KartenKaufenListe()
 KartenKaufenListe::~KartenKaufenListe()
 {
 {
-    s->release();
     ram->release();
     ram->release();
     einträge->release();
     einträge->release();
     vScroll->release();
     vScroll->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
-void KartenKaufenListe::ladeKarten( Array< int > * karten )
+void KartenKaufenListe::ladeKarten( Array< int > *karten )
 {
 {
     leeren();
     leeren();
     int anz = karten->getEintragAnzahl();
     int anz = karten->getEintragAnzahl();
     if( !shopClient )
     if( !shopClient )
         shopClient = mainClient->createShopServerClient();
         shopClient = mainClient->createShopServerClient();
-    if( shopClient &&shopClient->verbinde() )
+    if( shopClient && shopClient->verbinde() )
     {
     {
         for( int i = 0; i < anz; i++ )
         for( int i = 0; i < anz; i++ )
         {
         {
             if( shopClient->ladeKarteTitel( karten->hat( i ) ? karten->get( i ) : 0 ) )
             if( shopClient->ladeKarteTitel( karten->hat( i ) ? karten->get( i ) : 0 ) )
-                einträge->add( new KartenKaufenListeEintrag( karten->hat( i ) ? karten->get( i ) : 0, s->getThis() ) );
+                einträge->add( new KartenKaufenListeEintrag( karten->hat( i ) ? karten->get( i ) : 0 ) );
         }
         }
         shopClient->trenne( 0 );
         shopClient->trenne( 0 );
     }
     }
@@ -640,7 +610,7 @@ void KartenKaufenListe::leeren()
     rend = 1;
     rend = 1;
 }
 }
 
 
-int KartenKaufenListe::doPublicMausEreignis( MausEreignis & me )
+int KartenKaufenListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int mx = me.mx;
     int mx = me.mx;
     int my = me.my;
     int my = me.my;
@@ -684,7 +654,7 @@ bool KartenKaufenListe::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void KartenKaufenListe::render( Bild & zRObj )
+void KartenKaufenListe::render( Bild &zRObj )
 {
 {
     int br = ram->getBreite();
     int br = ram->getBreite();
     int hö = ram->getHeight();
     int hö = ram->getHeight();
@@ -706,25 +676,10 @@ int KartenKaufenListe::getEintragAnzahl()
     return einträge->getEintragAnzahl();
     return einträge->getEintragAnzahl();
 }
 }
 
 
-// Reference Counting
-KartenKaufenListe *KartenKaufenListe::getThis()
-{
-    ref++;
-    return this;
-}
-
-KartenKaufenListe *KartenKaufenListe::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der KartenKaufen Klasse aus KartenKaufen.h
 // Inhalt der KartenKaufen Klasse aus KartenKaufen.h
 // Konstruktor
 // Konstruktor
-KartenKaufen::KartenKaufen( Schrift * zSchrift )
+KartenKaufen::KartenKaufen()
     : Thread()
     : Thread()
 {
 {
     Bild *shopZurück = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
     Bild *shopZurück = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
@@ -736,39 +691,29 @@ KartenKaufen::KartenKaufen( Schrift * zSchrift )
     ram->setSize( 780, 440 );
     ram->setSize( 780, 440 );
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
     pos = Punkt( 10, 50 );
     pos = Punkt( 10, 50 );
-    spielArt = new AuswahlBox();
+    spielArt = uiFactory.createAuswahlBox( uiFactory.initParam );
     spielArt->setStyle( AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund |
     spielArt->setStyle( AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund |
                         AuswahlBox::Style::Rahmen | AuswahlBox::Style::Sichtbar | AuswahlBox::Style::VScroll | AuswahlBox::Style::MaxHeight );
                         AuswahlBox::Style::Rahmen | AuswahlBox::Style::Sichtbar | AuswahlBox::Style::VScroll | AuswahlBox::Style::MaxHeight );
     spielArt->setSize( 200, 20 );
     spielArt->setSize( 200, 20 );
     spielArt->setPosition( 5, 5 );
     spielArt->setPosition( 5, 5 );
-    spielArt->setRahmenFarbe( 0xFFFFFFFF );
-    spielArt->setRahmenBreite( 1 );
-    spielArt->setMaxAuskappHeight( 100 );
-    spielArt->setSchriftZ( zSchrift->getThis() );
-    spielArt->setHintergrundFarbe( 0xFF000000 );
-    spielArt->setMausEreignis( _ret1ME );
-    spielArt->setAuswAlphaFeldFarbe( 0x5000FF00 );
-    spielArt->setAuswAlphaFeldStrength( -10 );
-    spielArt->setMausAlphaFeldFarbe( 0x1000FF00 );
-    spielArt->setMausAlphaFeldStrength( -10 );
     spielArt->setEintragHeight( 20 );
     spielArt->setEintragHeight( 20 );
     spielArt->addEintrag( "Spiel Art wählen" );
     spielArt->addEintrag( "Spiel Art wählen" );
-    suchFilterT = initTextFeld( 210, 5, 70, 20, zSchrift, TextFeld::Style::Text, "Suchfilter:" );
-    suchFilter = initTextFeld( 285, 5, 225, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.", zSchrift, hauptScreen );
-    suchen = initKnopf( 515, 5, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
-    seiten = initTextFeld( 55, 30, 250, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
-    zurück = initKnopf( 5, 30, 20, 20, 0, 0, "" );
+    suchFilterT = initTextFeld( 210, 5, 70, 20, TextFeld::Style::Text, "Suchfilter:" );
+    suchFilter = initTextFeld( 285, 5, 225, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst." );
+    suchen = initKnopf( 515, 5, 100, 20, Knopf::Style::Sichtbar, "suchen" );
+    seiten = initTextFeld( 55, 30, 250, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
+    zurück = initKnopf( 5, 30, 20, 20, 0, "" );
     zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     zurück->setHintergrundBildZ( shopZurück );
     zurück->setHintergrundBildZ( shopZurück );
-    initToolTip( zurück, "Seite zurück blättern.", zSchrift, hauptScreen );
-    weiter = initKnopf( 30, 30, 20, 20, 0, 0, "" );
+    initToolTip( zurück, "Seite zurück blättern." );
+    weiter = initKnopf( 30, 30, 20, 20, 0, "" );
     weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     weiter->setHintergrundBildZ( shopWeiter );
     weiter->setHintergrundBildZ( shopWeiter );
-    initToolTip( weiter, "Seite weiter blättern.", zSchrift, hauptScreen );
-    liste = new KartenKaufenListe( zSchrift->getThis() );
-    auswahl = new KartenKaufenAuswahl( zSchrift );
-    laden = ( Framework::Animation2D * )ladeAnimation->dublizieren();
+    initToolTip( weiter, "Seite weiter blättern." );
+    liste = new KartenKaufenListe();
+    auswahl = new KartenKaufenAuswahl();
+    laden = (Framework::Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 365, 195 );
     laden->setPosition( 365, 195 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     tickVal = 0;
     tickVal = 0;
@@ -792,6 +737,8 @@ KartenKaufen::~KartenKaufen()
     weiter->release();
     weiter->release();
     zurück->release();
     zurück->release();
     liste->release();
     liste->release();
+    auswahl->warteAufThread( 10000 );
+    auswahl->ende();
     auswahl->release();
     auswahl->release();
     laden->release();
     laden->release();
 }
 }
@@ -821,7 +768,7 @@ void KartenKaufen::thread()
             {
             {
                 if( !saList->hat( i ) )
                 if( !saList->hat( i ) )
                     continue;
                     continue;
-                Text * name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
+                Text *name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
                 if( name )
                 if( name )
                     saNamen->add( name );
                     saNamen->add( name );
             }
             }
@@ -842,12 +789,12 @@ void KartenKaufen::thread()
         }
         }
         if( !liste->getEintragAnzahl() )
         if( !liste->getEintragAnzahl() )
         {
         {
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             suchText->setText( suchFilter->zText()->getText() );
             suchText->setText( suchFilter->zText()->getText() );
             seite = 1;
             seite = 1;
             maxSeite = 1;
             maxSeite = 1;
             aktion = 1;
             aktion = 1;
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
         }
         }
         if( !aktion )
         if( !aktion )
         {
         {
@@ -858,10 +805,10 @@ void KartenKaufen::thread()
     int spielArtId = 0;
     int spielArtId = 0;
     if( spielArt->getAuswahl() > 0 )
     if( spielArt->getAuswahl() > 0 )
         spielArtId = infoClient->getSpielId( spielArt->zEintrag( spielArt->getAuswahl() )->zText()->getText() );
         spielArtId = infoClient->getSpielId( spielArt->zEintrag( spielArt->getAuswahl() )->zText()->getText() );
-    Array< int > * list = 0;
+    Array< int > *list = 0;
     if( !shopClient )
     if( !shopClient )
         shopClient = mainClient->createShopServerClient();
         shopClient = mainClient->createShopServerClient();
-    if( shopClient &&shopClient->verbinde() )
+    if( shopClient && shopClient->verbinde() )
     {
     {
         list = shopClient->suchKarten( suchText->getText(), spielArtId );
         list = shopClient->suchKarten( suchText->getText(), spielArtId );
         shopClient->trenne( 0 );
         shopClient->trenne( 0 );
@@ -885,7 +832,7 @@ void KartenKaufen::thread()
     auswahl->reset();
     auswahl->reset();
     liste->ladeKarten( slist );
     liste->ladeKarten( slist );
     slist->release();
     slist->release();
-    Text * t = new Text( "Seite " );
+    Text *t = new Text( "Seite " );
     t->append( maxSeite ? seite + 1 : 0 );
     t->append( maxSeite ? seite + 1 : 0 );
     t->append( " von " );
     t->append( " von " );
     t->append( maxSeite );
     t->append( maxSeite );
@@ -901,7 +848,7 @@ void KartenKaufen::thread()
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
 }
 }
 
 
-void KartenKaufen::doPublicMausEreignis( MausEreignis & me )
+void KartenKaufen::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar || run )
     if( !sichtbar || run )
         return;
         return;
@@ -956,13 +903,13 @@ void KartenKaufen::doPublicMausEreignis( MausEreignis & me )
     me.my = my;
     me.my = my;
 }
 }
 
 
-void KartenKaufen::doTastaturEreignis( TastaturEreignis & te )
+void KartenKaufen::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar || run )
     if( !sichtbar || run )
         return;
         return;
     bool vera = te.verarbeitet;
     bool vera = te.verarbeitet;
     suchFilter->doTastaturEreignis( te );
     suchFilter->doTastaturEreignis( te );
-    if( !vera && te.verarbeitet &&te.taste == T_Enter && te.id == TE_Release )
+    if( !vera && te.verarbeitet && te.taste == T_Enter && te.id == TE_Release )
     {
     {
         MausEreignis me;
         MausEreignis me;
         me.id = ME_RLinks;
         me.id = ME_RLinks;
@@ -1035,7 +982,7 @@ bool KartenKaufen::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void KartenKaufen::render( Bild & zRObj )
+void KartenKaufen::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -1063,16 +1010,4 @@ void KartenKaufen::render( Bild & zRObj )
 bool KartenKaufen::istSichtbar() const
 bool KartenKaufen::istSichtbar() const
 {
 {
     return sichtbar;
     return sichtbar;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KartenKaufen::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 1000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 92 - 105
KSGClient/NachLogin/Shop/Karten/KartenKaufen.h

@@ -17,132 +17,119 @@ using namespace KSGScript;
 class KartenKaufenAuswahl : public Thread
 class KartenKaufenAuswahl : public Thread
 {
 {
 private:
 private:
-	int karteId;
-	unsigned char alpha;
-	KSGScriptObj *fenster;
-	Framework::Animation2D *laden;
-	Punkt pos;
-	LRahmen *ram;
-	HINSTANCE ksgs;
-	bool aktion;
+    int karteId;
+    unsigned char alpha;
+    KSGScriptObj *fenster;
+    Framework::Animation2D *laden;
+    Punkt pos;
+    LRahmen *ram;
+    HINSTANCE ksgs;
+    bool aktion;
 
 
 public:
 public:
-	// Konstruktor
-	KartenKaufenAuswahl( Schrift *zSchrift );
-	// Destruktor
-	~KartenKaufenAuswahl();
-	// nicht constant
-	void ladeKarteSeite( int id );
-	void reset();
-	virtual void thread();
-	void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    KartenKaufenAuswahl();
+    // Destruktor
+    ~KartenKaufenAuswahl();
+    // nicht constant
+    void ladeKarteSeite( int id );
+    void reset();
+    virtual void thread();
+    void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
 };
 };
 
 
-class KartenKaufenListeEintrag
+class KartenKaufenListeEintrag : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	int karteId;
-	Knopf *auswählen;
-	Bild *hintergrund;
-	AlphaFeld *ausgewählt;
-	LRahmen *ram;
-	bool ausw;
-	bool rend;
-	int ref;
+    int karteId;
+    Knopf *auswählen;
+    Bild *hintergrund;
+    AlphaFeld *ausgewählt;
+    LRahmen *ram;
+    bool ausw;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	KartenKaufenListeEintrag( int id, Schrift *schrift );
-	// Destruktor
-	~KartenKaufenListeEintrag();
-	// nicht constant
-	void resetAuswahl();
-	bool doPublicMausEreignis( MausEreignis &me );
-	bool tick( double zeit );
-	void render( int yOff, Bild &zRObj );
-	// constant
-	int getKarteId() const;
-	// Reference Counting
-	KartenKaufenListeEintrag *getThis();
-	KartenKaufenListeEintrag *release();
+    // Konstruktor
+    KartenKaufenListeEintrag( int id );
+    // Destruktor
+    ~KartenKaufenListeEintrag();
+    // nicht constant
+    void resetAuswahl();
+    bool doPublicMausEreignis( MausEreignis &me );
+    bool tick( double zeit );
+    void render( int yOff, Bild &zRObj );
+    // constant
+    int getKarteId() const;
 };
 };
 
 
-class KartenKaufenListe
+class KartenKaufenListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Schrift *s;
-	LRahmen *ram;
-	Punkt pos;
-	RCArray< KartenKaufenListeEintrag > *einträge;
-	VScrollBar *vScroll;
-	bool rend;
-	int ref;
-	Critical cs;
+    LRahmen *ram;
+    Punkt pos;
+    RCArray< KartenKaufenListeEintrag > *einträge;
+    VScrollBar *vScroll;
+    bool rend;
+    Critical cs;
 
 
 public:
 public:
-	// Konstruktor
-	KartenKaufenListe( Schrift *schrift );
-	// Destruktor
-	~KartenKaufenListe();
-	// nicht constant
-	void ladeKarten( Array< int > *karten );
-	void leeren();
-	int doPublicMausEreignis( MausEreignis &me );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	int getEintragAnzahl();
-	// Reference Counting
-	KartenKaufenListe *getThis();
-	KartenKaufenListe *release();
+    // Konstruktor
+    KartenKaufenListe();
+    // Destruktor
+    ~KartenKaufenListe();
+    // nicht constant
+    void ladeKarten( Array< int > *karten );
+    void leeren();
+    int doPublicMausEreignis( MausEreignis &me );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    int getEintragAnzahl();
 };
 };
 
 
 class KartenKaufen : public Thread
 class KartenKaufen : public Thread
 {
 {
 private:
 private:
-	unsigned char alpha;
-	bool sichtbar;
-	Text *suchText;
-	LRahmen *ram;
-	AuswahlBox *spielArt;
-	TextFeld *suchFilterT;
-	TextFeld *suchFilter;
-	Knopf *suchen;
-	TextFeld *seiten;
-	Knopf *weiter;
-	Knopf *zurück;
-	Punkt pos;
-	KartenKaufenListe *liste;
-	KartenKaufenAuswahl *auswahl;
-	Framework::Animation2D *laden;
-	double tickVal;
-	int seite;
-	int maxSeite;
-	int aktion;
-	bool rend;
+    unsigned char alpha;
+    bool sichtbar;
+    Text *suchText;
+    LRahmen *ram;
+    AuswahlBox *spielArt;
+    TextFeld *suchFilterT;
+    TextFeld *suchFilter;
+    Knopf *suchen;
+    TextFeld *seiten;
+    Knopf *weiter;
+    Knopf *zurück;
+    Punkt pos;
+    KartenKaufenListe *liste;
+    KartenKaufenAuswahl *auswahl;
+    Framework::Animation2D *laden;
+    double tickVal;
+    int seite;
+    int maxSeite;
+    int aktion;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	KartenKaufen( Schrift *zSchrift );
-	// Destruktor
-	~KartenKaufen();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	virtual void thread();
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    KartenKaufen();
+    // Destruktor
+    ~KartenKaufen();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    virtual void thread();
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 201 - 196
KSGClient/NachLogin/Shop/Shop.cpp

@@ -7,236 +7,241 @@
 
 
 // Inhalt der Shop Klasse aus Shop.h
 // Inhalt der Shop Klasse aus Shop.h
 // Konstruktor
 // Konstruktor
-Shop::Shop( Schrift *zSchrift, Fenster *zNachLoginFenster, int x )
-	: Zeichnung()
+Shop::Shop( Fenster *zNachLoginFenster, int x )
+    : Zeichnung()
 {
 {
-	bildschirmGröße = hauptScreen->getBackBufferSize();
-	pos = Punkt( x, 67 );
-	gr = Punkt( 102, 32 );
-	rahmen = new LRahmen();
-	rahmen->setFarbe( 0xFFFFFFFF );
-	rahmen->setSize( 102, 32 );
-	spiele = initKnopf( 10, 10, 100, 30, zSchrift, Knopf::Style::Sichtbar, "Spiele" );
-	spiele->setRahmenBreite( 2 );
-	spiele->setAlphaFeldFarbe( 0xFF000000 );
-	spiele->setAlphaFeldStrength( 20 );
-	initToolTip( spiele, "Shop nach Spielen durchsuchen.", zSchrift, hauptScreen );
-	karten = initKnopf( 120, 10, 100, 30, zSchrift, Knopf::Style::Sichtbar, "Karten" );
-	initToolTip( karten, "Shop nach Karten durchsuchen.", zSchrift, hauptScreen );
-	alpha = 0;
-	animation = 0;
-	sichtbar = 0;
-	tickVal = 0;
-	jetzt = 0;
-	prozent1 = 0;
-	prozent2 = 0;
-	begPos = Punkt( 0, 0 );
-	begGröße = Punkt( 0, 0 );
-	größe1 = Punkt( 102, 32 );
-	pos1 = Punkt( x, 67 );
-	größe2 = Punkt( 800, 500 );
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	zNachLoginFenster->addMember( getThis() );
-	spielKaufen = new SpieleKaufen( zSchrift );
-	karteKaufen = new KartenKaufen( zSchrift );
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    pos = Punkt( x, 67 );
+    gr = Punkt( 102, 32 );
+    rahmen = new LRahmen();
+    rahmen->setFarbe( 0xFFFFFFFF );
+    rahmen->setSize( 102, 32 );
+    spiele = initKnopf( 10, 10, 100, 30, Knopf::Style::Sichtbar, "Spiele" );
+    spiele->setRahmenBreite( 2 );
+    spiele->setAlphaFeldFarbe( 0xFF000000 );
+    spiele->setAlphaFeldStrength( 20 );
+    initToolTip( spiele, "Shop nach Spielen durchsuchen." );
+    karten = initKnopf( 120, 10, 100, 30, Knopf::Style::Sichtbar, "Karten" );
+    initToolTip( karten, "Shop nach Karten durchsuchen." );
+    alpha = 0;
+    animation = 0;
+    sichtbar = 0;
+    tickVal = 0;
+    jetzt = 0;
+    prozent1 = 0;
+    prozent2 = 0;
+    begPos = Punkt( 0, 0 );
+    begGröße = Punkt( 0, 0 );
+    größe1 = Punkt( 102, 32 );
+    pos1 = Punkt( x, 67 );
+    größe2 = Punkt( 800, 500 );
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    getThis();
+    zNachLoginFenster->addMember( this );
+    spielKaufen = new SpieleKaufen();
+    karteKaufen = new KartenKaufen();
 }
 }
 
 
 // Destruktor
 // Destruktor
 Shop::~Shop()
 Shop::~Shop()
 {
 {
-	rahmen->release();
-	spiele->release();
-	karten->release();
-	spielKaufen->release();
-	karteKaufen->release();
+    rahmen->release();
+    spiele->release();
+    karten->release();
+    spielKaufen->warteAufThread( 10000 );
+    spielKaufen->ende();
+    spielKaufen->release();
+    karteKaufen->warteAufThread( 10000 );
+    karteKaufen->ende();
+    karteKaufen->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void Shop::setSichtbar( bool sicht )
 void Shop::setSichtbar( bool sicht )
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	animation |= ( sicht ? 0x1 : 0x2 );
-	rend = 1;
+    begPos = pos;
+    begGröße = gr;
+    animation |= ( sicht ? 0x1 : 0x2 );
+    rend = 1;
 }
 }
 
 
 bool Shop::tick( double tickVal )
 bool Shop::tick( double tickVal )
 {
 {
-	rend |= spiele->tick( tickVal );
-	rend |= karten->tick( tickVal );
-	rend |= spielKaufen->tick( tickVal );
-	rend |= karteKaufen->tick( tickVal );
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	if( val < 1 )
-	{
-		bool ret = rend;
-		rend = 0;
-		return ret;
-	}
-	this->tickVal -= val;
-	if( ( animation | 0x1 ) == animation ) // Einblenden
-	{
-		if( prozent1 != 100 )
-		{
-			prozent1 += val;
-			if( prozent1 >= 100 )
-			{
-				prozent1 = 100;
-				if( !jetzt )
-				{
-					spielKaufen->setSichtbar( 1 );
-					jetzt = 1;
-				}
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
-		}
-		else if( alpha != 255 )
-		{
-			alpha += val * 2;
-			if( alpha >= 255 || ( animation | 0x2 ) == animation )
-			{
-				alpha = 255;
-				animation &= ~0x1;
-				sichtbar = 1;
-				prozent1 = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x2 ) == animation ) // ausblenden
-	{
-		if( alpha != 0 )
-		{
-			alpha -= val * 2;
-			if( alpha < 0 )
-				alpha = 0;
-		}
-		else
-		{
-			prozent2 += val;
-			if( prozent2 > 100 )
-				prozent2 = 100;
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
-			if( prozent2 == 100 )
-			{
-				prozent2 = 0;
-				animation &= ~0x2;
-				sichtbar = 0;
-			}
-		}
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= spiele->tick( tickVal );
+    rend |= karten->tick( tickVal );
+    rend |= spielKaufen->tick( tickVal );
+    rend |= karteKaufen->tick( tickVal );
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    if( val < 1 )
+    {
+        bool ret = rend;
+        rend = 0;
+        return ret;
+    }
+    this->tickVal -= val;
+    if( ( animation | 0x1 ) == animation ) // Einblenden
+    {
+        if( prozent1 != 100 )
+        {
+            prozent1 += val;
+            if( prozent1 >= 100 )
+            {
+                prozent1 = 100;
+                if( !jetzt )
+                {
+                    spielKaufen->setSichtbar( 1 );
+                    jetzt = 1;
+                }
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
+        }
+        else if( alpha != 255 )
+        {
+            alpha += val * 2;
+            if( alpha >= 255 || ( animation | 0x2 ) == animation )
+            {
+                alpha = 255;
+                animation &= ~0x1;
+                sichtbar = 1;
+                prozent1 = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x2 ) == animation ) // ausblenden
+    {
+        if( alpha != 0 )
+        {
+            alpha -= val * 2;
+            if( alpha < 0 )
+                alpha = 0;
+        }
+        else
+        {
+            prozent2 += val;
+            if( prozent2 > 100 )
+                prozent2 = 100;
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
+            if( prozent2 == 100 )
+            {
+                prozent2 = 0;
+                animation &= ~0x2;
+                sichtbar = 0;
+            }
+        }
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void Shop::doPublicMausEreignis( MausEreignis &me )
 void Shop::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !sichtbar )
-		return;
-	if( animation )
-		return;
-	int mx = me.mx;
-	int my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	int ak = 0;
-	bool tmp = me.verarbeitet;
-	spiele->doPublicMausEreignis( me );
-	ak = me.verarbeitet ? 1 : 0;
-	karten->doPublicMausEreignis( me );
-	ak = me.verarbeitet && !ak ? 2 : ak;
-	if( tmp )
-		ak = 0;
-	if( me.id == ME_RLinks )
-	{
-		switch( ak )
-		{
-		case 1: // spiele Klick
-			if( jetzt == 1 )
-				break;
-			karten->setRahmenBreite( 1 );
-			karten->setAlphaFeldFarbe( 0x5500FF00 );
-			karten->setAlphaFeldStrength( -5 );
-			spiele->setRahmenBreite( 2 );
-			spiele->setAlphaFeldFarbe( 0xFF000000 );
-			spiele->setAlphaFeldStrength( 20 );
-			karteKaufen->setSichtbar( 0 );
-			spielKaufen->setSichtbar( 1 );
-			jetzt = 1;
-			break;
-		case 2: // karten Klick
-			if( jetzt == 2 || jetzt == 3 )
-				break;
-			spiele->setRahmenBreite( 1 );
-			spiele->setAlphaFeldFarbe( 0x5500FF00 );
-			spiele->setAlphaFeldStrength( -5 );
-			karten->setRahmenBreite( 2 );
-			karten->setAlphaFeldFarbe( 0xFF000000 );
-			karten->setAlphaFeldStrength( 20 );
-			spielKaufen->setSichtbar( 0 );
-			karteKaufen->setSichtbar( 1 );
-			jetzt = 2;
-			break;
-		}
-	}
-	switch( jetzt )
-	{
-	case 1: // Spiel kaufen
-		spielKaufen->doPublicMausEreignis( me );
-		break;
-	case 2: // Karten kaufen
-		karteKaufen->doPublicMausEreignis( me );
-		break;
-	}
-	me.mx = mx;
-	me.my = my;
+    if( !sichtbar )
+        return;
+    if( animation )
+        return;
+    int mx = me.mx;
+    int my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    int ak = 0;
+    bool tmp = me.verarbeitet;
+    spiele->doPublicMausEreignis( me );
+    ak = me.verarbeitet ? 1 : 0;
+    karten->doPublicMausEreignis( me );
+    ak = me.verarbeitet && !ak ? 2 : ak;
+    if( tmp )
+        ak = 0;
+    if( me.id == ME_RLinks )
+    {
+        switch( ak )
+        {
+        case 1: // spiele Klick
+            if( jetzt == 1 )
+                break;
+            karten->setRahmenBreite( 1 );
+            karten->setAlphaFeldFarbe( 0x5500FF00 );
+            karten->setAlphaFeldStrength( -5 );
+            spiele->setRahmenBreite( 2 );
+            spiele->setAlphaFeldFarbe( 0xFF000000 );
+            spiele->setAlphaFeldStrength( 20 );
+            karteKaufen->setSichtbar( 0 );
+            spielKaufen->setSichtbar( 1 );
+            jetzt = 1;
+            break;
+        case 2: // karten Klick
+            if( jetzt == 2 || jetzt == 3 )
+                break;
+            spiele->setRahmenBreite( 1 );
+            spiele->setAlphaFeldFarbe( 0x5500FF00 );
+            spiele->setAlphaFeldStrength( -5 );
+            karten->setRahmenBreite( 2 );
+            karten->setAlphaFeldFarbe( 0xFF000000 );
+            karten->setAlphaFeldStrength( 20 );
+            spielKaufen->setSichtbar( 0 );
+            karteKaufen->setSichtbar( 1 );
+            jetzt = 2;
+            break;
+        }
+    }
+    switch( jetzt )
+    {
+    case 1: // Spiel kaufen
+        spielKaufen->doPublicMausEreignis( me );
+        break;
+    case 2: // Karten kaufen
+        karteKaufen->doPublicMausEreignis( me );
+        break;
+    }
+    me.mx = mx;
+    me.my = my;
 }
 }
 
 
 void Shop::doTastaturEreignis( TastaturEreignis &te )
 void Shop::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( !sichtbar )
-		return;
-	switch( jetzt )
-	{
-	case 1: // Spiel kaufen
-		spielKaufen->doTastaturEreignis( te );
-		break;
-	case 2: // Karten kaufen
-		karteKaufen->doTastaturEreignis( te );
-		break;
-	}
+    if( !sichtbar )
+        return;
+    switch( jetzt )
+    {
+    case 1: // Spiel kaufen
+        spielKaufen->doTastaturEreignis( te );
+        break;
+    case 2: // Karten kaufen
+        karteKaufen->doTastaturEreignis( te );
+        break;
+    }
 }
 }
 
 
 void Shop::render( Bild &zRObj )
 void Shop::render( Bild &zRObj )
 {
 {
-	if( pos == pos1 )
-		return;
-	if( !zRObj.setDrawOptions( pos, gr ) )
-		return;
-	rahmen->setSize( gr );
-	rahmen->render( zRObj );
-	int rbr = rahmen->getRBreite();
-	zRObj.setAlpha( (unsigned char)alpha );
-	spiele->render( zRObj );
-	karten->render( zRObj );
-	spielKaufen->render( zRObj );
-	karteKaufen->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.releaseDrawOptions();
+    if( pos == pos1 )
+        return;
+    if( !zRObj.setDrawOptions( pos, gr ) )
+        return;
+    rahmen->setSize( gr );
+    rahmen->render( zRObj );
+    int rbr = rahmen->getRBreite();
+    zRObj.setAlpha( (unsigned char)alpha );
+    spiele->render( zRObj );
+    karten->render( zRObj );
+    spielKaufen->render( zRObj );
+    karteKaufen->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 bool Shop::istAnimiert() const
 bool Shop::istAnimiert() const
 {
 {
-	return animation != 0;
+    return animation != 0;
 }
 }
 
 
 bool Shop::istSichtbar() const
 bool Shop::istSichtbar() const
 {
 {
-	return sichtbar || prozent1 != 0;
+    return sichtbar || prozent1 != 0;
 }
 }

+ 32 - 32
KSGClient/NachLogin/Shop/Shop.h

@@ -14,40 +14,40 @@ using namespace Framework;
 class Shop : public Zeichnung
 class Shop : public Zeichnung
 {
 {
 private:
 private:
-	int animation;
-	Punkt begPos;
-	Punkt begGröße;
-	Punkt pos1;
-	Punkt größe1;
-	Punkt pos2;
-	Punkt größe2;
-	Punkt bildschirmGröße;
-	LRahmen *rahmen;
-	Knopf *spiele;
-	Knopf *karten;
-	SpieleKaufen *spielKaufen;
-	KartenKaufen *karteKaufen;
-	int alpha;
-	bool sichtbar;
-	int jetzt;
-	int prozent1;
-	int prozent2;
-	double tickVal;
+    int animation;
+    Punkt begPos;
+    Punkt begGröße;
+    Punkt pos1;
+    Punkt größe1;
+    Punkt pos2;
+    Punkt größe2;
+    Punkt bildschirmGröße;
+    LRahmen *rahmen;
+    Knopf *spiele;
+    Knopf *karten;
+    SpieleKaufen *spielKaufen;
+    KartenKaufen *karteKaufen;
+    int alpha;
+    bool sichtbar;
+    int jetzt;
+    int prozent1;
+    int prozent2;
+    double tickVal;
 
 
 public:
 public:
-	// Konstruktor
-	Shop( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
-	// Destruktor
-	~Shop();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istAnimiert() const;
-	bool istSichtbar() const;
+    // Konstruktor
+    Shop( Fenster *zNachLoginFenster, int x );
+    // Destruktor
+    ~Shop();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istAnimiert() const;
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 69 - 124
KSGClient/NachLogin/Shop/Spiele/SpieleKaufen.cpp

@@ -17,7 +17,7 @@ void SpielKaufenKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVar
 
 
 // Inhalt der SpieleKaufenAuswahl Klasse aus SpieleKaufen.h
 // Inhalt der SpieleKaufenAuswahl Klasse aus SpieleKaufen.h
 // Konstruktor
 // Konstruktor
-SpieleKaufenAuswahl::SpieleKaufenAuswahl( Schrift * zSchrift )
+SpieleKaufenAuswahl::SpieleKaufenAuswahl()
     : Thread()
     : Thread()
 {
 {
     spielId = 0;
     spielId = 0;
@@ -29,18 +29,18 @@ SpieleKaufenAuswahl::SpieleKaufenAuswahl( Schrift * zSchrift )
         if( getKSGScript )
         if( getKSGScript )
         {
         {
             fenster = getKSGScript();
             fenster = getKSGScript();
-            fenster->setBildschirmZ( hauptScreen->getThis() );
-            fenster->setSchriftZ( zSchrift->getThis() );
+            fenster->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
+            fenster->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
             fenster->setSize( 555, 380 );
             fenster->setSize( 555, 380 );
-            fenster->setRückrufParam( this );
-            fenster->setRückrufFunktion( SpielKaufenKSGSAktion );
+            fenster->setCallbackParam( this );
+            fenster->setCallbackFunktion( SpielKaufenKSGSAktion );
         }
         }
         else
         else
         {
         {
             fenster = 0;
             fenster = 0;
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
     }
     }
@@ -54,7 +54,7 @@ SpieleKaufenAuswahl::SpieleKaufenAuswahl( Schrift * zSchrift )
     ram = new LRahmen();
     ram = new LRahmen();
     ram->setSize( 555, 380 );
     ram->setSize( 555, 380 );
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
-    laden = ( Framework::Animation2D * )ladeAnimation->dublizieren();
+    laden = (Framework::Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 252, 165 );
     laden->setPosition( 252, 165 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     pos = Punkt( 220, 55 );
     pos = Punkt( 220, 55 );
@@ -66,7 +66,7 @@ SpieleKaufenAuswahl::~SpieleKaufenAuswahl()
 {
 {
     if( fenster )
     if( fenster )
     {
     {
-        fenster->zurücksetzen();
+        fenster->reset();
         fenster->release();
         fenster->release();
     }
     }
     ram->release();
     ram->release();
@@ -107,7 +107,7 @@ void SpieleKaufenAuswahl::thread()
         if( !aktion )
         if( !aktion )
             spielId = 0;
             spielId = 0;
         if( fenster )
         if( fenster )
-            fenster->zurücksetzen();
+            fenster->reset();
     }
     }
     if( aktion )
     if( aktion )
     {
     {
@@ -115,7 +115,7 @@ void SpieleKaufenAuswahl::thread()
             Sleep( 100 );
             Sleep( 100 );
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             shopClient->ladeSpielSeite( spielId );
             shopClient->ladeSpielSeite( spielId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -133,12 +133,12 @@ void SpieleKaufenAuswahl::thread()
     run = 0;
     run = 0;
 }
 }
 
 
-void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
 {
     KSGSVariable *befehl = parameter->z( 0 );
     KSGSVariable *befehl = parameter->z( 0 );
     if( !befehl )
     if( !befehl )
         return;
         return;
-    Text * b = befehl->getText();
+    Text *b = befehl->getText();
     if( !b )
     if( !b )
         return;
         return;
     if( b->istGleich( "GetBesitzStatus" ) )
     if( b->istGleich( "GetBesitzStatus" ) )
@@ -146,7 +146,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         int besitz = 0;
         int besitz = 0;
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             besitz = shopClient->getSpielBesitzStatus( spielId );
             besitz = shopClient->getSpielBesitzStatus( spielId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -161,7 +161,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -174,7 +174,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -183,7 +183,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
             int preis = 0;
             int preis = 0;
             if( !shopClient )
             if( !shopClient )
                 shopClient = mainClient->createShopServerClient();
                 shopClient = mainClient->createShopServerClient();
-            if( shopClient &&shopClient->verbinde() )
+            if( shopClient && shopClient->verbinde() )
             {
             {
                 preis = shopClient->getSpielPreis( spielId, testVersion );
                 preis = shopClient->getSpielPreis( spielId, testVersion );
                 shopClient->trenne( 0 );
                 shopClient->trenne( 0 );
@@ -198,7 +198,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                               new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                              "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                        "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
             }
             }
         }
         }
@@ -210,7 +210,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         int verbleibend = 0;
         int verbleibend = 0;
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             verbleibend = shopClient->getSpielTestversion( spielId );
             verbleibend = shopClient->getSpielTestversion( spielId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -225,7 +225,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -236,7 +236,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         int erwerbbar = 0;
         int erwerbbar = 0;
         if( !shopClient )
         if( !shopClient )
             shopClient = mainClient->createShopServerClient();
             shopClient = mainClient->createShopServerClient();
-        if( shopClient &&shopClient->verbinde() )
+        if( shopClient && shopClient->verbinde() )
         {
         {
             erwerbbar = shopClient->istSpielErwerbbar( spielId );
             erwerbbar = shopClient->istSpielErwerbbar( spielId );
             shopClient->trenne( 0 );
             shopClient->trenne( 0 );
@@ -251,7 +251,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -270,7 +270,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         b->release();
         b->release();
@@ -283,7 +283,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -381,7 +381,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                           new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                          "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
         else
         else
@@ -392,7 +392,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
             {
             {
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
                                                               new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-                                                              "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                                        "Sie könnte eventuell nicht richtig funktionieren." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
             }
             }
             else
             else
@@ -406,7 +406,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
                     else
                     else
                         p += 6;
                         p += 6;
                     Text nn = Text( pf->getText() ) + "/" + (const char *)( n->getText() + p );
                     Text nn = Text( pf->getText() ) + "/" + (const char *)( n->getText() + p );
-                    Bild * b = bilder->get( nn );
+                    Bild *b = bilder->get( nn );
                     if( b )
                     if( b )
                     {
                     {
                         KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
                         KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
@@ -416,7 +416,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
                         {
                         {
                             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                           new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
                                                                           new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
-                                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                           new Text( "Ok" ), 0 );
                                                                           new Text( "Ok" ), 0 );
                             b->release();
                             b->release();
                         }
                         }
@@ -429,7 +429,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
                 {
                 {
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                   new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
                                                                   new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-                                                                  "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                            "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                 }
                 }
             }
             }
@@ -443,7 +443,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSV
     }
     }
 }
 }
 
 
-void SpieleKaufenAuswahl::doPublicMausEreignis( MausEreignis & me )
+void SpieleKaufenAuswahl::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( run )
     if( run )
         return;
         return;
@@ -455,7 +455,7 @@ void SpieleKaufenAuswahl::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void SpieleKaufenAuswahl::doTastaturEreignis( TastaturEreignis & te )
+void SpieleKaufenAuswahl::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( run )
     if( run )
         return;
         return;
@@ -475,7 +475,7 @@ bool SpieleKaufenAuswahl::tick( double zeit )
             alpha -= (unsigned char)( zeit * 150 );
             alpha -= (unsigned char)( zeit * 150 );
         rend = 1;
         rend = 1;
     }
     }
-    if( !run && spielId &&alpha < 255 )
+    if( !run && spielId && alpha < 255 )
     {
     {
         if( alpha + zeit * 150 > 255 )
         if( alpha + zeit * 150 > 255 )
             alpha = 255;
             alpha = 255;
@@ -486,7 +486,7 @@ bool SpieleKaufenAuswahl::tick( double zeit )
     return rend;
     return rend;
 }
 }
 
 
-void SpieleKaufenAuswahl::render( Bild & zRObj )
+void SpieleKaufenAuswahl::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
         return;
         return;
@@ -499,32 +499,20 @@ void SpieleKaufenAuswahl::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread * SpieleKaufenAuswahl::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 2000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
-}
-
 
 
 // Inhalt der SpieleKaufenListeEintrag Klasse aus SpieleKaufen.h
 // Inhalt der SpieleKaufenListeEintrag Klasse aus SpieleKaufen.h
 // Konstruktor
 // Konstruktor
-SpieleKaufenListeEintrag::SpieleKaufenListeEintrag( int id, Schrift * schrift )
+SpieleKaufenListeEintrag::SpieleKaufenListeEintrag( int id )
+    : ReferenceCounter()
 {
 {
     spielId = id;
     spielId = id;
-    auswählen = initKnopf( 173, 73, 22, 22, 0, 0, "" );
+    auswählen = initKnopf( 173, 73, 22, 22, 0, "" );
     auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
     auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
-    initToolTip( auswählen, "Spiel auswählen.", schrift, hauptScreen );
-    schrift->release();
+    initToolTip( auswählen, "Spiel auswählen." );
     auswählen->setRahmenBreite( 1 );
     auswählen->setRahmenBreite( 1 );
-    LTDBDatei * datei = new LTDBDatei();
-    Text * bdpf = new Text( "data/tmp/shop/kaufen/spiele/" );
+    LTDBDatei *datei = new LTDBDatei();
+    Text *bdpf = new Text( "data/tmp/shop/kaufen/spiele/" );
     bdpf->append( id );
     bdpf->append( id );
     bdpf->append( "/titelbg.ltdb" );
     bdpf->append( "/titelbg.ltdb" );
     datei->setDatei( bdpf );
     datei->setDatei( bdpf );
@@ -540,7 +528,6 @@ SpieleKaufenListeEintrag::SpieleKaufenListeEintrag( int id, Schrift * schrift )
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
     ausw = 0;
     ausw = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -559,11 +546,11 @@ void SpieleKaufenListeEintrag::resetAuswahl()
     ausw = 0;
     ausw = 0;
 }
 }
 
 
-bool SpieleKaufenListeEintrag::doPublicMausEreignis( MausEreignis & me )
+bool SpieleKaufenListeEintrag::doPublicMausEreignis( MausEreignis &me )
 {
 {
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     auswählen->doPublicMausEreignis( me );
     auswählen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         ausw = 1;
         ausw = 1;
         return 1;
         return 1;
@@ -599,7 +586,7 @@ bool SpieleKaufenListeEintrag::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void SpieleKaufenListeEintrag::render( int yOff, Bild & zRObj )
+void SpieleKaufenListeEintrag::render( int yOff, Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
     if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
         return;
         return;
@@ -617,27 +604,12 @@ int SpieleKaufenListeEintrag::getSpielId() const
     return spielId;
     return spielId;
 }
 }
 
 
-// Reference Counting
-SpieleKaufenListeEintrag *SpieleKaufenListeEintrag::getThis()
-{
-    ref++;
-    return this;
-}
-
-SpieleKaufenListeEintrag *SpieleKaufenListeEintrag::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der SpieleKaufenListe Klasse aus SpieleKaufen.h
 // Inhalt der SpieleKaufenListe Klasse aus SpieleKaufen.h
 // Konstruktor
 // Konstruktor
-SpieleKaufenListe::SpieleKaufenListe( Schrift * schrift )
+SpieleKaufenListe::SpieleKaufenListe()
+    : ReferenceCounter()
 {
 {
-    s = schrift;
     pos = Punkt( 5, 55 );
     pos = Punkt( 5, 55 );
     ram = new LRahmen();
     ram = new LRahmen();
     ram->setSize( 215, 380 );
     ram->setSize( 215, 380 );
@@ -647,31 +619,29 @@ SpieleKaufenListe::SpieleKaufenListe( Schrift * schrift )
     vScroll->setKlickScroll( 10 );
     vScroll->setKlickScroll( 10 );
     vScroll->update( 0, 380 );
     vScroll->update( 0, 380 );
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
 SpieleKaufenListe::~SpieleKaufenListe()
 SpieleKaufenListe::~SpieleKaufenListe()
 {
 {
-    s->release();
     ram->release();
     ram->release();
     einträge->release();
     einträge->release();
     vScroll->release();
     vScroll->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
-void SpieleKaufenListe::ladeSpiele( Array< int > * spiele )
+void SpieleKaufenListe::ladeSpiele( Array< int > *spiele )
 {
 {
     leeren();
     leeren();
     int anz = spiele->getEintragAnzahl();
     int anz = spiele->getEintragAnzahl();
     if( !shopClient )
     if( !shopClient )
         shopClient = mainClient->createShopServerClient();
         shopClient = mainClient->createShopServerClient();
-    if( shopClient &&shopClient->verbinde() )
+    if( shopClient && shopClient->verbinde() )
     {
     {
         for( int i = 0; i < anz; i++ )
         for( int i = 0; i < anz; i++ )
         {
         {
             if( shopClient->ladeSpielTitel( spiele->hat( i ) ? spiele->get( i ) : 0 ) )
             if( shopClient->ladeSpielTitel( spiele->hat( i ) ? spiele->get( i ) : 0 ) )
-                einträge->add( new SpieleKaufenListeEintrag( spiele->hat( i ) ? spiele->get( i ) : 0, s->getThis() ) );
+                einträge->add( new SpieleKaufenListeEintrag( spiele->hat( i ) ? spiele->get( i ) : 0 ) );
         }
         }
         shopClient->trenne( 0 );
         shopClient->trenne( 0 );
     }
     }
@@ -688,7 +658,7 @@ void SpieleKaufenListe::leeren()
     rend = 1;
     rend = 1;
 }
 }
 
 
-int SpieleKaufenListe::doPublicMausEreignis( MausEreignis & me )
+int SpieleKaufenListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int mx = me.mx;
     int mx = me.mx;
     int my = me.my;
     int my = me.my;
@@ -732,7 +702,7 @@ bool SpieleKaufenListe::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void SpieleKaufenListe::render( Bild & zRObj )
+void SpieleKaufenListe::render( Bild &zRObj )
 {
 {
     int br = ram->getBreite();
     int br = ram->getBreite();
     int hö = ram->getHeight();
     int hö = ram->getHeight();
@@ -754,25 +724,10 @@ int SpieleKaufenListe::getEintragAnzahl()
     return einträge->getEintragAnzahl();
     return einträge->getEintragAnzahl();
 }
 }
 
 
-// Reference Counting
-SpieleKaufenListe *SpieleKaufenListe::getThis()
-{
-    ref++;
-    return this;
-}
-
-SpieleKaufenListe *SpieleKaufenListe::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der SpieleKaufen Klasse aus SpieleKaufen.h
 // Inhalt der SpieleKaufen Klasse aus SpieleKaufen.h
 // Konstruktor
 // Konstruktor
-SpieleKaufen::SpieleKaufen( Schrift * zSchrift )
+SpieleKaufen::SpieleKaufen()
     : Thread()
     : Thread()
 {
 {
     Bild *shopZurück = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
     Bild *shopZurück = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
@@ -784,22 +739,22 @@ SpieleKaufen::SpieleKaufen( Schrift * zSchrift )
     ram->setSize( 780, 440 );
     ram->setSize( 780, 440 );
     ram->setFarbe( 0xFFFFFFFF );
     ram->setFarbe( 0xFFFFFFFF );
     pos = Punkt( 10, 50 );
     pos = Punkt( 10, 50 );
-    suchFilterT = initTextFeld( 5, 5, 70, 20, zSchrift, TextFeld::Style::Text, "Suchfilter:" );
-    suchFilter = initTextFeld( 80, 5, 225, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( suchFilter, "Gebe etwas vom Namen des Spieles ein, nach dem du suchst.", zSchrift, hauptScreen );
-    suchen = initKnopf( 310, 5, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
-    seiten = initTextFeld( 55, 30, 250, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
-    zurück = initKnopf( 5, 30, 20, 20, 0, 0, "" );
+    suchFilterT = initTextFeld( 5, 5, 70, 20, TextFeld::Style::Text, "Suchfilter:" );
+    suchFilter = initTextFeld( 80, 5, 225, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( suchFilter, "Gebe etwas vom Namen des Spieles ein, nach dem du suchst." );
+    suchen = initKnopf( 310, 5, 100, 20, Knopf::Style::Sichtbar, "suchen" );
+    seiten = initTextFeld( 55, 30, 250, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
+    zurück = initKnopf( 5, 30, 20, 20, 0, "" );
     zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     zurück->setHintergrundBildZ( shopZurück );
     zurück->setHintergrundBildZ( shopZurück );
-    initToolTip( zurück, "Seite zurück blättern.", zSchrift, hauptScreen );
-    weiter = initKnopf( 30, 30, 20, 20, 0, 0, "" );
+    initToolTip( zurück, "Seite zurück blättern." );
+    weiter = initKnopf( 30, 30, 20, 20, 0, "" );
     weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     weiter->setHintergrundBildZ( shopWeiter );
     weiter->setHintergrundBildZ( shopWeiter );
-    initToolTip( weiter, "Seite weiter blättern.", zSchrift, hauptScreen );
-    liste = new SpieleKaufenListe( zSchrift->getThis() );
-    auswahl = new SpieleKaufenAuswahl( zSchrift );
-    laden = ( Framework::Animation2D * )ladeAnimation->dublizieren();
+    initToolTip( weiter, "Seite weiter blättern." );
+    liste = new SpieleKaufenListe();
+    auswahl = new SpieleKaufenAuswahl();
+    laden = (Framework::Animation2D *)ladeAnimation->dublizieren();
     laden->setPosition( 365, 195 );
     laden->setPosition( 365, 195 );
     laden->setSichtbar( 0 );
     laden->setSichtbar( 0 );
     tickVal = 0;
     tickVal = 0;
@@ -820,6 +775,8 @@ SpieleKaufen::~SpieleKaufen()
     weiter->release();
     weiter->release();
     zurück->release();
     zurück->release();
     liste->release();
     liste->release();
+    auswahl->warteAufThread( 10000 );
+    auswahl->ende();
     auswahl->release();
     auswahl->release();
     laden->release();
     laden->release();
 }
 }
@@ -845,7 +802,7 @@ void SpieleKaufen::thread()
     Array< int > *list = 0;
     Array< int > *list = 0;
     if( !shopClient )
     if( !shopClient )
         shopClient = mainClient->createShopServerClient();
         shopClient = mainClient->createShopServerClient();
-    if( shopClient &&shopClient->verbinde() )
+    if( shopClient && shopClient->verbinde() )
     {
     {
         list = shopClient->suchSpiele( suchText->getText() );
         list = shopClient->suchSpiele( suchText->getText() );
         shopClient->trenne( 0 );
         shopClient->trenne( 0 );
@@ -869,7 +826,7 @@ void SpieleKaufen::thread()
     auswahl->reset();
     auswahl->reset();
     liste->ladeSpiele( slist );
     liste->ladeSpiele( slist );
     slist->release();
     slist->release();
-    Text * t = new Text( "Seite " );
+    Text *t = new Text( "Seite " );
     t->append( maxSeite ? seite + 1 : 0 );
     t->append( maxSeite ? seite + 1 : 0 );
     t->append( " von " );
     t->append( " von " );
     t->append( maxSeite );
     t->append( maxSeite );
@@ -886,7 +843,7 @@ void SpieleKaufen::thread()
     run = 0;
     run = 0;
 }
 }
 
 
-void SpieleKaufen::doPublicMausEreignis( MausEreignis & me )
+void SpieleKaufen::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !sichtbar || run )
     if( !sichtbar || run )
         return;
         return;
@@ -937,13 +894,13 @@ void SpieleKaufen::doPublicMausEreignis( MausEreignis & me )
     me.my = my;
     me.my = my;
 }
 }
 
 
-void SpieleKaufen::doTastaturEreignis( TastaturEreignis & te )
+void SpieleKaufen::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !sichtbar || run )
     if( !sichtbar || run )
         return;
         return;
     bool vera = te.verarbeitet;
     bool vera = te.verarbeitet;
     suchFilter->doTastaturEreignis( te );
     suchFilter->doTastaturEreignis( te );
-    if( !vera && te.verarbeitet &&te.taste == T_Enter && te.id == TE_Release )
+    if( !vera && te.verarbeitet && te.taste == T_Enter && te.id == TE_Release )
     {
     {
         MausEreignis me;
         MausEreignis me;
         me.id = ME_RLinks;
         me.id = ME_RLinks;
@@ -1016,7 +973,7 @@ bool SpieleKaufen::tick( double zeit )
     return ret;
     return ret;
 }
 }
 
 
-void SpieleKaufen::render( Bild & zRObj )
+void SpieleKaufen::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -1043,16 +1000,4 @@ void SpieleKaufen::render( Bild & zRObj )
 bool SpieleKaufen::istSichtbar() const
 bool SpieleKaufen::istSichtbar() const
 {
 {
     return sichtbar;
     return sichtbar;
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *SpieleKaufen::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 1000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
 }
 }

+ 90 - 103
KSGClient/NachLogin/Shop/Spiele/SpieleKaufen.h

@@ -16,130 +16,117 @@ using namespace KSGScript;
 class SpieleKaufenAuswahl : public Thread
 class SpieleKaufenAuswahl : public Thread
 {
 {
 private:
 private:
-	int spielId;
-	unsigned char alpha;
-	KSGScriptObj *fenster;
-	Framework::Animation2D *laden;
-	Punkt pos;
-	LRahmen *ram;
-	HINSTANCE ksgs;
-	bool aktion;
+    int spielId;
+    unsigned char alpha;
+    KSGScriptObj *fenster;
+    Framework::Animation2D *laden;
+    Punkt pos;
+    LRahmen *ram;
+    HINSTANCE ksgs;
+    bool aktion;
 
 
 public:
 public:
-	// Konstruktor
-	SpieleKaufenAuswahl( Schrift *zSchrift );
-	// Destruktor
-	~SpieleKaufenAuswahl();
-	// nicht constant
-	void ladeSpielSeite( int id );
-	void reset();
-	virtual void thread();
-	void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **ret );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    SpieleKaufenAuswahl();
+    // Destruktor
+    ~SpieleKaufenAuswahl();
+    // nicht constant
+    void ladeSpielSeite( int id );
+    void reset();
+    virtual void thread();
+    void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **ret );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
 };
 };
 
 
-class SpieleKaufenListeEintrag
+class SpieleKaufenListeEintrag : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	int spielId;
-	Knopf *auswählen;
-	Bild *hintergrund;
-	AlphaFeld *ausgewählt;
-	LRahmen *ram;
-	bool ausw;
-	bool rend;
-	int ref;
+    int spielId;
+    Knopf *auswählen;
+    Bild *hintergrund;
+    AlphaFeld *ausgewählt;
+    LRahmen *ram;
+    bool ausw;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	SpieleKaufenListeEintrag( int id, Schrift *schrift );
-	// Destruktor
-	~SpieleKaufenListeEintrag();
-	// nicht constant
-	void resetAuswahl();
-	bool doPublicMausEreignis( MausEreignis &me );
-	bool tick( double zeit );
-	void render( int yOff, Bild &zRObj );
-	// constant
-	int getSpielId() const;
-	// Reference Counting
-	SpieleKaufenListeEintrag *getThis();
-	SpieleKaufenListeEintrag *release();
+    // Konstruktor
+    SpieleKaufenListeEintrag( int id );
+    // Destruktor
+    ~SpieleKaufenListeEintrag();
+    // nicht constant
+    void resetAuswahl();
+    bool doPublicMausEreignis( MausEreignis &me );
+    bool tick( double zeit );
+    void render( int yOff, Bild &zRObj );
+    // constant
+    int getSpielId() const;
 };
 };
 
 
-class SpieleKaufenListe
+class SpieleKaufenListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Schrift *s;
-	LRahmen *ram;
-	Punkt pos;
-	RCArray< SpieleKaufenListeEintrag > *einträge;
-	VScrollBar *vScroll;
-	bool rend;
-	int ref;
-	Critical cs;
+    LRahmen *ram;
+    Punkt pos;
+    RCArray< SpieleKaufenListeEintrag > *einträge;
+    VScrollBar *vScroll;
+    bool rend;
+    Critical cs;
 
 
 public:
 public:
-	// Konstruktor
-	SpieleKaufenListe( Schrift *schrift );
-	// Destruktor
-	~SpieleKaufenListe();
-	// nicht constant
-	void ladeSpiele( Array< int > *spiele );
-	void leeren();
-	int doPublicMausEreignis( MausEreignis &me );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	int getEintragAnzahl();
-	// Reference Counting
-	SpieleKaufenListe *getThis();
-	SpieleKaufenListe *release();
+    // Konstruktor
+    SpieleKaufenListe();
+    // Destruktor
+    ~SpieleKaufenListe();
+    // nicht constant
+    void ladeSpiele( Array< int > *spiele );
+    void leeren();
+    int doPublicMausEreignis( MausEreignis &me );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    int getEintragAnzahl();
 };
 };
 
 
 class SpieleKaufen : public Thread
 class SpieleKaufen : public Thread
 {
 {
 private:
 private:
-	unsigned char alpha;
-	bool sichtbar;
-	Text *suchText;
-	LRahmen *ram;
-	TextFeld *suchFilter;
-	TextFeld *suchFilterT;
-	Knopf *suchen;
-	TextFeld *seiten;
-	Knopf *weiter;
-	Knopf *zurück;
-	Punkt pos;
-	SpieleKaufenListe *liste;
-	SpieleKaufenAuswahl *auswahl;
-	Animation2D *laden;
-	double tickVal;
-	int seite;
-	int maxSeite;
-	bool rend;
+    unsigned char alpha;
+    bool sichtbar;
+    Text *suchText;
+    LRahmen *ram;
+    TextFeld *suchFilter;
+    TextFeld *suchFilterT;
+    Knopf *suchen;
+    TextFeld *seiten;
+    Knopf *weiter;
+    Knopf *zurück;
+    Punkt pos;
+    SpieleKaufenListe *liste;
+    SpieleKaufenAuswahl *auswahl;
+    Animation2D *laden;
+    double tickVal;
+    int seite;
+    int maxSeite;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	SpieleKaufen( Schrift *zSchrift );
-	// Destruktor
-	~SpieleKaufen();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	virtual void thread();
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    SpieleKaufen();
+    // Destruktor
+    ~SpieleKaufen();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    virtual void thread();
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
 };
 };
 
 
 #endif
 #endif

+ 15 - 30
KSGClient/NachLogin/Spiele/Angemeldet/Angemeldet.cpp

@@ -6,7 +6,8 @@
 
 
 // Inhalt der AngemeldetFenster Klasse aus Angemeldet.h
 // Inhalt der AngemeldetFenster Klasse aus Angemeldet.h
 // Konstruktor
 // Konstruktor
-AngemeldetFenster::AngemeldetFenster( Schrift *zSchrift )
+AngemeldetFenster::AngemeldetFenster()
+    : ReferenceCounter()
 {
 {
     pos = Punkt( 10, 10 );
     pos = Punkt( 10, 10 );
     gr = Punkt( 780, 480 );
     gr = Punkt( 780, 480 );
@@ -14,15 +15,15 @@ AngemeldetFenster::AngemeldetFenster( Schrift *zSchrift )
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setSize( 780, 480 );
     rahmen->setSize( 780, 480 );
-    spielName = initTextFeld( 290, 165, 200, 20, zSchrift, TextFeld::Style::Text, "" );
-    karteName = initTextFeld( 290, 190, 200, 20, zSchrift, TextFeld::Style::Text, "" );
-    zeit = initTextFeld( 290, 215, 200, 20, zSchrift, TextFeld::Style::Text, "Zeit in Warteschlange: " );
-    abbrechen = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal, "abbrechen" );
-    spielGefunden = initTextFeld( 340, 140, 100, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Spiel gefunden" );
-    warten = initTextFeld( 290, 240, 200, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Warte auf andere Spieler" );
-    beitreten = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "beitreten" );
-    kick = initTextFeld( 190, 215, 400, 20, zSchrift, TextFeld::Style::Text & ~Knopf::Style::Sichtbar, "Du wurdest wegen Abwesenheit aus der Warteschlange entfernt." );
-    ok = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "Zurück" );
+    spielName = initTextFeld( 290, 165, 200, 20, TextFeld::Style::Text, "" );
+    karteName = initTextFeld( 290, 190, 200, 20, TextFeld::Style::Text, "" );
+    zeit = initTextFeld( 290, 215, 200, 20, TextFeld::Style::Text, "Zeit in Warteschlange: " );
+    abbrechen = initKnopf( 340, 240, 100, 20, Knopf::Style::Normal, "abbrechen" );
+    spielGefunden = initTextFeld( 340, 140, 100, 20, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Spiel gefunden" );
+    warten = initTextFeld( 290, 240, 200, 20, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Warte auf andere Spieler" );
+    beitreten = initKnopf( 340, 240, 100, 20, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "beitreten" );
+    kick = initTextFeld( 190, 215, 400, 20, TextFeld::Style::Text & ~Knopf::Style::Sichtbar, "Du wurdest wegen Abwesenheit aus der Warteschlange entfernt." );
+    ok = initKnopf( 340, 240, 100, 20, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "Zurück" );
     karteId = 0;
     karteId = 0;
     gameId = 0;
     gameId = 0;
     animation = 0;
     animation = 0;
@@ -32,7 +33,6 @@ AngemeldetFenster::AngemeldetFenster( Schrift *zSchrift )
     time = 0;
     time = 0;
     status = 0;
     status = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -77,9 +77,9 @@ bool AngemeldetFenster::setKarteId( int karteId )
         if( nachLogin && nachLogin->zNachrichtenListe() )
         if( nachLogin && nachLogin->zNachrichtenListe() )
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-                                                            new Text( anmeldungClient->getLetzterFehler() ),
-                                                            new Text( "Ok" ),
-                                                            0 );
+                                                          new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ),
+                                                          0 );
         }
         }
         return 0;
         return 0;
     }
     }
@@ -212,7 +212,7 @@ bool AngemeldetFenster::tick( double tickVal )
     if( status == 1 )
     if( status == 1 )
         time += tickVal;
         time += tickVal;
     this->tickVal += tickVal * 750;
     this->tickVal += tickVal * 750;
-    int val = ( int )this->tickVal;
+    int val = (int)this->tickVal;
     if( val < 1 )
     if( val < 1 )
     {
     {
         bool ret = rend;
         bool ret = rend;
@@ -375,19 +375,4 @@ int AngemeldetFenster::getAktion()
 int AngemeldetFenster::getKarteId() const
 int AngemeldetFenster::getKarteId() const
 {
 {
     return karteId;
     return karteId;
-}
-
-// Reference Countong
-AngemeldetFenster *AngemeldetFenster::getThis()
-{
-    ref++;
-    return this;
-}
-
-AngemeldetFenster *AngemeldetFenster::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }
 }

+ 39 - 43
KSGClient/NachLogin/Spiele/Angemeldet/Angemeldet.h

@@ -8,54 +8,50 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class AngemeldetFenster
+class AngemeldetFenster : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	LRahmen *rahmen;
-	TextFeld *spielName;
-	TextFeld *karteName;
-	TextFeld *zeit;
-	Knopf *abbrechen;
-	TextFeld *spielGefunden;
-	TextFeld *warten;
-	Knopf *beitreten;
-	TextFeld *kick;
-	Knopf *ok;
-	int karteId;
-	int gameId;
-	int animation;
+    Punkt pos;
+    Punkt gr;
+    LRahmen *rahmen;
+    TextFeld *spielName;
+    TextFeld *karteName;
+    TextFeld *zeit;
+    Knopf *abbrechen;
+    TextFeld *spielGefunden;
+    TextFeld *warten;
+    Knopf *beitreten;
+    TextFeld *kick;
+    Knopf *ok;
+    int karteId;
+    int gameId;
+    int animation;
     unsigned char aAlpha;
     unsigned char aAlpha;
-	unsigned char alpha;
-	double tickVal;
-	double time;
-	int status;
-	int aktion;
-	bool rend;
-	int ref;
+    unsigned char alpha;
+    double tickVal;
+    double time;
+    int status;
+    int aktion;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	AngemeldetFenster( Schrift *zSchrift );
-	// Destruktor
-	~AngemeldetFenster();
-	// nicht constant
-	bool setKarteId( int karteId );
-	void setSichtbar( bool sichtbar );
-	void setSpielGefunden();
-	void setVerbleibendeZeit( int sekunden );
-	void spielGefundenAbbruch();
-	void zurückInWarteschlange( int stunden, int minuten, int sekunden );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zrObj );
-	int getAktion();
-	// constant
-	int getKarteId() const;
-	// Reference Countong
-	AngemeldetFenster *getThis();
-	AngemeldetFenster *release();
+    // Konstruktor
+    AngemeldetFenster();
+    // Destruktor
+    ~AngemeldetFenster();
+    // nicht constant
+    bool setKarteId( int karteId );
+    void setSichtbar( bool sichtbar );
+    void setSpielGefunden();
+    void setVerbleibendeZeit( int sekunden );
+    void spielGefundenAbbruch();
+    void zurückInWarteschlange( int stunden, int minuten, int sekunden );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zrObj );
+    int getAktion();
+    // constant
+    int getKarteId() const;
 };
 };
 
 
 #endif
 #endif

+ 102 - 246
KSGClient/NachLogin/Spiele/Gruppe/Gruppe.cpp

@@ -11,7 +11,8 @@
 
 
 // Inhalt der GruppeEinladungAccount Klasse aus Gruppe.h
 // Inhalt der GruppeEinladungAccount Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeEinladungAccount::GruppeEinladungAccount( Schrift *zSchrift )
+GruppeEinladungAccount::GruppeEinladungAccount()
+    : ReferenceCounter()
 {
 {
     Bild *nachrichtBild = bilder->get( "data/client/bilder/chat.ltdb/nachricht.png" );
     Bild *nachrichtBild = bilder->get( "data/client/bilder/chat.ltdb/nachricht.png" );
     Bild *neuSendenBild = bilder->get( "data/client/bilder/chat.ltdb/neusenden.png" );
     Bild *neuSendenBild = bilder->get( "data/client/bilder/chat.ltdb/neusenden.png" );
@@ -23,19 +24,19 @@ GruppeEinladungAccount::GruppeEinladungAccount( Schrift *zSchrift )
     auswahl->setFarbe( 0x0000FF00 );
     auswahl->setFarbe( 0x0000FF00 );
     auswahl->setStrength( -2 );
     auswahl->setStrength( -2 );
     auswahl->setPosition( 1, 1 );
     auswahl->setPosition( 1, 1 );
-    name = initTextFeld( 0, 5, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
-    nachrichtSenden = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    name = initTextFeld( 0, 5, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "" );
+    nachrichtSenden = initKnopf( 0, 30, 20, 20, 0, "" );
     nachrichtSenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     nachrichtSenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     nachrichtSenden->setHintergrundBildZ( nachrichtBild );
     nachrichtSenden->setHintergrundBildZ( nachrichtBild );
-    initToolTip( nachrichtSenden, "Nachricht senden.", zSchrift, hauptScreen );
-    erneutSenden = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    initToolTip( nachrichtSenden, "Nachricht senden." );
+    erneutSenden = initKnopf( 0, 30, 20, 20, 0, "" );
     erneutSenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     erneutSenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     erneutSenden->setHintergrundBildZ( neuSendenBild );
     erneutSenden->setHintergrundBildZ( neuSendenBild );
-    initToolTip( erneutSenden, "Einladung erneut senden.", zSchrift, hauptScreen );
-    einladungAbbrechen = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    initToolTip( erneutSenden, "Einladung erneut senden." );
+    einladungAbbrechen = initKnopf( 0, 30, 20, 20, 0, "" );
     einladungAbbrechen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladungAbbrechen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladungAbbrechen->setHintergrundBildZ( entfernenBild );
     einladungAbbrechen->setHintergrundBildZ( entfernenBild );
-    initToolTip( einladungAbbrechen, "Einladung abbrechen.", zSchrift, hauptScreen );
+    initToolTip( einladungAbbrechen, "Einladung abbrechen." );
     status = 0;
     status = 0;
     knopfX = 500;
     knopfX = 500;
     tickVal = 0;
     tickVal = 0;
@@ -47,7 +48,6 @@ GruppeEinladungAccount::GruppeEinladungAccount( Schrift *zSchrift )
     höhe = 0;
     höhe = 0;
     animation = 0x1;
     animation = 0x1;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -258,7 +258,7 @@ bool GruppeEinladungAccount::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeEinladungAccount::doPublicMausEreignis( MausEreignis & me )
+void GruppeEinladungAccount::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( me.mx < 0 || me.my < 0 || me.mx > br || me.my > höhe )
     if( me.mx < 0 || me.my < 0 || me.mx > br || me.my > höhe )
         mausIn = 0;
         mausIn = 0;
@@ -327,7 +327,7 @@ void GruppeEinladungAccount::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void GruppeEinladungAccount::render( int y, Bild & zrObj )
+void GruppeEinladungAccount::render( int y, Bild &zrObj )
 {
 {
     if( !zrObj.setDrawOptions( 0, y, br, höhe ) )
     if( !zrObj.setDrawOptions( 0, y, br, höhe ) )
         return;
         return;
@@ -368,26 +368,11 @@ int GruppeEinladungAccount::getHeight() const
     return höhe;
     return höhe;
 }
 }
 
 
-// Reference Counting
-GruppeEinladungAccount *GruppeEinladungAccount::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeEinladungAccount *GruppeEinladungAccount::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der GruppeEinladungListe Klasse aus Gruppe.h
 // Inhalt der GruppeEinladungListe Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeEinladungListe::GruppeEinladungListe( Schrift * zSchrift )
+GruppeEinladungListe::GruppeEinladungListe()
+    : ReferenceCounter()
 {
 {
-    schrift = zSchrift->getThis();
     Bild *maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     Bild *maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
     pos = Punkt( 200, 0 );
     pos = Punkt( 200, 0 );
     gr = Punkt( 150, 350 );
     gr = Punkt( 150, 350 );
@@ -395,12 +380,12 @@ GruppeEinladungListe::GruppeEinladungListe( Schrift * zSchrift )
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setSize( 150, 350 );
     rahmen->setSize( 150, 350 );
-    einladenName = initTextFeld( 5, 5, 115, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( einladenName, "Name des Spielers den du einladen möchtest.", zSchrift, hauptScreen );
-    einladen = initKnopf( 125, 5, 20, 20, 0, 0, "" );
+    einladenName = initTextFeld( 5, 5, 115, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( einladenName, "Name des Spielers den du einladen möchtest." );
+    einladen = initKnopf( 125, 5, 20, 20, 0, "" );
     einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     einladen->setHintergrundBildZ( maximierenBild );
     einladen->setHintergrundBildZ( maximierenBild );
-    initToolTip( einladen, "Diesen Spieler einladen.", zSchrift, hauptScreen );
+    initToolTip( einladen, "Diesen Spieler einladen." );
     scroll = new VScrollBar();
     scroll = new VScrollBar();
     accounts = new RCArray< GruppeEinladungAccount >();
     accounts = new RCArray< GruppeEinladungAccount >();
     einladungHöhe = 0;
     einladungHöhe = 0;
@@ -409,7 +394,6 @@ GruppeEinladungListe::GruppeEinladungListe( Schrift * zSchrift )
     gruppeId = 0;
     gruppeId = 0;
     admin = 0;
     admin = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -420,7 +404,6 @@ GruppeEinladungListe::~GruppeEinladungListe()
     einladen->release();
     einladen->release();
     scroll->release();
     scroll->release();
     accounts->release();
     accounts->release();
-    schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -452,7 +435,7 @@ void GruppeEinladungListe::addAccount( int id )
         if( tmp->getAccountId() == id )
         if( tmp->getAccountId() == id )
             tmp->setRemove();
             tmp->setRemove();
     }
     }
-    GruppeEinladungAccount * tmp = new GruppeEinladungAccount( schrift );
+    GruppeEinladungAccount *tmp = new GruppeEinladungAccount();
     tmp->setGruppeId( gruppeId );
     tmp->setGruppeId( gruppeId );
     tmp->setAccountId( id );
     tmp->setAccountId( id );
     tmp->setAdmin( admin );
     tmp->setAdmin( admin );
@@ -568,7 +551,7 @@ bool GruppeEinladungListe::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeEinladungListe::doPublicMausEreignis( MausEreignis & me )
+void GruppeEinladungListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int tmpX = me.mx;
     int tmpX = me.mx;
     int tmpY = me.my;
     int tmpY = me.my;
@@ -647,7 +630,7 @@ void GruppeEinladungListe::doPublicMausEreignis( MausEreignis & me )
     me.my = tmpY;
     me.my = tmpY;
 }
 }
 
 
-void GruppeEinladungListe::doTastaturEreignis( TastaturEreignis & te )
+void GruppeEinladungListe::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     bool b = !te.verarbeitet;
     bool b = !te.verarbeitet;
     einladenName->doTastaturEreignis( te );
     einladenName->doTastaturEreignis( te );
@@ -695,7 +678,7 @@ void GruppeEinladungListe::doTastaturEreignis( TastaturEreignis & te )
     }
     }
 }
 }
 
 
-void GruppeEinladungListe::render( Bild & zRObj )
+void GruppeEinladungListe::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos, gr ) )
     if( !zRObj.setDrawOptions( pos, gr ) )
         return;
         return;
@@ -732,26 +715,10 @@ void GruppeEinladungListe::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// constant
-
-// Reference Counting
-GruppeEinladungListe *GruppeEinladungListe::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeEinladungListe *GruppeEinladungListe::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der GruppeAccountDaten Klasse aus Gruppe.h
 // Inhalt der GruppeAccountDaten Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeAccountDaten::GruppeAccountDaten( Schrift * zSchrift )
+GruppeAccountDaten::GruppeAccountDaten()
+    : ReferenceCounter()
 {
 {
     Bild *nachrichtBild = bilder->get( "data/client/bilder/chat.ltdb/nachricht.png" );
     Bild *nachrichtBild = bilder->get( "data/client/bilder/chat.ltdb/nachricht.png" );
     Bild *einladungBild = bilder->get( "data/client/bilder/chat.ltdb/neuerfreund.png" );
     Bild *einladungBild = bilder->get( "data/client/bilder/chat.ltdb/neuerfreund.png" );
@@ -764,24 +731,24 @@ GruppeAccountDaten::GruppeAccountDaten( Schrift * zSchrift )
     auswahl->setFarbe( 0x0000FF00 );
     auswahl->setFarbe( 0x0000FF00 );
     auswahl->setStrength( -2 );
     auswahl->setStrength( -2 );
     auswahl->setPosition( 1, 1 );
     auswahl->setPosition( 1, 1 );
-    name = initTextFeld( 1, 6, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
-    punkte = initTextFeld( 101, 6, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0p" );
-    nachrichtSenden = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    name = initTextFeld( 1, 6, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "" );
+    punkte = initTextFeld( 101, 6, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0p" );
+    nachrichtSenden = initKnopf( 0, 30, 20, 20, 0, "" );
     nachrichtSenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     nachrichtSenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     nachrichtSenden->setHintergrundBildZ( nachrichtBild );
     nachrichtSenden->setHintergrundBildZ( nachrichtBild );
-    initToolTip( nachrichtSenden, "Nachricht senden.", zSchrift, hauptScreen );
-    freundEinladung = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    initToolTip( nachrichtSenden, "Nachricht senden." );
+    freundEinladung = initKnopf( 0, 30, 20, 20, 0, "" );
     freundEinladung->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     freundEinladung->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     freundEinladung->setHintergrundBildZ( einladungBild );
     freundEinladung->setHintergrundBildZ( einladungBild );
-    initToolTip( freundEinladung, "Freundeseinladung senden.", zSchrift, hauptScreen );
-    accountAnsehen = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    initToolTip( freundEinladung, "Freundeseinladung senden." );
+    accountAnsehen = initKnopf( 0, 30, 20, 20, 0, "" );
     accountAnsehen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     accountAnsehen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     accountAnsehen->setHintergrundBildZ( ansehenBild );
     accountAnsehen->setHintergrundBildZ( ansehenBild );
-    initToolTip( accountAnsehen, "Account ansehen.", zSchrift, hauptScreen );
-    kick = initKnopf( 0, 30, 20, 20, 0, 0, "" );
+    initToolTip( accountAnsehen, "Account ansehen." );
+    kick = initKnopf( 0, 30, 20, 20, 0, "" );
     kick->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     kick->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     kick->setHintergrundBildZ( entfernenBild );
     kick->setHintergrundBildZ( entfernenBild );
-    initToolTip( kick, "Diesen Spieler kicken.", zSchrift, hauptScreen );
+    initToolTip( kick, "Diesen Spieler kicken." );
     tickVal = 0;
     tickVal = 0;
     mausIn = 0;
     mausIn = 0;
     remove = 0;
     remove = 0;
@@ -791,7 +758,6 @@ GruppeAccountDaten::GruppeAccountDaten( Schrift * zSchrift )
     höhe = 0;
     höhe = 0;
     animation = 0x1;
     animation = 0x1;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -1021,7 +987,7 @@ bool GruppeAccountDaten::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeAccountDaten::doPublicMausEreignis( MausEreignis & me )
+void GruppeAccountDaten::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( me.mx < 0 || me.my < 0 || me.mx > br || me.my > höhe )
     if( me.mx < 0 || me.my < 0 || me.mx > br || me.my > höhe )
         mausIn = 0;
         mausIn = 0;
@@ -1079,7 +1045,7 @@ void GruppeAccountDaten::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void GruppeAccountDaten::render( int y, Bild & zrObj )
+void GruppeAccountDaten::render( int y, Bild &zrObj )
 {
 {
     if( !zrObj.setDrawOptions( 0, y, br, höhe ) )
     if( !zrObj.setDrawOptions( 0, y, br, höhe ) )
         return;
         return;
@@ -1128,26 +1094,11 @@ int GruppeAccountDaten::getHeight() const
     return höhe;
     return höhe;
 }
 }
 
 
-// Reference Counting
-GruppeAccountDaten *GruppeAccountDaten::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeAccountDaten *GruppeAccountDaten::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der GruppeAccountListe Klasse aus Gruppe.h
 // Inhalt der GruppeAccountListe Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeAccountListe::GruppeAccountListe( Schrift * zSchrift )
+GruppeAccountListe::GruppeAccountListe()
+    : ReferenceCounter()
 {
 {
-    schrift = zSchrift->getThis();
     pos = Punkt( 0, 0 );
     pos = Punkt( 0, 0 );
     gr = Punkt( 200, 350 );
     gr = Punkt( 200, 350 );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
@@ -1160,13 +1111,11 @@ GruppeAccountListe::GruppeAccountListe( Schrift * zSchrift )
     gruppeId = 0;
     gruppeId = 0;
     admin = 0;
     admin = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
 GruppeAccountListe::~GruppeAccountListe()
 GruppeAccountListe::~GruppeAccountListe()
 {
 {
-    schrift->release();
     rahmen->release();
     rahmen->release();
     scroll->release();
     scroll->release();
     accounts->release();
     accounts->release();
@@ -1191,7 +1140,7 @@ void GruppeAccountListe::setGruppeId( int gruppeId )
 
 
 void GruppeAccountListe::addAccount( int id )
 void GruppeAccountListe::addAccount( int id )
 {
 {
-    GruppeAccountDaten *tmp = new GruppeAccountDaten( schrift );
+    GruppeAccountDaten *tmp = new GruppeAccountDaten();
     tmp->setGruppeId( gruppeId );
     tmp->setGruppeId( gruppeId );
     tmp->setAccountId( id );
     tmp->setAccountId( id );
     tmp->setAdmin( admin );
     tmp->setAdmin( admin );
@@ -1238,7 +1187,7 @@ bool GruppeAccountListe::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeAccountListe::doPublicMausEreignis( MausEreignis & me )
+void GruppeAccountListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int tmpX = me.mx;
     int tmpX = me.mx;
     int tmpY = me.my;
     int tmpY = me.my;
@@ -1265,7 +1214,7 @@ void GruppeAccountListe::doPublicMausEreignis( MausEreignis & me )
     me.my = tmpY;
     me.my = tmpY;
 }
 }
 
 
-void GruppeAccountListe::render( Bild & zRObj )
+void GruppeAccountListe::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos, gr ) )
     if( !zRObj.setDrawOptions( pos, gr ) )
         return;
         return;
@@ -1293,26 +1242,10 @@ void GruppeAccountListe::render( Bild & zRObj )
     scroll->update( höhe, gr.y - rbr * 2 );
     scroll->update( höhe, gr.y - rbr * 2 );
 }
 }
 
 
-// constant
-
-// Reference Counting
-GruppeAccountListe *GruppeAccountListe::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeAccountListe *GruppeAccountListe::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der GruppeChat Klasse aus Gruppe.h
 // Inhalt der GruppeChat Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeChat::GruppeChat( Schrift * zSchrift )
+GruppeChat::GruppeChat()
+    : ReferenceCounter()
 {
 {
     Bild *sendenBild = bilder->get( "data/client/bilder/chat.ltdb/senden.png" );
     Bild *sendenBild = bilder->get( "data/client/bilder/chat.ltdb/senden.png" );
     pos = Punkt( 0, 350 );
     pos = Punkt( 0, 350 );
@@ -1321,19 +1254,18 @@ GruppeChat::GruppeChat( Schrift * zSchrift )
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
     rahmen->setSize( 750, 200 );
     rahmen->setSize( 750, 200 );
-    nachricht = initTextFeld( 2, 176, 724, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-    initToolTip( nachricht, "Nachricht an die Gruppe senden.", zSchrift, hauptScreen );
-    senden = initKnopf( 726, 176, 20, 20, 0, 0, "" );
+    nachricht = initTextFeld( 2, 176, 724, 20, TextFeld::Style::TextFeld, "" );
+    initToolTip( nachricht, "Nachricht an die Gruppe senden." );
+    senden = initKnopf( 726, 176, 20, 20, 0, "" );
     senden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     senden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     senden->setHintergrundBildZ( sendenBild );
     senden->setHintergrundBildZ( sendenBild );
-    initToolTip( senden, "Diese Nachricht an die Gruppe senden.", zSchrift, hauptScreen );
-    verlauf = initTextFeld( 2, 2, 746, 174, zSchrift, TextFeld::Style::TextGebiet, "" );
+    initToolTip( senden, "Diese Nachricht an die Gruppe senden." );
+    verlauf = initTextFeld( 2, 2, 746, 174, TextFeld::Style::TextGebiet, "" );
     verlauf->removeStyle( TextFeld::Style::Erlaubt );
     verlauf->removeStyle( TextFeld::Style::Erlaubt );
     verlauf->updateVScroll();
     verlauf->updateVScroll();
     verlauf->setVertikalKlickScroll( 5 );
     verlauf->setVertikalKlickScroll( 5 );
     gruppeId = 0;
     gruppeId = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -1377,7 +1309,7 @@ bool GruppeChat::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeChat::doPublicMausEreignis( MausEreignis & me )
+void GruppeChat::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -1426,7 +1358,7 @@ void GruppeChat::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void GruppeChat::doTastaturEreignis( TastaturEreignis & te )
+void GruppeChat::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     bool b = te.verarbeitet;
     bool b = te.verarbeitet;
     nachricht->doTastaturEreignis( te );
     nachricht->doTastaturEreignis( te );
@@ -1462,7 +1394,7 @@ void GruppeChat::doTastaturEreignis( TastaturEreignis & te )
     }
     }
 }
 }
 
 
-void GruppeChat::render( Bild & zRObj )
+void GruppeChat::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
         return;
         return;
@@ -1472,26 +1404,11 @@ void GruppeChat::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// constant
-
-// Reference Counting
-GruppeChat *GruppeChat::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeChat *GruppeChat::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
 
 
 // Inhalt der GruppeAnmeldung Klasse aus Gruppe.h
 // Inhalt der GruppeAnmeldung Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeAnmeldung::GruppeAnmeldung( Schrift * zSchrift )
+GruppeAnmeldung::GruppeAnmeldung()
+    : ReferenceCounter()
 {
 {
     pos = Punkt( 750, 350 );
     pos = Punkt( 750, 350 );
     gr = Punkt( 200, 200 );
     gr = Punkt( 200, 200 );
@@ -1499,21 +1416,20 @@ GruppeAnmeldung::GruppeAnmeldung( Schrift * zSchrift )
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
     rahmen->setSize( 200, 200 );
     rahmen->setSize( 200, 200 );
-    spielerHinzufügen = initKontrollKnopf( 25, 45, 150, 20, zSchrift, KontrollKnopf::Style::Normal, "Spieler hinzufügen" );
+    spielerHinzufügen = initKontrollKnopf( 25, 45, 150, 20, KontrollKnopf::Style::Normal, "Spieler hinzufügen" );
     spielerHinzufügen->removeStyle( KontrollKnopf::Style::Erlaubt );
     spielerHinzufügen->removeStyle( KontrollKnopf::Style::Erlaubt );
     spielerHinzufügen->setMausEreignis( _ret1ME );
     spielerHinzufügen->setMausEreignis( _ret1ME );
-    initToolTip( spielerHinzufügen, "Es werden nur Spieler aus dieser Gruppe mit ins Spiel kommen.", zSchrift, hauptScreen );
-    angemeldet = initKontrollKnopf( 25, 75, 150, 20, zSchrift, KontrollKnopf::Style::Normal, "in Warteschlange" );
+    initToolTip( spielerHinzufügen, "Es werden nur Spieler aus dieser Gruppe mit ins Spiel kommen." );
+    angemeldet = initKontrollKnopf( 25, 75, 150, 20, KontrollKnopf::Style::Normal, "in Warteschlange" );
     angemeldet->removeStyle( KontrollKnopf::Style::Erlaubt );
     angemeldet->removeStyle( KontrollKnopf::Style::Erlaubt );
     angemeldet->setMausEreignis( _ret1ME );
     angemeldet->setMausEreignis( _ret1ME );
-    initToolTip( angemeldet, "Die Gruppe befindet sich momentan nicht in der Warteschlange.", zSchrift, hauptScreen );
-    zeit = initTextFeld( 0, 105, 200, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Zeit in Warteschlange: " );
-    gruppeVerlassen = initKnopf( 40, 135, 120, 20, zSchrift, Knopf::Style::Normal, "Gruppe verlassen" );
+    initToolTip( angemeldet, "Die Gruppe befindet sich momentan nicht in der Warteschlange." );
+    zeit = initTextFeld( 0, 105, 200, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Zeit in Warteschlange: " );
+    gruppeVerlassen = initKnopf( 40, 135, 120, 20, Knopf::Style::Normal, "Gruppe verlassen" );
     admin = 0;
     admin = 0;
     time = 0;
     time = 0;
     gruppeId = 0;
     gruppeId = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -1623,7 +1539,7 @@ bool GruppeAnmeldung::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeAnmeldung::doPublicMausEreignis( MausEreignis & me )
+void GruppeAnmeldung::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -1749,7 +1665,7 @@ void GruppeAnmeldung::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void GruppeAnmeldung::render( Bild & zRObj )
+void GruppeAnmeldung::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
         return;
         return;
@@ -1761,24 +1677,8 @@ void GruppeAnmeldung::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// constant
-
-// Reference Counting
-GruppeAnmeldung *GruppeAnmeldung::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeAnmeldung *GruppeAnmeldung::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
 
 
-void GruppeKarteKSGSAktion( void *p, RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void GruppeKarteKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
 {
     if( !p )
     if( !p )
         return;
         return;
@@ -1787,11 +1687,10 @@ void GruppeKarteKSGSAktion( void *p, RCArray< KSGSVariable > * parameter, KSGSVa
 
 
 // Inhalt der GruppeKarte Klasse aus Gruppe.h
 // Inhalt der GruppeKarte Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeKarte::GruppeKarte( Schrift * zSchrift )
+GruppeKarte::GruppeKarte()
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift->getThis() );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     pos = Punkt( 350, 0 );
     pos = Punkt( 350, 0 );
     gr = Punkt( 600, 350 );
     gr = Punkt( 600, 350 );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
@@ -1807,17 +1706,17 @@ GruppeKarte::GruppeKarte( Schrift * zSchrift )
         if( getKSGScript )
         if( getKSGScript )
         {
         {
             info = getKSGScript();
             info = getKSGScript();
-            info->setBildschirmZ( hauptScreen->getThis() );
-            info->setSchriftZ( schrift->getThis() );
+            info->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
+            info->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
             info->setSize( 248, 350 );
             info->setSize( 248, 350 );
-            info->setRückrufParam( this );
-            info->setRückrufFunktion( GruppeKarteKSGSAktion );
+            info->setCallbackParam( this );
+            info->setCallbackFunktion( GruppeKarteKSGSAktion );
         }
         }
         else
         else
         {
         {
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                           new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                          "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                           new Text( "Ok" ), 0 );
                                                           new Text( "Ok" ), 0 );
         }
         }
     }
     }
@@ -1847,15 +1746,13 @@ GruppeKarte::~GruppeKarte()
     rahmen->release();
     rahmen->release();
     if( info )
     if( info )
     {
     {
-        info->zurücksetzen();
+        info->reset();
         info->release();
         info->release();
     }
     }
     if( hintergrund )
     if( hintergrund )
         hintergrund->release();
         hintergrund->release();
     if( fehler )
     if( fehler )
         fehler->release();
         fehler->release();
-    if( schrift )
-        schrift->release();
     tr->release();
     tr->release();
     if( ksgs )
     if( ksgs )
         Framework::getDLLRegister()->releaseDLL( "KSGScript.dll" );
         Framework::getDLLRegister()->releaseDLL( "KSGScript.dll" );
@@ -1865,9 +1762,9 @@ GruppeKarte::~GruppeKarte()
 void GruppeKarte::reset()
 void GruppeKarte::reset()
 {
 {
     if( info )
     if( info )
-        info->zurücksetzen();
+        info->reset();
     if( hintergrund )
     if( hintergrund )
-        hintergrund = hintergrund->release();
+        hintergrund = (Bild *)hintergrund->release();
     if( fehler )
     if( fehler )
         fehler = (TextFeld *)fehler->release();
         fehler = (TextFeld *)fehler->release();
     if( run )
     if( run )
@@ -1889,7 +1786,7 @@ void GruppeKarte::reset()
     rend = 1;
     rend = 1;
 }
 }
 
 
-void GruppeKarte::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void GruppeKarte::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
 {
 
 
 }
 }
@@ -1920,7 +1817,7 @@ bool GruppeKarte::tick( double tickVal )
     if( ladenZeit >= 1 / 30.0 )
     if( ladenZeit >= 1 / 30.0 )
     {
     {
         ladenZeit -= 1 / 30.0;
         ladenZeit -= 1 / 30.0;
-        if( ladeAnimation &&ladeAnimation->zAnimationData() )
+        if( ladeAnimation && ladeAnimation->zAnimationData() )
         {
         {
             if( alpha1 )
             if( alpha1 )
                 rend = 1;
                 rend = 1;
@@ -1971,7 +1868,7 @@ bool GruppeKarte::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeKarte::doPublicMausEreignis( MausEreignis & me )
+void GruppeKarte::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -1981,7 +1878,7 @@ void GruppeKarte::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void GruppeKarte::render( Bild & zrObj )
+void GruppeKarte::render( Bild &zrObj )
 {
 {
     int x = pos.x;
     int x = pos.x;
     int y = pos.y;
     int y = pos.y;
@@ -2018,9 +1915,9 @@ void GruppeKarte::render( Bild & zrObj )
 void GruppeKarte::thread()
 void GruppeKarte::thread()
 {
 {
     if( info )
     if( info )
-        info->zurücksetzen();
+        info->reset();
     if( hintergrund )
     if( hintergrund )
-        hintergrund = hintergrund->release();
+        hintergrund = (Bild *)hintergrund->release();
     if( fehler )
     if( fehler )
         fehler = (TextFeld *)fehler->release();
         fehler = (TextFeld *)fehler->release();
     karteId = infoClient->getGruppenKarteId( gruppeId );
     karteId = infoClient->getGruppenKarteId( gruppeId );
@@ -2036,7 +1933,7 @@ void GruppeKarte::thread()
     if( exit )
     if( exit )
     {
     {
         if( hintergrund )
         if( hintergrund )
-            hintergrund = hintergrund->release();
+            hintergrund = (Bild *)hintergrund->release();
         karte->unlock();
         karte->unlock();
         karte->release();
         karte->release();
         run = 0;
         run = 0;
@@ -2049,7 +1946,7 @@ void GruppeKarte::thread()
         int br = tr->getTextBreite( f->getText() );
         int br = tr->getTextBreite( f->getText() );
         int hö = tr->getTextHeight( f->getText() );
         int hö = tr->getTextHeight( f->getText() );
         fehler = initTextFeld( gr.x / 2 - ( br + 10 ) / 2, gr.y / 2 - ( hö + 4 ) / 2, br + 10, hö + 4,
         fehler = initTextFeld( gr.x / 2 - ( br + 10 ) / 2, gr.y / 2 - ( hö + 4 ) / 2, br + 10, hö + 4,
-                               schrift, TextFeld::Style::Text | TextFeld::Style::Center, f->getText() );
+                               TextFeld::Style::Text | TextFeld::Style::Center, f->getText() );
         f->release();
         f->release();
         karte->unlock();
         karte->unlock();
         karte->release();
         karte->release();
@@ -2079,7 +1976,7 @@ void GruppeKarte::thread()
         int br = tr->getTextBreite( f->getText() );
         int br = tr->getTextBreite( f->getText() );
         int hö = tr->getTextHeight( f->getText() );
         int hö = tr->getTextHeight( f->getText() );
         fehler = initTextFeld( gr.x / 2 - ( br + 10 ) / 2, gr.y / 2 - ( hö + 4 ) / 2, br + 10, hö + 4,
         fehler = initTextFeld( gr.x / 2 - ( br + 10 ) / 2, gr.y / 2 - ( hö + 4 ) / 2, br + 10, hö + 4,
-                               schrift, TextFeld::Style::Text | TextFeld::Style::Center, f->getText() );
+                               TextFeld::Style::Text | TextFeld::Style::Center, f->getText() );
         f->release();
         f->release();
         karte->unlock();
         karte->unlock();
         karte->release();
         karte->release();
@@ -2099,35 +1996,22 @@ int GruppeKarte::getKarteId() const
     return karteId;
     return karteId;
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *GruppeKarte::release()
-{
-    if( ref == 2 && run )
-    {
-        exit = 1;
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
-    return Thread::release();
-}
-
 // Inhalt der GruppeSpielGefunden Klasse aus Gruppe.h
 // Inhalt der GruppeSpielGefunden Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeSpielGefunden::GruppeSpielGefunden( Schrift * zSchrift )
+GruppeSpielGefunden::GruppeSpielGefunden()
+    : ReferenceCounter()
 {
 {
     pos = Punkt( 375, 235 );
     pos = Punkt( 375, 235 );
     gr = Punkt( 200, 90 );
     gr = Punkt( 200, 90 );
-    spielGefunden = initFenster( 0, 0, 200, 90, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Rahmen | Fenster::Style::Titel, "Spiel gefunden" );
-    zeit = initTextFeld( 0, 30, 200, 20, zSchrift, TextFeld::Style::Text, "Verbleibende Zeit: 10" );
-    warte = initTextFeld( 0, 60, 200, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Warte auf andere Spieler. . ." );
-    annehmen = initKnopf( 50, 60, 100, 20, zSchrift, Knopf::Style::Normal, "beitreten" );
+    spielGefunden = initFenster( 0, 0, 200, 90, Fenster::Style::Sichtbar | Fenster::Style::Rahmen | Fenster::Style::Titel, "Spiel gefunden" );
+    zeit = initTextFeld( 0, 30, 200, 20, TextFeld::Style::Text, "Verbleibende Zeit: 10" );
+    warte = initTextFeld( 0, 60, 200, 20, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Warte auf andere Spieler. . ." );
+    annehmen = initKnopf( 50, 60, 100, 20, Knopf::Style::Normal, "beitreten" );
     alpha = 0;
     alpha = 0;
     time = 0;
     time = 0;
     sichtbar = 0;
     sichtbar = 0;
     tickVal = 0;
     tickVal = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -2212,7 +2096,7 @@ bool GruppeSpielGefunden::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeSpielGefunden::doPublicMausEreignis( MausEreignis & me )
+void GruppeSpielGefunden::doPublicMausEreignis( MausEreignis &me )
 {
 {
     me.mx -= pos.x;
     me.mx -= pos.x;
     me.my -= pos.y;
     me.my -= pos.y;
@@ -2226,14 +2110,14 @@ void GruppeSpielGefunden::doPublicMausEreignis( MausEreignis & me )
             warte->addStyle( TextFeld::Style::Sichtbar );
             warte->addStyle( TextFeld::Style::Sichtbar );
             rend = 1;
             rend = 1;
         }
         }
-        else if( nachLogin &&nachLogin->zSpielenFenster() )
+        else if( nachLogin && nachLogin->zSpielenFenster() )
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0 );
             nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0 );
     }
     }
     me.mx += pos.x;
     me.mx += pos.x;
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void GruppeSpielGefunden::render( Bild & zRObj )
+void GruppeSpielGefunden::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
     if( !zRObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
         return;
         return;
@@ -2252,38 +2136,23 @@ bool GruppeSpielGefunden::istSichtbar() const
     return sichtbar;
     return sichtbar;
 }
 }
 
 
-// Reference Counting
-GruppeSpielGefunden *GruppeSpielGefunden::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeSpielGefunden *GruppeSpielGefunden::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der GruppeFenster Klasse aus Gruppe.h
 // Inhalt der GruppeFenster Klasse aus Gruppe.h
 // Konstruktor
 // Konstruktor
-GruppeFenster::GruppeFenster( Schrift * zSchrift )
+GruppeFenster::GruppeFenster()
+    : ReferenceCounter()
 {
 {
     pos = Punkt( 0, 0 );
     pos = Punkt( 0, 0 );
     gr = Punkt( 950, 550 );
     gr = Punkt( 950, 550 );
-    anmeldung = new GruppeAnmeldung( zSchrift );
-    chat = new GruppeChat( zSchrift );
-    accounts = new GruppeAccountListe( zSchrift );
-    einladungen = new GruppeEinladungListe( zSchrift );
-    karte = new GruppeKarte( zSchrift );
-    spiel = new GruppeSpielGefunden( zSchrift );
+    anmeldung = new GruppeAnmeldung();
+    chat = new GruppeChat();
+    accounts = new GruppeAccountListe();
+    einladungen = new GruppeEinladungListe();
+    karte = new GruppeKarte();
+    spiel = new GruppeSpielGefunden();
     alpha = 0;
     alpha = 0;
     sichtbar = 0;
     sichtbar = 0;
     tickVal = 0;
     tickVal = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -2293,6 +2162,8 @@ GruppeFenster::~GruppeFenster()
     chat->release();
     chat->release();
     accounts->release();
     accounts->release();
     einladungen->release();
     einladungen->release();
+    karte->warteAufThread( 10000 );
+    karte->ende();
     karte->release();
     karte->release();
     spiel->release();
     spiel->release();
 }
 }
@@ -2481,7 +2352,7 @@ bool GruppeFenster::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void GruppeFenster::doPublicMausEreignis( MausEreignis & me )
+void GruppeFenster::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !spiel->istSichtbar() )
     if( !spiel->istSichtbar() )
     {
     {
@@ -2494,7 +2365,7 @@ void GruppeFenster::doPublicMausEreignis( MausEreignis & me )
     spiel->doPublicMausEreignis( me );
     spiel->doPublicMausEreignis( me );
 }
 }
 
 
-void GruppeFenster::doTastaturEreignis( TastaturEreignis & te )
+void GruppeFenster::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !spiel->istSichtbar() )
     if( !spiel->istSichtbar() )
     {
     {
@@ -2503,7 +2374,7 @@ void GruppeFenster::doTastaturEreignis( TastaturEreignis & te )
     }
     }
 }
 }
 
 
-void GruppeFenster::render( Bild & zRObj )
+void GruppeFenster::render( Bild &zRObj )
 {
 {
     if( alpha )
     if( alpha )
     {
     {
@@ -2533,19 +2404,4 @@ int GruppeFenster::getGruppeId() const
 int GruppeFenster::getKarteId() const
 int GruppeFenster::getKarteId() const
 {
 {
     return karte ? karte->getKarteId() : 0;
     return karte ? karte->getKarteId() : 0;
-}
-
-// Reference Counting
-GruppeFenster *GruppeFenster::getThis()
-{
-    ref++;
-    return this;
-}
-
-GruppeFenster *GruppeFenster::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }
 }

+ 271 - 316
KSGClient/NachLogin/Spiele/Gruppe/Gruppe.h

@@ -13,379 +13,334 @@
 using namespace Framework;
 using namespace Framework;
 using namespace KSGScript;
 using namespace KSGScript;
 
 
-class GruppeEinladungAccount
+class GruppeEinladungAccount : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	LRahmen *rahmen;
-	AlphaFeld *auswahl;
-	TextFeld *name;
-	Knopf *nachrichtSenden;
-	Knopf *erneutSenden;
-	Knopf *einladungAbbrechen;
-	int status;
-	int br;
-	int knopfX;
-	double tickVal;
-	bool mausIn;
-	bool remove;
-	int accountId;
-	int gruppeId;
-	int admin;
-	int höhe;
-	int animation;
-	bool rend;
-	int ref;
+    LRahmen *rahmen;
+    AlphaFeld *auswahl;
+    TextFeld *name;
+    Knopf *nachrichtSenden;
+    Knopf *erneutSenden;
+    Knopf *einladungAbbrechen;
+    int status;
+    int br;
+    int knopfX;
+    double tickVal;
+    bool mausIn;
+    bool remove;
+    int accountId;
+    int gruppeId;
+    int admin;
+    int höhe;
+    int animation;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeEinladungAccount( Schrift *zSchrift );
-	// Destruktor
-	~GruppeEinladungAccount();
-	// nicht constant
-	void setGruppeId( int gruppeId );
-	void setAccountId( int id );
-	void setSize( int br );
-	void setAbgelehnt();
-	void setAngenommen();
-	void setRemove();
-	void setAdmin( int admin );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int yOff, Bild &zrObj );
-	// constant
-	bool getRemove() const;
-	int getAccountId() const;
-	int getHeight() const;
-	// Reference Counting
-	GruppeEinladungAccount *getThis();
-	GruppeEinladungAccount *release();
+    // Konstruktor
+    GruppeEinladungAccount();
+    // Destruktor
+    ~GruppeEinladungAccount();
+    // nicht constant
+    void setGruppeId( int gruppeId );
+    void setAccountId( int id );
+    void setSize( int br );
+    void setAbgelehnt();
+    void setAngenommen();
+    void setRemove();
+    void setAdmin( int admin );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int yOff, Bild &zrObj );
+    // constant
+    bool getRemove() const;
+    int getAccountId() const;
+    int getHeight() const;
 };
 };
 
 
-class GruppeEinladungListe
+class GruppeEinladungListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	LRahmen *rahmen;
-	TextFeld *einladenName;
-	Knopf *einladen;
-	VScrollBar *scroll;
-	RCArray< GruppeEinladungAccount > *accounts;
-	Schrift *schrift;
-	int einladungHöhe;
-	double tickVal;
-	int anzahl;
-	int gruppeId;
-	int admin;
-	bool rend;
-	int ref;
+    Punkt pos;
+    Punkt gr;
+    LRahmen *rahmen;
+    TextFeld *einladenName;
+    Knopf *einladen;
+    VScrollBar *scroll;
+    RCArray< GruppeEinladungAccount > *accounts;
+    int einladungHöhe;
+    double tickVal;
+    int anzahl;
+    int gruppeId;
+    int admin;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeEinladungListe( Schrift *zSchrift );
-	// Destruktor
-	~GruppeEinladungListe();
-	// nicht constant
-	void reset();
-	void setGruppeId( int gruppeId );
-	void addAccount( int id );
-	void setAbgelehnt( int id );
-	void setAngenommen( int id );
-	void remove( int id );
-	void setAdmin( int admin );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-
-	// Reference Counting
-	GruppeEinladungListe *getThis();
-	GruppeEinladungListe *release();
+    // Konstruktor
+    GruppeEinladungListe();
+    // Destruktor
+    ~GruppeEinladungListe();
+    // nicht constant
+    void reset();
+    void setGruppeId( int gruppeId );
+    void addAccount( int id );
+    void setAbgelehnt( int id );
+    void setAngenommen( int id );
+    void remove( int id );
+    void setAdmin( int admin );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
 };
 };
 
 
-class GruppeAccountDaten
+class GruppeAccountDaten : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	LRahmen *rahmen;
-	AlphaFeld *auswahl;
-	TextFeld *name;
-	TextFeld *punkte;
-	Knopf *nachrichtSenden;
-	Knopf *accountAnsehen;
-	Knopf *freundEinladung;
-	Knopf *kick;
-	int br;
-	double tickVal;
-	bool mausIn;
-	bool remove;
-	int gruppeId;
-	int accountId;
-	int admin;
-	int höhe;
-	int animation;
-	bool rend;
-	int ref;
+    LRahmen *rahmen;
+    AlphaFeld *auswahl;
+    TextFeld *name;
+    TextFeld *punkte;
+    Knopf *nachrichtSenden;
+    Knopf *accountAnsehen;
+    Knopf *freundEinladung;
+    Knopf *kick;
+    int br;
+    double tickVal;
+    bool mausIn;
+    bool remove;
+    int gruppeId;
+    int accountId;
+    int admin;
+    int höhe;
+    int animation;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeAccountDaten( Schrift *zSchrift );
-	// Destruktor
-	~GruppeAccountDaten();
-	// nicht constant
-	void setGruppeId( int gruppeId );
-	void setAccountId( int id );
-	void setAdmin( int admin );
-	void setSize( int x );
-	void entfernen();
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int y, Bild &zrObj );
-	// constant
-	bool getRemove() const;
-	int getAccountId() const;
-	int getHeight() const;
-	// Reference Counting
-	GruppeAccountDaten *getThis();
-	GruppeAccountDaten *release();
+    // Konstruktor
+    GruppeAccountDaten();
+    // Destruktor
+    ~GruppeAccountDaten();
+    // nicht constant
+    void setGruppeId( int gruppeId );
+    void setAccountId( int id );
+    void setAdmin( int admin );
+    void setSize( int x );
+    void entfernen();
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int y, Bild &zrObj );
+    // constant
+    bool getRemove() const;
+    int getAccountId() const;
+    int getHeight() const;
 };
 };
 
 
-class GruppeAccountListe
+class GruppeAccountListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	LRahmen *rahmen;
-	VScrollBar *scroll;
-	RCArray< GruppeAccountDaten > *accounts;
-	Schrift *schrift;
-	int anzahl;
-	int gruppeId;
-	int admin;
-	bool rend;
-	int ref;
+    Punkt pos;
+    Punkt gr;
+    LRahmen *rahmen;
+    VScrollBar *scroll;
+    RCArray< GruppeAccountDaten > *accounts;
+    int anzahl;
+    int gruppeId;
+    int admin;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeAccountListe( Schrift *zSchrift );
-	// Destruktor
-	~GruppeAccountListe();
-	// nicht constant
-	void reset();
-	void setGruppeId( int gruppeId );
-	void addAccount( int id );
-	void removeAccount( int id );
-	void setAdmin( int admin );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-
-	// Reference Counting
-	GruppeAccountListe *getThis();
-	GruppeAccountListe *release();
+    // Konstruktor
+    GruppeAccountListe();
+    // Destruktor
+    ~GruppeAccountListe();
+    // nicht constant
+    void reset();
+    void setGruppeId( int gruppeId );
+    void addAccount( int id );
+    void removeAccount( int id );
+    void setAdmin( int admin );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
 };
 };
 
 
-class GruppeChat
+class GruppeChat : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	LRahmen *rahmen;
-	TextFeld *nachricht;
-	Knopf *senden;
-	TextFeld *verlauf;
-	int gruppeId;
-	bool rend;
-	int ref;
+    Punkt pos;
+    Punkt gr;
+    LRahmen *rahmen;
+    TextFeld *nachricht;
+    Knopf *senden;
+    TextFeld *verlauf;
+    int gruppeId;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeChat( Schrift *zSchrift );
-	// Destruktor
-	~GruppeChat();
-	// nicht constant
-	void reset();
-	void setGruppeId( int gruppeId );
-	void gruppeNachricht( const char *nachricht );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-
-	// Reference Counting
-	GruppeChat *getThis();
-	GruppeChat *release();
+    // Konstruktor
+    GruppeChat();
+    // Destruktor
+    ~GruppeChat();
+    // nicht constant
+    void reset();
+    void setGruppeId( int gruppeId );
+    void gruppeNachricht( const char *nachricht );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
 };
 };
 
 
-class GruppeAnmeldung
+class GruppeAnmeldung : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	LRahmen *rahmen;
-	KontrollKnopf *spielerHinzufügen;
-	KontrollKnopf *angemeldet;
-	TextFeld *zeit;
-	Knopf *gruppeVerlassen;
-	int admin;
-	double time;
-	int gruppeId;
-	bool rend;
-	int ref;
+    Punkt pos;
+    Punkt gr;
+    LRahmen *rahmen;
+    KontrollKnopf *spielerHinzufügen;
+    KontrollKnopf *angemeldet;
+    TextFeld *zeit;
+    Knopf *gruppeVerlassen;
+    int admin;
+    double time;
+    int gruppeId;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeAnmeldung( Schrift *zSchrift );
-	// Destruktor
-	~GruppeAnmeldung();
-	// nicht constant
-	void reset();
-	void setGruppeId( int gruppeId );
-	void setSpielerHinzufügen( bool spielerHinzufügen );
-	void setAngemeldet( bool angemeldet );
-	void zurückInWarteschlange( int stunden, int minuten, int sekunden );
-	void spielGefunden();
-	void setAdmin( int admin );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-
-	// Reference Counting
-	GruppeAnmeldung *getThis();
-	GruppeAnmeldung *release();
+    // Konstruktor
+    GruppeAnmeldung();
+    // Destruktor
+    ~GruppeAnmeldung();
+    // nicht constant
+    void reset();
+    void setGruppeId( int gruppeId );
+    void setSpielerHinzufügen( bool spielerHinzufügen );
+    void setAngemeldet( bool angemeldet );
+    void zurückInWarteschlange( int stunden, int minuten, int sekunden );
+    void spielGefunden();
+    void setAdmin( int admin );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
 };
 };
 
 
 class GruppeKarte : public Thread
 class GruppeKarte : public Thread
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	LRahmen *rahmen;
-	Bild *hintergrund;
-	KSGScriptObj *info;
+    Punkt pos;
+    Punkt gr;
+    LRahmen *rahmen;
+    Bild *hintergrund;
+    KSGScriptObj *info;
     HINSTANCE ksgs;
     HINSTANCE ksgs;
-	TextFeld *fehler;
-	Schrift *schrift;
+    TextFeld *fehler;
     TextRenderer *tr;
     TextRenderer *tr;
-	unsigned char alpha1;
-	unsigned char alpha2;
-	double tickVal;
-	double ladenZeit;
-	int ladeBild;
-	int karteId;
-	int gruppeId;
-	bool exit;
-	bool geladen;
-	bool rend;
+    unsigned char alpha1;
+    unsigned char alpha2;
+    double tickVal;
+    double ladenZeit;
+    int ladeBild;
+    int karteId;
+    int gruppeId;
+    bool exit;
+    bool geladen;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeKarte( Schrift *zSchrift );
-	// Destruktor
-	~GruppeKarte();
-	// nicht constant
+    // Konstruktor
+    GruppeKarte();
+    // Destruktor
+    ~GruppeKarte();
+    // nicht constant
     void reset();
     void reset();
     void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal );
     void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal );
-	void setGruppeId( int gruppeId );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zrObj );
-	virtual void thread();
-	// constant
-	int getKarteId() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    void setGruppeId( int gruppeId );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zrObj );
+    virtual void thread();
+    // constant
+    int getKarteId() const;
 };
 };
 
 
-class GruppeSpielGefunden
+class GruppeSpielGefunden : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	Fenster *spielGefunden;
-	TextFeld *zeit;
-	TextFeld *warte;
-	Knopf *annehmen;
-	unsigned char alpha;
-	double time;
-	double tickVal;
-	bool sichtbar;
-	bool rend;
-	int ref;
+    Punkt pos;
+    Punkt gr;
+    Fenster *spielGefunden;
+    TextFeld *zeit;
+    TextFeld *warte;
+    Knopf *annehmen;
+    unsigned char alpha;
+    double time;
+    double tickVal;
+    bool sichtbar;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeSpielGefunden( Schrift *zSchrift );
-	// Destruktor
-	~GruppeSpielGefunden();
-	// nicht constant
-	void reset();
-	void setSichtbar( bool sichtbar );
-	void setVerbleibendeZeit( int sekunden );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-	// Reference Counting
-	GruppeSpielGefunden *getThis();
-	GruppeSpielGefunden *release();
+    // Konstruktor
+    GruppeSpielGefunden();
+    // Destruktor
+    ~GruppeSpielGefunden();
+    // nicht constant
+    void reset();
+    void setSichtbar( bool sichtbar );
+    void setVerbleibendeZeit( int sekunden );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
 };
 };
 
 
-class GruppeFenster
+class GruppeFenster : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Punkt pos;
-	Punkt gr;
-	GruppeAnmeldung *anmeldung;
-	GruppeChat *chat;
-	GruppeAccountListe *accounts;
-	GruppeEinladungListe *einladungen;
-	GruppeKarte *karte;
-	GruppeSpielGefunden *spiel;
-	bool sichtbar;
-	unsigned char alpha;
-	int gruppeId;
-	double tickVal;
-	bool rend;
-	int ref;
+    Punkt pos;
+    Punkt gr;
+    GruppeAnmeldung *anmeldung;
+    GruppeChat *chat;
+    GruppeAccountListe *accounts;
+    GruppeEinladungListe *einladungen;
+    GruppeKarte *karte;
+    GruppeSpielGefunden *spiel;
+    bool sichtbar;
+    unsigned char alpha;
+    int gruppeId;
+    double tickVal;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	GruppeFenster( Schrift *zSchrift );
-	// Destruktor
-	~GruppeFenster();
-	// nicht constant
-	void setGruppeId( int id );
-	void setSichtbar( bool sichtbar );
-	void chatNachricht( const char *nachricht );
-	void neuerSpieler( int accountId );
-	void spielerVerlässt( int accountId );
-	void neueEinladung( int accountId );
-	void einladungEntfernt( int accountId );
-	void einladungAbgelehnt( int accountId );
-	void setSpielerHinzufügen( bool sh );
-	void setAngemeldet( bool angemeldet );
-	void spielGefunden();
-	void verbleibendeZeit( int sekunden );
-	void spielGefundenAbbruch();
-	void zurückInWarteschlange( int stunden, int minuten, int sekunden );
-	void setAdmin( int accountId );
-	void kick();
-	void reset();
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-	int getGruppeId() const;
-	int getKarteId() const;
-	// Reference ounting
-	GruppeFenster *getThis();
-	GruppeFenster *release();
+    // Konstruktor
+    GruppeFenster();
+    // Destruktor
+    ~GruppeFenster();
+    // nicht constant
+    void setGruppeId( int id );
+    void setSichtbar( bool sichtbar );
+    void chatNachricht( const char *nachricht );
+    void neuerSpieler( int accountId );
+    void spielerVerlässt( int accountId );
+    void neueEinladung( int accountId );
+    void einladungEntfernt( int accountId );
+    void einladungAbgelehnt( int accountId );
+    void setSpielerHinzufügen( bool sh );
+    void setAngemeldet( bool angemeldet );
+    void spielGefunden();
+    void verbleibendeZeit( int sekunden );
+    void spielGefundenAbbruch();
+    void zurückInWarteschlange( int stunden, int minuten, int sekunden );
+    void setAdmin( int accountId );
+    void kick();
+    void reset();
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
+    // constant
+    int getGruppeId() const;
+    int getKarteId() const;
 };
 };
 
 
 #endif
 #endif

+ 20 - 60
KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.cpp

@@ -17,15 +17,15 @@ void KarteAuswahlKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVa
 {
 {
     if( !p )
     if( !p )
         return;
         return;
-    ( (KarteDaten*)p )->ksgsAktion( parameter, retVal );
+    ( (KarteDaten *)p )->ksgsAktion( parameter, retVal );
 }
 }
 
 
 
 
 KarteDaten::Loader::Loader( KarteDaten *kd, int aktion )
 KarteDaten::Loader::Loader( KarteDaten *kd, int aktion )
+    : Thread()
 {
 {
     this->aktion = aktion;
     this->aktion = aktion;
     this->kd = kd;
     this->kd = kd;
-    ref = 2;
     start();
     start();
 }
 }
 
 
@@ -35,11 +35,11 @@ void KarteDaten::Loader::thread()
     {
     {
         kd->geladen = 0;
         kd->geladen = 0;
         if( kd->hintergrund )
         if( kd->hintergrund )
-            kd->hintergrund = kd->hintergrund->release();
+            kd->hintergrund = (Bild *)kd->hintergrund->release();
         if( kd->beschreibung )
         if( kd->beschreibung )
         {
         {
-            kd->beschreibung->zurücksetzen();
-            kd->beschreibung = dynamic_cast<KSGScriptObj*>(kd->beschreibung->release());
+            kd->beschreibung->reset();
+            kd->beschreibung = (KSGScriptObj *)kd->beschreibung->release();
         }
         }
         kd->rend = 1;
         kd->rend = 1;
         if( kd->ksgs )
         if( kd->ksgs )
@@ -56,7 +56,7 @@ void KarteDaten::Loader::thread()
         if( aktion == 1 )
         if( aktion == 1 )
         {
         {
             if( !kd->hintergrund )
             if( !kd->hintergrund )
-                kd->hintergrund = mapReader->getKartenTitelBild( kd->schrift );
+                kd->hintergrund = mapReader->getKartenTitelBild();
             if( !kd->geladen )
             if( !kd->geladen )
                 kd->geladen = 1;
                 kd->geladen = 1;
             kd->rend = 1;
             kd->rend = 1;
@@ -67,8 +67,8 @@ void KarteDaten::Loader::thread()
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Beschreibung nicht gefunden." ), new Text( "Ok" ) );
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Beschreibung nicht gefunden." ), new Text( "Ok" ) );
             if( kd->beschreibung )
             if( kd->beschreibung )
             {
             {
-                kd->beschreibung->zurücksetzen();
-                kd->beschreibung = dynamic_cast<KSGScriptObj*>(kd->beschreibung->release());
+                kd->beschreibung->reset();
+                kd->beschreibung = (KSGScriptObj *)kd->beschreibung->release();
             }
             }
             if( !kd->ksgs )
             if( !kd->ksgs )
                 kd->ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
                 kd->ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
@@ -78,11 +78,11 @@ void KarteDaten::Loader::thread()
                 if( getKSGScript )
                 if( getKSGScript )
                 {
                 {
                     kd->beschreibung = getKSGScript();
                     kd->beschreibung = getKSGScript();
-                    kd->beschreibung->setBildschirmZ( hauptScreen->getThis() );
-                    kd->beschreibung->setSchriftZ( kd->schrift->getThis() );
+                    kd->beschreibung->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
+                    kd->beschreibung->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
                     kd->beschreibung->setSize( 578, 428 );
                     kd->beschreibung->setSize( 578, 428 );
-                    kd->beschreibung->setRückrufParam( kd );
-                    kd->beschreibung->setRückrufFunktion( KarteAuswahlKSGSAktion );
+                    kd->beschreibung->setCallbackParam( kd );
+                    kd->beschreibung->setCallbackFunktion( KarteAuswahlKSGSAktion );
                     Text *pf = mapReader->getKartePfad();
                     Text *pf = mapReader->getKartePfad();
                     *pf += "beschreibung.ksgs";
                     *pf += "beschreibung.ksgs";
                     kd->beschreibung->setScriptDatei( pf );
                     kd->beschreibung->setScriptDatei( pf );
@@ -129,16 +129,8 @@ void KarteDaten::Loader::thread()
     if( !kd->erlaubt )
     if( !kd->erlaubt )
         kd->updateErlaubt();
         kd->updateErlaubt();
     kd->rend = 1;
     kd->rend = 1;
-    release();
 }
 }
 
 
-KarteDaten::Loader *KarteDaten::Loader::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
-};
-
 int KarteDaten::Loader::getAction() const
 int KarteDaten::Loader::getAction() const
 {
 {
     return aktion;
     return aktion;
@@ -146,7 +138,8 @@ int KarteDaten::Loader::getAction() const
 
 
 // Inhalt der KarteDaten Klasse aus KarteAuswahl.h
 // Inhalt der KarteDaten Klasse aus KarteAuswahl.h
 // Konstruktor
 // Konstruktor
-KarteDaten::KarteDaten( Schrift *zSchrift, int id )
+KarteDaten::KarteDaten( int id )
+    : ReferenceCounter()
 {
 {
     hintergrund = 0;
     hintergrund = 0;
     beschreibung = 0;
     beschreibung = 0;
@@ -159,7 +152,6 @@ KarteDaten::KarteDaten( Schrift *zSchrift, int id )
     ausgewählt = 0;
     ausgewählt = 0;
     pos = Punkt( 0, 500 );
     pos = Punkt( 0, 500 );
     gr = Punkt( 200, 100 );
     gr = Punkt( 200, 100 );
-    schrift = zSchrift->getThis();
     karteId = id;
     karteId = id;
     geladen = 0;
     geladen = 0;
     auswahl = new AlphaFeld();
     auswahl = new AlphaFeld();
@@ -171,7 +163,6 @@ KarteDaten::KarteDaten( Schrift *zSchrift, int id )
     erlaubt = 0;
     erlaubt = 0;
     tAlpha = 0;
     tAlpha = 0;
     alpha = 0;
     alpha = 0;
-    ref = 1;
     loader = new Loader( this, 1 );
     loader = new Loader( this, 1 );
 }
 }
 
 
@@ -181,13 +172,11 @@ KarteDaten::~KarteDaten()
     if( loader && loader->isRunning() )
     if( loader && loader->isRunning() )
         loader->warteAufThread( INT_MAX );
         loader->warteAufThread( INT_MAX );
     loader->release();
     loader->release();
-    if( schrift )
-        schrift->release();
     if( hintergrund )
     if( hintergrund )
         hintergrund->release();
         hintergrund->release();
     if( beschreibung )
     if( beschreibung )
     {
     {
-        beschreibung->zurücksetzen();
+        beschreibung->reset();
         beschreibung->release();
         beschreibung->release();
     }
     }
     if( ksgs )
     if( ksgs )
@@ -345,7 +334,7 @@ bool KarteDaten::tick( double tickVal )
         beschreibung->unlock();
         beschreibung->unlock();
     }
     }
     this->tickVal += tickVal * 500;
     this->tickVal += tickVal * 500;
-    int val = ( int ) this->tickVal;
+    int val = (int)this->tickVal;
     if( val < 1 )
     if( val < 1 )
     {
     {
         bool ret = rend;
         bool ret = rend;
@@ -500,27 +489,11 @@ bool KarteDaten::istausgew
     return ausgewählt;
     return ausgewählt;
 }
 }
 
 
-// Reference Counting
-KarteDaten *KarteDaten::getThis()
-{
-    ref++;
-    return this;
-}
-
-KarteDaten *KarteDaten::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der KarteAuswahlFenster Klasse aus KarteAuswahl.h
 // Inhalt der KarteAuswahlFenster Klasse aus KarteAuswahl.h
 // Konstruktor
 // Konstruktor
-KarteAuswahlFenster::KarteAuswahlFenster( Schrift *zSchrift )
+KarteAuswahlFenster::KarteAuswahlFenster()
 {
 {
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift->getThis() );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
@@ -541,8 +514,6 @@ KarteAuswahlFenster::KarteAuswahlFenster( Schrift *zSchrift )
 // Destruktor
 // Destruktor
 KarteAuswahlFenster::~KarteAuswahlFenster()
 KarteAuswahlFenster::~KarteAuswahlFenster()
 {
 {
-    if( schrift )
-        schrift->release();
     if( rahmen )
     if( rahmen )
         rahmen->release();
         rahmen->release();
     if( members )
     if( members )
@@ -622,7 +593,7 @@ void KarteAuswahlFenster::thread()
         }
         }
         if( !gefunden )
         if( !gefunden )
         {
         {
-            KarteDaten *tmp = new KarteDaten( schrift, liste->hat( i ) ? liste->get( i ) : 0 );
+            KarteDaten *tmp = new KarteDaten( liste->hat( i ) ? liste->get( i ) : 0 );
             members->add( tmp, anzahl );
             members->add( tmp, anzahl );
             anzahl++;
             anzahl++;
         }
         }
@@ -645,7 +616,7 @@ bool KarteAuswahlFenster::tick( double tickVal )
     for( int i = 0; i < anzahl; i++ )
     for( int i = 0; i < anzahl; i++ )
         rend |= members->z( i )->tick( tickVal );
         rend |= members->z( i )->tick( tickVal );
     this->tickVal += tickVal * 750;
     this->tickVal += tickVal * 750;
-    int val = ( int )this->tickVal;
+    int val = (int)this->tickVal;
     if( val < 1 )
     if( val < 1 )
     {
     {
         bool ret = rend;
         bool ret = rend;
@@ -796,15 +767,4 @@ bool KarteAuswahlFenster::hatAuswahl() const
 KarteDaten *KarteAuswahlFenster::getAuswahl() const
 KarteDaten *KarteAuswahlFenster::getAuswahl() const
 {
 {
     return members->get( auswahl );
     return members->get( auswahl );
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *KarteAuswahlFenster::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        ende();
-    }
-    return Thread::release();
 }
 }

+ 4 - 13
KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.h

@@ -11,23 +11,21 @@
 using namespace Framework;
 using namespace Framework;
 using namespace KSGScript;
 using namespace KSGScript;
 
 
-class KarteDaten
+class KarteDaten : public virtual ReferenceCounter
 {
 {
 private:
 private:
     class Loader : public Thread
     class Loader : public Thread
     {
     {
     private:
     private:
-        KarteDaten * kd;
+        KarteDaten *kd;
         int aktion;
         int aktion;
     public:
     public:
         Loader( KarteDaten *kd, int aktion );
         Loader( KarteDaten *kd, int aktion );
         void thread() override;
         void thread() override;
-        Loader *release();
         int getAction() const;
         int getAction() const;
     };
     };
     Loader *loader;
     Loader *loader;
     int karteId;
     int karteId;
-    Schrift *schrift;
     Bild *hintergrund;
     Bild *hintergrund;
     HINSTANCE ksgs;
     HINSTANCE ksgs;
     KSGScriptObj *beschreibung;
     KSGScriptObj *beschreibung;
@@ -44,12 +42,11 @@ private:
     bool rend;
     bool rend;
     unsigned char tAlpha;
     unsigned char tAlpha;
     unsigned char alpha;
     unsigned char alpha;
-    int ref;
     friend Loader;
     friend Loader;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KarteDaten( Schrift *zSchrift, int id );
+    KarteDaten( int id );
     // Destruktor
     // Destruktor
     ~KarteDaten();
     ~KarteDaten();
     // nicht constant
     // nicht constant
@@ -65,9 +62,6 @@ public:
     // constant
     // constant
     int getKarteId() const;
     int getKarteId() const;
     bool istausgewählt() const;
     bool istausgewählt() const;
-    // Reference Counting
-    KarteDaten *getThis();
-    KarteDaten *release();
 };
 };
 
 
 class KarteAuswahlFenster : public Thread
 class KarteAuswahlFenster : public Thread
@@ -77,7 +71,6 @@ private:
     int auswahl;
     int auswahl;
     RCArray< KarteDaten > *members;
     RCArray< KarteDaten > *members;
     LRahmen *rahmen;
     LRahmen *rahmen;
-    Schrift *schrift;
     TextRenderer *tr;
     TextRenderer *tr;
     double tickVal;
     double tickVal;
     int animation;
     int animation;
@@ -90,7 +83,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    KarteAuswahlFenster( Schrift *zSchrift );
+    KarteAuswahlFenster();
     // Destruktor
     // Destruktor
     ~KarteAuswahlFenster();
     ~KarteAuswahlFenster();
     // nicht constant
     // nicht constant
@@ -109,8 +102,6 @@ public:
     int getAnzahlAufSeite() const;
     int getAnzahlAufSeite() const;
     bool hatAuswahl() const;
     bool hatAuswahl() const;
     KarteDaten *getAuswahl() const;
     KarteDaten *getAuswahl() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };
 
 
 #endif
 #endif

+ 60 - 100
KSGClient/NachLogin/Spiele/Spiel Auswahl/SpielAuswahl.cpp

@@ -19,12 +19,12 @@ void SpielAuswahlKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVa
     ( (SpielDaten *)p )->ksgsAktion( parameter, retVal );
     ( (SpielDaten *)p )->ksgsAktion( parameter, retVal );
 }
 }
 
 
-SpielDaten::Loader::Loader( SpielDaten * sd, int aktion )
+SpielDaten::Loader::Loader( SpielDaten *sd, int aktion )
+    : Thread()
 {
 {
     this->sd = sd;
     this->sd = sd;
     this->aktion = aktion;
     this->aktion = aktion;
     beenden = 0;
     beenden = 0;
-    ref = 2;
     start();
     start();
 }
 }
 
 
@@ -38,7 +38,7 @@ void SpielDaten::Loader::thread()
     Text *pfad = new Text( "data/spiele/" );
     Text *pfad = new Text( "data/spiele/" );
     pfad->append( sd->name->getText() );
     pfad->append( sd->name->getText() );
     pfad->append( "/data/game.ini" );
     pfad->append( "/data/game.ini" );
-    if( !DateiExistiert( pfad->getThis() ) )
+    if( !DateiExistiert( pfad->getText() ) )
     {
     {
         if( !aktion )
         if( !aktion )
         {
         {
@@ -46,16 +46,16 @@ void SpielDaten::Loader::thread()
                 sd->aAnimation->setSichtbar( 0 );
                 sd->aAnimation->setSichtbar( 0 );
             sd->geladen = 0;
             sd->geladen = 0;
             sd->ausgewählt = 0;
             sd->ausgewählt = 0;
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( sd->aAnimation )
             if( sd->aAnimation )
                 sd->aAnimation = (Animation2D *)sd->aAnimation->release();
                 sd->aAnimation = (Animation2D *)sd->aAnimation->release();
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             if( sd->hintergrund )
             if( sd->hintergrund )
-                sd->hintergrund = sd->hintergrund->release();
+                sd->hintergrund = (Bild *)sd->hintergrund->release();
             if( sd->beschreibung )
             if( sd->beschreibung )
             {
             {
-                sd->beschreibung->zurücksetzen();
-                sd->beschreibung = dynamic_cast<KSGScriptObj *>( sd->beschreibung->release() );
+                sd->beschreibung->reset();
+                sd->beschreibung = (KSGScriptObj *)sd->beschreibung->release();
             }
             }
             if( sd->ksgs )
             if( sd->ksgs )
             {
             {
@@ -122,8 +122,8 @@ void SpielDaten::Loader::thread()
             {
             {
                 if( sd->beschreibung )
                 if( sd->beschreibung )
                 {
                 {
-                    sd->beschreibung->zurücksetzen();
-                    sd->beschreibung = dynamic_cast<KSGScriptObj*>(sd->beschreibung->release());
+                    sd->beschreibung->reset();
+                    sd->beschreibung = (KSGScriptObj *)sd->beschreibung->release();
                 }
                 }
                 if( !sd->ksgs )
                 if( !sd->ksgs )
                     sd->ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
                     sd->ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
@@ -133,18 +133,18 @@ void SpielDaten::Loader::thread()
                     if( getKSGScript )
                     if( getKSGScript )
                     {
                     {
                         sd->beschreibung = getKSGScript();
                         sd->beschreibung = getKSGScript();
-                        sd->beschreibung->setBildschirmZ( hauptScreen->getThis() );
-                        sd->beschreibung->setSchriftZ( sd->schrift->getThis() );
+                        sd->beschreibung->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
+                        sd->beschreibung->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
                         sd->beschreibung->setSize( 578, 428 );
                         sd->beschreibung->setSize( 578, 428 );
-                        sd->beschreibung->setRückrufParam( sd );
-                        sd->beschreibung->setRückrufFunktion( SpielAuswahlKSGSAktion );
+                        sd->beschreibung->setCallbackParam( sd );
+                        sd->beschreibung->setCallbackFunktion( SpielAuswahlKSGSAktion );
                         sd->beschreibung->setScriptDatei( "data/script/SpielNichtAktuell.ksgs" );
                         sd->beschreibung->setScriptDatei( "data/script/SpielNichtAktuell.ksgs" );
                     }
                     }
                     else
                     else
                     {
                     {
                         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                       new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                                       new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                                      "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                                "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                       new Text( "Ok" ), 0 );
                                                                       new Text( "Ok" ), 0 );
                     }
                     }
                 }
                 }
@@ -156,7 +156,7 @@ void SpielDaten::Loader::thread()
                 }
                 }
                 if( sd->beschreibung )
                 if( sd->beschreibung )
                     sd->geladen = 2;
                     sd->geladen = 2;
-                if( sd->beschreibung &&sd->ksgs &&sd->ausgewählt )
+                if( sd->beschreibung && sd->ksgs && sd->ausgewählt )
                     sd->beschreibung->neuLaden();
                     sd->beschreibung->neuLaden();
             }
             }
         }
         }
@@ -173,16 +173,16 @@ void SpielDaten::Loader::thread()
             sd->aAnimation->setSichtbar( 0 );
             sd->aAnimation->setSichtbar( 0 );
         sd->geladen = 0;
         sd->geladen = 0;
         sd->ausgewählt = 0;
         sd->ausgewählt = 0;
-        hauptScreen->lock();
+        uiFactory.initParam.bildschirm->lock();
         if( sd->aAnimation )
         if( sd->aAnimation )
             sd->aAnimation = (Animation2D *)sd->aAnimation->release();
             sd->aAnimation = (Animation2D *)sd->aAnimation->release();
-        hauptScreen->unlock();
+        uiFactory.initParam.bildschirm->unlock();
         if( sd->hintergrund )
         if( sd->hintergrund )
-            sd->hintergrund = sd->hintergrund->release();
+            sd->hintergrund = (Bild *)sd->hintergrund->release();
         if( sd->beschreibung )
         if( sd->beschreibung )
         {
         {
-            sd->beschreibung->zurücksetzen();
-            sd->beschreibung = dynamic_cast<KSGScriptObj*>(sd->beschreibung->release());
+            sd->beschreibung->reset();
+            sd->beschreibung = (KSGScriptObj *)sd->beschreibung->release();
         }
         }
         if( sd->ksgs )
         if( sd->ksgs )
         {
         {
@@ -214,7 +214,7 @@ void SpielDaten::Loader::thread()
             if( !sd->hintergrund )
             if( !sd->hintergrund )
             {
             {
                 LTDBDatei *bildDatei = new LTDBDatei();
                 LTDBDatei *bildDatei = new LTDBDatei();
-                bildDatei->setDatei( pf->getThis() );
+                bildDatei->setDatei( dynamic_cast<Text *>( pf->getThis() ) );
                 bildDatei->leseDaten( 0 );
                 bildDatei->leseDaten( 0 );
                 sd->hintergrund = bildDatei->laden( 0, bildDatei->zBildListe()->get( 0 ) );
                 sd->hintergrund = bildDatei->laden( 0, bildDatei->zBildListe()->get( 0 ) );
                 bildDatei->release();
                 bildDatei->release();
@@ -228,10 +228,10 @@ void SpielDaten::Loader::thread()
         pf->insert( 0, "/data/" );
         pf->insert( 0, "/data/" );
         pf->insert( 0, sd->name->getText() );
         pf->insert( 0, sd->name->getText() );
         pf->insert( 0, "data/spiele/" );
         pf->insert( 0, "data/spiele/" );
-        Datei * idDatei = new Datei();
+        Datei *idDatei = new Datei();
         idDatei->setDatei( pf->getText() );
         idDatei->setDatei( pf->getText() );
         idDatei->open( Datei::Style::lesen );
         idDatei->open( Datei::Style::lesen );
-        idDatei->lese( (char *)& sd->spielId, 4 );
+        idDatei->lese( (char *)&sd->spielId, 4 );
         idDatei->close();
         idDatei->close();
         idDatei->release();
         idDatei->release();
         pf->release();
         pf->release();
@@ -249,17 +249,17 @@ void SpielDaten::Loader::thread()
             if( !pf->hat( ".ltdb/" ) )
             if( !pf->hat( ".ltdb/" ) )
             {
             {
                 LTDBDatei *add = new LTDBDatei();
                 LTDBDatei *add = new LTDBDatei();
-                add->setDatei( pf->getThis() );
+                add->setDatei( dynamic_cast<Text *>( pf->getThis() ) );
                 add->leseDaten( 0 );
                 add->leseDaten( 0 );
                 Animation2DData *ad = new Animation2DData();
                 Animation2DData *ad = new Animation2DData();
                 ad->ladeAnimation( add );
                 ad->ladeAnimation( add );
                 ad->setWiederhohlend( 1 );
                 ad->setWiederhohlend( 1 );
                 ad->setFPS( 30 );
                 ad->setFPS( 30 );
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 if( sd->aAnimation )
                 if( sd->aAnimation )
                     sd->aAnimation = (Animation2D *)sd->aAnimation->release();
                     sd->aAnimation = (Animation2D *)sd->aAnimation->release();
                 sd->aAnimation = new Animation2D();
                 sd->aAnimation = new Animation2D();
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
                 sd->aAnimation->setSize( 200, 100 );
                 sd->aAnimation->setSize( 200, 100 );
                 sd->aAnimation->setPosition( 0, 0 );
                 sd->aAnimation->setPosition( 0, 0 );
                 sd->aAnimation->setAnimationDataZ( ad );
                 sd->aAnimation->setAnimationDataZ( ad );
@@ -272,8 +272,8 @@ void SpielDaten::Loader::thread()
             pf->insert( 0, "data/spiele/" );
             pf->insert( 0, "data/spiele/" );
             if( sd->beschreibung )
             if( sd->beschreibung )
             {
             {
-                sd->beschreibung->zurücksetzen();
-                sd->beschreibung = dynamic_cast<KSGScriptObj*>(sd->beschreibung->release());
+                sd->beschreibung->reset();
+                sd->beschreibung = (KSGScriptObj *)sd->beschreibung->release();
             }
             }
             if( !sd->ksgs )
             if( !sd->ksgs )
                 sd->ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
                 sd->ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
@@ -283,18 +283,18 @@ void SpielDaten::Loader::thread()
                 if( getKSGScript )
                 if( getKSGScript )
                 {
                 {
                     sd->beschreibung = getKSGScript();
                     sd->beschreibung = getKSGScript();
-                    sd->beschreibung->setBildschirmZ( hauptScreen->getThis() );
-                    sd->beschreibung->setSchriftZ( sd->schrift->getThis() );
+                    sd->beschreibung->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
+                    sd->beschreibung->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
                     sd->beschreibung->setSize( 578, 428 );
                     sd->beschreibung->setSize( 578, 428 );
-                    sd->beschreibung->setRückrufParam( sd );
-                    sd->beschreibung->setRückrufFunktion( SpielAuswahlKSGSAktion );
+                    sd->beschreibung->setCallbackParam( sd );
+                    sd->beschreibung->setCallbackFunktion( SpielAuswahlKSGSAktion );
                     sd->beschreibung->setScriptDatei( pf->getText() );
                     sd->beschreibung->setScriptDatei( pf->getText() );
                 }
                 }
                 else
                 else
                 {
                 {
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                     nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                                   new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
                                                                   new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-                                                                  "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                            "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
                                                                   new Text( "Ok" ), 0 );
                                                                   new Text( "Ok" ), 0 );
                 }
                 }
             }
             }
@@ -307,7 +307,7 @@ void SpielDaten::Loader::thread()
             pf->release();
             pf->release();
             if( sd->beschreibung )
             if( sd->beschreibung )
                 sd->geladen = 2;
                 sd->geladen = 2;
-            if( sd->beschreibung &&sd->ksgs &&sd->ausgewählt )
+            if( sd->beschreibung && sd->ksgs && sd->ausgewählt )
                 sd->beschreibung->neuLaden();
                 sd->beschreibung->neuLaden();
             sd->rend = 1;
             sd->rend = 1;
         }
         }
@@ -318,14 +318,6 @@ void SpielDaten::Loader::thread()
     if( !sd->erlaubt )
     if( !sd->erlaubt )
         sd->updateErlaubt();
         sd->updateErlaubt();
     sd->rend = 1;
     sd->rend = 1;
-    release();
-}
-
-SpielDaten::Loader *SpielDaten::Loader::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }
 }
 
 
 int SpielDaten::Loader::getAktion() const
 int SpielDaten::Loader::getAktion() const
@@ -335,7 +327,8 @@ int SpielDaten::Loader::getAktion() const
 
 
 // Inhalt der SpielDaten Klasse aus SpielAuswahl.h
 // Inhalt der SpielDaten Klasse aus SpielAuswahl.h
 // Konstruktor
 // Konstruktor
-SpielDaten::SpielDaten( Schrift * zSchrift, const char *name, int id )
+SpielDaten::SpielDaten( const char *name, int id )
+    : ReferenceCounter()
 {
 {
     this->name = new Text( name );
     this->name = new Text( name );
     hintergrund = 0;
     hintergrund = 0;
@@ -350,8 +343,7 @@ SpielDaten::SpielDaten( Schrift * zSchrift, const char *name, int id )
     ausgewählt = 0;
     ausgewählt = 0;
     pos = Punkt( 0, 500 );
     pos = Punkt( 0, 500 );
     gr = Punkt( 200, 100 );
     gr = Punkt( 200, 100 );
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift->getThis() );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     spielId = id;
     spielId = id;
     geladen = 0;
     geladen = 0;
     erlaubt = 0;
     erlaubt = 0;
@@ -361,7 +353,6 @@ SpielDaten::SpielDaten( Schrift * zSchrift, const char *name, int id )
     auswahl->setSize( 200, 100 );
     auswahl->setSize( 200, 100 );
     ladenBild = 0;
     ladenBild = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
     alpha = 0;
     alpha = 0;
     tAlpha = 0;
     tAlpha = 0;
     loader = new Loader( this, 1 );
     loader = new Loader( this, 1 );
@@ -370,11 +361,9 @@ SpielDaten::SpielDaten( Schrift * zSchrift, const char *name, int id )
 // Destruktor
 // Destruktor
 SpielDaten::~SpielDaten()
 SpielDaten::~SpielDaten()
 {
 {
-    if( loader &&loader->isRunning() )
+    if( loader && loader->isRunning() )
         loader->warteAufThread( INT_MAX );
         loader->warteAufThread( INT_MAX );
     loader->release();
     loader->release();
-    if( schrift )
-        schrift->release();
     name->release();
     name->release();
     if( hintergrund )
     if( hintergrund )
         hintergrund->release();
         hintergrund->release();
@@ -382,7 +371,7 @@ SpielDaten::~SpielDaten()
         aAnimation->release();
         aAnimation->release();
     if( beschreibung )
     if( beschreibung )
     {
     {
-        beschreibung->zurücksetzen();
+        beschreibung->reset();
         beschreibung->release();
         beschreibung->release();
     }
     }
     if( ksgs )
     if( ksgs )
@@ -396,7 +385,7 @@ SpielDaten::~SpielDaten()
 }
 }
 
 
 // nicht constant
 // nicht constant
-void SpielDaten::ksgsAktion( RCArray< KSGSVariable > * parameter, KSGSVariable * *retVal )
+void SpielDaten::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {}
 {}
 
 
 void SpielDaten::setSichtbar( bool sichtbar )
 void SpielDaten::setSichtbar( bool sichtbar )
@@ -409,10 +398,10 @@ void SpielDaten::setSichtbar( bool sichtbar )
         setAuswahl( 0 );
         setAuswahl( 0 );
         auswahl->setFarbe( auswahl->getFarbe() & 0xFFFFFF );
         auswahl->setFarbe( auswahl->getFarbe() & 0xFFFFFF );
     }
     }
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     if( loader->getAktion() == ( sichtbar ? 2 : 0 ) )
     if( loader->getAktion() == ( sichtbar ? 2 : 0 ) )
     {
     {
-        hauptScreen->unlock();
+        uiFactory.initParam.bildschirm->unlock();
         rend = 1;
         rend = 1;
         return;
         return;
     }
     }
@@ -420,26 +409,26 @@ void SpielDaten::setSichtbar( bool sichtbar )
     Loader *altLoader = loader;
     Loader *altLoader = loader;
     loader = new Loader( this, sichtbar ? 2 : 0 );
     loader = new Loader( this, sichtbar ? 2 : 0 );
     altLoader->release();
     altLoader->release();
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
     rend = 1;
     rend = 1;
 }
 }
 
 
 void SpielDaten::setSichtbar()
 void SpielDaten::setSichtbar()
 {
 {
     animation |= 1;
     animation |= 1;
-    if( ausgewählt &&geladen == 2 )
+    if( ausgewählt && geladen == 2 )
     {
     {
         animation |= 0x4;
         animation |= 0x4;
         beschreibung->setPosition( beschreibung->getX(), 0 );
         beschreibung->setPosition( beschreibung->getX(), 0 );
     }
     }
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     if( geladen != 2 && loader->getAktion() != 2 )
     if( geladen != 2 && loader->getAktion() != 2 )
     {
     {
         Loader *altLoader = loader;
         Loader *altLoader = loader;
         loader = new Loader( this, 2 );
         loader = new Loader( this, 2 );
         altLoader->release();
         altLoader->release();
     }
     }
-    hauptScreen->unlock();
+    uiFactory.initParam.bildschirm->unlock();
     rend = 1;
     rend = 1;
 }
 }
 
 
@@ -452,7 +441,7 @@ void SpielDaten::setAuswahl( bool auswahl )
     {
     {
         if( aAnimation )
         if( aAnimation )
             aAnimation->setSichtbar( 1 );
             aAnimation->setSichtbar( 1 );
-        if( beschreibung &&ksgs )
+        if( beschreibung && ksgs )
             beschreibung->neuLaden();
             beschreibung->neuLaden();
         animation |= 0x4;
         animation |= 0x4;
     }
     }
@@ -487,9 +476,9 @@ void SpielDaten::updateErlaubt()
         Text msg = "Das Spiel '";
         Text msg = "Das Spiel '";
         msg += name->getText();
         msg += name->getText();
         msg += "' muss aktualisiert werden.";
         msg += "' muss aktualisiert werden.";
-        nachLogin->zNachrichtenListe()->addNachricht( new SpielUpdateNachricht( schrift, new Text( "Update" ), msg.getThis(), dgId, []()
+        nachLogin->zNachrichtenListe()->addNachricht( new SpielUpdateNachricht( new Text( "Update" ), dynamic_cast<Text *>( msg.getThis() ), dgId, []()
         {
         {
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->updateErlaubt();
                 nachLogin->zSpielenFenster()->updateErlaubt();
         } ) );
         } ) );
     }
     }
@@ -620,7 +609,7 @@ bool SpielDaten::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void SpielDaten::doPublicMausEreignis( MausEreignis & me )
+void SpielDaten::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !erlaubt && ausgewählt )
     if( !erlaubt && ausgewählt )
     {
     {
@@ -632,7 +621,7 @@ void SpielDaten::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void SpielDaten::render( Bild & zRObj )
+void SpielDaten::render( Bild &zRObj )
 {
 {
     int x = pos.x;
     int x = pos.x;
     int y = pos.y;
     int y = pos.y;
@@ -643,12 +632,12 @@ void SpielDaten::render( Bild & zRObj )
     zRObj.setAlpha( tAlpha );
     zRObj.setAlpha( tAlpha );
     rahmen->setSize( br, hö );
     rahmen->setSize( br, hö );
     int rbr = rahmen->getRBreite();
     int rbr = rahmen->getRBreite();
-    if( geladen &&hintergrund && ( !( ausgewählt &&geladen == 2 && aAnimation ) || !aAnimation->istSichtbar() ) )
+    if( geladen && hintergrund && ( !( ausgewählt && geladen == 2 && aAnimation ) || !aAnimation->istSichtbar() ) )
         zRObj.drawBild( rbr, rbr, br - rbr * 2, hö - rbr * 2, *hintergrund );
         zRObj.drawBild( rbr, rbr, br - rbr * 2, hö - rbr * 2, *hintergrund );
     if( aAnimation )
     if( aAnimation )
         aAnimation->render( zRObj );
         aAnimation->render( zRObj );
     rahmen->render( zRObj );
     rahmen->render( zRObj );
-    if( auswahl && ( ( auswahl->getFarbe() >> 24 ) & 0xFF ) && ( !( ausgewählt &&geladen == 2 && aAnimation ) || !aAnimation->istSichtbar() ) )
+    if( auswahl && ( ( auswahl->getFarbe() >> 24 ) & 0xFF ) && ( !( ausgewählt && geladen == 2 && aAnimation ) || !aAnimation->istSichtbar() ) )
     {
     {
         auswahl->setPosition( rbr, rbr );
         auswahl->setPosition( rbr, rbr );
         auswahl->setSize( br - rbr * 2, hö - rbr * 2 );
         auswahl->setSize( br - rbr * 2, hö - rbr * 2 );
@@ -670,7 +659,7 @@ void SpielDaten::render( Bild & zRObj )
         beschreibung->render( zRObj );
         beschreibung->render( zRObj );
         zRObj.releaseAlpha();
         zRObj.releaseAlpha();
     }
     }
-    if( ausgewählt &&geladen != 2 && ladeAnimation->zAnimationData() )
+    if( ausgewählt && geladen != 2 && ladeAnimation->zAnimationData() )
     {
     {
         ladenBild++;
         ladenBild++;
         if( ladenBild >= ladeAnimation->zAnimationData()->getBildAnzahl() )
         if( ladenBild >= ladeAnimation->zAnimationData()->getBildAnzahl() )
@@ -703,28 +692,12 @@ bool SpielDaten::istErlaubt() const
     return erlaubt;
     return erlaubt;
 }
 }
 
 
-// Reference Counting
-SpielDaten *SpielDaten::getThis()
-{
-    ref++;
-    return this;
-}
-
-SpielDaten *SpielDaten::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der SpielAuswahl Klasse aus SpielAuswahl.h
 // Inhalt der SpielAuswahl Klasse aus SpielAuswahl.h
 // Konstruktor
 // Konstruktor
-SpielAuswahlFenster::SpielAuswahlFenster( Schrift * zSchrift )
+SpielAuswahlFenster::SpielAuswahlFenster()
     : Thread()
     : Thread()
 {
 {
-    schrift = zSchrift->getThis();
-    tr = new TextRenderer( schrift->getThis() );
+    tr = new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
@@ -745,8 +718,6 @@ SpielAuswahlFenster::SpielAuswahlFenster( Schrift * zSchrift )
 // Destruktor
 // Destruktor
 SpielAuswahlFenster::~SpielAuswahlFenster()
 SpielAuswahlFenster::~SpielAuswahlFenster()
 {
 {
-    if( schrift )
-        schrift->release();
     if( rahmen )
     if( rahmen )
         rahmen->release();
         rahmen->release();
     if( members )
     if( members )
@@ -821,7 +792,7 @@ void SpielAuswahlFenster::thread()
             }
             }
             if( !gefunden )
             if( !gefunden )
             {
             {
-                SpielDaten *tmp = new SpielDaten( schrift, name->getText(), liste->hat( i ) ? liste->get( i ) : 0 );
+                SpielDaten *tmp = new SpielDaten( name->getText(), liste->hat( i ) ? liste->get( i ) : 0 );
                 members->add( tmp, anzahl );
                 members->add( tmp, anzahl );
                 anzahl++;
                 anzahl++;
             }
             }
@@ -890,7 +861,7 @@ bool SpielAuswahlFenster::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void SpielAuswahlFenster::doPublicMausEreignis( MausEreignis & me )
+void SpielAuswahlFenster::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( pos.x != 10 )
     if( pos.x != 10 )
         return;
         return;
@@ -935,7 +906,7 @@ void SpielAuswahlFenster::doPublicMausEreignis( MausEreignis & me )
     me.my += pos.y;
     me.my += pos.y;
 }
 }
 
 
-void SpielAuswahlFenster::render( Bild & zrObj )
+void SpielAuswahlFenster::render( Bild &zrObj )
 {
 {
     int x = pos.x;
     int x = pos.x;
     int y = pos.y;
     int y = pos.y;
@@ -1005,15 +976,4 @@ SpielDaten *SpielAuswahlFenster::zAuswahl() const
 bool SpielAuswahlFenster::istAuswahlErlubt() const
 bool SpielAuswahlFenster::istAuswahlErlubt() const
 {
 {
     return auswahl != -1 && members->z( auswahl )->istErlaubt();
     return auswahl != -1 && members->z( auswahl )->istErlaubt();
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *SpielAuswahlFenster::release()
-{
-    if( ref == 2 && run )
-    {
-        warteAufThread( 5000 );
-        ende();
-    }
-    return Thread::release();
 }
 }

+ 4 - 13
KSGClient/NachLogin/Spiele/Spiel Auswahl/SpielAuswahl.h

@@ -14,20 +14,19 @@ using namespace KSGScript;
 
 
 class SpielDaten; // aus dieser Datei
 class SpielDaten; // aus dieser Datei
 
 
-class SpielDaten
+class SpielDaten : public virtual ReferenceCounter
 {
 {
 private:
 private:
     class Loader : public Thread
     class Loader : public Thread
     {
     {
     private:
     private:
-        SpielDaten * sd;
+        SpielDaten *sd;
         bool beenden;
         bool beenden;
         int aktion;
         int aktion;
     public:
     public:
         Loader( SpielDaten *sd, int aktion );
         Loader( SpielDaten *sd, int aktion );
         void setBeenden();
         void setBeenden();
         void thread() override;
         void thread() override;
-        Loader *release();
         int getAktion() const;
         int getAktion() const;
     };
     };
     Loader *loader;
     Loader *loader;
@@ -35,7 +34,6 @@ private:
     Text *name;
     Text *name;
     Bild *hintergrund;
     Bild *hintergrund;
     Animation2D *aAnimation;
     Animation2D *aAnimation;
-    Schrift *schrift;
     TextRenderer *tr;
     TextRenderer *tr;
     KSGScriptObj *beschreibung;
     KSGScriptObj *beschreibung;
     HINSTANCE ksgs;
     HINSTANCE ksgs;
@@ -52,11 +50,10 @@ private:
     bool erlaubt;
     bool erlaubt;
     unsigned char tAlpha;
     unsigned char tAlpha;
     unsigned char alpha;
     unsigned char alpha;
-    int ref;
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    SpielDaten( Schrift *zSchrift, const char *name, int id );
+    SpielDaten( const char *name, int id );
     // Destruktor
     // Destruktor
     ~SpielDaten();
     ~SpielDaten();
     // nicht constant
     // nicht constant
@@ -74,9 +71,6 @@ public:
     bool istausgewählt() const;
     bool istausgewählt() const;
     Text *zName() const;
     Text *zName() const;
     bool istErlaubt() const;
     bool istErlaubt() const;
-    // Reference Counting
-    SpielDaten *getThis();
-    SpielDaten *release();
 };
 };
 
 
 class SpielAuswahlFenster : public Thread
 class SpielAuswahlFenster : public Thread
@@ -86,7 +80,6 @@ private:
     int auswahl;
     int auswahl;
     RCArray< SpielDaten > *members;
     RCArray< SpielDaten > *members;
     LRahmen *rahmen;
     LRahmen *rahmen;
-    Schrift *schrift;
     TextRenderer *tr;
     TextRenderer *tr;
     double tickVal;
     double tickVal;
     int animation;
     int animation;
@@ -98,7 +91,7 @@ private:
 
 
 public:
 public:
     // Konstruktor
     // Konstruktor
-    SpielAuswahlFenster( Schrift *zSchrift );
+    SpielAuswahlFenster();
     // Destruktor
     // Destruktor
     ~SpielAuswahlFenster();
     ~SpielAuswahlFenster();
     // nicht constant
     // nicht constant
@@ -118,8 +111,6 @@ public:
     SpielDaten *getAuswahl() const;
     SpielDaten *getAuswahl() const;
     SpielDaten *zAuswahl() const;
     SpielDaten *zAuswahl() const;
     bool istAuswahlErlubt() const;
     bool istAuswahlErlubt() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };
 
 
 #endif
 #endif

+ 654 - 649
KSGClient/NachLogin/Spiele/Spiele.cpp

@@ -9,819 +9,824 @@
 
 
 // Inhalt der Spiele Klasse aus Spiele.h
 // Inhalt der Spiele Klasse aus Spiele.h
 // Konstruktor
 // Konstruktor
-Spiele::Spiele( Schrift *zSchrift, Fenster *zNachLoginFenster, int x )
-	: Zeichnung()
-{
-	bildschirmGröße = hauptScreen->getBackBufferSize();
-	pos = Punkt( x, 67 );
-	gr = Punkt( 102, 32 );
-	LTDBDatei *spielenBilder = new LTDBDatei();
-	spielenBilder->setDatei( new Text( "data/client/bilder/spielen.ltdb" ) );
-	spielenBilder->leseDaten( 0 );
-	rahmen = new LRahmen();
-	rahmen->setFarbe( 0xFFFFFFFF );
-	rahmen->setSize( 102, 32 );
-	spielAuswahl = new SpielAuswahlFenster( zSchrift );
-	karteAuswahl = new KarteAuswahlFenster( zSchrift );
-	anmeldung = new AngemeldetFenster( zSchrift );
-	gruppe = new GruppeFenster( zSchrift );
-	teamAuswahl = new TeamAuswahl( zSchrift );
-	statistik = new SpielStatistik( zSchrift );
-	oben = initKnopf( 380, 450, 40, 15, 0, 0, "" );
-	oben->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	oben->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "oben.png" ) ) );
-	initToolTip( oben, "Nach oben umblättern.", zSchrift, hauptScreen );
-	links = initKnopf( 360, 450, 15, 40, 0, 0, "" );
-	links->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	links->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "links.png" ) ) );
-	initToolTip( links, "Zurück.", zSchrift, hauptScreen );
-	unten = initKnopf( 380, 475, 40, 15, 0, 0, "" );
-	unten->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	unten->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "unten.png" ) ) );
-	initToolTip( unten, "Nach unten umblättern.", zSchrift, hauptScreen );
-	rechts = initKnopf( 425, 450, 15, 40, 0, 0, "" );
-	rechts->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	rechts->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "rechts.png" ) ) );
-	initToolTip( rechts, "Weiter.", zSchrift, hauptScreen );
-	spielenBilder->release();
-	alpha = 0;
-	ladenAlpha = 0;
-	ladenJetzt = 0;
-	animation = 0;
-	sichtbar = 0;
-	tickVal = 0;
-	tickVal2 = 0;
-	jetzt = 0;
-	prozent1 = 0;
-	prozent2 = 0;
-	prozent3 = 0;
-	prozent4 = 0;
-	prozent5 = 0;
-	prozent6 = 0;
-	spielGefundenB = 0;
-	begPos = Punkt( 0, 0 );
-	begGröße = Punkt( 0, 0 );
-	größe1 = Punkt( 102, 32 );
-	pos1 = Punkt( x, 67 );
-	größe2 = Punkt( 800, 500 );
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	größe3 = Punkt( 950, 550 );
-	pos3 = bildschirmGröße / 2 - größe3 / 2;
-	größe4 = Punkt( 700, 600 );
-	pos4 = bildschirmGröße / 2 - größe4 / 2;
-	zNachLoginFenster->addMember( getThis() );
+Spiele::Spiele( Fenster *zNachLoginFenster, int x )
+    : Zeichnung()
+{
+    bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    pos = Punkt( x, 67 );
+    gr = Punkt( 102, 32 );
+    LTDBDatei *spielenBilder = new LTDBDatei();
+    spielenBilder->setDatei( new Text( "data/client/bilder/spielen.ltdb" ) );
+    spielenBilder->leseDaten( 0 );
+    rahmen = new LRahmen();
+    rahmen->setFarbe( 0xFFFFFFFF );
+    rahmen->setSize( 102, 32 );
+    spielAuswahl = new SpielAuswahlFenster();
+    karteAuswahl = new KarteAuswahlFenster();
+    anmeldung = new AngemeldetFenster();
+    gruppe = new GruppeFenster();
+    teamAuswahl = new TeamAuswahl();
+    statistik = new SpielStatistik();
+    oben = initKnopf( 380, 450, 40, 15, 0, "" );
+    oben->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    oben->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "oben.png" ) ) );
+    initToolTip( oben, "Nach oben umblättern." );
+    links = initKnopf( 360, 450, 15, 40, 0, "" );
+    links->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    links->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "links.png" ) ) );
+    initToolTip( links, "Zurück." );
+    unten = initKnopf( 380, 475, 40, 15, 0, "" );
+    unten->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    unten->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "unten.png" ) ) );
+    initToolTip( unten, "Nach unten umblättern." );
+    rechts = initKnopf( 425, 450, 15, 40, 0, "" );
+    rechts->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    rechts->setHintergrundBildZ( spielenBilder->laden( 0, new Text( "rechts.png" ) ) );
+    initToolTip( rechts, "Weiter." );
+    spielenBilder->release();
+    alpha = 0;
+    ladenAlpha = 0;
+    ladenJetzt = 0;
+    animation = 0;
+    sichtbar = 0;
+    tickVal = 0;
+    tickVal2 = 0;
+    jetzt = 0;
+    prozent1 = 0;
+    prozent2 = 0;
+    prozent3 = 0;
+    prozent4 = 0;
+    prozent5 = 0;
+    prozent6 = 0;
+    spielGefundenB = 0;
+    begPos = Punkt( 0, 0 );
+    begGröße = Punkt( 0, 0 );
+    größe1 = Punkt( 102, 32 );
+    pos1 = Punkt( x, 67 );
+    größe2 = Punkt( 800, 500 );
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    größe3 = Punkt( 950, 550 );
+    pos3 = bildschirmGröße / 2 - größe3 / 2;
+    größe4 = Punkt( 700, 600 );
+    pos4 = bildschirmGröße / 2 - größe4 / 2;
+    getThis();
+    zNachLoginFenster->addMember( this );
 }
 }
 
 
 // Destruktor
 // Destruktor
 Spiele::~Spiele()
 Spiele::~Spiele()
 {
 {
-	rahmen->release();
-	spielAuswahl->release();
-	karteAuswahl->release();
-	anmeldung->release();
-	gruppe->release();
-	teamAuswahl->release();
-	statistik->release();
-	oben->release();
-	links->release();
-	unten->release();
-	rechts->release();
+    rahmen->release();
+    spielAuswahl->warteAufThread( 10000 );
+    spielAuswahl->ende();
+    spielAuswahl->release();
+    karteAuswahl->warteAufThread( 10000 );
+    karteAuswahl->ende();
+    karteAuswahl->release();
+    anmeldung->release();
+    gruppe->release();
+    teamAuswahl->release();
+    statistik->release();
+    oben->release();
+    links->release();
+    unten->release();
+    rechts->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void Spiele::setSichtbar( bool sicht )
 void Spiele::setSichtbar( bool sicht )
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	animation |= ( sicht ? 0x1 : 0x2 );
-	updateErlaubt();
-	rend = 1;
+    begPos = pos;
+    begGröße = gr;
+    animation |= ( sicht ? 0x1 : 0x2 );
+    updateErlaubt();
+    rend = 1;
 }
 }
 
 
 void Spiele::updateErlaubt()
 void Spiele::updateErlaubt()
 {
 {
-	if( sichtbar )
-	{
-		if( jetzt == 1 )
-			spielAuswahl->updateListe();
-		if( jetzt == 2 )
-			karteAuswahl->updateListe();
-	}
+    if( sichtbar )
+    {
+        if( jetzt == 1 )
+            spielAuswahl->updateListe();
+        if( jetzt == 2 )
+            karteAuswahl->updateListe();
+    }
 }
 }
 
 
 void Spiele::anmelden( int karteId )
 void Spiele::anmelden( int karteId )
 {
 {
-	if( anmeldung->setKarteId( karteId ) )
-	{
-		karteAuswahl->setSichtbar( 0 );
-		anmeldung->setSichtbar( 1 );
-		jetzt = 3;
-	}
+    if( anmeldung->setKarteId( karteId ) )
+    {
+        karteAuswahl->setSichtbar( 0 );
+        anmeldung->setSichtbar( 1 );
+        jetzt = 3;
+    }
 }
 }
 
 
 void Spiele::anmeldungAbbrechen()
 void Spiele::anmeldungAbbrechen()
 {
 {
-	anmeldung->setSichtbar( 0 );
-	spielAuswahl->setSichtbar( 1 );
-	jetzt = 1;
+    anmeldung->setSichtbar( 0 );
+    spielAuswahl->setSichtbar( 1 );
+    jetzt = 1;
 }
 }
 
 
 void Spiele::gruppeBetreten( int gruppeId )
 void Spiele::gruppeBetreten( int gruppeId )
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	größe2 = größe3;
-	pos2 = pos3;
-	gruppe->setGruppeId( gruppeId );
-	gruppe->neuerSpieler( loginClient->getAccountId() );
-	animation |= 0x4;
-	spielGefundenB = 0;
+    begPos = pos;
+    begGröße = gr;
+    größe2 = größe3;
+    pos2 = pos3;
+    gruppe->setGruppeId( gruppeId );
+    gruppe->neuerSpieler( loginClient->getAccountId() );
+    animation |= 0x4;
+    spielGefundenB = 0;
 }
 }
 
 
 void Spiele::gruppeVerlassen()
 void Spiele::gruppeVerlassen()
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	größe2.x = 800;
-	größe2.y = 500;
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	animation |= 0x8;
+    begPos = pos;
+    begGröße = gr;
+    größe2.x = 800;
+    größe2.y = 500;
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    animation |= 0x8;
 }
 }
 
 
 void Spiele::spielerBetrittGruppe( int gruppeId, int accountId )
 void Spiele::spielerBetrittGruppe( int gruppeId, int accountId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->neuerSpieler( accountId );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->neuerSpieler( accountId );
 }
 }
 
 
 void Spiele::spielerVerlässtGruppe( int gruppeId, int accountId )
 void Spiele::spielerVerlässtGruppe( int gruppeId, int accountId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->spielerVerlässt( accountId );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->spielerVerlässt( accountId );
 }
 }
 
 
 void Spiele::gruppeNachricht( int gruppeId, char *nachricht )
 void Spiele::gruppeNachricht( int gruppeId, char *nachricht )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->chatNachricht( nachricht );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->chatNachricht( nachricht );
 }
 }
 
 
 void Spiele::gruppeAnmelden( int gruppeId )
 void Spiele::gruppeAnmelden( int gruppeId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->setAngemeldet( 1 );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->setAngemeldet( 1 );
 }
 }
 
 
 void Spiele::gruppeAbmelden( int gruppeId )
 void Spiele::gruppeAbmelden( int gruppeId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->setAngemeldet( 0 );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->setAngemeldet( 0 );
 }
 }
 
 
 void Spiele::setGruppeSpielStarten( int gruppeId, bool spielStarten )
 void Spiele::setGruppeSpielStarten( int gruppeId, bool spielStarten )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->setSpielerHinzufügen( !spielStarten );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->setSpielerHinzufügen( !spielStarten );
 }
 }
 
 
 void Spiele::setGruppeAdmin( int gruppeId, int admin )
 void Spiele::setGruppeAdmin( int gruppeId, int admin )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->setAdmin( admin );
-	nachLogin->zFreundesListe()->zeigeEinladeKnopf( admin == loginClient->getAccountId() );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->setAdmin( admin );
+    nachLogin->zFreundesListe()->zeigeEinladeKnopf( admin == loginClient->getAccountId() );
 }
 }
 
 
 void Spiele::kickAusGruppe( int gruppeId )
 void Spiele::kickAusGruppe( int gruppeId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-	{
-		gruppe->kick();
-		gruppeVerlassen();
-	}
+    if( gruppe->getGruppeId() == gruppeId )
+    {
+        gruppe->kick();
+        gruppeVerlassen();
+    }
 }
 }
 
 
 void Spiele::gruppeEinladungNeu( int gruppeId, int accountId )
 void Spiele::gruppeEinladungNeu( int gruppeId, int accountId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->neueEinladung( accountId );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->neueEinladung( accountId );
 }
 }
 
 
 void Spiele::gruppeEinladungAbgebrochen( int gruppeId, int accountId )
 void Spiele::gruppeEinladungAbgebrochen( int gruppeId, int accountId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->einladungEntfernt( accountId );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->einladungEntfernt( accountId );
 }
 }
 
 
 void Spiele::gruppeEinadungAbgelehnt( int gruppeId, int accountId )
 void Spiele::gruppeEinadungAbgelehnt( int gruppeId, int accountId )
 {
 {
-	if( gruppe->getGruppeId() == gruppeId )
-		gruppe->einladungAbgelehnt( accountId );
+    if( gruppe->getGruppeId() == gruppeId )
+        gruppe->einladungAbgelehnt( accountId );
 }
 }
 
 
 void Spiele::spielGefunden( int karteId )
 void Spiele::spielGefunden( int karteId )
 {
 {
-	MausEreignis me;
-	me.id = ME_RLinks;
-	hauptScreen->lock();
-	nachLogin->zTitelLeiste()->druckSpielen( me );
-	hauptScreen->unlock();
-	if( jetzt == 3 )
-		anmeldung->setSpielGefunden();
-	else if( jetzt == 4 )
-		gruppe->spielGefunden();
-	else
-		spielGefundenB = 1;
+    MausEreignis me;
+    me.id = ME_RLinks;
+    uiFactory.initParam.bildschirm->lock();
+    nachLogin->zTitelLeiste()->druckSpielen( me );
+    uiFactory.initParam.bildschirm->unlock();
+    if( jetzt == 3 )
+        anmeldung->setSpielGefunden();
+    else if( jetzt == 4 )
+        gruppe->spielGefunden();
+    else
+        spielGefundenB = 1;
 }
 }
 
 
 void Spiele::spielGefundenZeitVerbleibend( int sekunden )
 void Spiele::spielGefundenZeitVerbleibend( int sekunden )
 {
 {
-	if( jetzt == 3 )
-		anmeldung->setVerbleibendeZeit( sekunden );
-	if( jetzt == 4 )
-		gruppe->verbleibendeZeit( sekunden );
-	if( jetzt == 5 )
-		teamAuswahl->verbleibendeZeit( sekunden );
+    if( jetzt == 3 )
+        anmeldung->setVerbleibendeZeit( sekunden );
+    if( jetzt == 4 )
+        gruppe->verbleibendeZeit( sekunden );
+    if( jetzt == 5 )
+        teamAuswahl->verbleibendeZeit( sekunden );
 }
 }
 
 
 void Spiele::spielGefundenAbbruch()
 void Spiele::spielGefundenAbbruch()
 {
 {
-	if( jetzt == 3 )
-		anmeldung->spielGefundenAbbruch();
-	if( jetzt == 4 )
-		gruppe->spielGefundenAbbruch();
+    if( jetzt == 3 )
+        anmeldung->spielGefundenAbbruch();
+    if( jetzt == 4 )
+        gruppe->spielGefundenAbbruch();
 }
 }
 
 
 void Spiele::zurückInWarteschlange( int stunden, int minuten, int sekunden )
 void Spiele::zurückInWarteschlange( int stunden, int minuten, int sekunden )
 {
 {
-	if( jetzt == 3 )
-		anmeldung->zurückInWarteschlange( stunden, minuten, sekunden );
-	if( jetzt == 4 )
-		gruppe->zurückInWarteschlange( stunden, minuten, sekunden );
+    if( jetzt == 3 )
+        anmeldung->zurückInWarteschlange( stunden, minuten, sekunden );
+    if( jetzt == 4 )
+        gruppe->zurückInWarteschlange( stunden, minuten, sekunden );
 }
 }
 
 
 void Spiele::teamAuswahlBetreten()
 void Spiele::teamAuswahlBetreten()
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	größe2 = größe4;
-	pos2 = pos4;
-	animation |= 0x10;
+    begPos = pos;
+    begGröße = gr;
+    größe2 = größe4;
+    pos2 = pos4;
+    animation |= 0x10;
 }
 }
 
 
 void Spiele::teamAuswahlInit( SpielerTeamStruktur *sts )
 void Spiele::teamAuswahlInit( SpielerTeamStruktur *sts )
 {
 {
-	int karteId = 0;
-	if( jetzt == 3 )
-		karteId = anmeldung->getKarteId();
-	if( jetzt == 4 )
-		karteId = gruppe->getKarteId();
-	teamAuswahl->setKarteId( karteId );
-	teamAuswahl->initSTS( sts );
+    int karteId = 0;
+    if( jetzt == 3 )
+        karteId = anmeldung->getKarteId();
+    if( jetzt == 4 )
+        karteId = gruppe->getKarteId();
+    teamAuswahl->setKarteId( karteId );
+    teamAuswahl->initSTS( sts );
 }
 }
 
 
 void Spiele::teamAuswahlAddSpieler( int accountId )
 void Spiele::teamAuswahlAddSpieler( int accountId )
 {
 {
-	teamAuswahl->addSpieler( accountId );
+    teamAuswahl->addSpieler( accountId );
 }
 }
 
 
 void Spiele::teamAuswahlRemoveSpieler( int accountId )
 void Spiele::teamAuswahlRemoveSpieler( int accountId )
 {
 {
-	teamAuswahl->removeSpieler( accountId );
+    teamAuswahl->removeSpieler( accountId );
 }
 }
 
 
 void Spiele::teamAuswahlSpielerWehseltTeam( int accountId, int spielerNummer )
 void Spiele::teamAuswahlSpielerWehseltTeam( int accountId, int spielerNummer )
 {
 {
-	teamAuswahl->setSpielerNummer( accountId, spielerNummer );
+    teamAuswahl->setSpielerNummer( accountId, spielerNummer );
 }
 }
 
 
 void Spiele::teamAuswahlChatNachricht( char *nachricht )
 void Spiele::teamAuswahlChatNachricht( char *nachricht )
 {
 {
-	teamAuswahl->addNachricht( nachricht );
+    teamAuswahl->addNachricht( nachricht );
 }
 }
 
 
 void Spiele::teamAuswahlAbbrechen()
 void Spiele::teamAuswahlAbbrechen()
 {
 {
-	begPos = pos;
-	begGröße = gr;
-	größe2.x = 800;
-	größe2.y = 500;
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	animation |= 0x20;
+    begPos = pos;
+    begGröße = gr;
+    größe2.x = 800;
+    größe2.y = 500;
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    animation |= 0x20;
 }
 }
 
 
 void Spiele::statistikNachricht( int län, char *bytes )
 void Spiele::statistikNachricht( int län, char *bytes )
 {
 {
-	statistik->nachricht( län, bytes );
+    statistik->nachricht( län, bytes );
 }
 }
 
 
 void Spiele::ladeSpielStatistik( int karteId )
 void Spiele::ladeSpielStatistik( int karteId )
 {
 {
-	pos = pos1;
-	gr = größe1;
-	größe2 = Punkt( 800, 500 );
-	pos2 = bildschirmGröße / 2 - größe2 / 2;
-	teamAuswahl->setSichtbar( 0, 1 );
-	animation = 0;
-	sichtbar = 0;
-	alpha = 0;
-	jetzt = 6;
-	statistik->setSpielArt( infoClient->getSpielId( karteId ) );
-	setSichtbar( 1 );
+    pos = pos1;
+    gr = größe1;
+    größe2 = Punkt( 800, 500 );
+    pos2 = bildschirmGröße / 2 - größe2 / 2;
+    teamAuswahl->setSichtbar( 0, 1 );
+    animation = 0;
+    sichtbar = 0;
+    alpha = 0;
+    jetzt = 6;
+    statistik->setSpielArt( infoClient->getSpielId( karteId ) );
+    setSichtbar( 1 );
 }
 }
 
 
 bool Spiele::tick( double tickVal )
 bool Spiele::tick( double tickVal )
 {
 {
-	rend |= spielAuswahl->tick( tickVal );
-	rend |= karteAuswahl->tick( tickVal );
-	rend |= anmeldung->tick( tickVal );
-	rend |= gruppe->tick( tickVal );
-	rend |= teamAuswahl->tick( tickVal );
-	rend |= statistik->tick( tickVal );
-	rend |= oben->tick( tickVal );
-	rend |= rechts->tick( tickVal );
-	rend |= unten->tick( tickVal );
-	rend |= links->tick( tickVal );
-	if( jetzt == 6 && !statistik->istSichtbar() )
-	{
-		spielAuswahl->setSichtbar( 1 );
-		jetzt = 1;
-		statistik->reset();
-	}
-	tickVal2 += tickVal;
-	if( tickVal2 >= 1 / 60.0 )
-	{
-		tickVal2 -= 1 / 60.0;
-		if( ladenAlpha && ladeAnimation->zAnimationData() )
-		{
-			rend = 1;
-			ladenJetzt++;
-			if( ladenJetzt >= ladeAnimation->zAnimationData()->getBildAnzahl() )
-				ladenJetzt = 0;
-		}
-	}
-	this->tickVal += tickVal * 150;
-	int val = ( int )this->tickVal;
-	if( val < 1 )
-	{
-		bool ret = rend;
-		rend = 0;
-		return ret;
-	}
-	this->tickVal -= val;
-	if( ( animation | 0x1 ) == animation ) // Einblenden
-	{
-		if( prozent1 != 100 )
-		{
-			prozent1 += val;
-			if( prozent1 >= 100 )
-			{
-				prozent1 = 100;
-				if( !jetzt )
-				{
-					spielAuswahl->setSichtbar( 1 );
-					jetzt = 1;
-				}
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
-		}
-		else if( alpha != 255 )
-		{
-			alpha += val * 2;
-			if( alpha >= 255 || ( animation | 0x2 ) == animation )
-			{
-				alpha = 255;
-				animation &= ~0x1;
-				sichtbar = 1;
-				prozent1 = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x2 ) == animation ) // ausblenden
-	{
-		if( alpha != 0 )
-		{
-			alpha -= val * 2;
-			if( alpha < 0 )
-				alpha = 0;
-		}
-		else
-		{
-			prozent2 += val;
-			if( prozent2 > 100 )
-				prozent2 = 100;
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
-			if( prozent2 == 100 )
-			{
-				prozent2 = 0;
-				animation &= ~0x2;
-				sichtbar = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x4 ) == animation ) // Gruppe betreten
-	{
-		if( ladenAlpha < 255 && !prozent3 )
-		{
-			alpha -= val * 3;
-			if( alpha < 0 )
-				alpha = 0;
-			ladenAlpha += val * 3;
-			if( ladenAlpha >= 255 )
-			{
-				ladenAlpha = 255;
-				if( jetzt == 1 )
-					spielAuswahl->setSichtbar( 0 );
-				if( jetzt == 2 )
-					karteAuswahl->setSichtbar( 0 );
-				if( jetzt == 6 )
-					statistik->verlassen();
-			}
-		}
-		else if( ladenAlpha == 255 && prozent3 != 100 )
-		{
-			prozent3 += val;
-			if( prozent3 >= 100 )
-			{
-				prozent3 = 100;
-				gruppe->setSichtbar( 1 );
-				jetzt = 4;
-				if( spielGefundenB )
-				{
-					spielGefundenB = 0;
-					gruppe->spielGefunden();
-				}
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos3 - begPos ) / 100.0 ) * prozent3 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe3 - begGröße ) / 100.0 ) * prozent3 );
-		}
-		else if( prozent3 == 100 )
-		{
-			alpha += val * 3;
-			if( alpha > 255 )
-				alpha = 255;
-			ladenAlpha -= val * 3;
-			if( ladenAlpha <= 0 )
-			{
-				ladenAlpha = 0;
-				animation &= ~0x4;
-				prozent3 = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x8 ) == animation ) // Gruppe Verlassen
-	{
-		if( ladenAlpha < 255 && prozent4 == 0 )
-		{
-			alpha -= val * 3;
-			if( alpha < 0 )
-				alpha = 0;
-			ladenAlpha += val * 3;
-			if( ladenAlpha >= 255 )
-			{
-				ladenAlpha = 255;
-				gruppe->setSichtbar( 0 );
-			}
-		}
-		else if( ladenAlpha == 255 && prozent4 != 100 )
-		{
-			prozent4 += val;
-			if( prozent4 >= 100 )
-			{
-				prozent4 = 100;
-				spielAuswahl->setSichtbar( 1 );
-				jetzt = 1;
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent4 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent4 );
-		}
-		else if( prozent4 == 100 )
-		{
-			alpha += val * 3;
-			if( alpha > 255 )
-				alpha = 255;
-			ladenAlpha -= val * 3;
-			if( ladenAlpha <= 0 )
-			{
-				ladenAlpha = 0;
-				animation &= ~0x8;
-				prozent4 = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x10 ) == animation ) // Team Auswahl betreten
-	{
-		if( ladenAlpha < 255 && !prozent5 )
-		{
-			alpha -= val * 3;
-			if( alpha < 0 )
-				alpha = 0;
-			ladenAlpha += val * 3;
-			if( ladenAlpha >= 255 )
-			{
-				ladenAlpha = 255;
-				if( jetzt == 1 )
-					spielAuswahl->setSichtbar( 0 );
-				if( jetzt == 2 )
-					karteAuswahl->setSichtbar( 0 );
-			}
-		}
-		else if( ladenAlpha == 255 && prozent5 != 100 )
-		{
-			prozent5 += val;
-			if( prozent5 >= 100 )
-			{
-				prozent5 = 100;
-				gruppe->setSichtbar( 0 );
-				anmeldung->setSichtbar( 0 );
-				teamAuswahl->setSichtbar( 1 );
-				jetzt = 5;
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos4 - begPos ) / 100.0 ) * prozent5 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe4 - begGröße ) / 100.0 ) * prozent5 );
-		}
-		else if( prozent5 == 100 )
-		{
-			alpha += val * 3;
-			if( alpha > 255 )
-				alpha = 255;
-			ladenAlpha -= val * 3;
-			if( ladenAlpha <= 0 )
-			{
-				ladenAlpha = 0;
-				animation &= ~0x10;
-				prozent5 = 0;
-			}
-		}
-		rend = 1;
-	}
-	if( ( animation | 0x20 ) == animation ) // Team Auswahl Verlassen
-	{
-		if( ladenAlpha < 255 && prozent6 == 0 )
-		{
-			alpha -= val * 3;
-			if( alpha < 0 )
-				alpha = 0;
-			ladenAlpha += val * 3;
-			if( ladenAlpha >= 255 )
-			{
-				ladenAlpha = 255;
-				teamAuswahl->setSichtbar( 0 );
-			}
-		}
-		else if( ladenAlpha == 255 && prozent6 != 100 )
-		{
-			prozent6 += val;
-			if( prozent6 >= 100 )
-			{
-				prozent6 = 100;
-				spielAuswahl->setSichtbar( 1 );
-				jetzt = 1;
-			}
-			pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent6 );
-			gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent6 );
-		}
-		else if( prozent6 == 100 )
-		{
-			alpha += val * 3;
-			if( alpha > 255 )
-				alpha = 255;
-			ladenAlpha -= val * 3;
-			if( ladenAlpha <= 0 )
-			{
-				ladenAlpha = 0;
-				animation &= ~0x20;
-				prozent6 = 0;
-			}
-		}
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= spielAuswahl->tick( tickVal );
+    rend |= karteAuswahl->tick( tickVal );
+    rend |= anmeldung->tick( tickVal );
+    rend |= gruppe->tick( tickVal );
+    rend |= teamAuswahl->tick( tickVal );
+    rend |= statistik->tick( tickVal );
+    rend |= oben->tick( tickVal );
+    rend |= rechts->tick( tickVal );
+    rend |= unten->tick( tickVal );
+    rend |= links->tick( tickVal );
+    if( jetzt == 6 && !statistik->istSichtbar() )
+    {
+        spielAuswahl->setSichtbar( 1 );
+        jetzt = 1;
+        statistik->reset();
+    }
+    tickVal2 += tickVal;
+    if( tickVal2 >= 1 / 60.0 )
+    {
+        tickVal2 -= 1 / 60.0;
+        if( ladenAlpha && ladeAnimation->zAnimationData() )
+        {
+            rend = 1;
+            ladenJetzt++;
+            if( ladenJetzt >= ladeAnimation->zAnimationData()->getBildAnzahl() )
+                ladenJetzt = 0;
+        }
+    }
+    this->tickVal += tickVal * 150;
+    int val = (int)this->tickVal;
+    if( val < 1 )
+    {
+        bool ret = rend;
+        rend = 0;
+        return ret;
+    }
+    this->tickVal -= val;
+    if( ( animation | 0x1 ) == animation ) // Einblenden
+    {
+        if( prozent1 != 100 )
+        {
+            prozent1 += val;
+            if( prozent1 >= 100 )
+            {
+                prozent1 = 100;
+                if( !jetzt )
+                {
+                    spielAuswahl->setSichtbar( 1 );
+                    jetzt = 1;
+                }
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );
+        }
+        else if( alpha != 255 )
+        {
+            alpha += val * 2;
+            if( alpha >= 255 || ( animation | 0x2 ) == animation )
+            {
+                alpha = 255;
+                animation &= ~0x1;
+                sichtbar = 1;
+                prozent1 = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x2 ) == animation ) // ausblenden
+    {
+        if( alpha != 0 )
+        {
+            alpha -= val * 2;
+            if( alpha < 0 )
+                alpha = 0;
+        }
+        else
+        {
+            prozent2 += val;
+            if( prozent2 > 100 )
+                prozent2 = 100;
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 );
+            if( prozent2 == 100 )
+            {
+                prozent2 = 0;
+                animation &= ~0x2;
+                sichtbar = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x4 ) == animation ) // Gruppe betreten
+    {
+        if( ladenAlpha < 255 && !prozent3 )
+        {
+            alpha -= val * 3;
+            if( alpha < 0 )
+                alpha = 0;
+            ladenAlpha += val * 3;
+            if( ladenAlpha >= 255 )
+            {
+                ladenAlpha = 255;
+                if( jetzt == 1 )
+                    spielAuswahl->setSichtbar( 0 );
+                if( jetzt == 2 )
+                    karteAuswahl->setSichtbar( 0 );
+                if( jetzt == 6 )
+                    statistik->verlassen();
+            }
+        }
+        else if( ladenAlpha == 255 && prozent3 != 100 )
+        {
+            prozent3 += val;
+            if( prozent3 >= 100 )
+            {
+                prozent3 = 100;
+                gruppe->setSichtbar( 1 );
+                jetzt = 4;
+                if( spielGefundenB )
+                {
+                    spielGefundenB = 0;
+                    gruppe->spielGefunden();
+                }
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos3 - begPos ) / 100.0 ) * prozent3 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe3 - begGröße ) / 100.0 ) * prozent3 );
+        }
+        else if( prozent3 == 100 )
+        {
+            alpha += val * 3;
+            if( alpha > 255 )
+                alpha = 255;
+            ladenAlpha -= val * 3;
+            if( ladenAlpha <= 0 )
+            {
+                ladenAlpha = 0;
+                animation &= ~0x4;
+                prozent3 = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x8 ) == animation ) // Gruppe Verlassen
+    {
+        if( ladenAlpha < 255 && prozent4 == 0 )
+        {
+            alpha -= val * 3;
+            if( alpha < 0 )
+                alpha = 0;
+            ladenAlpha += val * 3;
+            if( ladenAlpha >= 255 )
+            {
+                ladenAlpha = 255;
+                gruppe->setSichtbar( 0 );
+            }
+        }
+        else if( ladenAlpha == 255 && prozent4 != 100 )
+        {
+            prozent4 += val;
+            if( prozent4 >= 100 )
+            {
+                prozent4 = 100;
+                spielAuswahl->setSichtbar( 1 );
+                jetzt = 1;
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent4 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent4 );
+        }
+        else if( prozent4 == 100 )
+        {
+            alpha += val * 3;
+            if( alpha > 255 )
+                alpha = 255;
+            ladenAlpha -= val * 3;
+            if( ladenAlpha <= 0 )
+            {
+                ladenAlpha = 0;
+                animation &= ~0x8;
+                prozent4 = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x10 ) == animation ) // Team Auswahl betreten
+    {
+        if( ladenAlpha < 255 && !prozent5 )
+        {
+            alpha -= val * 3;
+            if( alpha < 0 )
+                alpha = 0;
+            ladenAlpha += val * 3;
+            if( ladenAlpha >= 255 )
+            {
+                ladenAlpha = 255;
+                if( jetzt == 1 )
+                    spielAuswahl->setSichtbar( 0 );
+                if( jetzt == 2 )
+                    karteAuswahl->setSichtbar( 0 );
+            }
+        }
+        else if( ladenAlpha == 255 && prozent5 != 100 )
+        {
+            prozent5 += val;
+            if( prozent5 >= 100 )
+            {
+                prozent5 = 100;
+                gruppe->setSichtbar( 0 );
+                anmeldung->setSichtbar( 0 );
+                teamAuswahl->setSichtbar( 1 );
+                jetzt = 5;
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos4 - begPos ) / 100.0 ) * prozent5 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe4 - begGröße ) / 100.0 ) * prozent5 );
+        }
+        else if( prozent5 == 100 )
+        {
+            alpha += val * 3;
+            if( alpha > 255 )
+                alpha = 255;
+            ladenAlpha -= val * 3;
+            if( ladenAlpha <= 0 )
+            {
+                ladenAlpha = 0;
+                animation &= ~0x10;
+                prozent5 = 0;
+            }
+        }
+        rend = 1;
+    }
+    if( ( animation | 0x20 ) == animation ) // Team Auswahl Verlassen
+    {
+        if( ladenAlpha < 255 && prozent6 == 0 )
+        {
+            alpha -= val * 3;
+            if( alpha < 0 )
+                alpha = 0;
+            ladenAlpha += val * 3;
+            if( ladenAlpha >= 255 )
+            {
+                ladenAlpha = 255;
+                teamAuswahl->setSichtbar( 0 );
+            }
+        }
+        else if( ladenAlpha == 255 && prozent6 != 100 )
+        {
+            prozent6 += val;
+            if( prozent6 >= 100 )
+            {
+                prozent6 = 100;
+                spielAuswahl->setSichtbar( 1 );
+                jetzt = 1;
+            }
+            pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent6 );
+            gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent6 );
+        }
+        else if( prozent6 == 100 )
+        {
+            alpha += val * 3;
+            if( alpha > 255 )
+                alpha = 255;
+            ladenAlpha -= val * 3;
+            if( ladenAlpha <= 0 )
+            {
+                ladenAlpha = 0;
+                animation &= ~0x20;
+                prozent6 = 0;
+            }
+        }
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void Spiele::doPublicMausEreignis( MausEreignis &me )
 void Spiele::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	if( !sichtbar )
-		return;
-	if( animation )
-		return;
-	int mx = me.mx;
-	int my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	int ak = 0;
-	bool tmp = me.verarbeitet;
-	oben->doPublicMausEreignis( me );
-	ak = me.verarbeitet ? 1 : 0;
-	links->doPublicMausEreignis( me );
-	ak = me.verarbeitet && !ak ? 2 : ak;
-	unten->doPublicMausEreignis( me );
-	ak = me.verarbeitet && !ak ? 3 : ak;
-	rechts->doPublicMausEreignis( me );
-	ak = me.verarbeitet && !ak ? 4 : ak;
-	if( tmp )
-		ak = 0;
-	switch( jetzt )
-	{
-	case 1: // Spiel Auswahl
-		if( spielAuswahl )
-		{
-			spielAuswahl->doPublicMausEreignis( me );
-			if( spielAuswahl->hatAuswahl() && spielAuswahl->istAuswahlErlubt() )
-				rechts->addStyle( Knopf::Style::Erlaubt );
-			else
-				rechts->removeStyle( Knopf::Style::Erlaubt );
-			if( !spielAuswahl->getSeite() )
-				oben->removeStyle( Knopf::Style::Erlaubt );
-			else
-				oben->addStyle( Knopf::Style::Erlaubt );
-			if( spielAuswahl->getSeite() < spielAuswahl->getSeiteAnzahl() - 1 )
-				unten->addStyle( Knopf::Style::Erlaubt );
-			else
-				unten->removeStyle( Knopf::Style::Erlaubt );
-			links->removeStyle( Knopf::Style::Erlaubt );
-			if( me.id != ME_RLinks )
-				break;
-			switch( ak )
-			{
-			case 1: // oben Klick
-				spielAuswahl->blättern( 1 );
-				break;
-			case 3: // unten Klick
-				spielAuswahl->blättern( 0 );
-				break;
-			case 4: // rehts Klick
-				if( rechts->hatStyle( Knopf::Style::Erlaubt ) )
-				{
-					karteAuswahl->setSpielId( spielAuswahl->zAuswahl()->getSpielId() );
-					spielAuswahl->setSichtbar( 0 );
-					karteAuswahl->setSichtbar( 1 );
-					jetzt = 2;
-				}
-				break;
-			}
-		}
-		break;
-	case 2: // Karten Auswahl
-		if( karteAuswahl )
-		{
-			karteAuswahl->doPublicMausEreignis( me );
-			rechts->removeStyle( Knopf::Style::Erlaubt );
-			if( !karteAuswahl->getSeite() )
-				oben->removeStyle( Knopf::Style::Erlaubt );
-			else
-				oben->addStyle( Knopf::Style::Erlaubt );
-			if( karteAuswahl->getSeite() < karteAuswahl->getSeiteAnzahl() - 1 )
-				unten->addStyle( Knopf::Style::Erlaubt );
-			else
-				unten->removeStyle( Knopf::Style::Erlaubt );
-			links->addStyle( Knopf::Style::Erlaubt );
-			if( me.id != ME_RLinks )
-				break;
-			switch( ak )
-			{
-			case 1: // oben Klick
-				karteAuswahl->blättern( 1 );
-				break;
-			case 2: // links Klick
-				karteAuswahl->setSichtbar( 0 );
-				spielAuswahl->setSichtbar( 1 );
-				jetzt = 1;
-				break;
-			case 3: // unten Klick
-				karteAuswahl->blättern( 0 );
-				break;
-			}
-		}
-		break;
-	case 3: // Anmeldung
-		anmeldung->doPublicMausEreignis( me );
-		break;
-	case 4: // Gruppe
-		gruppe->doPublicMausEreignis( me );
-		break;
-	case 5: // TeamAuswahl
-		teamAuswahl->doPublicMausEreignis( me );
-		break;
-	case 6:
-		statistik->doPublicMausEreignis( me );
-		break;
-	}
-	me.mx = mx;
-	me.my = my;
+    if( !sichtbar )
+        return;
+    if( animation )
+        return;
+    int mx = me.mx;
+    int my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    int ak = 0;
+    bool tmp = me.verarbeitet;
+    oben->doPublicMausEreignis( me );
+    ak = me.verarbeitet ? 1 : 0;
+    links->doPublicMausEreignis( me );
+    ak = me.verarbeitet && !ak ? 2 : ak;
+    unten->doPublicMausEreignis( me );
+    ak = me.verarbeitet && !ak ? 3 : ak;
+    rechts->doPublicMausEreignis( me );
+    ak = me.verarbeitet && !ak ? 4 : ak;
+    if( tmp )
+        ak = 0;
+    switch( jetzt )
+    {
+    case 1: // Spiel Auswahl
+        if( spielAuswahl )
+        {
+            spielAuswahl->doPublicMausEreignis( me );
+            if( spielAuswahl->hatAuswahl() && spielAuswahl->istAuswahlErlubt() )
+                rechts->addStyle( Knopf::Style::Erlaubt );
+            else
+                rechts->removeStyle( Knopf::Style::Erlaubt );
+            if( !spielAuswahl->getSeite() )
+                oben->removeStyle( Knopf::Style::Erlaubt );
+            else
+                oben->addStyle( Knopf::Style::Erlaubt );
+            if( spielAuswahl->getSeite() < spielAuswahl->getSeiteAnzahl() - 1 )
+                unten->addStyle( Knopf::Style::Erlaubt );
+            else
+                unten->removeStyle( Knopf::Style::Erlaubt );
+            links->removeStyle( Knopf::Style::Erlaubt );
+            if( me.id != ME_RLinks )
+                break;
+            switch( ak )
+            {
+            case 1: // oben Klick
+                spielAuswahl->blättern( 1 );
+                break;
+            case 3: // unten Klick
+                spielAuswahl->blättern( 0 );
+                break;
+            case 4: // rehts Klick
+                if( rechts->hatStyle( Knopf::Style::Erlaubt ) )
+                {
+                    karteAuswahl->setSpielId( spielAuswahl->zAuswahl()->getSpielId() );
+                    spielAuswahl->setSichtbar( 0 );
+                    karteAuswahl->setSichtbar( 1 );
+                    jetzt = 2;
+                }
+                break;
+            }
+        }
+        break;
+    case 2: // Karten Auswahl
+        if( karteAuswahl )
+        {
+            karteAuswahl->doPublicMausEreignis( me );
+            rechts->removeStyle( Knopf::Style::Erlaubt );
+            if( !karteAuswahl->getSeite() )
+                oben->removeStyle( Knopf::Style::Erlaubt );
+            else
+                oben->addStyle( Knopf::Style::Erlaubt );
+            if( karteAuswahl->getSeite() < karteAuswahl->getSeiteAnzahl() - 1 )
+                unten->addStyle( Knopf::Style::Erlaubt );
+            else
+                unten->removeStyle( Knopf::Style::Erlaubt );
+            links->addStyle( Knopf::Style::Erlaubt );
+            if( me.id != ME_RLinks )
+                break;
+            switch( ak )
+            {
+            case 1: // oben Klick
+                karteAuswahl->blättern( 1 );
+                break;
+            case 2: // links Klick
+                karteAuswahl->setSichtbar( 0 );
+                spielAuswahl->setSichtbar( 1 );
+                jetzt = 1;
+                break;
+            case 3: // unten Klick
+                karteAuswahl->blättern( 0 );
+                break;
+            }
+        }
+        break;
+    case 3: // Anmeldung
+        anmeldung->doPublicMausEreignis( me );
+        break;
+    case 4: // Gruppe
+        gruppe->doPublicMausEreignis( me );
+        break;
+    case 5: // TeamAuswahl
+        teamAuswahl->doPublicMausEreignis( me );
+        break;
+    case 6:
+        statistik->doPublicMausEreignis( me );
+        break;
+    }
+    me.mx = mx;
+    me.my = my;
 }
 }
 
 
 void Spiele::doTastaturEreignis( TastaturEreignis &te )
 void Spiele::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( !sichtbar )
-		return;
-	switch( jetzt )
-	{
-	case 1:
+    if( !sichtbar )
+        return;
+    switch( jetzt )
+    {
+    case 1:
 
 
-		break;
-	case 2:
+        break;
+    case 2:
 
 
-		break;
-	case 3:
+        break;
+    case 3:
 
 
-		break;
-	case 4:
-		gruppe->doTastaturEreignis( te );
-		break;
-	case 5:
-		teamAuswahl->doTastaturEreignis( te );
-		break;
-	case 6:
-		statistik->doTastaturEreignis( te );
-	}
+        break;
+    case 4:
+        gruppe->doTastaturEreignis( te );
+        break;
+    case 5:
+        teamAuswahl->doTastaturEreignis( te );
+        break;
+    case 6:
+        statistik->doTastaturEreignis( te );
+    }
 }
 }
 
 
 void Spiele::render( Bild &zRObj )
 void Spiele::render( Bild &zRObj )
 {
 {
-	if( pos == pos1 )
-		return;
-	int x = pos.x;
-	int y = pos.y;
-	int br = gr.x;
-	int hö = gr.y;
-	if( !zRObj.setDrawOptions( x, y, br, hö ) )
-		return;
-	rahmen->setSize( br, hö );
-	rahmen->render( zRObj );
-	int rbr = rahmen->getRBreite();
-	zRObj.setAlpha( (unsigned char)alpha );
-	if( jetzt == 1 || jetzt == 2 )
-	{
-		oben->render( zRObj );
-		links->render( zRObj );
-		unten->render( zRObj );
-		rechts->render( zRObj );
-	}
-	if( !zRObj.setDrawOptions( rbr, rbr, br - rbr * 2, hö - rbr * 2 ) )
-	{
-		zRObj.releaseDrawOptions();
-		zRObj.releaseAlpha();
-		return;
-	}
-	if( jetzt != 4 && jetzt != 5 )
-	{
-		spielAuswahl->render( zRObj );
-		karteAuswahl->render( zRObj );
-		anmeldung->render( zRObj );
-	}
-	if( jetzt != 5 )
-		gruppe->render( zRObj );
-	teamAuswahl->render( zRObj );
-	statistik->render( zRObj );
-	zRObj.releaseDrawOptions();
-	zRObj.releaseAlpha();
-	if( ladenAlpha && ladeAnimation->zAnimationData() )
-	{
-		zRObj.setAlpha( ladenAlpha );
-		zRObj.drawBild( br / 2 - 25, hö / 2 - 25, 50, 50, *ladeAnimation->zAnimationData()->zBild( ladenJetzt ) );
-		zRObj.releaseAlpha();
-	}
-	zRObj.releaseDrawOptions();
+    if( pos == pos1 )
+        return;
+    int x = pos.x;
+    int y = pos.y;
+    int br = gr.x;
+    int hö = gr.y;
+    if( !zRObj.setDrawOptions( x, y, br, hö ) )
+        return;
+    rahmen->setSize( br, hö );
+    rahmen->render( zRObj );
+    int rbr = rahmen->getRBreite();
+    zRObj.setAlpha( (unsigned char)alpha );
+    if( jetzt == 1 || jetzt == 2 )
+    {
+        oben->render( zRObj );
+        links->render( zRObj );
+        unten->render( zRObj );
+        rechts->render( zRObj );
+    }
+    if( !zRObj.setDrawOptions( rbr, rbr, br - rbr * 2, hö - rbr * 2 ) )
+    {
+        zRObj.releaseDrawOptions();
+        zRObj.releaseAlpha();
+        return;
+    }
+    if( jetzt != 4 && jetzt != 5 )
+    {
+        spielAuswahl->render( zRObj );
+        karteAuswahl->render( zRObj );
+        anmeldung->render( zRObj );
+    }
+    if( jetzt != 5 )
+        gruppe->render( zRObj );
+    teamAuswahl->render( zRObj );
+    statistik->render( zRObj );
+    zRObj.releaseDrawOptions();
+    zRObj.releaseAlpha();
+    if( ladenAlpha && ladeAnimation->zAnimationData() )
+    {
+        zRObj.setAlpha( ladenAlpha );
+        zRObj.drawBild( br / 2 - 25, hö / 2 - 25, 50, 50, *ladeAnimation->zAnimationData()->zBild( ladenJetzt ) );
+        zRObj.releaseAlpha();
+    }
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 // constant
 // constant
 bool Spiele::istAnimiert() const
 bool Spiele::istAnimiert() const
 {
 {
-	return animation != 0;
+    return animation != 0;
 }
 }
 
 
 bool Spiele::istSichtbar() const
 bool Spiele::istSichtbar() const
 {
 {
-	return sichtbar || prozent1 != 0;
+    return sichtbar || prozent1 != 0;
 }
 }
 
 
 int Spiele::getKarteId() const
 int Spiele::getKarteId() const
 {
 {
-	if( jetzt == 3 )
-		return anmeldung->getKarteId();
-	if( jetzt == 4 )
-		return gruppe->getKarteId();
-	if( jetzt == 5 )
-		return teamAuswahl->getKarteId();
-	return 0;
+    if( jetzt == 3 )
+        return anmeldung->getKarteId();
+    if( jetzt == 4 )
+        return gruppe->getKarteId();
+    if( jetzt == 5 )
+        return teamAuswahl->getKarteId();
+    return 0;
 }
 }
 
 
 int Spiele::getGruppeId() const
 int Spiele::getGruppeId() const
 {
 {
-	return gruppe->getGruppeId();
+    return gruppe->getGruppeId();
 }
 }
 
 
 SpielerTeamStruktur *Spiele::getSTS() const
 SpielerTeamStruktur *Spiele::getSTS() const
 {
 {
-	if( jetzt == 5 )
-		return teamAuswahl->getSTS();
-	return 0;
+    if( jetzt == 5 )
+        return teamAuswahl->getSTS();
+    return 0;
 }
 }

+ 84 - 84
KSGClient/NachLogin/Spiele/Spiele.h

@@ -16,97 +16,97 @@ using namespace Framework;
 
 
 namespace SpieleAnimation
 namespace SpieleAnimation
 {
 {
-	const int einfahren = 1;
-	const int ausblenden = 2;
+    const int einfahren = 1;
+    const int ausblenden = 2;
 }
 }
 
 
 class Spiele : public Zeichnung
 class Spiele : public Zeichnung
 {
 {
 private:
 private:
-	int animation;
-	Punkt begPos;
-	Punkt begGröße;
-	Punkt pos1;
-	Punkt größe1;
-	Punkt pos2;
-	Punkt größe2;
-	Punkt pos3;
-	Punkt größe3;
-	Punkt pos4;
-	Punkt größe4;
-	Punkt bildschirmGröße;
-	LRahmen *rahmen;
-	SpielAuswahlFenster *spielAuswahl;
-	KarteAuswahlFenster *karteAuswahl;
-	AngemeldetFenster *anmeldung;
-	GruppeFenster *gruppe;
-	TeamAuswahl *teamAuswahl;
-	SpielStatistik *statistik;
-	Knopf *oben;
-	Knopf *links;
-	Knopf *unten;
-	Knopf *rechts;
-	int alpha;
-	int ladenJetzt;
-	int ladenAlpha;
-	bool sichtbar;
-	int jetzt;
-	int prozent1;
-	int prozent2;
-	int prozent3;
-	int prozent4;
-	int prozent5;
-	int prozent6;
-	double tickVal;
-	double tickVal2;
-	bool spielGefundenB;
+    int animation;
+    Punkt begPos;
+    Punkt begGröße;
+    Punkt pos1;
+    Punkt größe1;
+    Punkt pos2;
+    Punkt größe2;
+    Punkt pos3;
+    Punkt größe3;
+    Punkt pos4;
+    Punkt größe4;
+    Punkt bildschirmGröße;
+    LRahmen *rahmen;
+    SpielAuswahlFenster *spielAuswahl;
+    KarteAuswahlFenster *karteAuswahl;
+    AngemeldetFenster *anmeldung;
+    GruppeFenster *gruppe;
+    TeamAuswahl *teamAuswahl;
+    SpielStatistik *statistik;
+    Knopf *oben;
+    Knopf *links;
+    Knopf *unten;
+    Knopf *rechts;
+    int alpha;
+    int ladenJetzt;
+    int ladenAlpha;
+    bool sichtbar;
+    int jetzt;
+    int prozent1;
+    int prozent2;
+    int prozent3;
+    int prozent4;
+    int prozent5;
+    int prozent6;
+    double tickVal;
+    double tickVal2;
+    bool spielGefundenB;
 
 
 public:
 public:
-	// Konstruktor
-	Spiele( Schrift *zSchrift, Fenster *zNachLoginFenster, int x );
-	// Destruktor
-	~Spiele();
-	// nicht constant
-	void setSichtbar( bool sicht );
-	void updateErlaubt();
-	void anmelden( int karteId );
-	void anmeldungAbbrechen();
-	void gruppeBetreten( int gruppeId );
-	void gruppeVerlassen();
-	void spielerBetrittGruppe( int gruppeId, int accountId );
-	void spielerVerlässtGruppe( int gruppeId, int accountId );
-	void gruppeNachricht( int gruppeId, char *nachricht );
-	void gruppeAnmelden( int gruppeId );
-	void gruppeAbmelden( int gruppeId );
-	void setGruppeSpielStarten( int gruppeId, bool spielStarten );
-	void setGruppeAdmin( int gruppeId, int admin );
-	void kickAusGruppe( int gruppeId );
-	void gruppeEinladungNeu( int gruppeId, int accountId );
-	void gruppeEinadungAbgelehnt( int gruppeId, int accountId );
-	void gruppeEinladungAbgebrochen( int gruppeId, int accountId );
-	void spielGefunden( int karteId );
-	void spielGefundenZeitVerbleibend( int sekunden );
-	void spielGefundenAbbruch();
-	void zurückInWarteschlange( int stunden, int minuten, int sekunden );
-	void teamAuswahlBetreten();
-	void teamAuswahlInit( SpielerTeamStruktur *sts );
-	void teamAuswahlAddSpieler( int accountId );
-	void teamAuswahlRemoveSpieler( int accountId );
-	void teamAuswahlSpielerWehseltTeam( int accountId, int spielerNummer );
-	void teamAuswahlChatNachricht( char *nachricht );
-	void teamAuswahlAbbrechen();
-	void statistikNachricht( int län, char *bytes );
-	void ladeSpielStatistik( int karteId );
-	bool tick( double tickVal ) override;
-	void doPublicMausEreignis( MausEreignis &me ) override;
-	void doTastaturEreignis( TastaturEreignis &te ) override;
-	void render( Bild &zRObj ) override;
-	// constant
-	bool istAnimiert() const;
-	bool istSichtbar() const;
-	int getKarteId() const;
-	int getGruppeId() const;
-	SpielerTeamStruktur *getSTS() const;
+    // Konstruktor
+    Spiele( Fenster *zNachLoginFenster, int x );
+    // Destruktor
+    ~Spiele();
+    // nicht constant
+    void setSichtbar( bool sicht );
+    void updateErlaubt();
+    void anmelden( int karteId );
+    void anmeldungAbbrechen();
+    void gruppeBetreten( int gruppeId );
+    void gruppeVerlassen();
+    void spielerBetrittGruppe( int gruppeId, int accountId );
+    void spielerVerlässtGruppe( int gruppeId, int accountId );
+    void gruppeNachricht( int gruppeId, char *nachricht );
+    void gruppeAnmelden( int gruppeId );
+    void gruppeAbmelden( int gruppeId );
+    void setGruppeSpielStarten( int gruppeId, bool spielStarten );
+    void setGruppeAdmin( int gruppeId, int admin );
+    void kickAusGruppe( int gruppeId );
+    void gruppeEinladungNeu( int gruppeId, int accountId );
+    void gruppeEinadungAbgelehnt( int gruppeId, int accountId );
+    void gruppeEinladungAbgebrochen( int gruppeId, int accountId );
+    void spielGefunden( int karteId );
+    void spielGefundenZeitVerbleibend( int sekunden );
+    void spielGefundenAbbruch();
+    void zurückInWarteschlange( int stunden, int minuten, int sekunden );
+    void teamAuswahlBetreten();
+    void teamAuswahlInit( SpielerTeamStruktur *sts );
+    void teamAuswahlAddSpieler( int accountId );
+    void teamAuswahlRemoveSpieler( int accountId );
+    void teamAuswahlSpielerWehseltTeam( int accountId, int spielerNummer );
+    void teamAuswahlChatNachricht( char *nachricht );
+    void teamAuswahlAbbrechen();
+    void statistikNachricht( int län, char *bytes );
+    void ladeSpielStatistik( int karteId );
+    bool tick( double tickVal ) override;
+    void doPublicMausEreignis( MausEreignis &me ) override;
+    void doTastaturEreignis( TastaturEreignis &te ) override;
+    void render( Bild &zRObj ) override;
+    // constant
+    bool istAnimiert() const;
+    bool istSichtbar() const;
+    int getKarteId() const;
+    int getGruppeId() const;
+    SpielerTeamStruktur *getSTS() const;
 };
 };
 
 
 #endif
 #endif

+ 159 - 177
KSGClient/NachLogin/Spiele/Statistik/SpielStatistik.cpp

@@ -2,268 +2,250 @@
 #include <Punkt.h>
 #include <Punkt.h>
 #include "../../../Global/Variablen.h"
 #include "../../../Global/Variablen.h"
 
 
-typedef SpielStatistikV* ( *GetStatistikKlasse )( void );
+typedef SpielStatistikV *( *GetStatistikKlasse )( void );
 
 
 // Inhalt der SpielStatistik Klasse aus SpielStatistik.h
 // Inhalt der SpielStatistik Klasse aus SpielStatistik.h
 // Konstruktor
 // Konstruktor
-SpielStatistik::SpielStatistik( Schrift *zSchrift )
-	: pos( 10, 10 ),
-	  gr( 780, 480 )
-{
-	stat = 0;
-	spielDll = 0;
-	la = (Animation2D*)ladeAnimation->dublizieren();
-	la->setPosition( 365, 215 );
-	la->setSichtbar( 0 );
-	schrift = zSchrift->getThis();
-	tickVal = 0;
-	sichtbar = 0;
-	alpha = 0;
-	spielArt = 0;
-	rend = 0;
-	ref = 1;
+SpielStatistik::SpielStatistik()
+    : ReferenceCounter(),
+    pos( 10, 10 ),
+    gr( 780, 480 )
+{
+    stat = 0;
+    spielDll = 0;
+    la = (Animation2D *)ladeAnimation->dublizieren();
+    la->setPosition( 365, 215 );
+    la->setSichtbar( 0 );
+    tickVal = 0;
+    sichtbar = 0;
+    alpha = 0;
+    spielArt = 0;
+    rend = 0;
 }
 }
 
 
 // Destruktor
 // Destruktor
 SpielStatistik::~SpielStatistik()
 SpielStatistik::~SpielStatistik()
 {
 {
-	if( stat )
-		stat->release();
-	if( spielDll )
-		FreeLibrary( spielDll );
-	la->release();
-	schrift->release();
+    if( stat )
+        stat->release();
+    if( spielDll )
+        FreeLibrary( spielDll );
+    la->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
 void SpielStatistik::setSpielArt( int spielArt )
 void SpielStatistik::setSpielArt( int spielArt )
 {
 {
-	if( this->spielArt )
-		return;
-	this->spielArt = spielArt;
-	la->setSichtbar( 1 );
-	Text *name = infoClient->getSpielName( spielArt );
-	if( !name )
-	{
-		this->spielArt = 0;
-		la->setSichtbar( 0 );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
-		return;
-	}
-	Text *pfad = new Text( "data/spiele/" );
-	pfad->append( name->getText() );
-	pfad->append( "/bin/" );
-	pfad->append( name );
-	pfad->append( ".dll" );
-	spielDll = LoadLibrary( pfad->getText() );
-	pfad->release();
-	if( !spielDll )
-	{
-		this->spielArt = 0;
-		la->setSichtbar( 0 );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
-		return;
-	}
-	GetStatistikKlasse gsk = (GetStatistikKlasse)GetProcAddress( spielDll, "GetStatistikKlasse" );
-	if( !gsk )
-	{
-		FreeLibrary( spielDll );
-		this->spielArt = 0;
-		la->setSichtbar( 0 );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
-		return;
-	}
-	stat = gsk();
-	if( !stat )
-	{
-		FreeLibrary( spielDll );
-		this->spielArt = 0;
-		la->setSichtbar( 0 );
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
-		return;
-	}
-	stat->setAccountId( loginClient->getAccountId() );
-	stat->setBilder( bilder );
-	stat->setRückrufFunktionen( spielStatistikAddNachrichtF, spielStatistikAddChatF, spielStatistikAddFreundF, spielStatistikAccountAnsehenF, spielStatistikIstFreundF, this );
-	stat->setSchrift( schrift->getThis() );
-	stat->setBildschirm( hauptScreen );
-	stat->setKlients( infoClient->getThis(), spielClient->getThis() );
-	stat->bereit();
+    if( this->spielArt )
+        return;
+    this->spielArt = spielArt;
+    la->setSichtbar( 1 );
+    Text *name = infoClient->getSpielName( spielArt );
+    if( !name )
+    {
+        this->spielArt = 0;
+        la->setSichtbar( 0 );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
+        return;
+    }
+    Text *pfad = new Text( "data/spiele/" );
+    pfad->append( name->getText() );
+    pfad->append( "/bin/" );
+    pfad->append( name );
+    pfad->append( ".dll" );
+    spielDll = LoadLibrary( pfad->getText() );
+    pfad->release();
+    if( !spielDll )
+    {
+        this->spielArt = 0;
+        la->setSichtbar( 0 );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
+        return;
+    }
+    GetStatistikKlasse gsk = (GetStatistikKlasse)GetProcAddress( spielDll, "GetStatistikKlasse" );
+    if( !gsk )
+    {
+        FreeLibrary( spielDll );
+        this->spielArt = 0;
+        la->setSichtbar( 0 );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
+        return;
+    }
+    stat = gsk();
+    if( !stat )
+    {
+        FreeLibrary( spielDll );
+        this->spielArt = 0;
+        la->setSichtbar( 0 );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
+        return;
+    }
+    stat->setAccountId( loginClient->getAccountId() );
+    stat->setBilder( bilder );
+    stat->setRückrufFunktionen( spielStatistikAddNachrichtF, spielStatistikAddChatF, spielStatistikAddFreundF, spielStatistikAccountAnsehenF, spielStatistikIstFreundF, this );
+    stat->setUIFactory( uiFactory );
+    stat->setKlients( dynamic_cast<KSGClient::InformationServerClient *>( infoClient->getThis() ), dynamic_cast<KSGClient::SpielServerClient *>( spielClient->getThis() ) );
+    stat->bereit();
 }
 }
 
 
 void SpielStatistik::nachricht( int län, char *bytes )
 void SpielStatistik::nachricht( int län, char *bytes )
 {
 {
-	if( stat )
-		stat->nachricht( län, bytes );
+    if( stat )
+        stat->nachricht( län, bytes );
 }
 }
 
 
 void SpielStatistik::reset()
 void SpielStatistik::reset()
 {
 {
-	spielArt = 0;
-	la->setSichtbar( 0 );
-	sichtbar = 0;
-	alpha = 0;
-	stat = stat->release();
-	FreeLibrary( spielDll );
-	spielDll = 0;
+    spielArt = 0;
+    la->setSichtbar( 0 );
+    sichtbar = 0;
+    alpha = 0;
+    stat = (SpielStatistikV *)stat->release();
+    FreeLibrary( spielDll );
+    spielDll = 0;
 }
 }
 
 
 void SpielStatistik::doPublicMausEreignis( MausEreignis &me )
 void SpielStatistik::doPublicMausEreignis( MausEreignis &me )
 {
 {
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	if( stat )
-		stat->doPublicMausEreignis( me );
-	me.mx += pos.x;
-	me.my += pos.y;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    if( stat )
+        stat->doPublicMausEreignis( me );
+    me.mx += pos.x;
+    me.my += pos.y;
 }
 }
 
 
 void SpielStatistik::doTastaturEreignis( TastaturEreignis &te )
 void SpielStatistik::doTastaturEreignis( TastaturEreignis &te )
 {
 {
-	if( stat )
-		stat->doTastaturEreignis( te );
+    if( stat )
+        stat->doTastaturEreignis( te );
 }
 }
 
 
 bool SpielStatistik::tick( double zeit )
 bool SpielStatistik::tick( double zeit )
 {
 {
-	if( stat && stat->getStatus() == 1 )
-	{
-		sichtbar = 1;
-		la->setSichtbar( 0 );
-	}
-	else
-		sichtbar = 0;
-	tickVal += zeit * 250;
-	int val = (int)tickVal;
-	if( val > 10 )
-		val = 10;
-	tickVal -= val;
-	if( val )
-	{
-		if( sichtbar && alpha != 255 )
-		{
-			if( alpha + val > 255 )
-				alpha = 255;
-			else
-				alpha += val;
-			rend = 1;
-		}
-		if( !sichtbar && alpha != 0 )
-		{
-			if( alpha - val < 0 )
-				alpha = 0;
-			else
-				alpha -= val;
-			rend = 1;
-		}
-	}
-	if( stat && sichtbar )
-		rend |= stat->tick( zeit );
-	rend |= la->tick( zeit );
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    if( stat && stat->getStatus() == 1 )
+    {
+        sichtbar = 1;
+        la->setSichtbar( 0 );
+    }
+    else
+        sichtbar = 0;
+    tickVal += zeit * 250;
+    int val = (int)tickVal;
+    if( val > 10 )
+        val = 10;
+    tickVal -= val;
+    if( val )
+    {
+        if( sichtbar && alpha != 255 )
+        {
+            if( alpha + val > 255 )
+                alpha = 255;
+            else
+                alpha += val;
+            rend = 1;
+        }
+        if( !sichtbar && alpha != 0 )
+        {
+            if( alpha - val < 0 )
+                alpha = 0;
+            else
+                alpha -= val;
+            rend = 1;
+        }
+    }
+    if( stat && sichtbar )
+        rend |= stat->tick( zeit );
+    rend |= la->tick( zeit );
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 }
 
 
 void SpielStatistik::render( Bild &zRObj )
 void SpielStatistik::render( Bild &zRObj )
 {
 {
-	if( !zRObj.setDrawOptions( pos, gr ) )
-		return;
-	la->render( zRObj );
-	zRObj.setAlpha( alpha );
-	if( stat )
-		stat->render( zRObj );
-	zRObj.releaseAlpha();
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( pos, gr ) )
+        return;
+    la->render( zRObj );
+    zRObj.setAlpha( alpha );
+    if( stat )
+        stat->render( zRObj );
+    zRObj.releaseAlpha();
+    zRObj.releaseDrawOptions();
 }
 }
 
 
 void SpielStatistik::addNachrichtF( Text *t, Text *n, Text *rp, Text *rn )
 void SpielStatistik::addNachrichtF( Text *t, Text *n, Text *rp, Text *rn )
 {
 {
-	nachLogin->zNachrichtenListe()->addNachricht( t, n, rp, rn );
+    nachLogin->zNachrichtenListe()->addNachricht( t, n, rp, rn );
 }
 }
 
 
 void SpielStatistik::addChatF( int acc )
 void SpielStatistik::addChatF( int acc )
 {
 {
-	nachLogin->zChatLeiste()->addChat( acc, 0 );
+    nachLogin->zChatLeiste()->addChat( acc, 0 );
 }
 }
 
 
 void SpielStatistik::addFreundF( int acc )
 void SpielStatistik::addFreundF( int acc )
 {
 {
-	if( !chatClient->freundesAnfrage( acc ) )
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Freundesanfrage konnte nicht gesendet werden." ), new Text( "Ok" ) );
-	else
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundesanfrage" ), new Text( "Es wurde eine Freundesanfrage an den Spieler gesendet." ), new Text( "Ok" ) );
+    if( !chatClient->freundesAnfrage( acc ) )
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Freundesanfrage konnte nicht gesendet werden." ), new Text( "Ok" ) );
+    else
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundesanfrage" ), new Text( "Es wurde eine Freundesanfrage an den Spieler gesendet." ), new Text( "Ok" ) );
 }
 }
 
 
 void SpielStatistik::accountAnsehenF( int acc )
 void SpielStatistik::accountAnsehenF( int acc )
 {
 {
-	if( nachLogin->zAccountAnsehenFenster()->setSpielerDetails( acc, 2 ) )
-	{
-		MausEreignis me = { ME_RLinks, 0, 0, 0, 1 };
-		nachLogin->zTitelLeiste()->druckAccountAnsehen( me );
-	}
+    if( nachLogin->zAccountAnsehenFenster()->setSpielerDetails( acc, 2 ) )
+    {
+        MausEreignis me = { ME_RLinks, 0, 0, 0, 1 };
+        nachLogin->zTitelLeiste()->druckAccountAnsehen( me );
+    }
 }
 }
 
 
 bool SpielStatistik::istFreundF( int acc )
 bool SpielStatistik::istFreundF( int acc )
 {
 {
-	return nachLogin->zFreundesListe()->istFreund( acc );
+    return nachLogin->zFreundesListe()->istFreund( acc );
 }
 }
 
 
 void SpielStatistik::verlassen()
 void SpielStatistik::verlassen()
 {
 {
-	if( stat )
-	    stat->verlassen();
+    if( stat )
+        stat->verlassen();
 }
 }
 
 
 // constant
 // constant
 bool SpielStatistik::istSichtbar()
 bool SpielStatistik::istSichtbar()
 {
 {
-	return sichtbar || alpha || la->istSichtbar();
-}
-
-// Reference Counting
-SpielStatistik *SpielStatistik::getThis()
-{
-	ref++;
-	return this;
-}
-
-SpielStatistik *SpielStatistik::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return sichtbar || alpha || la->istSichtbar();
 }
 }
 
 
 // Rückruf Funktionen
 // Rückruf Funktionen
 void spielStatistikAddNachrichtF( void *p, Text *t, Text *n, Text *rp, Text *rn )
 void spielStatistikAddNachrichtF( void *p, Text *t, Text *n, Text *rp, Text *rn )
 {
 {
-	if( p )
-		( (SpielStatistik*)p )->addNachrichtF( t, n, rp, rn );
+    if( p )
+        ( (SpielStatistik *)p )->addNachrichtF( t, n, rp, rn );
 }
 }
 
 
 void spielStatistikAddChatF( void *p, int acc )
 void spielStatistikAddChatF( void *p, int acc )
 {
 {
-	if( p )
-		( (SpielStatistik*)p )->addChatF( acc );
+    if( p )
+        ( (SpielStatistik *)p )->addChatF( acc );
 }
 }
 
 
 void spielStatistikAddFreundF( void *p, int acc )
 void spielStatistikAddFreundF( void *p, int acc )
 {
 {
-	if( p )
-		( (SpielStatistik*)p )->addFreundF( acc );
+    if( p )
+        ( (SpielStatistik *)p )->addFreundF( acc );
 }
 }
 
 
 void spielStatistikAccountAnsehenF( void *p, int acc )
 void spielStatistikAccountAnsehenF( void *p, int acc )
 {
 {
-	if( p )
-		( (SpielStatistik*)p )->accountAnsehenF( acc );
+    if( p )
+        ( (SpielStatistik *)p )->accountAnsehenF( acc );
 }
 }
 
 
 bool spielStatistikIstFreundF( void *p, int acc )
 bool spielStatistikIstFreundF( void *p, int acc )
 {
 {
-	if( p )
-		return ( (SpielStatistik*)p )->istFreundF( acc );
-	return 0;
+    if( p )
+        return ( (SpielStatistik *)p )->istFreundF( acc );
+    return 0;
 }
 }

+ 31 - 36
KSGClient/NachLogin/Spiele/Statistik/SpielStatistik.h

@@ -4,46 +4,41 @@
 #include <SpielStatistikV.h>
 #include <SpielStatistikV.h>
 #include <Animation.h>
 #include <Animation.h>
 
 
-class SpielStatistik
+class SpielStatistik : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	SpielStatistikV *stat;
-	Punkt pos;
-	Punkt gr;
-	HINSTANCE spielDll;
-	Animation2D *la;
-	Schrift *schrift;
-	double tickVal;
-	bool sichtbar;
-	unsigned char alpha;
-	int spielArt;
-	bool rend;
-	int ref;
+    SpielStatistikV *stat;
+    Punkt pos;
+    Punkt gr;
+    HINSTANCE spielDll;
+    Animation2D *la;
+    double tickVal;
+    bool sichtbar;
+    unsigned char alpha;
+    int spielArt;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	SpielStatistik( Schrift *zSchrift );
-	// Destruktor
-	~SpielStatistik();
-	// nicht constant
-	void setSpielArt( int spielArt );
-	void nachricht( int län, char *bytes );
-	void reset();
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	bool tick( double zeit );
-	void render( Bild &zRObj );
-	void addNachrichtF( Text *t, Text *n, Text *rp, Text *rn );
-	void addChatF( int acc );
-	void addFreundF( int acc );
-	void accountAnsehenF( int acc );
-	bool istFreundF( int acc );
-	void verlassen();
-	// constant
-	bool istSichtbar();
-	// Reference Counting
-	SpielStatistik *getThis();
-	SpielStatistik *release();
+    // Konstruktor
+    SpielStatistik();
+    // Destruktor
+    ~SpielStatistik();
+    // nicht constant
+    void setSpielArt( int spielArt );
+    void nachricht( int län, char *bytes );
+    void reset();
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double zeit );
+    void render( Bild &zRObj );
+    void addNachrichtF( Text *t, Text *n, Text *rp, Text *rn );
+    void addChatF( int acc );
+    void addFreundF( int acc );
+    void accountAnsehenF( int acc );
+    bool istFreundF( int acc );
+    void verlassen();
+    // constant
+    bool istSichtbar();
 };
 };
 
 
 // Rückruf Funktionen
 // Rückruf Funktionen

+ 61 - 166
KSGClient/NachLogin/Spiele/Team Auswahl/TeamAuswahl.cpp

@@ -8,39 +8,34 @@
 
 
 // Inhalt der TeamAuswahlListeSpieler Klasse aus TeamAuswahl.h
 // Inhalt der TeamAuswahlListeSpieler Klasse aus TeamAuswahl.h
 // Konstruktor
 // Konstruktor
-TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schrift *zSchrift, int accountId, int karteId )
+TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, int accountId, int karteId )
+    : ReferenceCounter()
 {
 {
     this->accountId = accountId;
     this->accountId = accountId;
     Text *n = infoClient->getSpielerName( accountId );
     Text *n = infoClient->getSpielerName( accountId );
-    name = initTextFeld( 1, 1, 99, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
+    name = initTextFeld( 1, 1, 99, 20, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
     n->release();
     n->release();
     if( accountId == loginClient->getAccountId() )
     if( accountId == loginClient->getAccountId() )
     {
     {
-        teamAuswahl = new AuswahlBox();
+        teamAuswahl = uiFactory.createAuswahlBox( uiFactory.initParam );
         teamAuswahl->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MultiStyled | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
         teamAuswahl->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MultiStyled | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
-        teamAuswahl->setRahmenFarbe( 0xFFFFFFFF );
-        teamAuswahl->setRahmenBreite( 1 );
         teamAuswahl->setPosition( 100, 1 );
         teamAuswahl->setPosition( 100, 1 );
         teamAuswahl->setSize( 150, 20 );
         teamAuswahl->setSize( 150, 20 );
-        teamAuswahl->setMaxAuskappHeight( 100 );
-        teamAuswahl->setSchriftZ( zSchrift->getThis() );
-        teamAuswahl->setHintergrundFarbe( 0xFF000000 );
-        teamAuswahl->setMausEreignis( _ret1ME );
         teamAuswahl->setEventParam( this );
         teamAuswahl->setEventParam( this );
         teamAuswahl->setEventAktion( TeamAuswahlListeSpielerTeamAuswahlE );
         teamAuswahl->setEventAktion( TeamAuswahlListeSpielerTeamAuswahlE );
     }
     }
     else
     else
-        team = initTextFeld( 100, 1, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
+        team = initTextFeld( 100, 1, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "" );
     Array< int > *statistik = new Array< int >();
     Array< int > *statistik = new Array< int >();
     infoClient->getSpielStatistik( accountId, infoClient->getSpielId( karteId ), statistik );
     infoClient->getSpielStatistik( accountId, infoClient->getSpielId( karteId ), statistik );
-    punkte = initTextFeld( 250, 1, 80, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Punkte: " );
+    punkte = initTextFeld( 250, 1, 80, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Punkte: " );
     punkte->zText()->append( statistik->hat( 3 ) ? statistik->get( 3 ) : 0 );
     punkte->zText()->append( statistik->hat( 3 ) ? statistik->get( 3 ) : 0 );
-    spiele = initTextFeld( 330, 1, 80, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " );
+    spiele = initTextFeld( 330, 1, 80, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " );
     spiele->zText()->append( statistik->hat( 0 ) ? statistik->get( 0 ) : 0 );
     spiele->zText()->append( statistik->hat( 0 ) ? statistik->get( 0 ) : 0 );
-    gewonnen = initTextFeld( 410, 1, 90, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " );
+    gewonnen = initTextFeld( 410, 1, 90, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " );
     gewonnen->zText()->append( statistik->hat( 1 ) ? statistik->get( 1 ) : 0 );
     gewonnen->zText()->append( statistik->hat( 1 ) ? statistik->get( 1 ) : 0 );
     statistik->release();
     statistik->release();
-    farbe = initTextFeld( 500, 1, 50, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Farbe:" );
+    farbe = initTextFeld( 500, 1, 50, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Farbe:" );
     spielerFarbe = 0;
     spielerFarbe = 0;
     rahmen = new LRahmen();
     rahmen = new LRahmen();
     rahmen->setSize( 581, 22 );
     rahmen->setSize( 581, 22 );
@@ -49,7 +44,6 @@ TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schr
     teamName = new Text( "" );
     teamName = new Text( "" );
     this->sts = sts;
     this->sts = sts;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -76,7 +70,7 @@ void TeamAuswahlListeSpieler::disable()
         teamAuswahl->removeStyle( AuswahlBox::Style::Erlaubt );
         teamAuswahl->removeStyle( AuswahlBox::Style::Erlaubt );
 }
 }
 
 
-void TeamAuswahlListeSpieler::spielerTeamAuswahlE( AuswahlBox * obj, int p1, int p2 )
+void TeamAuswahlListeSpieler::spielerTeamAuswahlE( AuswahlBox *obj, int p1, int p2 )
 {
 {
     Text *tmpTeamName = obj->zEintragText( p2 );
     Text *tmpTeamName = obj->zEintragText( p2 );
     if( !tmpTeamName->istGleich( teamName->getText() ) )
     if( !tmpTeamName->istGleich( teamName->getText() ) )
@@ -114,13 +108,13 @@ void TeamAuswahlListeSpieler::setFarbe( int farbe )
     rend = 1;
     rend = 1;
 }
 }
 
 
-void TeamAuswahlListeSpieler::setTeam( Text * zName )
+void TeamAuswahlListeSpieler::setTeam( Text *zName )
 {
 {
     teamName->setText( zName->getText() );
     teamName->setText( zName->getText() );
     rend = 1;
     rend = 1;
 }
 }
 
 
-void TeamAuswahlListeSpieler::setTeamErlaubt( Text * zName, bool erlaubt, int teamFarbe )
+void TeamAuswahlListeSpieler::setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe )
 {
 {
     if( accountId != loginClient->getAccountId() )
     if( accountId != loginClient->getAccountId() )
         return;
         return;
@@ -162,13 +156,13 @@ bool TeamAuswahlListeSpieler::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void TeamAuswahlListeSpieler::doPublicMausEreignis( MausEreignis & me )
+void TeamAuswahlListeSpieler::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( accountId == loginClient->getAccountId() )
     if( accountId == loginClient->getAccountId() )
         teamAuswahl->doPublicMausEreignis( me );
         teamAuswahl->doPublicMausEreignis( me );
 }
 }
 
 
-void TeamAuswahlListeSpieler::render( int yOff, Bild & zRObj )
+void TeamAuswahlListeSpieler::render( int yOff, Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 0, yOff, 581, 22 ) )
     if( !zRObj.setDrawOptions( 0, yOff, 581, 22 ) )
         return;
         return;
@@ -192,31 +186,17 @@ int TeamAuswahlListeSpieler::getAccountId() const
     return accountId;
     return accountId;
 }
 }
 
 
-// Reference Counting
-TeamAuswahlListeSpieler *TeamAuswahlListeSpieler::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamAuswahlListeSpieler *TeamAuswahlListeSpieler::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der TeamAuswahlListeTeam Klasse aus TeamAuswahl.h
 // Inhalt der TeamAuswahlListeTeam Klasse aus TeamAuswahl.h
 // Konstruktor
 // Konstruktor
-TeamAuswahlListeTeam::TeamAuswahlListeTeam( Schrift * zSchrift )
+TeamAuswahlListeTeam::TeamAuswahlListeTeam()
+    : ReferenceCounter()
 {
 {
     maxSpieler = 0;
     maxSpieler = 0;
     jetztSpieler = 0;
     jetztSpieler = 0;
     team = 0;
     team = 0;
-    name = initTextFeld( 0, 0, 300, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Team: " );
-    mjSpieler = initTextFeld( 300, 0, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler: 0/0" );
-    farbe = initTextFeld( 450, 0, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Team Farbe:" );
+    name = initTextFeld( 0, 0, 300, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Team: " );
+    mjSpieler = initTextFeld( 300, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler: 0/0" );
+    farbe = initTextFeld( 450, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Team Farbe:" );
     teamFarbe = 0;
     teamFarbe = 0;
     spieler = new RCArray< TeamAuswahlListeSpieler >();
     spieler = new RCArray< TeamAuswahlListeSpieler >();
     rahmen = new LRahmen();
     rahmen = new LRahmen();
@@ -232,7 +212,6 @@ TeamAuswahlListeTeam::TeamAuswahlListeTeam( Schrift * zSchrift )
     tickVal = 0;
     tickVal = 0;
     höhe = 22;
     höhe = 22;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -260,7 +239,7 @@ void TeamAuswahlListeTeam::setMaxSpieler( int maxSpieler )
     rend = 1;
     rend = 1;
 }
 }
 
 
-void TeamAuswahlListeTeam::setName( Text * name )
+void TeamAuswahlListeTeam::setName( Text *name )
 {
 {
     teamName->setText( name->getText() );
     teamName->setText( name->getText() );
     name->release();
     name->release();
@@ -280,7 +259,7 @@ void TeamAuswahlListeTeam::setTeam( int team )
     rend = 1;
     rend = 1;
 }
 }
 
 
-void TeamAuswahlListeTeam::addSpieler( TeamAuswahlListeSpieler * spieler )
+void TeamAuswahlListeTeam::addSpieler( TeamAuswahlListeSpieler *spieler )
 {
 {
     if( !jetztSpieler )
     if( !jetztSpieler )
         höhe++;
         höhe++;
@@ -308,7 +287,7 @@ void TeamAuswahlListeTeam::removeSpieler( int accountId )
         höhe = 22;
         höhe = 22;
 }
 }
 
 
-void TeamAuswahlListeTeam::setTeamErlaubt( Text * zName, bool erlaubt, int teamFarbe )
+void TeamAuswahlListeTeam::setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe )
 {
 {
     for( int i = 0; i < jetztSpieler; i++ )
     for( int i = 0; i < jetztSpieler; i++ )
         spieler->z( i )->setTeamErlaubt( zName, erlaubt, teamFarbe );
         spieler->z( i )->setTeamErlaubt( zName, erlaubt, teamFarbe );
@@ -351,7 +330,7 @@ bool TeamAuswahlListeTeam::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void TeamAuswahlListeTeam::doPublicMausEreignis( MausEreignis & me )
+void TeamAuswahlListeTeam::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int tmpX = me.mx;
     int tmpX = me.mx;
     int tmpY = me.my;
     int tmpY = me.my;
@@ -366,7 +345,7 @@ void TeamAuswahlListeTeam::doPublicMausEreignis( MausEreignis & me )
     me.my = tmpY;
     me.my = tmpY;
 }
 }
 
 
-void TeamAuswahlListeTeam::render( int yOff, Bild & zRObj )
+void TeamAuswahlListeTeam::render( int yOff, Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 50, yOff, 583, rahmen->getHeight() + 1 ) )
     if( !zRObj.setDrawOptions( 50, yOff, 583, rahmen->getHeight() + 1 ) )
         return;
         return;
@@ -439,24 +418,10 @@ TeamAuswahlListeSpieler *TeamAuswahlListeTeam::zSpielerDaten( int accountId ) co
     return 0;
     return 0;
 }
 }
 
 
-// Reference Counting
-TeamAuswahlListeTeam *TeamAuswahlListeTeam::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamAuswahlListeTeam *TeamAuswahlListeTeam::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der TeamAuswahlListe Klasse aus TeamAuswahl.h
 // Inhalt der TeamAuswahlListe Klasse aus TeamAuswahl.h
 // Konstruktor
 // Konstruktor
-TeamAuswahlListe::TeamAuswahlListe( Schrift * zSchrift, SpielerTeamStruktur * sts, int karteId )
+TeamAuswahlListe::TeamAuswahlListe( SpielerTeamStruktur *sts, int karteId )
+    : ReferenceCounter()
 {
 {
     rahmen = new LRahmen();
     rahmen = new LRahmen();
     rahmen->setSize( 698, 398 );
     rahmen->setSize( 698, 398 );
@@ -466,14 +431,14 @@ TeamAuswahlListe::TeamAuswahlListe( Schrift * zSchrift, SpielerTeamStruktur * st
     scroll->update( 0, 396 );
     scroll->update( 0, 396 );
     scroll->setKlickScroll( 7 );
     scroll->setKlickScroll( 7 );
     teams = new RCArray< TeamAuswahlListeTeam >();
     teams = new RCArray< TeamAuswahlListeTeam >();
-    TeamAuswahlListeTeam *zufall = new TeamAuswahlListeTeam( zSchrift );
+    TeamAuswahlListeTeam *zufall = new TeamAuswahlListeTeam();
     zufall->setTeam( 0 );
     zufall->setTeam( 0 );
     zufall->setName( new Text( "Zufällig" ) );
     zufall->setName( new Text( "Zufällig" ) );
     zufall->setMaxSpieler( sts->spielerAnzahl );
     zufall->setMaxSpieler( sts->spielerAnzahl );
     teams->set( zufall, 0 );
     teams->set( zufall, 0 );
     for( int i = 0; i < sts->teamAnzahl; i++ )
     for( int i = 0; i < sts->teamAnzahl; i++ )
     {
     {
-        TeamAuswahlListeTeam *tmp = new TeamAuswahlListeTeam( zSchrift );
+        TeamAuswahlListeTeam *tmp = new TeamAuswahlListeTeam();
         tmp->setTeam( i );
         tmp->setTeam( i );
         tmp->setName( sts->teamName->get( i ) );
         tmp->setName( sts->teamName->get( i ) );
         tmp->setFarbe( sts->teamFarbe->hat( i ) ? sts->teamFarbe->get( i ) : 0 );
         tmp->setFarbe( sts->teamFarbe->hat( i ) ? sts->teamFarbe->get( i ) : 0 );
@@ -481,11 +446,9 @@ TeamAuswahlListe::TeamAuswahlListe( Schrift * zSchrift, SpielerTeamStruktur * st
         teams->set( tmp, i + 1 );
         teams->set( tmp, i + 1 );
     }
     }
     teamAnzahl = 1 + sts->teamAnzahl;
     teamAnzahl = 1 + sts->teamAnzahl;
-    schrift = zSchrift->getThis();
     this->karteId = karteId;
     this->karteId = karteId;
     this->sts = sts;
     this->sts = sts;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -494,7 +457,6 @@ TeamAuswahlListe::~TeamAuswahlListe()
     rahmen->release();
     rahmen->release();
     scroll->release();
     scroll->release();
     teams->release();
     teams->release();
-    schrift->release();
     sts->release();
     sts->release();
 }
 }
 
 
@@ -568,7 +530,7 @@ void TeamAuswahlListe::setTeamVonSpieler( int accountId, int spielerNummer )
 
 
 void TeamAuswahlListe::addSpieler( int accountId )
 void TeamAuswahlListe::addSpieler( int accountId )
 {
 {
-    TeamAuswahlListeSpieler *tmp = new TeamAuswahlListeSpieler( sts->getThis(), schrift, accountId, karteId );
+    TeamAuswahlListeSpieler *tmp = new TeamAuswahlListeSpieler( sts->getThis(), accountId, karteId );
     for( int i = 0; i < teamAnzahl; i++ )
     for( int i = 0; i < teamAnzahl; i++ )
     {
     {
         if( teams->z( i )->istPlatzFrei() )
         if( teams->z( i )->istPlatzFrei() )
@@ -615,7 +577,7 @@ bool TeamAuswahlListe::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void TeamAuswahlListe::doPublicMausEreignis( MausEreignis & me )
+void TeamAuswahlListe::doPublicMausEreignis( MausEreignis &me )
 {
 {
     int tmpX = me.mx;
     int tmpX = me.mx;
     int tmpY = me.my;
     int tmpY = me.my;
@@ -635,7 +597,7 @@ void TeamAuswahlListe::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void TeamAuswahlListe::render( Bild & zRObj )
+void TeamAuswahlListe::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 0, 0, 698, 398 ) )
     if( !zRObj.setDrawOptions( 0, 0, 698, 398 ) )
         return;
         return;
@@ -664,34 +626,17 @@ void TeamAuswahlListe::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// constant
-
-// Reference Counting
-TeamAuswahlListe *TeamAuswahlListe::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamAuswahlListe *TeamAuswahlListe::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der TeamAuswahlTimer Klasse aus TeamAuswahl.h
 // Inhalt der TeamAuswahlTimer Klasse aus TeamAuswahl.h
 // Konstruktor
 // Konstruktor
-TeamAuswahlTimer::TeamAuswahlTimer( Schrift * zSchrift )
+TeamAuswahlTimer::TeamAuswahlTimer()
+    : ReferenceCounter()
 {
 {
-    zeit = initTextFeld( 0, 0, 200, 200, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
-    bestätigen = initKnopf( 65, 170, 70, 20, zSchrift, Knopf::Style::Sichtbar, "Fertig" );
+    zeit = initTextFeld( 0, 0, 200, 200, TextFeld::Style::Text | TextFeld::Style::Center, "" );
+    bestätigen = initKnopf( 65, 170, 70, 20, Knopf::Style::Sichtbar, "Fertig" );
     time = 0;
     time = 0;
     maxTime = 0;
     maxTime = 0;
     grad = 0;
     grad = 0;
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -711,11 +656,11 @@ void TeamAuswahlTimer::setVerbleibendeZeit( int sekunden )
     time = sekunden;
     time = sekunden;
 }
 }
 
 
-bool TeamAuswahlTimer::doPublicMausEreignis( MausEreignis & me )
+bool TeamAuswahlTimer::doPublicMausEreignis( MausEreignis &me )
 {
 {
     bool vera = me.verarbeitet;
     bool vera = me.verarbeitet;
     bestätigen->doPublicMausEreignis( me );
     bestätigen->doPublicMausEreignis( me );
-    if( !vera && me.verarbeitet &&me.id == ME_RLinks )
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
     {
     {
         if( spielClient->spielErstelltTeamFertig() )
         if( spielClient->spielErstelltTeamFertig() )
         {
         {
@@ -739,7 +684,7 @@ bool TeamAuswahlTimer::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void TeamAuswahlTimer::render( Bild & zRObj )
+void TeamAuswahlTimer::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 498, 398, 200, 200 ) )
     if( !zRObj.setDrawOptions( 498, 398, 200, 200 ) )
         return;
         return;
@@ -762,31 +707,17 @@ int TeamAuswahlTimer::getZeit() const
     return time;
     return time;
 }
 }
 
 
-// Reference Counting
-TeamAuswahlTimer *TeamAuswahlTimer::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamAuswahlTimer *TeamAuswahlTimer::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der TeamAuswahlChat Klasse aus TeamAuswahl.h
 // Inhalt der TeamAuswahlChat Klasse aus TeamAuswahl.h
 // Konstruktor
 // Konstruktor
-TeamAuswahlChat::TeamAuswahlChat( Schrift * zSchrift )
+TeamAuswahlChat::TeamAuswahlChat()
+    : ReferenceCounter()
 {
 {
-    nachricht = initTextFeld( 2, 178, 472, 20, zSchrift, TextFeld::Style::TextFeld, "" );
+    nachricht = initTextFeld( 2, 178, 472, 20, TextFeld::Style::TextFeld, "" );
     Bild *sendenBild = bilder->get( "data/client/bilder/chat.ltdb/senden.png" );
     Bild *sendenBild = bilder->get( "data/client/bilder/chat.ltdb/senden.png" );
-    senden = initKnopf( 476, 178, 20, 20, 0, 0, "" );
+    senden = initKnopf( 476, 178, 20, 20, 0, "" );
     senden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     senden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
     senden->setHintergrundBildZ( sendenBild );
     senden->setHintergrundBildZ( sendenBild );
-    verlauf = initTextFeld( 2, 2, 494, 174, zSchrift, TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt, "" );
+    verlauf = initTextFeld( 2, 2, 494, 174, TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt, "" );
     verlauf->updateVScroll();
     verlauf->updateVScroll();
     verlauf->setVertikalKlickScroll( 5 );
     verlauf->setVertikalKlickScroll( 5 );
     rahmen = new LRahmen();
     rahmen = new LRahmen();
@@ -794,7 +725,6 @@ TeamAuswahlChat::TeamAuswahlChat( Schrift * zSchrift )
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setFarbe( 0xFFFFFFFF );
     rahmen->setRamenBreite( 1 );
     rahmen->setRamenBreite( 1 );
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -824,7 +754,7 @@ bool TeamAuswahlChat::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void TeamAuswahlChat::doPublicMausEreignis( MausEreignis & me )
+void TeamAuswahlChat::doPublicMausEreignis( MausEreignis &me )
 {
 {
     verlauf->doPublicMausEreignis( me );
     verlauf->doPublicMausEreignis( me );
     nachricht->doPublicMausEreignis( me );
     nachricht->doPublicMausEreignis( me );
@@ -844,7 +774,7 @@ void TeamAuswahlChat::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void TeamAuswahlChat::doTastaturEreignis( TastaturEreignis & te )
+void TeamAuswahlChat::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     bool ver = !te.verarbeitet;
     bool ver = !te.verarbeitet;
     nachricht->doTastaturEreignis( te );
     nachricht->doTastaturEreignis( te );
@@ -862,7 +792,7 @@ void TeamAuswahlChat::doTastaturEreignis( TastaturEreignis & te )
     }
     }
 }
 }
 
 
-void TeamAuswahlChat::render( Bild & zRObj )
+void TeamAuswahlChat::render( Bild &zRObj )
 {
 {
     if( !zRObj.setDrawOptions( 0, 398, 498, 200 ) )
     if( !zRObj.setDrawOptions( 0, 398, 498, 200 ) )
         return;
         return;
@@ -873,26 +803,10 @@ void TeamAuswahlChat::render( Bild & zRObj )
     zRObj.releaseDrawOptions();
     zRObj.releaseDrawOptions();
 }
 }
 
 
-// constant
-
-// Reference Counting
-TeamAuswahlChat *TeamAuswahlChat::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamAuswahlChat *TeamAuswahlChat::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Inhalt der TeamAuswahl Klasse aus TeamAuswahl.h
 // Inhalt der TeamAuswahl Klasse aus TeamAuswahl.h
 // Konstruktor
 // Konstruktor
-TeamAuswahl::TeamAuswahl( Schrift * zSchrift )
+TeamAuswahl::TeamAuswahl()
+    : ReferenceCounter()
 {
 {
     tickVal = 0;
     tickVal = 0;
     animation = 0;
     animation = 0;
@@ -903,9 +817,7 @@ TeamAuswahl::TeamAuswahl( Schrift * zSchrift )
     chat = 0;
     chat = 0;
     timer = 0;
     timer = 0;
     liste = 0;
     liste = 0;
-    schrift = zSchrift->getThis();
     rend = 0;
     rend = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -921,8 +833,6 @@ TeamAuswahl::~TeamAuswahl()
         liste->release();
         liste->release();
     if( sts )
     if( sts )
         sts->release();
         sts->release();
-    if( schrift )
-        schrift->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -946,22 +856,22 @@ void TeamAuswahl::setSichtbar( bool sichtbar, bool sofort )
     rend = 1;
     rend = 1;
 }
 }
 
 
-void TeamAuswahl::initSTS( SpielerTeamStruktur * sts )
+void TeamAuswahl::initSTS( SpielerTeamStruktur *sts )
 {
 {
-    hauptScreen->lock();
+    uiFactory.initParam.bildschirm->lock();
     if( this->sts )
     if( this->sts )
         this->sts->release();
         this->sts->release();
     this->sts = sts;
     this->sts = sts;
     if( chat )
     if( chat )
-        chat = chat->release();
+        chat = (TeamAuswahlChat *)chat->release();
     if( timer )
     if( timer )
-        timer = timer->release();
+        timer = (TeamAuswahlTimer *)timer->release();
     if( liste )
     if( liste )
-        liste = liste->release();
-    chat = new TeamAuswahlChat( schrift );
-    timer = new TeamAuswahlTimer( schrift );
-    liste = new TeamAuswahlListe( schrift, sts->getThis(), karteId );
-    hauptScreen->unlock();
+        liste = (TeamAuswahlListe *)liste->release();
+    chat = new TeamAuswahlChat();
+    timer = new TeamAuswahlTimer();
+    liste = new TeamAuswahlListe( sts->getThis(), karteId );
+    uiFactory.initParam.bildschirm->unlock();
     rend = 1;
     rend = 1;
 }
 }
 
 
@@ -1043,7 +953,7 @@ bool TeamAuswahl::tick( double tickVal )
     return ret;
     return ret;
 }
 }
 
 
-void TeamAuswahl::doPublicMausEreignis( MausEreignis & me )
+void TeamAuswahl::doPublicMausEreignis( MausEreignis &me )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -1061,7 +971,7 @@ void TeamAuswahl::doPublicMausEreignis( MausEreignis & me )
     }
     }
 }
 }
 
 
-void TeamAuswahl::doTastaturEreignis( TastaturEreignis & te )
+void TeamAuswahl::doTastaturEreignis( TastaturEreignis &te )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -1069,7 +979,7 @@ void TeamAuswahl::doTastaturEreignis( TastaturEreignis & te )
         chat->doTastaturEreignis( te );
         chat->doTastaturEreignis( te );
 }
 }
 
 
-void TeamAuswahl::render( Bild & zRObj )
+void TeamAuswahl::render( Bild &zRObj )
 {
 {
     if( !alpha )
     if( !alpha )
         return;
         return;
@@ -1102,23 +1012,8 @@ SpielerTeamStruktur *TeamAuswahl::getSTS() const
     return sts->getThis();
     return sts->getThis();
 }
 }
 
 
-// Reference Counting
-TeamAuswahl *TeamAuswahl::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamAuswahl *TeamAuswahl::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Event Aktionen
 // Event Aktionen
-void TeamAuswahlListeSpielerTeamAuswahlE( void *p, AuswahlBox * obj, int p1, int p2 )
+void TeamAuswahlListeSpielerTeamAuswahlE( void *p, AuswahlBox *obj, int p1, int p2 )
 {
 {
     if( !p )
     if( !p )
         return;
         return;

+ 154 - 184
KSGClient/NachLogin/Spiele/Team Auswahl/TeamAuswahl.h

@@ -13,224 +13,194 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class TeamAuswahlListeSpieler
+class TeamAuswahlListeSpieler : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	int accountId;
-	TextFeld *name;
-	AuswahlBox *teamAuswahl;
-	TextFeld *team;
-	TextFeld *punkte;
-	TextFeld *spiele;
-	TextFeld *gewonnen;
-	TextFeld *farbe;
-	int spielerFarbe;
-	LRahmen *rahmen;
-	Text *teamName;
-	SpielerTeamStruktur *sts;
-	bool rend;
-	int ref;
+    int accountId;
+    TextFeld *name;
+    AuswahlBox *teamAuswahl;
+    TextFeld *team;
+    TextFeld *punkte;
+    TextFeld *spiele;
+    TextFeld *gewonnen;
+    TextFeld *farbe;
+    int spielerFarbe;
+    LRahmen *rahmen;
+    Text *teamName;
+    SpielerTeamStruktur *sts;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schrift *zSchrift, int accountId, int karteId );
-	// Destruktor
-	~TeamAuswahlListeSpieler();
-	// nicht constant
-	void disable();
-	void spielerTeamAuswahlE( AuswahlBox *obj, int p1, int p2 );
-	void setFarbe( int farbe );
-	void setTeam( Text *zName );
-	void setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int yOff, Bild &zRObj );
-	// constant
-	int getAccountId() const;
-	// Reference Counting
-	TeamAuswahlListeSpieler *getThis();
-	TeamAuswahlListeSpieler *release();
+    // Konstruktor
+    TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, int accountId, int karteId );
+    // Destruktor
+    ~TeamAuswahlListeSpieler();
+    // nicht constant
+    void disable();
+    void spielerTeamAuswahlE( AuswahlBox *obj, int p1, int p2 );
+    void setFarbe( int farbe );
+    void setTeam( Text *zName );
+    void setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int yOff, Bild &zRObj );
+    // constant
+    int getAccountId() const;
 };
 };
 
 
-class TeamAuswahlListeTeam
+class TeamAuswahlListeTeam : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	int maxSpieler;
-	int jetztSpieler;
-	int team;
-	TextFeld *name;
-	TextFeld *mjSpieler;
-	TextFeld *farbe;
-	int teamFarbe;
-	RCArray< TeamAuswahlListeSpieler > *spieler;
-	LRahmen *rahmen;
-	AlphaFeld *titelAf;
-	Text *teamName;
-	double tickVal;
-	int höhe;
-	bool rend;
-	int ref;
+    int maxSpieler;
+    int jetztSpieler;
+    int team;
+    TextFeld *name;
+    TextFeld *mjSpieler;
+    TextFeld *farbe;
+    int teamFarbe;
+    RCArray< TeamAuswahlListeSpieler > *spieler;
+    LRahmen *rahmen;
+    AlphaFeld *titelAf;
+    Text *teamName;
+    double tickVal;
+    int höhe;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TeamAuswahlListeTeam( Schrift *zSchrift );
-	// Destruktor
-	~TeamAuswahlListeTeam();
-	// nicht constant
-	void disable();
-	void setMaxSpieler( int maxSpieler );
-	void setName( Text *name );
-	void setFarbe( int farbe );
-	void setTeam( int team );
-	void addSpieler( TeamAuswahlListeSpieler *spieler );
-	void removeSpieler( int accountId );
-	void setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( int yOff, Bild &zRObj );
-	// constant
-	int getTeamNummer() const;
-	int getHeight() const;
-	bool istPlatzFrei() const;
-	int getMaxSpieler() const;
-	Text *zName() const;
-	TeamAuswahlListeSpieler *getSpielerDaten( int accountId ) const;
-	TeamAuswahlListeSpieler *zSpielerDaten( int accountId ) const;
-	// Reference Counting
-	TeamAuswahlListeTeam *getThis();
-	TeamAuswahlListeTeam *release();
+    // Konstruktor
+    TeamAuswahlListeTeam();
+    // Destruktor
+    ~TeamAuswahlListeTeam();
+    // nicht constant
+    void disable();
+    void setMaxSpieler( int maxSpieler );
+    void setName( Text *name );
+    void setFarbe( int farbe );
+    void setTeam( int team );
+    void addSpieler( TeamAuswahlListeSpieler *spieler );
+    void removeSpieler( int accountId );
+    void setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( int yOff, Bild &zRObj );
+    // constant
+    int getTeamNummer() const;
+    int getHeight() const;
+    bool istPlatzFrei() const;
+    int getMaxSpieler() const;
+    Text *zName() const;
+    TeamAuswahlListeSpieler *getSpielerDaten( int accountId ) const;
+    TeamAuswahlListeSpieler *zSpielerDaten( int accountId ) const;
 };
 };
 
 
-class TeamAuswahlListe
+class TeamAuswahlListe : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	LRahmen *rahmen;
-	VScrollBar *scroll;
-	RCArray< TeamAuswahlListeTeam > *teams;
-	Schrift *schrift;
-	SpielerTeamStruktur *sts;
-	int teamAnzahl;
-	int karteId;
-	bool rend;
-	int ref;
+    LRahmen *rahmen;
+    VScrollBar *scroll;
+    RCArray< TeamAuswahlListeTeam > *teams;
+    SpielerTeamStruktur *sts;
+    int teamAnzahl;
+    int karteId;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TeamAuswahlListe( Schrift *zSchrift, SpielerTeamStruktur *sts, int karteId );
-	// Destruktor
-	~TeamAuswahlListe();
-	// nicht constant
-	void disable();
-	void setTeamVonSpieler( int accountId, int spielerNummer );
-	void addSpieler( int accountId );
-	void removeSpieler( int accountId );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void render( Bild &zRObj );
-	// constant
-
-	// Reference Counting
-	TeamAuswahlListe *getThis();
-	TeamAuswahlListe *release();
+    // Konstruktor
+    TeamAuswahlListe( SpielerTeamStruktur *sts, int karteId );
+    // Destruktor
+    ~TeamAuswahlListe();
+    // nicht constant
+    void disable();
+    void setTeamVonSpieler( int accountId, int spielerNummer );
+    void addSpieler( int accountId );
+    void removeSpieler( int accountId );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void render( Bild &zRObj );
 };
 };
 
 
-class TeamAuswahlTimer
+class TeamAuswahlTimer : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	TextFeld *zeit;
-	Knopf *bestätigen;
-	int time;
-	int maxTime;
-	double grad;
-	bool rend;
-	int ref;
+    TextFeld *zeit;
+    Knopf *bestätigen;
+    int time;
+    int maxTime;
+    double grad;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TeamAuswahlTimer( Schrift *zSchrift );
-	// Destruktor
-	~TeamAuswahlTimer();
-	// nicht constant
-	void setVerbleibendeZeit( int sekunden );
-	bool doPublicMausEreignis( MausEreignis &me );
-	bool tick( double tickVal );
-	void render( Bild &zRObj );
-	// constant
-	int getZeit() const;
-	// Reference Counting
-	TeamAuswahlTimer *getThis();
-	TeamAuswahlTimer *release();
+    // Konstruktor
+    TeamAuswahlTimer();
+    // Destruktor
+    ~TeamAuswahlTimer();
+    // nicht constant
+    void setVerbleibendeZeit( int sekunden );
+    bool doPublicMausEreignis( MausEreignis &me );
+    bool tick( double tickVal );
+    void render( Bild &zRObj );
+    // constant
+    int getZeit() const;
 };
 };
 
 
-class TeamAuswahlChat
+class TeamAuswahlChat : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	TextFeld *nachricht;
-	Knopf *senden;
-	TextFeld *verlauf;
-	LRahmen *rahmen;
-	bool rend;
-	int ref;
+    TextFeld *nachricht;
+    Knopf *senden;
+    TextFeld *verlauf;
+    LRahmen *rahmen;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TeamAuswahlChat( Schrift *zSchrift );
-	// Destruktor
-	~TeamAuswahlChat();
-	// nicht constant
-	void addNachricht( char *nachricht );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-
-	// Reference Counting
-	TeamAuswahlChat *getThis();
-	TeamAuswahlChat *release();
+    // Konstruktor
+    TeamAuswahlChat();
+    // Destruktor
+    ~TeamAuswahlChat();
+    // nicht constant
+    void addNachricht( char *nachricht );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
 };
 };
 
 
-class TeamAuswahl
+class TeamAuswahl : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	double tickVal;
-	int animation;
-	bool sichtbar;
-	int karteId;
-	unsigned char alpha;
-	SpielerTeamStruktur *sts;
-	TeamAuswahlChat *chat;
-	TeamAuswahlTimer *timer;
-	TeamAuswahlListe *liste;
-	Schrift *schrift;
-	bool rend;
-	int ref;
+    double tickVal;
+    int animation;
+    bool sichtbar;
+    int karteId;
+    unsigned char alpha;
+    SpielerTeamStruktur *sts;
+    TeamAuswahlChat *chat;
+    TeamAuswahlTimer *timer;
+    TeamAuswahlListe *liste;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TeamAuswahl( Schrift *zSchrift );
-	// Destruktor
-	~TeamAuswahl();
-	// nicht constant
-	void setKarteId( int karteId );
-	void setSichtbar( bool sichtbar, bool sofort = 0 );
-	void initSTS( SpielerTeamStruktur *sts );
-	void addSpieler( int accountId );
-	void setSpielerNummer( int accountId, int sNummer );
-	void removeSpieler( int accountId );
-	void verbleibendeZeit( int sekunden );
-	void addNachricht( char *nachricht );
-	bool tick( double tickVal );
-	void doPublicMausEreignis( MausEreignis &me );
-	void doTastaturEreignis( TastaturEreignis &te );
-	void render( Bild &zRObj );
-	// constant
-	bool istSichtbar() const;
-	int getKarteId() const;
-	SpielerTeamStruktur *getSTS() const;
-	// Reference Counting
-	TeamAuswahl *getThis();
-	TeamAuswahl *release();
+    // Konstruktor
+    TeamAuswahl();
+    // Destruktor
+    ~TeamAuswahl();
+    // nicht constant
+    void setKarteId( int karteId );
+    void setSichtbar( bool sichtbar, bool sofort = 0 );
+    void initSTS( SpielerTeamStruktur *sts );
+    void addSpieler( int accountId );
+    void setSpielerNummer( int accountId, int sNummer );
+    void removeSpieler( int accountId );
+    void verbleibendeZeit( int sekunden );
+    void addNachricht( char *nachricht );
+    bool tick( double tickVal );
+    void doPublicMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
+    int getKarteId() const;
+    SpielerTeamStruktur *getSTS() const;
 };
 };
 
 
 // Event Aktionen
 // Event Aktionen

+ 64 - 72
KSGClient/NachLogin/Titel/TitelLeiste.cpp

@@ -8,7 +8,7 @@
 
 
 // Inhalt der TitelLeisten Klasse aus Titelleiste.h
 // Inhalt der TitelLeisten Klasse aus Titelleiste.h
 // Konstruktor
 // Konstruktor
-TitelLeiste::TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift )
+TitelLeiste::TitelLeiste( Fenster *zNachLogin )
     : Thread()
     : Thread()
 {
 {
     Bild *goldB = bilder->get( "data/bilder/system.ltdb/gold.jpg" );
     Bild *goldB = bilder->get( "data/bilder/system.ltdb/gold.jpg" );
@@ -23,16 +23,16 @@ TitelLeiste::TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift )
     bilder->leseDaten( 0 );
     bilder->leseDaten( 0 );
     logoutBild = bilder->laden( 0, new Text( "logout.png" ) );
     logoutBild = bilder->laden( 0, new Text( "logout.png" ) );
     Bild *hintergrund = bilder->laden( 0, new Text( "titelleiste.jpg" ) );
     Bild *hintergrund = bilder->laden( 0, new Text( "titelleiste.jpg" ) );
-    bilder = bilder->release();
-    Punkt bgr = hauptScreen->getBackBufferSize();
-    version = initTextFeld( 1, 1, 200, 12, zSchrift, TextFeld::Style::Text | TextFeld::Style::Sichtbar, "client version: " );
+    bilder->release();
+    Punkt bgr = uiFactory.initParam.bildschirm->getBackBufferSize();
+    version = initTextFeld( 1, 1, 200, 12, TextFeld::Style::Text | TextFeld::Style::Sichtbar, "client version: " );
     Datei *vDat = new Datei();
     Datei *vDat = new Datei();
     vDat->setDatei( new Text( "data/version" ) );
     vDat->setDatei( new Text( "data/version" ) );
     vDat->open( Datei::Style::lesen );
     vDat->open( Datei::Style::lesen );
     char clientVersion[ 4 ] = { 0, 0, 0, 0 };
     char clientVersion[ 4 ] = { 0, 0, 0, 0 };
     vDat->lese( clientVersion, 4 );
     vDat->lese( clientVersion, 4 );
     vDat->close();
     vDat->close();
-    vDat = vDat->release();
+    vDat->release();
     version->zText()->append( (int)clientVersion[ 3 ] );
     version->zText()->append( (int)clientVersion[ 3 ] );
     version->zText()->append( "." );
     version->zText()->append( "." );
     version->zText()->append( (int)clientVersion[ 2 ] );
     version->zText()->append( (int)clientVersion[ 2 ] );
@@ -40,61 +40,61 @@ TitelLeiste::TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift )
     version->zText()->append( (int)clientVersion[ 1 ] );
     version->zText()->append( (int)clientVersion[ 1 ] );
     version->zText()->append( "." );
     version->zText()->append( "." );
     version->zText()->append( (int)clientVersion[ 0 ] );
     version->zText()->append( (int)clientVersion[ 0 ] );
-    close = initKnopf( bgr.x - 23, -1, 22, 22, 0, 0, "" );
+    close = initKnopf( bgr.x - 23, -1, 22, 22, 0, "" );
     close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::HAlpha | Knopf::Style::Rahmen );
     close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::HAlpha | Knopf::Style::Rahmen );
     close->setRahmenFarbe( 0xFFFFFFFF );
     close->setRahmenFarbe( 0xFFFFFFFF );
     close->setRahmenBreite( 1 );
     close->setRahmenBreite( 1 );
-    close->setHintergrundBildZ( closeBild->getThis() );
-    initToolTip( close, "Kolja-Strohm Games Client beenden.", zSchrift, hauptScreen );
+    close->setHintergrundBildZ( dynamic_cast<Bild *>( closeBild->getThis() ) );
+    initToolTip( close, "Kolja-Strohm Games Client beenden." );
     close->setMausEreignisParameter( this );
     close->setMausEreignisParameter( this );
     close->setMausEreignis( titelLeisteSchließenME );
     close->setMausEreignis( titelLeisteSchließenME );
-    einstellungen = initKnopf( bgr.x - 44, -1, 22, 22, 0, 0, "" );
+    einstellungen = initKnopf( bgr.x - 44, -1, 22, 22, 0, "" );
     einstellungen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::HAlpha | Knopf::Style::Rahmen );
     einstellungen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::HAlpha | Knopf::Style::Rahmen );
     einstellungen->setRahmenFarbe( 0xFFFFFFFF );
     einstellungen->setRahmenFarbe( 0xFFFFFFFF );
     einstellungen->setRahmenBreite( 1 );
     einstellungen->setRahmenBreite( 1 );
-    einstellungen->setHintergrundBildZ( einstellungenBild->getThis() );
+    einstellungen->setHintergrundBildZ( dynamic_cast<Bild *>( einstellungenBild->getThis() ) );
     einstellungen->setMausEreignisParameter( this );
     einstellungen->setMausEreignisParameter( this );
     einstellungen->setMausEreignis( titelLeisteEinstellungenME );
     einstellungen->setMausEreignis( titelLeisteEinstellungenME );
-    initToolTip( einstellungen, "Einstellungen ändern.", zSchrift, hauptScreen );
-    logout = initKnopf( bgr.x - 65, -1, 22, 22, 0, 0, "" );
+    initToolTip( einstellungen, "Einstellungen ändern." );
+    logout = initKnopf( bgr.x - 65, -1, 22, 22, 0, "" );
     logout->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::HAlpha | Knopf::Style::Rahmen );
     logout->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::HAlpha | Knopf::Style::Rahmen );
     logout->setRahmenFarbe( 0xFFFFFFFF );
     logout->setRahmenFarbe( 0xFFFFFFFF );
     logout->setRahmenBreite( 1 );
     logout->setRahmenBreite( 1 );
-    logout->setHintergrundBildZ( logoutBild->getThis() );
+    logout->setHintergrundBildZ( dynamic_cast<Bild *>( logoutBild->getThis() ) );
     logout->setMausEreignisParameter( this );
     logout->setMausEreignisParameter( this );
     logout->setMausEreignis( titelLeisteLogoutME );
     logout->setMausEreignis( titelLeisteLogoutME );
-    initToolTip( logout, "Ausloggen.", zSchrift, hauptScreen );
-    news = initKnopf( bgr.x - 103, 67, 102, 32, zSchrift, Knopf::Style::Sichtbar, "Information" );
+    initToolTip( logout, "Ausloggen." );
+    news = initKnopf( bgr.x - 103, 67, 102, 32, Knopf::Style::Sichtbar, "Information" );
     news->setRahmenFarbe( 0xFFFFFFFF );
     news->setRahmenFarbe( 0xFFFFFFFF );
     news->setRahmenBreite( 1 );
     news->setRahmenBreite( 1 );
     news->setMausEreignisParameter( this );
     news->setMausEreignisParameter( this );
     news->setMausEreignis( titelLeisteNewsME );
     news->setMausEreignis( titelLeisteNewsME );
-    miniGames = initKnopf( bgr.x - 204, 67, 102, 32, zSchrift, Knopf::Style::Sichtbar, "Mini Games" );
+    miniGames = initKnopf( bgr.x - 204, 67, 102, 32, Knopf::Style::Sichtbar, "Mini Games" );
     miniGames->setRahmenFarbe( 0xFFFFFFFF );
     miniGames->setRahmenFarbe( 0xFFFFFFFF );
     miniGames->setRahmenBreite( 1 );
     miniGames->setRahmenBreite( 1 );
     miniGames->setMausEreignisParameter( this );
     miniGames->setMausEreignisParameter( this );
     miniGames->setMausEreignis( titelLeisteMiniGamesME );
     miniGames->setMausEreignis( titelLeisteMiniGamesME );
-    accountAnsehen = initKnopf( bgr.x - 305, 67, 102, 32, zSchrift, Knopf::Style::Sichtbar, "Account" );
+    accountAnsehen = initKnopf( bgr.x - 305, 67, 102, 32, Knopf::Style::Sichtbar, "Account" );
     accountAnsehen->setRahmenFarbe( 0xFFFFFFFF );
     accountAnsehen->setRahmenFarbe( 0xFFFFFFFF );
     accountAnsehen->setRahmenBreite( 1 );
     accountAnsehen->setRahmenBreite( 1 );
     accountAnsehen->setMausEreignisParameter( this );
     accountAnsehen->setMausEreignisParameter( this );
     accountAnsehen->setMausEreignis( titelLeisteAccountAnsehenME );
     accountAnsehen->setMausEreignis( titelLeisteAccountAnsehenME );
-    shop = initKnopf( bgr.x - 406, 67, 102, 32, zSchrift, Knopf::Style::Sichtbar, "Shop" );
+    shop = initKnopf( bgr.x - 406, 67, 102, 32, Knopf::Style::Sichtbar, "Shop" );
     shop->setRahmenFarbe( 0xFFFFFFFF );
     shop->setRahmenFarbe( 0xFFFFFFFF );
     shop->setRahmenBreite( 1 );
     shop->setRahmenBreite( 1 );
     shop->setMausEreignisParameter( this );
     shop->setMausEreignisParameter( this );
     shop->setMausEreignis( titelLeisteShopME );
     shop->setMausEreignis( titelLeisteShopME );
-    spielen = initKnopf( bgr.x - 507, 67, 102, 32, zSchrift, Knopf::Style::Sichtbar, "Spielen" );
+    spielen = initKnopf( bgr.x - 507, 67, 102, 32, Knopf::Style::Sichtbar, "Spielen" );
     spielen->setRahmenFarbe( 0xFFFFFFFF );
     spielen->setRahmenFarbe( 0xFFFFFFFF );
     spielen->setRahmenBreite( 1 );
     spielen->setRahmenBreite( 1 );
     spielen->setMausEreignisParameter( this );
     spielen->setMausEreignisParameter( this );
     spielen->setMausEreignis( titelLeisteSpielenME );
     spielen->setMausEreignis( titelLeisteSpielenME );
-    editor = initKnopf( bgr.x - 507, 35, 102, 32, zSchrift, 0, "Editor" );
+    editor = initKnopf( bgr.x - 507, 35, 102, 32, 0, "Editor" );
     editor->setRahmenFarbe( 0xFFFFFFFF );
     editor->setRahmenFarbe( 0xFFFFFFFF );
     editor->setRahmenBreite( 1 );
     editor->setRahmenBreite( 1 );
     editor->setMausEreignisParameter( this );
     editor->setMausEreignisParameter( this );
     editor->setMausEreignis( titelLeisteEditorME );
     editor->setMausEreignis( titelLeisteEditorME );
-    info = initTextFeld( 200, 11, 300, 76, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrzeilig | TextFeld::Style::Rahmen, "Wilkommen bei Kolja-Strohm Games!\nViel Spaß beim spielen." );
+    info = initTextFeld( 200, 11, 300, 76, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrzeilig | TextFeld::Style::Rahmen, "Wilkommen bei Kolja-Strohm Games!\nViel Spaß beim spielen." );
     info->setRahmenFarbe( 0xFFFFFFFF );
     info->setRahmenFarbe( 0xFFFFFFFF );
     int minus = bgr.x / 2 - 254;
     int minus = bgr.x / 2 - 254;
     if( minus < 511 )
     if( minus < 511 )
@@ -111,21 +111,21 @@ TitelLeiste::TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift )
     fenster->setRFarbe( 0xFFFFFFFF );
     fenster->setRFarbe( 0xFFFFFFFF );
     fenster->setSize( bgr.x, 100 );
     fenster->setSize( bgr.x, 100 );
     fenster->setKBgBildZ( hintergrund );
     fenster->setKBgBildZ( hintergrund );
-    fenster->addMember( close->getThis() );
-    fenster->addMember( einstellungen->getThis() );
-    fenster->addMember( logout->getThis() );
-    fenster->addMember( accountAnsehen->getThis() );
-    fenster->addMember( spielen->getThis() );
-    fenster->addMember( editor->getThis() );
-    fenster->addMember( miniGames->getThis() );
-    fenster->addMember( news->getThis() );
-    fenster->addMember( shop->getThis() );
-    fenster->addMember( info->getThis() );
-    fenster->addMember( version->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( close->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( einstellungen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( logout->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( accountAnsehen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( spielen->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( editor->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( miniGames->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( news->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( shop->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( info->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( version->getThis() ) );
 
 
-    kupfer = initTextFeld( fenster->getBreite() - 40, 70, 10, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
-    silber = initTextFeld( kupfer->getX() - 40, 70, 10, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
-    gold = initTextFeld( silber->getX() - 40, 70, 10, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
+    kupfer = initTextFeld( fenster->getBreite() - 40, 70, 10, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
+    silber = initTextFeld( kupfer->getX() - 40, 70, 10, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
+    gold = initTextFeld( silber->getX() - 40, 70, 10, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
     goldBild = new BildZ();
     goldBild = new BildZ();
     goldBild->setStyle( BildZ::Style::Sichtbar );
     goldBild->setStyle( BildZ::Style::Sichtbar );
     goldBild->setBildZ( goldB );
     goldBild->setBildZ( goldB );
@@ -142,13 +142,13 @@ TitelLeiste::TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift )
     kupferBild->setSize( 20, 20 );
     kupferBild->setSize( 20, 20 );
     kupferBild->setPosition( kupfer->getX() + kupfer->getBreite(), 70 );
     kupferBild->setPosition( kupfer->getX() + kupfer->getBreite(), 70 );
 
 
-    fenster->addMember( gold->getThis() );
-    fenster->addMember( silber->getThis() );
-    fenster->addMember( kupfer->getThis() );
-    fenster->addMember( goldBild->getThis() );
-    fenster->addMember( silberBild->getThis() );
-    fenster->addMember( kupferBild->getThis() );
-    zNachLogin->addMember( fenster->getThis() );
+    fenster->addMember( dynamic_cast<Zeichnung *>( gold->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( silber->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( kupfer->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( goldBild->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( silberBild->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( kupferBild->getThis() ) );
+    zNachLogin->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
     next = new Array< int >();
     next = new Array< int >();
     nextAnzahl = 0;
     nextAnzahl = 0;
     rend = 0;
     rend = 0;
@@ -159,11 +159,11 @@ TitelLeiste::TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift )
 TitelLeiste::~TitelLeiste()
 TitelLeiste::~TitelLeiste()
 {
 {
     if( closeBild )
     if( closeBild )
-        closeBild = closeBild->release();
+        closeBild->release();
     if( einstellungenBild )
     if( einstellungenBild )
-        einstellungenBild = einstellungenBild->release();
+        einstellungenBild->release();
     if( logoutBild )
     if( logoutBild )
-        logoutBild = logoutBild->release();
+        logoutBild->release();
     if( close )
     if( close )
         close = (Knopf *)close->release();
         close = (Knopf *)close->release();
     if( einstellungen )
     if( einstellungen )
@@ -189,7 +189,7 @@ TitelLeiste::~TitelLeiste()
     if( fenster )
     if( fenster )
         fenster = (Fenster *)fenster->release();
         fenster = (Fenster *)fenster->release();
     if( next )
     if( next )
-        next = next->release();
+        next->release();
     goldBild->release();
     goldBild->release();
     silberBild->release();
     silberBild->release();
     kupferBild->release();
     kupferBild->release();
@@ -223,7 +223,7 @@ void TitelLeiste::setImVideo( bool imVideo ) // aktiviert oder deaktiviert Kn
     shop->setStyle( Knopf::Style::Erlaubt, !imVideo );
     shop->setStyle( Knopf::Style::Erlaubt, !imVideo );
 }
 }
 
 
-bool TitelLeiste::druckSchließen( MausEreignis & me ) // Schließen wurde gedrückt
+bool TitelLeiste::druckSchließen( MausEreignis &me ) // Schließen wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -231,7 +231,7 @@ bool TitelLeiste::druckSchlie
                                                       new Text( "Ja" ), new Text( "Nein" ), []()
                                                       new Text( "Ja" ), new Text( "Nein" ), []()
         {
         {
             nachLogin->zChatLeiste()->removeAll();
             nachLogin->zChatLeiste()->removeAll();
-            if( loginClient &&loginClient->verbinde() )
+            if( loginClient && loginClient->verbinde() )
             {
             {
                 loginClient->logout();
                 loginClient->logout();
                 loginClient->trenne( 1 );
                 loginClient->trenne( 1 );
@@ -242,14 +242,14 @@ bool TitelLeiste::druckSchlie
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckEinstellungen( MausEreignis & me ) // Einstellungen wurde gedrückt
+bool TitelLeiste::druckEinstellungen( MausEreignis &me ) // Einstellungen wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
         nachLogin->zEinstellungen()->setSichtbar();
         nachLogin->zEinstellungen()->setSichtbar();
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckLogout( MausEreignis & me ) // Logout wurde gedrückt
+bool TitelLeiste::druckLogout( MausEreignis &me ) // Logout wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -262,7 +262,7 @@ bool TitelLeiste::druckLogout( MausEreignis & me ) // Logout wurde gedr
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckSpielen( MausEreignis & me ) // Spielen wurde gedrückt
+bool TitelLeiste::druckSpielen( MausEreignis &me ) // Spielen wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -274,7 +274,7 @@ bool TitelLeiste::druckSpielen( MausEreignis & me ) // Spielen wurde gedr
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckAccountAnsehen( MausEreignis & me ) // AccountAnsehen wurde gedrückt
+bool TitelLeiste::druckAccountAnsehen( MausEreignis &me ) // AccountAnsehen wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -286,7 +286,7 @@ bool TitelLeiste::druckAccountAnsehen( MausEreignis & me ) // AccountAnsehen wur
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckMiniGames( MausEreignis & me ) // MiniGames wurde gedrückt
+bool TitelLeiste::druckMiniGames( MausEreignis &me ) // MiniGames wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -298,7 +298,7 @@ bool TitelLeiste::druckMiniGames( MausEreignis & me ) // MiniGames wurde gedr
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckNews( MausEreignis & me ) // News wurde gedrückt
+bool TitelLeiste::druckNews( MausEreignis &me ) // News wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -310,7 +310,7 @@ bool TitelLeiste::druckNews( MausEreignis & me ) // News wurde gedr
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckShop( MausEreignis & me ) // Spielen wurde gedrückt
+bool TitelLeiste::druckShop( MausEreignis &me ) // Spielen wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -322,7 +322,7 @@ bool TitelLeiste::druckShop( MausEreignis & me ) // Spielen wurde gedr
     return 1;
     return 1;
 }
 }
 
 
-bool TitelLeiste::druckEditor( MausEreignis & me ) // Spielen wurde gedrückt
+bool TitelLeiste::druckEditor( MausEreignis &me ) // Spielen wurde gedrückt
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
@@ -344,22 +344,22 @@ void TitelLeiste::thread()
             Text *infoTxt = new Text( "" );
             Text *infoTxt = new Text( "" );
             int typ = 0;
             int typ = 0;
             bool b = infoClient->getInformationText( infoTxt, &typ );
             bool b = infoClient->getInformationText( infoTxt, &typ );
-            if( b &&infoTxt->getLength() )
-                info->setText( infoTxt->getThis() );
-            infoTxt = infoTxt->release();
+            if( b && infoTxt->getLength() )
+                info->setText( dynamic_cast<Text *>( infoTxt->getThis() ) );
+            infoTxt = (Text *)infoTxt->release();
             int k = infoClient->getKupfer();
             int k = infoClient->getKupfer();
             int s = k / 100;
             int s = k / 100;
             int g = s / 100;
             int g = s / 100;
             s = s % 100;
             s = s % 100;
             k = k % 100;
             k = k % 100;
-            Text * gt = new Text();
+            Text *gt = new Text();
             gt->append( g );
             gt->append( g );
-            Text * st = new Text();
+            Text *st = new Text();
             st->append( s );
             st->append( s );
-            Text * kt = new Text();
+            Text *kt = new Text();
             kt->append( k );
             kt->append( k );
-            Schrift * schrift = gold->zSchrift();
-            TextRenderer rd( schrift->getThis() );
+            Schrift *schrift = gold->zSchrift();
+            TextRenderer rd( dynamic_cast<Schrift *>( schrift->getThis() ) );
             rd.setSchriftSize( 12 );
             rd.setSchriftSize( 12 );
             int gtbr = rd.getTextBreite( gt->getText() );
             int gtbr = rd.getTextBreite( gt->getText() );
             int stbr = rd.getTextBreite( st->getText() );
             int stbr = rd.getTextBreite( st->getText() );
@@ -663,14 +663,6 @@ int TitelLeiste::getSpielenX() const
     return spielen->getX();
     return spielen->getX();
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *TitelLeiste::release()
-{
-    if( ref == 2 && run )
-        ende();
-    return Thread::release();
-}
-
 // Ereignisse
 // Ereignisse
 bool titelLeisteSchließenME( void *p, void *obj, MausEreignis me )
 bool titelLeisteSchließenME( void *p, void *obj, MausEreignis me )
 {
 {

+ 45 - 47
KSGClient/NachLogin/Titel/TitelLeiste.h

@@ -12,55 +12,53 @@ using namespace Framework;
 class TitelLeiste : public Thread
 class TitelLeiste : public Thread
 {
 {
 private:
 private:
-	Knopf *close;
-	Knopf *einstellungen;
-	Knopf *logout;
-	Knopf *accountAnsehen;
-	Knopf *spielen;
-	Knopf *miniGames;
-	Knopf *news;
-	Knopf *shop;
-	Knopf *editor;
-	Bild *closeBild;
-	Bild *einstellungenBild;
-	Bild *logoutBild;
-	TextFeld *info;
-	TextFeld *version;
-	Fenster *fenster;
-	Array< int > *next;
-	Critical cs;
-	BildZ *goldBild;
-	BildZ *silberBild;
-	BildZ *kupferBild;
-	TextFeld *gold;
-	TextFeld *silber;
-	TextFeld *kupfer;
-	int nextAnzahl;
-	bool rend;
+    Knopf *close;
+    Knopf *einstellungen;
+    Knopf *logout;
+    Knopf *accountAnsehen;
+    Knopf *spielen;
+    Knopf *miniGames;
+    Knopf *news;
+    Knopf *shop;
+    Knopf *editor;
+    Bild *closeBild;
+    Bild *einstellungenBild;
+    Bild *logoutBild;
+    TextFeld *info;
+    TextFeld *version;
+    Fenster *fenster;
+    Array< int > *next;
+    Critical cs;
+    BildZ *goldBild;
+    BildZ *silberBild;
+    BildZ *kupferBild;
+    TextFeld *gold;
+    TextFeld *silber;
+    TextFeld *kupfer;
+    int nextAnzahl;
+    bool rend;
 
 
 public:
 public:
-	// Konstruktor
-	TitelLeiste( Fenster *zNachLogin, Schrift *zSchrift );
-	// Destruktor
-	~TitelLeiste();
-	// nicht constant
-	void setImSpiel( bool imSpiel ); // aktiviert oder deaktiviert Knöpfe
-	void setImVideo( bool imVideo ); // aktiviert oder deaktiviert Knöpfe
-	bool druckSchließen( MausEreignis &me ); // Schließen wurde gedrückt
-	bool druckEinstellungen( MausEreignis &me ); // Einstellungen wurde gedrückt
-	bool druckLogout( MausEreignis &me ); // Logout wurde gedrückt
-	bool druckAccountAnsehen( MausEreignis &me ); // AccountAnsehen wurde gedrückt
-	bool druckSpielen( MausEreignis &me ); // Spielen wurde gedrückt
-	bool druckMiniGames( MausEreignis &me ); // MiniGames wurde gedrückt
-	bool druckNews( MausEreignis &me ); // News wurde gedrückt
-	bool druckShop( MausEreignis &me ); // Shop wurde gedrückt
-	bool druckEditor( MausEreignis &me ); // Shop wurde gedrückt
-	void thread(); // aktualisierungs Thread
-	bool tick(); // tick
-	// constant
-	int getSpielenX() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
+    // Konstruktor
+    TitelLeiste( Fenster *zNachLogin );
+    // Destruktor
+    ~TitelLeiste();
+    // nicht constant
+    void setImSpiel( bool imSpiel ); // aktiviert oder deaktiviert Knöpfe
+    void setImVideo( bool imVideo ); // aktiviert oder deaktiviert Knöpfe
+    bool druckSchließen( MausEreignis &me ); // Schließen wurde gedrückt
+    bool druckEinstellungen( MausEreignis &me ); // Einstellungen wurde gedrückt
+    bool druckLogout( MausEreignis &me ); // Logout wurde gedrückt
+    bool druckAccountAnsehen( MausEreignis &me ); // AccountAnsehen wurde gedrückt
+    bool druckSpielen( MausEreignis &me ); // Spielen wurde gedrückt
+    bool druckMiniGames( MausEreignis &me ); // MiniGames wurde gedrückt
+    bool druckNews( MausEreignis &me ); // News wurde gedrückt
+    bool druckShop( MausEreignis &me ); // Shop wurde gedrückt
+    bool druckEditor( MausEreignis &me ); // Shop wurde gedrückt
+    void thread(); // aktualisierungs Thread
+    bool tick(); // tick
+    // constant
+    int getSpielenX() const;
 };
 };
 
 
 // Ereignisse
 // Ereignisse

+ 44 - 75
KSGClient/NachLogin/Update/Update.cpp

@@ -4,13 +4,13 @@
 
 
 // Inhalt der UpdateGUI klasse aus UpdateGUI.h
 // Inhalt der UpdateGUI klasse aus UpdateGUI.h
 // Konstruktor
 // Konstruktor
-Update::Update( Schrift *zSchrift, FBalken *fb, int dg, std::function< void(bool) > after )
-	: Thread()
+Update::Update( FBalken *fb, int dg, std::function< void( bool ) > after )
+    : Thread()
 {
 {
-	p = 0;
+    p = 0;
     this->fb = fb;
     this->fb = fb;
     updateAbbrechen = 0;
     updateAbbrechen = 0;
-	this->dg = dg;
+    this->dg = dg;
     this->after = after;
     this->after = after;
 }
 }
 
 
@@ -19,8 +19,8 @@ Update::~Update()
 {
 {
     if( fb )
     if( fb )
         fb->release();
         fb->release();
-	if( p )
-		p->release();
+    if( p )
+        p->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -44,15 +44,15 @@ void Update::herunterladen()
 
 
 void Update::thread()
 void Update::thread()
 {
 {
-	int dgId = dg;
-	Text err;
-	if( !p->update( dgId, &updateAbbrechen, (FBalken*)fb->getThis(), 0, &err ) )
-	{
+    int dgId = dg;
+    Text err;
+    if( !p->update( dgId, &updateAbbrechen, dynamic_cast<FBalken *>( fb->getThis() ), 0, &err ) )
+    {
         updateAbbrechen = 1;
         updateAbbrechen = 1;
-		if( nachLogin && nachLogin->zNachrichtenListe() )
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err.getThis(), new Text( "Ok" ) );
-	}
-	run = 0;
+        if( nachLogin && nachLogin->zNachrichtenListe() )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), dynamic_cast<Text *>( err.getThis() ), new Text( "Ok" ) );
+    }
+    run = 0;
 }
 }
 
 
 void Update::threadEnd()
 void Update::threadEnd()
@@ -68,37 +68,21 @@ int Update::getDateiGruppe() const
     return dg;
     return dg;
 }
 }
 
 
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *Update::release()
-{
-    if( ref == 2 && run )
-    {
-        updateAbbrechen = 1;
-        warteAufThread( 5000 );
-        if( isRunning() )
-        {
-            ende();
-            after( 0 );
-        }
-    }
-    return Thread::release();
-}
-
 
 
 // inhalt der UpdateHandler Klasse aus UpdateGUI.h
 // inhalt der UpdateHandler Klasse aus UpdateGUI.h
 // Konstruktor
 // Konstruktor
 UpdateHandler::UpdateHandler()
 UpdateHandler::UpdateHandler()
+    : ReferenceCounter()
 {
 {
-	patcher = new Patcher();
-	updates = new RCArray< Update >();
-	ref = 1;
+    patcher = new Patcher();
+    updates = new RCArray< Update >();
 }
 }
 
 
 // Destruktor
 // Destruktor
 UpdateHandler::~UpdateHandler()
 UpdateHandler::~UpdateHandler()
 {
 {
-	updates->release();
-	patcher->release();
+    updates->release();
+    patcher->release();
 }
 }
 
 
 // privat
 // privat
@@ -123,7 +107,7 @@ bool UpdateHandler::add( Update *update )
         return 0;
         return 0;
     }
     }
     int anz = updates->getEintragAnzahl();
     int anz = updates->getEintragAnzahl();
-    update->setPatcher( patcher->getThis() );
+    update->setPatcher( dynamic_cast<Patcher *>( patcher->getThis() ) );
     updates->add( update );
     updates->add( update );
     unlock();
     unlock();
     return 1;
     return 1;
@@ -131,47 +115,32 @@ bool UpdateHandler::add( Update *update )
 
 
 void UpdateHandler::remove( int dg )
 void UpdateHandler::remove( int dg )
 {
 {
-	lock();
-	int anz = updates->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		if( updates->z( i )->getDateiGruppe() == dg )
-		{
-			updates->remove( i );
-			break;
-		}
-	}
-	unlock();
+    lock();
+    int anz = updates->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        if( updates->z( i )->getDateiGruppe() == dg )
+        {
+            updates->remove( i );
+            break;
+        }
+    }
+    unlock();
 }
 }
 
 
 bool UpdateHandler::hat( int dg )
 bool UpdateHandler::hat( int dg )
 {
 {
-	lock();
-	bool ret = 0;
-	int anz = updates->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		if( updates->z( i )->getDateiGruppe() == dg )
-		{
-			ret = 1;
-			break;
-		}
-	}
-	unlock();
-	return ret;
-}
-
-// Reference Counting
-UpdateHandler *UpdateHandler::getThis()
-{
-	ref++;
-	return this;
-}
-
-UpdateHandler *UpdateHandler::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    lock();
+    bool ret = 0;
+    int anz = updates->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        if( updates->z( i )->getDateiGruppe() == dg )
+        {
+            ret = 1;
+            break;
+        }
+    }
+    unlock();
+    return ret;
 }
 }

+ 26 - 32
KSGClient/NachLogin/Update/Update.h

@@ -11,50 +11,44 @@ using namespace Framework;
 class Update : public Thread
 class Update : public Thread
 {
 {
 private:
 private:
-	Patcher *p;
+    Patcher *p;
     FBalken *fb;
     FBalken *fb;
-	bool updateAbbrechen;
-	int dg;
-    std::function< void(bool) > after;
+    bool updateAbbrechen;
+    int dg;
+    std::function< void( bool ) > after;
 
 
 public:
 public:
-	// Konstruktor
-    Update( Schrift *zSchrift, FBalken *fb, int dg, std::function< void(bool) > after = [](bool b){} );
-	// Destruktor
-	~Update();
-	// nicht constant
+    // Konstruktor
+    Update( FBalken *fb, int dg, std::function< void( bool ) > after = []( bool b ) {} );
+    // Destruktor
+    ~Update();
+    // nicht constant
     void setPatcher( Patcher *p );
     void setPatcher( Patcher *p );
     void abbrechen();
     void abbrechen();
     void herunterladen();
     void herunterladen();
-	void thread() override;
+    void thread() override;
     void threadEnd() override;
     void threadEnd() override;
-	// constant
+    // constant
     int getDateiGruppe() const;
     int getDateiGruppe() const;
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 };
 
 
-class UpdateHandler
+class UpdateHandler : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Patcher *patcher;
-	RCArray< Update > *updates;
-	Critical cs;
-	int ref;
-	// privat
-	void lock();
-	void unlock();
+    Patcher *patcher;
+    RCArray< Update > *updates;
+    Critical cs;
+    // privat
+    void lock();
+    void unlock();
 
 
 public:
 public:
-	// Konstruktor
-	UpdateHandler();
-	// Destruktor
-	~UpdateHandler();
-	// nicht constant
-	bool add( Update *update );
-	void remove( int dg = 0 );
-	bool hat( int dg = 0 );
-	// Reference Counting
-	UpdateHandler *getThis();
-	UpdateHandler *release();
+    // Konstruktor
+    UpdateHandler();
+    // Destruktor
+    ~UpdateHandler();
+    // nicht constant
+    bool add( Update *update );
+    void remove( int dg = 0 );
+    bool hat( int dg = 0 );
 };
 };

+ 83 - 83
KSGClient/Netzwerk/ChatMessageProcessor.cpp

@@ -26,27 +26,27 @@ void ChatMessageProcessor::thread()
             break;
             break;
         case 2: // Server Ausgelastet
         case 2: // Server Ausgelastet
             aktion = 1;
             aktion = 1;
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            if( nachLogin && nachLogin->zNachrichtenListe() )
             {
             {
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Server Ausgelastet" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Server Ausgelastet" ),
                                                               new Text( "Der Chat Server ist derzeit ausgelastet. Es wird versucht auf einen anderen Server auszuweichen." ),
                                                               new Text( "Der Chat Server ist derzeit ausgelastet. Es wird versucht auf einen anderen Server auszuweichen." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         case 3: // Fehler
         case 3: // Fehler
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg.message.getThis(), new Text( "Ok" ), 0 );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), dynamic_cast<Text *>( msg.message.getThis() ), new Text( "Ok" ), 0 );
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 4: // Chat Nachricht
         case 4: // Chat Nachricht
-            if( nachLogin &&nachLogin->zChatLeiste() )
+            if( nachLogin && nachLogin->zChatLeiste() )
             {
             {
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 nachLogin->zChatLeiste()->chatNachricht( msg.account, msg.message );
                 nachLogin->zChatLeiste()->chatNachricht( msg.account, msg.message );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         case 5: // Spiel Einladung
         case 5: // Spiel Einladung
@@ -66,8 +66,8 @@ void ChatMessageProcessor::thread()
                 nachricht->append( karte );
                 nachricht->append( karte );
                 int gruppeId = msg.gruppe;
                 int gruppeId = msg.gruppe;
                 int vonAccount = msg.account;
                 int vonAccount = msg.account;
-                hauptScreen->lock();
-                nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ), [ gruppeId, vonAccount ]()
+                uiFactory.initParam.bildschirm->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ), [gruppeId, vonAccount]()
                 {
                 {
                     if( 1 )
                     if( 1 )
                     {
                     {
@@ -93,7 +93,7 @@ void ChatMessageProcessor::thread()
                             }
                             }
                         }
                         }
                         dgt->release();
                         dgt->release();
-                        std::function< void() > ja = [ gruppeId ]()
+                        std::function< void() > ja = [gruppeId]()
                         {
                         {
                             MausEreignis me;
                             MausEreignis me;
                             me.verarbeitet = 0;
                             me.verarbeitet = 0;
@@ -147,7 +147,7 @@ void ChatMessageProcessor::thread()
                             Text msg = "Das Spiel '";
                             Text msg = "Das Spiel '";
                             msg.append( infoClient->getSpielName( spielArt ) );
                             msg.append( infoClient->getSpielName( spielArt ) );
                             msg += "' muss aktualisiert werden.";
                             msg += "' muss aktualisiert werden.";
-                            nachLogin->zNachrichtenListe()->addNachricht( new SpielUpdateNachricht( nachLogin->zNachrichtenListe()->zSchrift(), new Text( "Update" ), msg.getThis(), dgSId, ja, [ gruppeId ]()
+                            nachLogin->zNachrichtenListe()->addNachricht( new SpielUpdateNachricht( new Text( "Update" ), dynamic_cast<Text *>( msg.getThis() ), dgSId, ja, [gruppeId]()
                             {
                             {
                                 if( !anmeldungClient )
                                 if( !anmeldungClient )
                                     anmeldungClient = mainClient->createAnmeldungServerClient();
                                     anmeldungClient = mainClient->createAnmeldungServerClient();
@@ -163,7 +163,7 @@ void ChatMessageProcessor::thread()
                             ja();
                             ja();
                         }
                         }
                     }
                     }
-                }, [ gruppeId ]()
+                }, [gruppeId]()
                 {
                 {
                     if( !anmeldungClient )
                     if( !anmeldungClient )
                         anmeldungClient = mainClient->createAnmeldungServerClient();
                         anmeldungClient = mainClient->createAnmeldungServerClient();
@@ -173,26 +173,26 @@ void ChatMessageProcessor::thread()
                         anmeldungClient->trenne( 0 );
                         anmeldungClient->trenne( 0 );
                     }
                     }
                 } );
                 } );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         case 6: // Account Status ändert sich
         case 6: // Account Status ändert sich
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
                 nachLogin->zFreundesListe()->setStatus( msg.account, msg.message );
                 nachLogin->zFreundesListe()->setStatus( msg.account, msg.message );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 7: // Account Name ändert sich
         case 7: // Account Name ändert sich
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
                 nachLogin->zFreundesListe()->setName( msg.account, msg.message );
                 nachLogin->zFreundesListe()->setName( msg.account, msg.message );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 8: // kein Freund mehr
         case 8: // kein Freund mehr
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
                 nachLogin->zFreundesListe()->removeMember( msg.account );
                 nachLogin->zFreundesListe()->removeMember( msg.account );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 9: // Freundesanfrage
         case 9: // Freundesanfrage
             if( nachLogin && nachLogin->zNachrichtenListe() )
             if( nachLogin && nachLogin->zNachrichtenListe() )
@@ -202,41 +202,41 @@ void ChatMessageProcessor::thread()
                 nachricht->append( infoClient->getSpielerName( msg.account ) );
                 nachricht->append( infoClient->getSpielerName( msg.account ) );
                 nachricht->append( " möchte sich mit dir befreunden." );
                 nachricht->append( " möchte sich mit dir befreunden." );
                 int accountId = msg.account;
                 int accountId = msg.account;
-                hauptScreen->lock();
-                if( nachLogin &&nachLogin->zNachrichtenListe() )
+                uiFactory.initParam.bildschirm->lock();
+                if( nachLogin && nachLogin->zNachrichtenListe() )
                 {
                 {
                     nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ),
                     nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ),
-                                                                  [ accountId ]()
+                                                                  [accountId]()
                     {
                     {
                         chatClient->freundesAnfrageBeantworten( accountId, 1 );
                         chatClient->freundesAnfrageBeantworten( accountId, 1 );
-                    }, [ accountId ]()
+                    }, [accountId]()
                     {
                     {
                         chatClient->freundesAnfrageBeantworten( accountId, 0 );
                         chatClient->freundesAnfrageBeantworten( accountId, 0 );
                     } );
                     } );
                 }
                 }
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         case 0xA: // Neuer Freund
         case 0xA: // Neuer Freund
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
                 nachLogin->zFreundesListe()->addMember( msg.account );
                 nachLogin->zFreundesListe()->addMember( msg.account );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0xB: // Freundesanfrage abgelehnt
         case 0xB: // Freundesanfrage abgelehnt
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            if( nachLogin && nachLogin->zNachrichtenListe() )
             {
             {
                 Text *titel = new Text( "Freundeseinladung Abgelehnt" );
                 Text *titel = new Text( "Freundeseinladung Abgelehnt" );
                 Text *nachricht = new Text( "" );
                 Text *nachricht = new Text( "" );
                 nachricht->append( infoClient->getSpielerName( msg.account ) );
                 nachricht->append( infoClient->getSpielerName( msg.account ) );
                 nachricht->append( " hat deine Freundesanfrage abgelehnt." );
                 nachricht->append( " hat deine Freundesanfrage abgelehnt." );
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0 );
                 nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0 );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         case 0xC: // Einladung zum Chatroom
         case 0xC: // Einladung zum Chatroom
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            if( nachLogin && nachLogin->zNachrichtenListe() )
             {
             {
                 Text *titel = new Text( "Chatroom Einladung" );
                 Text *titel = new Text( "Chatroom Einladung" );
                 Text *nachricht = new Text( "" );
                 Text *nachricht = new Text( "" );
@@ -247,18 +247,18 @@ void ChatMessageProcessor::thread()
                 int chatroomId = msg.chatroom;
                 int chatroomId = msg.chatroom;
                 int vonAccount = msg.account;
                 int vonAccount = msg.account;
                 nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "betreten" ), new Text( "ablehnen" ),
                 nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "betreten" ), new Text( "ablehnen" ),
-                                                              [ chatroomId, vonAccount ]()
+                                                              [chatroomId, vonAccount]()
                 {
                 {
                     nachLogin->zChatLeiste()->addChat( 0, chatroomId );
                     nachLogin->zChatLeiste()->addChat( 0, chatroomId );
                     chatClient->chatroomBetreten( chatroomId );
                     chatClient->chatroomBetreten( chatroomId );
-                }, [ chatroomId, vonAccount ]()
+                }, [chatroomId, vonAccount]()
                 {
                 {
                     chatClient->chatroomEinladungAblehnen( vonAccount, chatroomId );
                     chatClient->chatroomEinladungAblehnen( vonAccount, chatroomId );
                 } );
                 } );
             }
             }
             break;
             break;
         case 0xD: // Einladung zum Chatroom abgelehnt
         case 0xD: // Einladung zum Chatroom abgelehnt
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            if( nachLogin && nachLogin->zNachrichtenListe() )
             {
             {
                 Text *titel = new Text( "Chatroom Einladung Abgelehnt" );
                 Text *titel = new Text( "Chatroom Einladung Abgelehnt" );
                 Text *nachricht = new Text( "" );
                 Text *nachricht = new Text( "" );
@@ -266,28 +266,28 @@ void ChatMessageProcessor::thread()
                 nachricht->append( " möchte dem Chatroom '" );
                 nachricht->append( " möchte dem Chatroom '" );
                 nachricht->append( infoClient->getChatroomName( msg.chatroom ) );
                 nachricht->append( infoClient->getChatroomName( msg.chatroom ) );
                 nachricht->append( "' nicht beitreten." );
                 nachricht->append( "' nicht beitreten." );
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0 );
                 nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0 );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         case 0xE: // Spieler betritt Chatroom
         case 0xE: // Spieler betritt Chatroom
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zChatLeiste() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
                 nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.account );
                 nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.account );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0xF: // Chatroom Nachricht
         case 0xF: // Chatroom Nachricht
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zChatLeiste() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
                 nachLogin->zChatLeiste()->chatroomNachricht( msg.chatroom, msg.account, msg.message );
                 nachLogin->zChatLeiste()->chatroomNachricht( msg.chatroom, msg.account, msg.message );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0x10: // Spieler verlässt Chatroom
         case 0x10: // Spieler verlässt Chatroom
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zChatLeiste() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
                 nachLogin->zChatLeiste()->removeSpieler( msg.chatroom, msg.account );
                 nachLogin->zChatLeiste()->removeSpieler( msg.chatroom, msg.account );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0x11: // Freunde
         case 0x11: // Freunde
         {
         {
@@ -300,9 +300,9 @@ void ChatMessageProcessor::thread()
                     {
                     {
                         Sleep( 50 );
                         Sleep( 50 );
                     }
                     }
-                    hauptScreen->lock();
+                    uiFactory.initParam.bildschirm->lock();
                     nachLogin->zFreundesListe()->addMember( msg.ids.get( i ) );
                     nachLogin->zFreundesListe()->addMember( msg.ids.get( i ) );
-                    hauptScreen->unlock();
+                    uiFactory.initParam.bildschirm->unlock();
                 }
                 }
             }
             }
             break;
             break;
@@ -312,98 +312,98 @@ void ChatMessageProcessor::thread()
             char anzahl = msg.ids.getEintragAnzahl();
             char anzahl = msg.ids.getEintragAnzahl();
             for( char i = 0; i < anzahl; i++ )
             for( char i = 0; i < anzahl; i++ )
             {
             {
-                hauptScreen->lock();
-                if( nachLogin &&nachLogin->zChatLeiste() )
+                uiFactory.initParam.bildschirm->lock();
+                if( nachLogin && nachLogin->zChatLeiste() )
                     nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.ids.get( i ) );
                     nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.ids.get( i ) );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         }
         }
         case 0x13: // Freund online
         case 0x13: // Freund online
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zFreundesListe() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zFreundesListe() )
                 nachLogin->zFreundesListe()->setOnline( msg.account, 1 );
                 nachLogin->zFreundesListe()->setOnline( msg.account, 1 );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0x14: // Freund offline
         case 0x14: // Freund offline
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zFreundesListe() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zFreundesListe() )
                 nachLogin->zFreundesListe()->setOnline( msg.account, 0 );
                 nachLogin->zFreundesListe()->setOnline( msg.account, 0 );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0x15: // Chatroom Admin
         case 0x15: // Chatroom Admin
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zChatLeiste() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
                 nachLogin->zChatLeiste()->setChatroomAdmin( msg.chatroom );
                 nachLogin->zChatLeiste()->setChatroomAdmin( msg.chatroom );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0x16: // Chatroom Kick
         case 0x16: // Chatroom Kick
-            hauptScreen->lock();
-            if( nachLogin &&nachLogin->zChatLeiste() )
+            uiFactory.initParam.bildschirm->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
                 nachLogin->zChatLeiste()->removeChat( 0, msg.chatroom );
                 nachLogin->zChatLeiste()->removeChat( 0, msg.chatroom );
-            hauptScreen->unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 0x17: // Spieler betritt Gruppe
         case 0x17: // Spieler betritt Gruppe
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->spielerBetrittGruppe( msg.gruppe, msg.account );
                 nachLogin->zSpielenFenster()->spielerBetrittGruppe( msg.gruppe, msg.account );
             break;
             break;
         case 0x18: // Spieler verlässt Gruppe
         case 0x18: // Spieler verlässt Gruppe
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->spielerVerlässtGruppe( msg.gruppe, msg.account );
                 nachLogin->zSpielenFenster()->spielerVerlässtGruppe( msg.gruppe, msg.account );
             break;
             break;
         case 0x19: // gruppe Nachricht
         case 0x19: // gruppe Nachricht
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->gruppeNachricht( msg.gruppe, msg.message );
                 nachLogin->zSpielenFenster()->gruppeNachricht( msg.gruppe, msg.message );
             break;
             break;
         case 0x1A: // gruppe Angemeldet
         case 0x1A: // gruppe Angemeldet
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->gruppeAnmelden( msg.gruppe );
                 nachLogin->zSpielenFenster()->gruppeAnmelden( msg.gruppe );
             break;
             break;
         case 0x1B: // gruppe Abgemeldet
         case 0x1B: // gruppe Abgemeldet
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->gruppeAbmelden( msg.gruppe );
                 nachLogin->zSpielenFenster()->gruppeAbmelden( msg.gruppe );
             break;
             break;
         case 0x1C: // gruppe Spiel starten
         case 0x1C: // gruppe Spiel starten
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->setGruppeSpielStarten( msg.gruppe, msg.account == 1 );
                 nachLogin->zSpielenFenster()->setGruppeSpielStarten( msg.gruppe, msg.account == 1 );
             break;
             break;
         case 0x1D: // kick aus Gruppe
         case 0x1D: // kick aus Gruppe
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->kickAusGruppe( msg.gruppe );
                 nachLogin->zSpielenFenster()->kickAusGruppe( msg.gruppe );
             break;
             break;
         case 0x1E: // gruppe Admin
         case 0x1E: // gruppe Admin
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->setGruppeAdmin( msg.gruppe, msg.account );
                 nachLogin->zSpielenFenster()->setGruppeAdmin( msg.gruppe, msg.account );
             break;
             break;
         case 0x1F: // gruppe Einladung abgelehnt
         case 0x1F: // gruppe Einladung abgelehnt
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->gruppeEinadungAbgelehnt( msg.gruppe, msg.account );
                 nachLogin->zSpielenFenster()->gruppeEinadungAbgelehnt( msg.gruppe, msg.account );
             break;
             break;
         case 0x20: // SpielServer Verbindungs Anfrage
         case 0x20: // SpielServer Verbindungs Anfrage
             if( smProcessor )
             if( smProcessor )
                 smProcessor = (SpielMessageProcessor *)smProcessor->release();
                 smProcessor = (SpielMessageProcessor *)smProcessor->release();
             if( spielClient )
             if( spielClient )
-                spielClient = spielClient->release();
+                spielClient = (KSGClient::SpielServerClient *)spielClient->release();
             spielClient = msg.client;
             spielClient = msg.client;
             spielClient->verbinde();
             spielClient->verbinde();
             smProcessor = new SpielMessageProcessor();
             smProcessor = new SpielMessageProcessor();
             break;
             break;
         case 0x21: // Gruppe Einladung abgebrochen
         case 0x21: // Gruppe Einladung abgebrochen
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->gruppeEinladungAbgebrochen( msg.gruppe, msg.account );
                 nachLogin->zSpielenFenster()->gruppeEinladungAbgebrochen( msg.gruppe, msg.account );
             break;
             break;
         case 0x22: // Gruppe Einladung hinzufügen
         case 0x22: // Gruppe Einladung hinzufügen
-            if( nachLogin &&nachLogin->zSpielenFenster() )
+            if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->gruppeEinladungNeu( msg.gruppe, msg.account );
                 nachLogin->zSpielenFenster()->gruppeEinladungNeu( msg.gruppe, msg.account );
             break;
             break;
         default: // Unbekannte Servernachricht
         default: // Unbekannte Servernachricht
-            if( nachLogin &&nachLogin->zNachrichtenListe() )
+            if( nachLogin && nachLogin->zNachrichtenListe() )
             {
             {
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
                                                               new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         }
         }

+ 20 - 20
KSGClient/Netzwerk/KSGServer.cpp

@@ -11,7 +11,7 @@ char *getMainServerIp()
     dat.setDatei( "data/tmp/m.ip" );
     dat.setDatei( "data/tmp/m.ip" );
     dat.open( Datei::Style::lesen );
     dat.open( Datei::Style::lesen );
     unsigned char len = 0;
     unsigned char len = 0;
-    dat.lese( (char*)&len, 1 );
+    dat.lese( (char *)&len, 1 );
     char *ip = new char[ len + 1 ];
     char *ip = new char[ len + 1 ];
     ip[ len ] = 0;
     ip[ len ] = 0;
     dat.lese( ip, len );
     dat.lese( ip, len );
@@ -25,33 +25,33 @@ unsigned short getMainServerPort()
     d.setDatei( "data/tmp/m.port" );
     d.setDatei( "data/tmp/m.port" );
     d.open( Datei::Style::lesen );
     d.open( Datei::Style::lesen );
     int port = 0;
     int port = 0;
-    d.lese( (char*)&port, 4 );
+    d.lese( (char *)&port, 4 );
     d.close();
     d.close();
     return port;
     return port;
 }
 }
 
 
 unsigned int getKlientId()
 unsigned int getKlientId()
 {
 {
-	Datei *dat = new Datei();
-	dat->setDatei( "data/tmp/k.id" );
-	dat->open( Datei::Style::lesen );
-	unsigned int ret = 0;
-	dat->lese( (char*)&ret, 4 );
-	dat->close();
-	dat = dat->release();
-	return ret;
+    Datei *dat = new Datei();
+    dat->setDatei( "data/tmp/k.id" );
+    dat->open( Datei::Style::lesen );
+    unsigned int ret = 0;
+    dat->lese( (char *)&ret, 4 );
+    dat->close();
+    dat->release();
+    return ret;
 }
 }
 
 
 char getSchlüssel( char **schlüssel )
 char getSchlüssel( char **schlüssel )
 {
 {
-	char län = 0;
-	Datei *dat = new Datei();
-	dat->setDatei( "data/tmp/crypt.key" );
-	dat->open( Datei::Style::lesen );
-	dat->lese( &län, 1 );
-	*schlüssel = new char[ län ];
-	dat->lese( *schlüssel, län );
-	dat->close();
-	dat = dat->release();
-	return län;
+    char län = 0;
+    Datei *dat = new Datei();
+    dat->setDatei( "data/tmp/crypt.key" );
+    dat->open( Datei::Style::lesen );
+    dat->lese( &län, 1 );
+    *schlüssel = new char[ län ];
+    dat->lese( *schlüssel, län );
+    dat->close();
+    dat->release();
+    return län;
 }
 }

+ 2 - 17
KSGClient/Netzwerk/Patcher.cpp

@@ -3,16 +3,16 @@
 #include "../Global/Variablen.h"
 #include "../Global/Variablen.h"
 #include <Globals.h>
 #include <Globals.h>
 
 
-typedef UpdaterV *( *GetUpdater )( KSGClient::PatchServerClient* );
+typedef UpdaterV *( *GetUpdater )( KSGClient::PatchServerClient * );
 
 
 // Inhalt der Patcher Klasse aus Patcher.h
 // Inhalt der Patcher Klasse aus Patcher.h
 // Konstruktor
 // Konstruktor
 Patcher::Patcher()
 Patcher::Patcher()
+    : ReferenceCounter()
 {
 {
     updater = 0;
     updater = 0;
     updateDll = 0;
     updateDll = 0;
     läuft = 0;
     läuft = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -98,19 +98,4 @@ bool Patcher::l
 int Patcher::getDownload() const
 int Patcher::getDownload() const
 {
 {
     return updater ? updater->getDownload() : 0;
     return updater ? updater->getDownload() : 0;
-}
-
-// Reference Counting
-Patcher *Patcher::getThis()
-{
-    ref++;
-    return this;
-}
-
-Patcher *Patcher::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }
 }

+ 13 - 17
KSGClient/Netzwerk/Patcher.h

@@ -9,27 +9,23 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class Patcher
+class Patcher : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	HMODULE updateDll;
-	UpdaterV *updater;
-	bool läuft;
-	int ref;
+    HMODULE updateDll;
+    UpdaterV *updater;
+    bool läuft;
 
 
 public:
 public:
-	// Konstruktor
-	Patcher();
-	// Destruktor
-	~Patcher();
-	// nicht constant
-	bool update( int dateiGruppe, bool *abbruch, FBalken *fortschritt, TextFeld *status, Text *zError );
-	// constant
-	bool läuftPatch() const;
-	int getDownload() const;
-	// Reference Counting
-	Patcher *getThis();
-	Patcher *release();
+    // Konstruktor
+    Patcher();
+    // Destruktor
+    ~Patcher();
+    // nicht constant
+    bool update( int dateiGruppe, bool *abbruch, FBalken *fortschritt, TextFeld *status, Text *zError );
+    // constant
+    bool läuftPatch() const;
+    int getDownload() const;
 };
 };
 
 
 #endif
 #endif

+ 7 - 7
KSGClient/Netzwerk/SpielMessageProcessor.cpp

@@ -24,15 +24,15 @@ void SpielMessageProcessor::thread()
             break;
             break;
         case 2: // SpielErstellt abbruch
         case 2: // SpielErstellt abbruch
             if( nachLogin && nachLogin->zNachrichtenListe() )
             if( nachLogin && nachLogin->zNachrichtenListe() )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Spiel Abgebrochen" ), msg.message.getThis(), new Text( "Ok" ), 0 );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Spiel Abgebrochen" ), dynamic_cast<Text *>( msg.message.getThis() ), new Text( "Ok" ), 0 );
             if( nachLogin && nachLogin->zSpielenFenster() )
             if( nachLogin && nachLogin->zSpielenFenster() )
                 nachLogin->zSpielenFenster()->spielGefundenAbbruch();
                 nachLogin->zSpielenFenster()->spielGefundenAbbruch();
             break;
             break;
         case 3: // Fehler
         case 3: // Fehler
-            hauptScreen->lock();
+            uiFactory.initParam.bildschirm->lock();
             if( nachLogin && nachLogin->zNachrichtenListe() )
             if( nachLogin && nachLogin->zNachrichtenListe() )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg.message.getThis(), new Text( "Ok" ), 0 );
-            hauptScreen->unlock();
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), dynamic_cast<Text *>( msg.message.getThis() ), new Text( "Ok" ), 0 );
+            uiFactory.initParam.bildschirm->unlock();
             break;
             break;
         case 4: // zurück in Warteschlange
         case 4: // zurück in Warteschlange
             if( nachLogin && nachLogin->zSpielenFenster() )
             if( nachLogin && nachLogin->zSpielenFenster() )
@@ -44,7 +44,7 @@ void SpielMessageProcessor::thread()
             break;
             break;
         case 6: // SpielErstellt Initialisierung
         case 6: // SpielErstellt Initialisierung
             if( nachLogin && nachLogin->zSpielenFenster() )
             if( nachLogin && nachLogin->zSpielenFenster() )
-                nachLogin->zSpielenFenster()->teamAuswahlInit( (SpielerTeamStruktur*)msg.sts );
+                nachLogin->zSpielenFenster()->teamAuswahlInit( (SpielerTeamStruktur *)msg.sts );
             else
             else
                 msg.sts->release();
                 msg.sts->release();
             msg.sts = new SpielerTeamStruktur();
             msg.sts = new SpielerTeamStruktur();
@@ -101,11 +101,11 @@ void SpielMessageProcessor::thread()
         default: // Unbekannte Servernachricht
         default: // Unbekannte Servernachricht
             if( nachLogin && nachLogin->zNachrichtenListe() )
             if( nachLogin && nachLogin->zNachrichtenListe() )
             {
             {
-                hauptScreen->lock();
+                uiFactory.initParam.bildschirm->lock();
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                 nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
                                                               new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
                                                               new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
                                                               new Text( "Ok" ), 0 );
                                                               new Text( "Ok" ), 0 );
-                hauptScreen->unlock();
+                uiFactory.initParam.bildschirm->unlock();
             }
             }
             break;
             break;
         }
         }

+ 13 - 14
KSGClient/Start/Start.cpp

@@ -36,7 +36,7 @@ bool fensterTE( void *p, void *f, TastaturEreignis te )
 int KSGStart Framework::Start( Startparam p )
 int KSGStart Framework::Start( Startparam p )
 {
 {
     Network::Start( 50 );
     Network::Start( 50 );
-    
+
     if( !DateiExistiert( "data/user_options.ini" ) )
     if( !DateiExistiert( "data/user_options.ini" ) )
     {
     {
         userOptions = new InitDatei( "data/default_options.ini" );
         userOptions = new InitDatei( "data/default_options.ini" );
@@ -76,16 +76,16 @@ int KSGStart Framework::Start( Startparam p )
     fenster->setVSchließAktion( fensterVS );
     fenster->setVSchließAktion( fensterVS );
     Bildschirm *bildschirm = 0;
     Bildschirm *bildschirm = 0;
     if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX9" ) )
     if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX9" ) )
-        bildschirm = new Bildschirm3D( fenster->getThis(), DIRECTX9 );
+        bildschirm = new Bildschirm3D( dynamic_cast<WFenster *>( fenster->getThis() ), DIRECTX9 );
     else if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX11" ) )
     else if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX11" ) )
-        bildschirm = new Bildschirm3D( fenster->getThis(), DIRECTX11 );
+        bildschirm = new Bildschirm3D( dynamic_cast<WFenster *>( fenster->getThis() ), DIRECTX11 );
     else if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX12" ) )
     else if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX12" ) )
-        bildschirm = new Bildschirm3D( fenster->getThis(), DIRECTX12 );
+        bildschirm = new Bildschirm3D( dynamic_cast<WFenster *>( fenster->getThis() ), DIRECTX12 );
     else
     else
-        bildschirm = new Bildschirm3D( fenster->getThis() );
+        bildschirm = new Bildschirm3D( dynamic_cast<WFenster *>( fenster->getThis() ) );
     if( userOptions->wertExistiert( "ScreenWidth" ) && userOptions->wertExistiert( "ScreenHeight" ) )
     if( userOptions->wertExistiert( "ScreenWidth" ) && userOptions->wertExistiert( "ScreenHeight" ) )
         bildschirm->setBackBufferSize( *userOptions->zWert( "ScreenWidth" ), *userOptions->zWert( "ScreenHeight" ) );
         bildschirm->setBackBufferSize( *userOptions->zWert( "ScreenWidth" ), *userOptions->zWert( "ScreenHeight" ) );
-    fenster->setBildschirm( bildschirm->getThis() );
+    fenster->setBildschirm( dynamic_cast<Bildschirm *>( bildschirm->getThis() ) );
     fenster->setAnzeigeModus( 1 );
     fenster->setAnzeigeModus( 1 );
     fenster->setFokus();
     fenster->setFokus();
     bildschirm->update();
     bildschirm->update();
@@ -96,14 +96,13 @@ int KSGStart Framework::Start( Startparam p )
     schriftDatei->setPfad( new Text( "data/schriften/normal.ltds" ) );
     schriftDatei->setPfad( new Text( "data/schriften/normal.ltds" ) );
     schriftDatei->leseDaten();
     schriftDatei->leseDaten();
     Schrift *schrift = schriftDatei->ladeSchrift();
     Schrift *schrift = schriftDatei->ladeSchrift();
-    schriftDatei = schriftDatei->release();
-
-    Render *render = new Render( schrift->getThis() );
-    render->setBildschirm( bildschirm->getThis() );
+    schriftDatei = (LTDSDatei *)schriftDatei->release();
 
 
     Framework::logLine( "Globale Variablen werden initialisiert..." );
     Framework::logLine( "Globale Variablen werden initialisiert..." );
     initVariables( schrift, bildschirm );
     initVariables( schrift, bildschirm );
 
 
+    Render *render = new Render();
+
     Framework::logLine( "Zeichen Thread wird gestartet..." );
     Framework::logLine( "Zeichen Thread wird gestartet..." );
     render->start();
     render->start();
 
 
@@ -112,19 +111,19 @@ int KSGStart Framework::Start( Startparam p )
 
 
     Framework::logLine( "Zeichen Thread wird beendet..." );
     Framework::logLine( "Zeichen Thread wird beendet..." );
     render->beenden();
     render->beenden();
-    render = (Render*)render->release();
+    render = (Render *)render->release();
 
 
     bildschirm->removeMember( vorLogin->zFenster() );
     bildschirm->removeMember( vorLogin->zFenster() );
     bildschirm->removeMember( nachLogin );
     bildschirm->removeMember( nachLogin );
 
 
     Framework::logLine( "Speicher wird freigegeben..." );
     Framework::logLine( "Speicher wird freigegeben..." );
     releaseVariables();
     releaseVariables();
-    schrift = schrift->release();
+    schrift = (Schrift *)schrift->release();
 
 
-    bildschirm = bildschirm->release();
+    bildschirm = (Bildschirm *)bildschirm->release();
     fenster->setBildschirm( 0 );
     fenster->setBildschirm( 0 );
     fenster->zerstören();
     fenster->zerstören();
-    fenster = fenster->release();
+    fenster = (WFenster *)fenster->release();
 
 
     Network::Exit();
     Network::Exit();
 
 

+ 52 - 82
KSGClient/VorLogin/Account verwalten/EMail.cpp

@@ -7,43 +7,43 @@
 
 
 // Inhalt der EMailÄndern Klasse aus EMail.h
 // Inhalt der EMailÄndern Klasse aus EMail.h
 // Konstruktor
 // Konstruktor
-EMailÄndern::EMailÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster )
+EMailÄndern::EMailÄndern( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    eMailÄndern = initKnopf( 10, 210, 130, 30, zSchrift, Knopf::Style::Sichtbar, "E-Mail ändern" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    eMailÄndern = initKnopf( 10, 210, 130, 30, Knopf::Style::Sichtbar, "E-Mail ändern" );
     eMailÄndern->setMausEreignisParameter( this );
     eMailÄndern->setMausEreignisParameter( this );
     eMailÄndern->setMausEreignis( eMailÄndernEMailÄndernME );
     eMailÄndern->setMausEreignis( eMailÄndernEMailÄndernME );
-    initToolTip( eMailÄndern, "Account E-Mail Adresse ändern.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( eMailÄndern->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 100, 250, 200, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "E-Mail ändern" );
-    name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
+    initToolTip( eMailÄndern, "Account E-Mail Adresse ändern." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( eMailÄndern->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 100, 250, 200, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "E-Mail ändern" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( eMailÄndernNameTE );
     name->setTastaturEreignis( eMailÄndernNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( eMailÄndernPasswortTE );
     passwort->setTastaturEreignis( eMailÄndernPasswortTE );
-    initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    geheimnis = initTextFeld( 20, 80, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    geheimnis = initTextFeld( 20, 80, 208, 20, TextFeld::Style::TextFeld, "Geheimis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( eMailÄndernGeheimnisTE );
     geheimnis->setTastaturEreignis( eMailÄndernGeheimnisTE );
-    initToolTip( geheimnis, "Account Geheimnis.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    nEMail = initTextFeld( 20, 110, 208, 20, zSchrift, TextFeld::Style::TextFeld, "neue E-Mail Adresse" );
+    initToolTip( geheimnis, "Account Geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    nEMail = initTextFeld( 20, 110, 208, 20, TextFeld::Style::TextFeld, "neue E-Mail Adresse" );
     nEMail->setTastaturEreignisParameter( this );
     nEMail->setTastaturEreignisParameter( this );
     nEMail->setTastaturEreignis( eMailÄndernNEMailTE );
     nEMail->setTastaturEreignis( eMailÄndernNEMailTE );
-    initToolTip( nEMail, "Neue E-Mail Adresse.", zSchrift, hauptScreen );
-    fenster->addMember( nEMail->getThis() );
-    weiter = initKnopf( 74, 140, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( nEMail, "Neue E-Mail Adresse." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nEMail->getThis() ) );
+    weiter = initKnopf( 74, 140, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( eMailÄndernWeiterME );
     weiter->setMausEreignis( eMailÄndernWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -70,7 +70,7 @@ EMail
 // Privat
 // Privat
 void EMailÄndern::zeigeNachricht( const char *txt )
 void EMailÄndern::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
@@ -134,7 +134,7 @@ bool EMail
         eMailÄndern->setRahmenBreite( 3 );
         eMailÄndern->setRahmenBreite( 3 );
         eMailÄndern->setAlphaFeldFarbe( 0xFF000000 );
         eMailÄndern->setAlphaFeldFarbe( 0xFF000000 );
         eMailÄndern->setAlphaFeldStrength( 20 );
         eMailÄndern->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 200 );
         fenster->setSize( 255, 200 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -238,7 +238,7 @@ bool EMail
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 200 );
             fenster->setSize( 255, 200 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -266,56 +266,41 @@ void EMail
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
 }
 
 
-// Reference Counting
-EMailÄndern * EMailÄndern::getThis()
-{
-    ref++;
-    return this;
-}
-
-EMailÄndern *EMailÄndern::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der EMailVergessen Klasse aus EMail.h
 // Inhalt der EMailVergessen Klasse aus EMail.h
 // Konstruktor
 // Konstruktor
-EMailVergessen::EMailVergessen( Schrift * zSchrift, Fenster * zVorLoginFenster )
+EMailVergessen::EMailVergessen( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    eMailVergessen = initKnopf( 10, 410, 130, 30, zSchrift, Knopf::Style::Sichtbar, "E-Mail vergessen" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    eMailVergessen = initKnopf( 10, 410, 130, 30, Knopf::Style::Sichtbar, "E-Mail vergessen" );
     eMailVergessen->setMausEreignisParameter( this );
     eMailVergessen->setMausEreignisParameter( this );
     eMailVergessen->setMausEreignis( eMailVergessenEMailVergessenME );
     eMailVergessen->setMausEreignis( eMailVergessenEMailVergessenME );
-    initToolTip( eMailVergessen, "Account E-Mail Adresse anzeigen.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( eMailVergessen->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 85, 250, 170, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "E-Mail vergessen" );
-    name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
+    initToolTip( eMailVergessen, "Account E-Mail Adresse anzeigen." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( eMailVergessen->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 85, 250, 170, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "E-Mail vergessen" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( eMailVergessenNameTE );
     name->setTastaturEreignis( eMailVergessenNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( eMailVergessenPasswortTE );
     passwort->setTastaturEreignis( eMailVergessenPasswortTE );
-    initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    geheimnis = initTextFeld( 20, 80, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    geheimnis = initTextFeld( 20, 80, 208, 20, TextFeld::Style::TextFeld, "Geheimis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( eMailVergessenGeheimnisTE );
     geheimnis->setTastaturEreignis( eMailVergessenGeheimnisTE );
-    initToolTip( geheimnis, "Account Geheimnis.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    weiter = initKnopf( 74, 110, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( geheimnis, "Account Geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    weiter = initKnopf( 74, 110, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( eMailVergessenWeiterME );
     weiter->setMausEreignis( eMailVergessenWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -340,7 +325,7 @@ EMailVergessen::~EMailVergessen()
 // Privat
 // Privat
 void EMailVergessen::zeigeNachricht( const char *txt )
 void EMailVergessen::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
@@ -403,7 +388,7 @@ bool EMailVergessen::eMailVergessenME( void *obj, MausEreignis me ) // MausEreig
         eMailVergessen->setRahmenBreite( 3 );
         eMailVergessen->setRahmenBreite( 3 );
         eMailVergessen->setAlphaFeldFarbe( 0xFF000000 );
         eMailVergessen->setAlphaFeldFarbe( 0xFF000000 );
         eMailVergessen->setAlphaFeldStrength( 20 );
         eMailVergessen->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 170 );
         fenster->setSize( 255, 170 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 85 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 85 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -487,7 +472,7 @@ bool EMailVergessen::weiterME( void *obj, MausEreignis me ) // MausEreignis im K
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 170 );
             fenster->setSize( 255, 170 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 85 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 85 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -512,7 +497,7 @@ void EMailVergessen::setReturn( bool ret, char *eMail ) // Setzt den Returnwert
         nachricht->append( eMail );
         nachricht->append( eMail );
         nachricht->append( "'." );
         nachricht->append( "'." );
         zeigeNachricht( nachricht->getText() );
         zeigeNachricht( nachricht->getText() );
-        nachricht = nachricht->release();
+        nachricht = (Text *)nachricht->release();
     }
     }
     else if( lastError.getLength() )
     else if( lastError.getLength() )
         zeigeNachricht( lastError );
         zeigeNachricht( lastError );
@@ -521,21 +506,6 @@ void EMailVergessen::setReturn( bool ret, char *eMail ) // Setzt den Returnwert
     delete eMail;
     delete eMail;
 }
 }
 
 
-// Reference Counting
-EMailVergessen *EMailVergessen::getThis()
-{
-    ref++;
-    return this;
-}
-
-EMailVergessen *EMailVergessen::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // messages
 // messages
 bool eMailÄndernEMailÄndernME( void *p, void *obj, MausEreignis me )
 bool eMailÄndernEMailÄndernME( void *p, void *obj, MausEreignis me )

+ 44 - 52
KSGClient/VorLogin/Account verwalten/EMail.h

@@ -10,68 +10,60 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class EMailÄndern
+class EMailÄndern : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *eMailÄndern;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	TextFeld *geheimnis;
-	TextFeld *nEMail;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *eMailÄndern;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    TextFeld *geheimnis;
+    TextFeld *nEMail;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	EMailÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~EMailÄndern();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool eMailÄndernME( void *obj, MausEreignis me ); // MausEreignis im Knopf eMailÄndern
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool nEMailTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld nEMail
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setReturn( bool ret ); // Setzt den Returnwert
-	// Reference Counting
-	EMailÄndern *getThis();
-	EMailÄndern *release();
+    // Konstruktor
+    EMailÄndern( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~EMailÄndern();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool eMailÄndernME( void *obj, MausEreignis me ); // MausEreignis im Knopf eMailÄndern
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool nEMailTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld nEMail
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setReturn( bool ret ); // Setzt den Returnwert
 };
 };
 
 
-class EMailVergessen
+class EMailVergessen : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *eMailVergessen;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	TextFeld *geheimnis;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *eMailVergessen;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    TextFeld *geheimnis;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	EMailVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~EMailVergessen();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool eMailVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf eMailVergessen
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setReturn( bool ret, char *eMail ); // Setzt den Returnwert
-	// Reference Counting
-	EMailVergessen *getThis();
-	EMailVergessen *release();
+    // Konstruktor
+    EMailVergessen( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~EMailVergessen();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool eMailVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf eMailVergessen
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setReturn( bool ret, char *eMail ); // Setzt den Returnwert
 };
 };
 
 
 // messages
 // messages

+ 48 - 78
KSGClient/VorLogin/Account verwalten/Geheimnis.cpp

@@ -7,43 +7,43 @@
 
 
 // Inhalt der GeheimnisÄndern Klasse aus Geheimnis.h
 // Inhalt der GeheimnisÄndern Klasse aus Geheimnis.h
 // Konstruktor
 // Konstruktor
-GeheimnisÄndern::GeheimnisÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster )
+GeheimnisÄndern::GeheimnisÄndern( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    geheimnisÄndern = initKnopf( 10, 250, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Geheimnis ändern" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    geheimnisÄndern = initKnopf( 10, 250, 130, 30, Knopf::Style::Sichtbar, "Geheimnis ändern" );
     geheimnisÄndern->setMausEreignisParameter( this );
     geheimnisÄndern->setMausEreignisParameter( this );
     geheimnisÄndern->setMausEreignis( geheimnisÄndernGeheimnisÄndernME );
     geheimnisÄndern->setMausEreignis( geheimnisÄndernGeheimnisÄndernME );
-    initToolTip( geheimnisÄndern, "Account Geheimnis ändern.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( geheimnisÄndern->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 100, 250, 200, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Geheimnis ändern" );
-    name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
+    initToolTip( geheimnisÄndern, "Account Geheimnis ändern." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( geheimnisÄndern->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 100, 250, 200, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Geheimnis ändern" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( geheimnisÄndernNameTE );
     name->setTastaturEreignis( geheimnisÄndernNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( geheimnisÄndernPasswortTE );
     passwort->setTastaturEreignis( geheimnisÄndernPasswortTE );
-    initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    geheimnis = initTextFeld( 20, 80, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    geheimnis = initTextFeld( 20, 80, 208, 20, TextFeld::Style::TextFeld, "Geheimis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( geheimnisÄndernGeheimnisTE );
     geheimnis->setTastaturEreignis( geheimnisÄndernGeheimnisTE );
-    initToolTip( geheimnis, "Account Geheimni.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    nGeheimnis = initTextFeld( 20, 110, 208, 20, zSchrift, TextFeld::Style::TextFeld, "neues Geheimnis" );
+    initToolTip( geheimnis, "Account Geheimni." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    nGeheimnis = initTextFeld( 20, 110, 208, 20, TextFeld::Style::TextFeld, "neues Geheimnis" );
     nGeheimnis->setTastaturEreignisParameter( this );
     nGeheimnis->setTastaturEreignisParameter( this );
     nGeheimnis->setTastaturEreignis( geheimnisÄndernNGeheimnisTE );
     nGeheimnis->setTastaturEreignis( geheimnisÄndernNGeheimnisTE );
-    initToolTip( nGeheimnis, "Neues Account Geheimnis.", zSchrift, hauptScreen );
-    fenster->addMember( nGeheimnis->getThis() );
-    weiter = initKnopf( 74, 140, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( nGeheimnis, "Neues Account Geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nGeheimnis->getThis() ) );
+    weiter = initKnopf( 74, 140, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( geheimnisÄndernWeiterME );
     weiter->setMausEreignis( geheimnisÄndernWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -70,7 +70,7 @@ Geheimnis
 // Privat
 // Privat
 void GeheimnisÄndern::zeigeNachricht( const char *txt )
 void GeheimnisÄndern::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
@@ -134,7 +134,7 @@ bool Geheimnis
         geheimnisÄndern->setRahmenBreite( 3 );
         geheimnisÄndern->setRahmenBreite( 3 );
         geheimnisÄndern->setAlphaFeldFarbe( 0xFF000000 );
         geheimnisÄndern->setAlphaFeldFarbe( 0xFF000000 );
         geheimnisÄndern->setAlphaFeldStrength( 20 );
         geheimnisÄndern->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 200 );
         fenster->setSize( 255, 200 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -236,7 +236,7 @@ bool Geheimnis
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 200 );
             fenster->setSize( 255, 200 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 100 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -264,51 +264,36 @@ void Geheimnis
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
 }
 
 
-// Reference Counting
-GeheimnisÄndern * GeheimnisÄndern::getThis()
-{
-    ref++;
-    return 0;
-}
-
-GeheimnisÄndern *GeheimnisÄndern::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der GeheimnisVergessen Klasse aus Geheimnis.h
 // Inhalt der GeheimnisVergessen Klasse aus Geheimnis.h
 // Konstruktor
 // Konstruktor
-GeheimnisVergessen::GeheimnisVergessen( Schrift * zSchrift, Fenster * zVorLoginFenster )
+GeheimnisVergessen::GeheimnisVergessen( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    geheimnisVergessen = initKnopf( 10, 370, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Geheimnis vergessen" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    geheimnisVergessen = initKnopf( 10, 370, 130, 30, Knopf::Style::Sichtbar, "Geheimnis vergessen" );
     geheimnisVergessen->setMausEreignisParameter( this );
     geheimnisVergessen->setMausEreignisParameter( this );
     geheimnisVergessen->setMausEreignis( geheimnisVergessenGeheimnisVergessenME );
     geheimnisVergessen->setMausEreignis( geheimnisVergessenGeheimnisVergessenME );
-    initToolTip( geheimnisVergessen, "Account Geheimnis per E-Mail senden.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( geheimnisVergessen->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Geheimnis vergessen" );
-    name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
+    initToolTip( geheimnisVergessen, "Account Geheimnis per E-Mail senden." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( geheimnisVergessen->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Geheimnis vergessen" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( geheimnisVergessenNameTE );
     name->setTastaturEreignis( geheimnisVergessenNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( geheimnisVergessenPasswortTE );
     passwort->setTastaturEreignis( geheimnisVergessenPasswortTE );
-    initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    weiter = initKnopf( 74, 80, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    weiter = initKnopf( 74, 80, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( geheimnisVergessenWeiterME );
     weiter->setMausEreignis( geheimnisVergessenWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -331,7 +316,7 @@ GeheimnisVergessen::~GeheimnisVergessen()
 // Privat
 // Privat
 void GeheimnisVergessen::zeigeNachricht( const char *txt )
 void GeheimnisVergessen::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     fenster->setSize( 250, 150 );
     fenster->setSize( 250, 150 );
@@ -393,7 +378,7 @@ bool GeheimnisVergessen::geheimnisVergessenME( void *obj, MausEreignis me ) // M
         geheimnisVergessen->setRahmenBreite( 3 );
         geheimnisVergessen->setRahmenBreite( 3 );
         geheimnisVergessen->setAlphaFeldFarbe( 0xFF000000 );
         geheimnisVergessen->setAlphaFeldFarbe( 0xFF000000 );
         geheimnisVergessen->setAlphaFeldStrength( 20 );
         geheimnisVergessen->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 140 );
         fenster->setSize( 255, 140 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -457,7 +442,7 @@ bool GeheimnisVergessen::weiterME( void *obj, MausEreignis me ) // MausEreignis
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 140 );
             fenster->setSize( 255, 140 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -483,21 +468,6 @@ void GeheimnisVergessen::setResult( bool ret ) // Setzt den Returnwert
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
 }
 
 
-// Reference Counting
-GeheimnisVergessen * GeheimnisVergessen::getThis()
-{
-    ref++;
-    return this;
-}
-
-GeheimnisVergessen *GeheimnisVergessen::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // messages
 // messages
 bool geheimnisÄndernGeheimnisÄndernME( void *p, void *obj, MausEreignis me )
 bool geheimnisÄndernGeheimnisÄndernME( void *p, void *obj, MausEreignis me )

+ 42 - 50
KSGClient/VorLogin/Account verwalten/Geheimnis.h

@@ -10,66 +10,58 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class GeheimnisÄndern
+class GeheimnisÄndern : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *geheimnisÄndern;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	TextFeld *geheimnis;
-	TextFeld *nGeheimnis;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *geheimnisÄndern;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    TextFeld *geheimnis;
+    TextFeld *nGeheimnis;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	GeheimnisÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~GeheimnisÄndern();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool geheimnisÄndernME( void *obj, MausEreignis me ); // MausEreignis im Knopf geheimnisÄndern
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool nGeheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld nGeheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setResult( bool ret ); // Setzt den Returnwert
-	// Reference Counting
-	GeheimnisÄndern *getThis();
-	GeheimnisÄndern *release();
+    // Konstruktor
+    GeheimnisÄndern( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~GeheimnisÄndern();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool geheimnisÄndernME( void *obj, MausEreignis me ); // MausEreignis im Knopf geheimnisÄndern
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool nGeheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld nGeheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setResult( bool ret ); // Setzt den Returnwert
 };
 };
 
 
-class GeheimnisVergessen
+class GeheimnisVergessen : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *geheimnisVergessen;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *geheimnisVergessen;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	GeheimnisVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~GeheimnisVergessen();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool geheimnisVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf geheimnisVergessen
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setResult( bool ret ); // Setzt den Returnwert
-	// Reference Counting
-	GeheimnisVergessen *getThis();
-	GeheimnisVergessen *release();
+    // Konstruktor
+    GeheimnisVergessen( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~GeheimnisVergessen();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool geheimnisVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf geheimnisVergessen
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setResult( bool ret ); // Setzt den Returnwert
 };
 };
 
 
 // messages
 // messages

+ 21 - 36
KSGClient/VorLogin/Account verwalten/Name.cpp

@@ -7,33 +7,33 @@
 
 
 // Inhalt der NameVergessen Klasse aus Name.h
 // Inhalt der NameVergessen Klasse aus Name.h
 // Konstruktor
 // Konstruktor
-NameVergessen::NameVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster )
+NameVergessen::NameVergessen( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    nameVergessen = initKnopf( 10, 290, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Name vergessen" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    nameVergessen = initKnopf( 10, 290, 130, 30, Knopf::Style::Sichtbar, "Name vergessen" );
     nameVergessen->setMausEreignisParameter( this );
     nameVergessen->setMausEreignisParameter( this );
     nameVergessen->setMausEreignis( nameVergessenNameVergessenME );
     nameVergessen->setMausEreignis( nameVergessenNameVergessenME );
-    initToolTip( nameVergessen, "Accoutnt Name per E-MAil senden.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( nameVergessen->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Name vergessen" );
-    passwort = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
+    initToolTip( nameVergessen, "Accoutnt Name per E-MAil senden." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( nameVergessen->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Name vergessen" );
+    passwort = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( nameVergessenPasswortTE );
     passwort->setTastaturEreignis( nameVergessenPasswortTE );
-    initToolTip( passwort, "Accoutnt Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    geheimnis = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
+    initToolTip( passwort, "Accoutnt Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    geheimnis = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Geheimis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( nameVergessenGeheimnisTE );
     geheimnis->setTastaturEreignis( nameVergessenGeheimnisTE );
-    initToolTip( geheimnis, "Account Geheimnis.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    weiter = initKnopf( 74, 80, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( geheimnis, "Account Geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    weiter = initKnopf( 74, 80, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( nameVergessenWeiterME );
     weiter->setMausEreignis( nameVergessenWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -56,7 +56,7 @@ NameVergessen::~NameVergessen()
 // Privat
 // Privat
 void NameVergessen::zeigeNachricht( const char *txt )
 void NameVergessen::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     fenster->setSize( 250, 150 );
     fenster->setSize( 250, 150 );
@@ -118,7 +118,7 @@ bool NameVergessen::nameVergessenME( void *obj, MausEreignis me ) // MausEreigni
         nameVergessen->setRahmenBreite( 3 );
         nameVergessen->setRahmenBreite( 3 );
         nameVergessen->setAlphaFeldFarbe( 0xFF000000 );
         nameVergessen->setAlphaFeldFarbe( 0xFF000000 );
         nameVergessen->setAlphaFeldStrength( 20 );
         nameVergessen->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 140 );
         fenster->setSize( 255, 140 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -182,7 +182,7 @@ bool NameVergessen::weiterME( void *obj, MausEreignis me ) // MausEreignis im Kn
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 140 );
             fenster->setSize( 255, 140 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -208,21 +208,6 @@ void NameVergessen::setResult( bool ret ) // Setzt den Returnwert
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
 }
 
 
-// Reference Counting
-NameVergessen * NameVergessen::getThis()
-{
-    ref++;
-    return this;
-}
-
-NameVergessen *NameVergessen::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // messages
 // messages
 bool nameVergessenNameVergessenME( void *p, void *obj, MausEreignis me )
 bool nameVergessenNameVergessenME( void *p, void *obj, MausEreignis me )

+ 19 - 23
KSGClient/VorLogin/Account verwalten/Name.h

@@ -9,33 +9,29 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class NameVergessen
+class NameVergessen : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *nameVergessen;
-	Fenster *fenster;
-	TextFeld *passwort;
-	TextFeld *geheimnis;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *nameVergessen;
+    Fenster *fenster;
+    TextFeld *passwort;
+    TextFeld *geheimnis;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	NameVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~NameVergessen();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool nameVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf nameVergessen
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setResult( bool ret ); // Setzt den Returnwert
-	// Reference Counting
-	NameVergessen *getThis();
-	NameVergessen *release();
+    // Konstruktor
+    NameVergessen( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~NameVergessen();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool nameVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf nameVergessen
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setResult( bool ret ); // Setzt den Returnwert
 };
 };
 
 
 // messages
 // messages

+ 51 - 81
KSGClient/VorLogin/Account verwalten/Passwort.cpp

@@ -7,48 +7,48 @@
 
 
 // Inhalt der PasswortÄndern Klasse aus Passwort.h
 // Inhalt der PasswortÄndern Klasse aus Passwort.h
 // Konstruktor
 // Konstruktor
-PasswortÄndern::PasswortÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster )
+PasswortÄndern::PasswortÄndern( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    passwortÄndern = initKnopf( 10, 170, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Passwort ändern" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    passwortÄndern = initKnopf( 10, 170, 130, 30, Knopf::Style::Sichtbar, "Passwort ändern" );
     passwortÄndern->setMausEreignisParameter( this );
     passwortÄndern->setMausEreignisParameter( this );
     passwortÄndern->setMausEreignis( passwortÄndernPasswortÄndernME );
     passwortÄndern->setMausEreignis( passwortÄndernPasswortÄndernME );
-    initToolTip( passwortÄndern, "Account Passwort ändern.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( passwortÄndern->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 115, 250, 230, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Passwort ändern" );
-    name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
+    initToolTip( passwortÄndern, "Account Passwort ändern." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( passwortÄndern->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 115, 250, 230, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Passwort ändern" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( passwortÄndernNameTE );
     name->setTastaturEreignis( passwortÄndernNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( passwortÄndernPasswortTE );
     passwort->setTastaturEreignis( passwortÄndernPasswortTE );
-    initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    neuPasswort = initTextFeld( 20, 80, 208, 20, zSchrift, TextFeld::Style::TextFeld, "neues Passwort" );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    neuPasswort = initTextFeld( 20, 80, 208, 20, TextFeld::Style::TextFeld, "neues Passwort" );
     neuPasswort->setTastaturEreignisParameter( this );
     neuPasswort->setTastaturEreignisParameter( this );
     neuPasswort->setTastaturEreignis( passwortÄndernNeuPasswortTE );
     neuPasswort->setTastaturEreignis( passwortÄndernNeuPasswortTE );
-    initToolTip( neuPasswort, "Neues Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( neuPasswort->getThis() );
-    neuPasswort2 = initTextFeld( 20, 110, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort wiederholen" );
+    initToolTip( neuPasswort, "Neues Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( neuPasswort->getThis() ) );
+    neuPasswort2 = initTextFeld( 20, 110, 208, 20, TextFeld::Style::TextFeld, "Passwort wiederholen" );
     neuPasswort2->setTastaturEreignisParameter( this );
     neuPasswort2->setTastaturEreignisParameter( this );
     neuPasswort2->setTastaturEreignis( passwortÄndernNeuPasswort2TE );
     neuPasswort2->setTastaturEreignis( passwortÄndernNeuPasswort2TE );
-    initToolTip( neuPasswort2, "Neues Passwort Wiederhohlen.", zSchrift, hauptScreen );
-    fenster->addMember( neuPasswort2->getThis() );
-    geheimnis = initTextFeld( 20, 140, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
+    initToolTip( neuPasswort2, "Neues Passwort Wiederhohlen." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( neuPasswort2->getThis() ) );
+    geheimnis = initTextFeld( 20, 140, 208, 20, TextFeld::Style::TextFeld, "Geheimis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( passwortÄndernGeheimnisTE );
     geheimnis->setTastaturEreignis( passwortÄndernGeheimnisTE );
-    initToolTip( geheimnis, "Account Geheimnis.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    weiter = initKnopf( 74, 170, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( geheimnis, "Account Geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    weiter = initKnopf( 74, 170, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( passwortÄndernWeiterME );
     weiter->setMausEreignis( passwortÄndernWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -77,7 +77,7 @@ Passwort
 // Privat
 // Privat
 void PasswortÄndern::zeigeNachricht( const char *txt )
 void PasswortÄndern::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     neuPasswort->removeStyle( TextFeld::Style::Sichtbar );
     neuPasswort->removeStyle( TextFeld::Style::Sichtbar );
@@ -142,7 +142,7 @@ bool Passwort
         passwortÄndern->setRahmenBreite( 3 );
         passwortÄndern->setRahmenBreite( 3 );
         passwortÄndern->setAlphaFeldFarbe( 0xFF000000 );
         passwortÄndern->setAlphaFeldFarbe( 0xFF000000 );
         passwortÄndern->setAlphaFeldStrength( 20 );
         passwortÄndern->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 230 );
         fenster->setSize( 255, 230 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 115 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 115 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -266,7 +266,7 @@ bool Passwort
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 230 );
             fenster->setSize( 255, 230 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 115 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 115 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -295,51 +295,36 @@ void Passwort
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
 }
 
 
-// Reference Counting
-PasswortÄndern * PasswortÄndern::getThis()
-{
-    ref++;
-    return this;
-}
-
-PasswortÄndern *PasswortÄndern::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Inhalt der PasswortVergessen Klasse aus Passwort.h
 // Inhalt der PasswortVergessen Klasse aus Passwort.h
 // Konstruktor
 // Konstruktor
-PasswortVergessen::PasswortVergessen( Schrift * zSchrift, Fenster * zVorLoginFenster )
+PasswortVergessen::PasswortVergessen( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
-    passwortVergessen = initKnopf( 10, 330, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Passwort vergessen" );
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
+    passwortVergessen = initKnopf( 10, 330, 130, 30, Knopf::Style::Sichtbar, "Passwort vergessen" );
     passwortVergessen->setMausEreignisParameter( this );
     passwortVergessen->setMausEreignisParameter( this );
     passwortVergessen->setMausEreignis( passwortVergessenPasswortVergessenME );
     passwortVergessen->setMausEreignis( passwortVergessenPasswortVergessenME );
-    initToolTip( passwortVergessen, "Account Passwort per E-Mail senden.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( passwortVergessen->getThis() );
-    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Passwort vergessen" );
-    name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
+    initToolTip( passwortVergessen, "Account Passwort per E-Mail senden." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( passwortVergessen->getThis() ) );
+    fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Passwort vergessen" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( passwortVergessenNameTE );
     name->setTastaturEreignis( passwortVergessenNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    geheimnis = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    geheimnis = initTextFeld( 20, 50, 208, 20, TextFeld::Style::TextFeld, "Geheimis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( passwortVergessenGeheimnisTE );
     geheimnis->setTastaturEreignis( passwortVergessenGeheimnisTE );
-    initToolTip( geheimnis, "Account geheimnis.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    weiter = initKnopf( 74, 80, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
+    initToolTip( geheimnis, "Account geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    weiter = initKnopf( 74, 80, 100, 20, Knopf::Style::Sichtbar, "weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( passwortVergessenWeiterME );
     weiter->setMausEreignis( passwortVergessenWeiterME );
-    nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-    fenster->addMember( nachricht->getThis() );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    nachricht = initTextFeld( 0, 5, 255, 150, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor
 // Destruktor
@@ -362,7 +347,7 @@ PasswortVergessen::~PasswortVergessen()
 // Privat
 // Privat
 void PasswortVergessen::zeigeNachricht( const char *txt )
 void PasswortVergessen::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     fenster->setSize( 250, 150 );
     fenster->setSize( 250, 150 );
@@ -424,7 +409,7 @@ bool PasswortVergessen::passwortVergessenME( void *obj, MausEreignis me ) // Mau
         passwortVergessen->setRahmenBreite( 3 );
         passwortVergessen->setRahmenBreite( 3 );
         passwortVergessen->setAlphaFeldFarbe( 0xFF000000 );
         passwortVergessen->setAlphaFeldFarbe( 0xFF000000 );
         passwortVergessen->setAlphaFeldStrength( 20 );
         passwortVergessen->setAlphaFeldStrength( 20 );
-        Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+        Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
         fenster->setSize( 255, 140 );
         fenster->setSize( 255, 140 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
         fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
         fenster->addStyle( Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Sichtbar );
@@ -488,7 +473,7 @@ bool PasswortVergessen::weiterME( void *obj, MausEreignis me ) // MausEreignis i
         }
         }
         else
         else
         {
         {
-            Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+            Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
             fenster->setSize( 255, 140 );
             fenster->setSize( 255, 140 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
             fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
             fenster->addStyle( Fenster::Style::Sichtbar );
             fenster->addStyle( Fenster::Style::Sichtbar );
@@ -514,21 +499,6 @@ void PasswortVergessen::setResult( bool ret ) // Setzt den Returnwert
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
         zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
 }
 
 
-// Reference Counting
-PasswortVergessen * PasswortVergessen::getThis()
-{
-    ref++;
-    return this;
-}
-
-PasswortVergessen *PasswortVergessen::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // messages
 // messages
 bool passwortÄndernPasswortÄndernME( void *p, void *obj, MausEreignis me )
 bool passwortÄndernPasswortÄndernME( void *p, void *obj, MausEreignis me )
 {
 {

+ 44 - 52
KSGClient/VorLogin/Account verwalten/Passwort.h

@@ -12,68 +12,60 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class PasswortÄndern
+class PasswortÄndern : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *passwortÄndern;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	TextFeld *neuPasswort;
-	TextFeld *neuPasswort2;
-	TextFeld *geheimnis;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *passwortÄndern;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    TextFeld *neuPasswort;
+    TextFeld *neuPasswort2;
+    TextFeld *geheimnis;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	PasswortÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~PasswortÄndern();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool passwortÄndernME( void *obj, MausEreignis me ); // MausEreignis im Knopf passwortVergessen
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool neuPasswortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld neuPasswort
-	bool neuPasswort2TE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld neuPasswort2
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setResult( bool ret ); // Setzt den Returnwert
-	// Reference Counting
-	PasswortÄndern *getThis();
-	PasswortÄndern *release();
+    // Konstruktor
+    PasswortÄndern( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~PasswortÄndern();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool passwortÄndernME( void *obj, MausEreignis me ); // MausEreignis im Knopf passwortVergessen
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool neuPasswortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld neuPasswort
+    bool neuPasswort2TE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld neuPasswort2
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setResult( bool ret ); // Setzt den Returnwert
 };
 };
 
 
-class PasswortVergessen
+class PasswortVergessen : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf *passwortVergessen;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *geheimnis;
-	Knopf *weiter;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Knopf *passwortVergessen;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *geheimnis;
+    Knopf *weiter;
+    TextFeld *nachricht;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor
-	PasswortVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~PasswortVergessen();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool passwortVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf passwortVergessen
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	void setResult( bool ret ); // Setzt den Returnwert
-	// Reference Counting
-	PasswortVergessen *getThis();
-	PasswortVergessen *release();
+    // Konstruktor
+    PasswortVergessen( Fenster *zVorLoginFenster );
+    // Destruktor
+    ~PasswortVergessen();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool passwortVergessenME( void *obj, MausEreignis me ); // MausEreignis im Knopf passwortVergessen
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    void setResult( bool ret ); // Setzt den Returnwert
 };
 };
 
 
 // messages
 // messages

+ 41 - 80
KSGClient/VorLogin/Account verwalten/Registrierung.cpp

@@ -8,53 +8,46 @@
 
 
 // Inhalt der Registrierung Klasse aus Registrierung.h
 // Inhalt der Registrierung Klasse aus Registrierung.h
 // Konstruktor 
 // Konstruktor 
-Registrierung::Registrierung( Schrift *zSchrift, Fenster *zVorLoginFenster )
+Registrierung::Registrierung( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmGröße = hauptScreen->getBackBufferSize();
-    registrierung = initKnopf( 10, 90, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Registrieren" );
+    Punkt bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    registrierung = initKnopf( 10, 90, 130, 30, Knopf::Style::Sichtbar, "Registrieren" );
     registrierung->setMausEreignisParameter( this );
     registrierung->setMausEreignisParameter( this );
     registrierung->setMausEreignis( registrierungRegistrierungME );
     registrierung->setMausEreignis( registrierungRegistrierungME );
-    initToolTip( registrierung, "Account erstellen.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( registrierung->getThis() );
-    fenster = initFenster( bildschirmGröße.x / 2 - 175, bildschirmGröße.y / 2 - 131, 350, 262, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Account erstellen" );
-    name = initTextFeld( 74, 20, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Account Name" );
+    initToolTip( registrierung, "Account erstellen." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( registrierung->getThis() ) );
+    fenster = initFenster( bildschirmGröße.x / 2 - 175, bildschirmGröße.y / 2 - 131, 350, 262, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Account erstellen" );
+    name = initTextFeld( 74, 20, 200, 20, TextFeld::Style::TextFeld, "Account Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( registrierungNameTE );
     name->setTastaturEreignis( registrierungNameTE );
-    initToolTip( name, "Account Name.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 74, 50, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Account Passwort" );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 74, 50, 200, 20, TextFeld::Style::TextFeld, "Account Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( registrierungPasswortTE );
     passwort->setTastaturEreignis( registrierungPasswortTE );
-    initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    passwort2 = initTextFeld( 74, 80, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort wiederholen" );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    passwort2 = initTextFeld( 74, 80, 200, 20, TextFeld::Style::TextFeld, "Passwort wiederholen" );
     passwort2->setTastaturEreignisParameter( this );
     passwort2->setTastaturEreignisParameter( this );
     passwort2->setTastaturEreignis( registrierungPasswort2TE );
     passwort2->setTastaturEreignis( registrierungPasswort2TE );
-    initToolTip( passwort2, "Account Passwort wiederhohlen.", zSchrift, hauptScreen );
-    fenster->addMember( passwort2->getThis() );
-    geheimnis = initTextFeld( 10, 110, 328, 20, zSchrift, TextFeld::Style::TextFeld, "Account Geheimnis" );
+    initToolTip( passwort2, "Account Passwort wiederhohlen." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort2->getThis() ) );
+    geheimnis = initTextFeld( 10, 110, 328, 20, TextFeld::Style::TextFeld, "Account Geheimnis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( registrierungGeheimnisTE );
     geheimnis->setTastaturEreignis( registrierungGeheimnisTE );
-    initToolTip( geheimnis, "Gib etwas ein, was nur du jederzeit weißt.\n(zweites sicherheitspasswort Passwort)", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    eMail = initTextFeld( 74, 140, 200, 20, zSchrift, TextFeld::Style::TextFeld, "E-Mail Addresse" );
+    initToolTip( geheimnis, "Gib etwas ein, was nur du jederzeit weißt.\n(zweites sicherheitspasswort Passwort)" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    eMail = initTextFeld( 74, 140, 200, 20, TextFeld::Style::TextFeld, "E-Mail Addresse" );
     eMail->setTastaturEreignisParameter( this );
     eMail->setTastaturEreignisParameter( this );
     eMail->setTastaturEreignis( registrierungEMailTE );
     eMail->setTastaturEreignis( registrierungEMailTE );
-    initToolTip( eMail, "E-Mail Addresse.", zSchrift, hauptScreen );
-    fenster->addMember( eMail->getThis() );
-    geburtsdatum = initTextFeld( 40, 170, 85, 20, zSchrift, TextFeld::Style::Text, "Geburtsdatum:" );
-    fenster->addMember( geburtsdatum->getThis() );
-    text = initTextFeld( 0, 5, 250, 150, zSchrift, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "" );
-    fenster->addMember( text->getThis() );
-    gbdTag = new AuswahlBox();
-    gbdTag->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
-    gbdTag->setPosition( 130, 167 );
-    gbdTag->setSize( 50, 20 );
-    gbdTag->setMaxAuskappHeight( 100 );
-    gbdTag->setSchriftZ( zSchrift->getThis() );
-    gbdTag->setRahmenFarbe( 0xFFFFFFFF );
-    gbdTag->setHintergrundFarbe( 0xFF000000 );
-    gbdTag->setMausEreignis( _ret1ME );
+    initToolTip( eMail, "E-Mail Addresse." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( eMail->getThis() ) );
+    geburtsdatum = initTextFeld( 40, 170, 85, 20, TextFeld::Style::Text, "Geburtsdatum:" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geburtsdatum->getThis() ) );
+    text = initTextFeld( 0, 5, 250, 150, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( text->getThis() ) );
+    gbdTag = initAuswahlBox( 130, 167, 50, 20, AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund, {} );
     gbdTag->addEintrag( "Tag" );
     gbdTag->addEintrag( "Tag" );
     for( int i = 0; i < 31; i++ )
     for( int i = 0; i < 31; i++ )
     {
     {
@@ -62,15 +55,7 @@ Registrierung::Registrierung( Schrift *zSchrift, Fenster *zVorLoginFenster )
         txt->append( i + 1 );
         txt->append( i + 1 );
         gbdTag->addEintrag( txt );
         gbdTag->addEintrag( txt );
     }
     }
-    gbdMonat = new AuswahlBox();
-    gbdMonat->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
-    gbdMonat->setPosition( 185, 167 );
-    gbdMonat->setSize( 65, 20 );
-    gbdMonat->setMaxAuskappHeight( 100 );
-    gbdMonat->setSchriftZ( zSchrift->getThis() );
-    gbdMonat->setRahmenFarbe( 0xFFFFFFFF );
-    gbdMonat->setHintergrundFarbe( 0xFF000000 );
-    gbdMonat->setMausEreignis( _ret1ME );
+    gbdMonat = initAuswahlBox( 185, 167, 65, 20, AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund, {} );
     gbdMonat->addEintrag( "Monat" );
     gbdMonat->addEintrag( "Monat" );
     for( int i = 0; i < 12; i++ )
     for( int i = 0; i < 12; i++ )
     {
     {
@@ -78,15 +63,7 @@ Registrierung::Registrierung( Schrift *zSchrift, Fenster *zVorLoginFenster )
         txt->append( i + 1 );
         txt->append( i + 1 );
         gbdMonat->addEintrag( txt );
         gbdMonat->addEintrag( txt );
     }
     }
-    gbdJahr = new AuswahlBox();
-    gbdJahr->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
-    gbdJahr->setPosition( 255, 167 );
-    gbdJahr->setSize( 55, 20 );
-    gbdJahr->setMaxAuskappHeight( 100 );
-    gbdJahr->setSchriftZ( zSchrift->getThis() );
-    gbdJahr->setRahmenFarbe( 0xFFFFFFFF );
-    gbdJahr->setHintergrundFarbe( 0xFF000000 );
-    gbdJahr->setMausEreignis( _ret1ME );
+    gbdJahr = initAuswahlBox( 255, 176, 55, 20, AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund, {} );
     gbdJahr->addEintrag( "Jahr" );
     gbdJahr->addEintrag( "Jahr" );
     for( int i = 2013; i > 1913; i-- )
     for( int i = 2013; i > 1913; i-- )
     {
     {
@@ -94,15 +71,14 @@ Registrierung::Registrierung( Schrift *zSchrift, Fenster *zVorLoginFenster )
         txt->append( i + 1 );
         txt->append( i + 1 );
         gbdJahr->addEintrag( txt );
         gbdJahr->addEintrag( txt );
     }
     }
-    weiter = initKnopf( 124, 200, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Weiter" );
+    weiter = initKnopf( 124, 200, 100, 20, Knopf::Style::Sichtbar, "Weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( registrierungWeiterME );
     weiter->setMausEreignis( registrierungWeiterME );
-    fenster->addMember( weiter->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    fenster->addMember( gbdTag->getThis() );
-    fenster->addMember( gbdMonat->getThis() );
-    fenster->addMember( gbdJahr->getThis() );
-    ref = 1;
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( gbdTag->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( gbdMonat->getThis() ) );
+    fenster->addMember( dynamic_cast<Zeichnung *>( gbdJahr->getThis() ) );
 }
 }
 
 
 // Destruktor 
 // Destruktor 
@@ -139,7 +115,7 @@ Registrierung::~Registrierung()
 // Privat
 // Privat
 void Registrierung::zeigeNachricht( const char *txt )
 void Registrierung::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort2->removeStyle( TextFeld::Style::Sichtbar );
     passwort2->removeStyle( TextFeld::Style::Sichtbar );
@@ -284,7 +260,7 @@ bool Registrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im Kn
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
-        Punkt bildchirmGröße = hauptScreen->getBackBufferSize();
+        Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
         if( fenster->zTitel()->istGleich( "Erfolg" ) )
         if( fenster->zTitel()->istGleich( "Erfolg" ) )
         {
         {
             text->removeStyle( TextFeld::Style::Sichtbar );
             text->removeStyle( TextFeld::Style::Sichtbar );
@@ -343,7 +319,7 @@ bool Registrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im Kn
                         zeigeNachricht( "Bitte gebe deine E-Mail Addresse ein. Diese benötigen wir, um dir den Bestätigungscode für deinen Account zu senden." );
                         zeigeNachricht( "Bitte gebe deine E-Mail Addresse ein. Diese benötigen wir, um dir den Bestätigungscode für deinen Account zu senden." );
                     return 1;
                     return 1;
                 }
                 }
-                Datum * gebDat = new Datum();
+                Datum *gebDat = new Datum();
                 gebDat->setDatum( 1, 1, 1 );
                 gebDat->setDatum( 1, 1, 1 );
                 bool ok = 1;
                 bool ok = 1;
                 do
                 do
@@ -367,7 +343,7 @@ bool Registrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im Kn
                     new AktionsThread( 15, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), eMail->zText()->getText(), gebDat->getThis() );
                     new AktionsThread( 15, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), eMail->zText()->getText(), gebDat->getThis() );
                 else
                 else
                     zeigeNachricht( "Bitte gebe ein gültiges Geburtsdatum an." );
                     zeigeNachricht( "Bitte gebe ein gültiges Geburtsdatum an." );
-                gebDat = gebDat->release();
+                gebDat = (Datum *)gebDat->release();
             }
             }
             else
             else
                 zeigeNachricht( "Das wiederhohlte Passwort stimmt nicht mit dem Passwort überein." );
                 zeigeNachricht( "Das wiederhohlte Passwort stimmt nicht mit dem Passwort überein." );
@@ -386,7 +362,7 @@ bool Registrierung::registrierungME( void *obj, MausEreignis me ) // MausEreigni
         registrierung->setAlphaFeldFarbe( 0xFF000000 );
         registrierung->setAlphaFeldFarbe( 0xFF000000 );
         registrierung->setAlphaFeldStrength( 20 );
         registrierung->setAlphaFeldStrength( 20 );
 
 
-        Punkt bildchirmGröße = hauptScreen->getBackBufferSize();
+        Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
         text->removeStyle( TextFeld::Style::Sichtbar );
         text->removeStyle( TextFeld::Style::Sichtbar );
         weiter->setPosition( 124, 200 );
         weiter->setPosition( 124, 200 );
         weiter->setText( "Weiter" );
         weiter->setText( "Weiter" );
@@ -410,7 +386,7 @@ bool Registrierung::registrierungME( void *obj, MausEreignis me ) // MausEreigni
 
 
 void Registrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
 void Registrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
 {
 {
-    Punkt bildchirmGröße = hauptScreen->getBackBufferSize();
+    Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     if( ret )
     if( ret )
     {
     {
         name->removeStyle( TextFeld::Style::Sichtbar );
         name->removeStyle( TextFeld::Style::Sichtbar );
@@ -434,21 +410,6 @@ void Registrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
         zeigeNachricht( lastError );
         zeigeNachricht( lastError );
 }
 }
 
 
-// Reference Counting
-Registrierung *Registrierung::getThis()
-{
-    ref++;
-    return this;
-}
-
-Registrierung *Registrierung::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Ereignisse
 // Ereignisse
 bool registrierungNameTE( void *p, void *obj, TastaturEreignis te )
 bool registrierungNameTE( void *p, void *obj, TastaturEreignis te )
 {
 {

+ 28 - 32
KSGClient/VorLogin/Account verwalten/Registrierung.h

@@ -13,43 +13,39 @@
 
 
 using namespace Framework;
 using namespace Framework;
 
 
-class Registrierung
+class Registrierung : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Fenster *fenster;
-	TextFeld *text;
-	TextFeld *name;
-	TextFeld *passwort;
-	TextFeld *passwort2;
-	TextFeld *geheimnis;
-	TextFeld *eMail;
-	TextFeld *geburtsdatum;
-	AuswahlBox *gbdJahr;
-	AuswahlBox *gbdMonat;
-	AuswahlBox *gbdTag;
-	Knopf *weiter;
+    Fenster *fenster;
+    TextFeld *text;
+    TextFeld *name;
+    TextFeld *passwort;
+    TextFeld *passwort2;
+    TextFeld *geheimnis;
+    TextFeld *eMail;
+    TextFeld *geburtsdatum;
+    AuswahlBox *gbdJahr;
+    AuswahlBox *gbdMonat;
+    AuswahlBox *gbdTag;
+    Knopf *weiter;
     Knopf *registrierung;
     Knopf *registrierung;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor 
-	Registrierung( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor 
-	~Registrierung();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool passwort2TE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort2
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool eMailTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld eMail
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	bool registrierungME( void *obj, MausEreignis me ); // MausEreignis im Knopf registrierung
-	void setWeiterReturn( bool ret ); // setzt den Weiter Returnwert
-	// Reference Counting
-	Registrierung *getThis();
-	Registrierung *release();
+    // Konstruktor 
+    Registrierung( Fenster *zVorLoginFenster );
+    // Destruktor 
+    ~Registrierung();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopf wurde gedrückt
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool passwort2TE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort2
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool eMailTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld eMail
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    bool registrierungME( void *obj, MausEreignis me ); // MausEreignis im Knopf registrierung
+    void setWeiterReturn( bool ret ); // setzt den Weiter Returnwert
 };
 };
 
 
 bool registrierungNameTE( void *p, void *obj, TastaturEreignis te );
 bool registrierungNameTE( void *p, void *obj, TastaturEreignis te );

+ 25 - 40
KSGClient/VorLogin/Account verwalten/Unregistrierung.cpp

@@ -7,38 +7,38 @@
 
 
 // Inhalt der Unregistrierung Klasse aus Unregistrierung.h
 // Inhalt der Unregistrierung Klasse aus Unregistrierung.h
 // Konstruktor 
 // Konstruktor 
-Unregistrierung::Unregistrierung( Schrift *zSchrift, Fenster *zVorLoginFenster )
+Unregistrierung::Unregistrierung( Fenster *zVorLoginFenster )
+    : ReferenceCounter()
 {
 {
-    Punkt bildschirmGröße = hauptScreen->getBackBufferSize();
-    unregistrierung = initKnopf( 10, 130, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Account remove" );
+    Punkt bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    unregistrierung = initKnopf( 10, 130, 130, 30, Knopf::Style::Sichtbar, "Account remove" );
     unregistrierung->setMausEreignisParameter( this );
     unregistrierung->setMausEreignisParameter( this );
     unregistrierung->setMausEreignis( unregistrierungUnregistrierungME );
     unregistrierung->setMausEreignis( unregistrierungUnregistrierungME );
-    initToolTip( unregistrierung, "Account für alle Zeiten entfernen.", zSchrift, hauptScreen );
-    zVorLoginFenster->addMember( unregistrierung->getThis() );
-    fenster = initFenster( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 85, 250, 170, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Account remove" );
-    name = initTextFeld( 24, 20, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Account Name" );
+    initToolTip( unregistrierung, "Account für alle Zeiten entfernen." );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( unregistrierung->getThis() ) );
+    fenster = initFenster( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 85, 250, 170, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Account remove" );
+    name = initTextFeld( 24, 20, 200, 20, TextFeld::Style::TextFeld, "Account Name" );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignisParameter( this );
     name->setTastaturEreignis( unregistrierungNameTE );
     name->setTastaturEreignis( unregistrierungNameTE );
-    initToolTip( name, "Account Name eingeben.", zSchrift, hauptScreen );
-    fenster->addMember( name->getThis() );
-    passwort = initTextFeld( 24, 50, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Account Passwort" );
+    initToolTip( name, "Account Name eingeben." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 24, 50, 200, 20, TextFeld::Style::TextFeld, "Account Passwort" );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignisParameter( this );
     passwort->setTastaturEreignis( unregistrierungPasswortTE );
     passwort->setTastaturEreignis( unregistrierungPasswortTE );
-    initToolTip( passwort, "Account Passwort eingeben.", zSchrift, hauptScreen );
-    fenster->addMember( passwort->getThis() );
-    geheimnis = initTextFeld( 24, 80, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Account Geheimnis" );
+    initToolTip( passwort, "Account Passwort eingeben." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    geheimnis = initTextFeld( 24, 80, 200, 20, TextFeld::Style::TextFeld, "Account Geheimnis" );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignisParameter( this );
     geheimnis->setTastaturEreignis( unregistrierungGeheimnisTE );
     geheimnis->setTastaturEreignis( unregistrierungGeheimnisTE );
-    initToolTip( geheimnis, "Account Geheimnis eingeben.", zSchrift, hauptScreen );
-    fenster->addMember( geheimnis->getThis() );
-    weiter = initKnopf( 74, 110, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Weiter" );
+    initToolTip( geheimnis, "Account Geheimnis eingeben." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    weiter = initKnopf( 74, 110, 100, 20, Knopf::Style::Sichtbar, "Weiter" );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignisParameter( this );
     weiter->setMausEreignis( unregistrierungWeiterME );
     weiter->setMausEreignis( unregistrierungWeiterME );
-    fenster->addMember( weiter->getThis() );
-    text = initTextFeld( 0, 5, 250, 170, zSchrift, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "" );
-    fenster->addMember( text->getThis() );
-    zVorLoginFenster->addMember( fenster->getThis() );
-    ref = 1;
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    text = initTextFeld( 0, 5, 250, 170, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( text->getThis() ) );
+    zVorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
 }
 }
 
 
 // Destruktor 
 // Destruktor 
@@ -63,7 +63,7 @@ Unregistrierung::~Unregistrierung()
 // Privat
 // Privat
 void Unregistrierung::zeigeNachricht( const char *txt )
 void Unregistrierung::zeigeNachricht( const char *txt )
 {
 {
-    Punkt bildschirmmitte = hauptScreen->getBackBufferSize() / 2;
+    Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
     name->removeStyle( TextFeld::Style::Sichtbar );
     name->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     passwort->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
     geheimnis->removeStyle( TextFeld::Style::Sichtbar );
@@ -172,7 +172,7 @@ bool Unregistrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im
 {
 {
     if( me.id == ME_RLinks )
     if( me.id == ME_RLinks )
     {
     {
-        Punkt bildchirmGröße = hauptScreen->getBackBufferSize();
+        Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
         if( weiter->zText()->istGleich( "Ok" ) )
         if( weiter->zText()->istGleich( "Ok" ) )
         {
         {
             text->removeStyle( TextFeld::Style::Sichtbar );
             text->removeStyle( TextFeld::Style::Sichtbar );
@@ -250,7 +250,7 @@ bool Unregistrierung::unregistrierungME( void *obj, MausEreignis me ) // MausEre
         weiter->setText( "Weiter" );
         weiter->setText( "Weiter" );
         fenster->setTitel( "Account remove" );
         fenster->setTitel( "Account remove" );
         fenster->setSize( 250, 170 );
         fenster->setSize( 250, 170 );
-        Punkt bildchirmGröße = hauptScreen->getBackBufferSize();
+        Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
         fenster->setPosition( bildchirmGröße.x / 2 - 125, bildchirmGröße.y / 2 - 85 );
         fenster->setPosition( bildchirmGröße.x / 2 - 125, bildchirmGröße.y / 2 - 85 );
         name->addStyle( TextFeld::Style::Sichtbar );
         name->addStyle( TextFeld::Style::Sichtbar );
         passwort->addStyle( TextFeld::Style::Sichtbar );
         passwort->addStyle( TextFeld::Style::Sichtbar );
@@ -263,7 +263,7 @@ bool Unregistrierung::unregistrierungME( void *obj, MausEreignis me ) // MausEre
 
 
 void Unregistrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
 void Unregistrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
 {
 {
-    Punkt bildchirmGröße = hauptScreen->getBackBufferSize();
+    Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
     if( ret )
     if( ret )
     {
     {
         name->removeStyle( TextFeld::Style::Sichtbar );
         name->removeStyle( TextFeld::Style::Sichtbar );
@@ -289,21 +289,6 @@ void Unregistrierung::setFertigReturn( bool ret ) // setzt den Fertig Returnwert
         zeigeNachricht( lastError );
         zeigeNachricht( lastError );
 }
 }
 
 
-// Reference Counting
-Unregistrierung *Unregistrierung::getThis()
-{
-    ref++;
-    return this;
-}
-
-Unregistrierung *Unregistrierung::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 
 // Ereignisse
 // Ereignisse
 bool unregistrierungNameTE( void *p, void *obj, TastaturEreignis te )
 bool unregistrierungNameTE( void *p, void *obj, TastaturEreignis te )

+ 22 - 26
KSGClient/VorLogin/Account verwalten/Unregistrierung.h

@@ -12,36 +12,32 @@
 using namespace Framework;
 using namespace Framework;
 using namespace Network;
 using namespace Network;
 
 
-class Unregistrierung
+class Unregistrierung : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	TextFeld *geheimnis;
-	Knopf *weiter;
-	TextFeld *text;
-	Knopf *unregistrierung;
-	int ref;
-	void zeigeNachricht( const char *txt );
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    TextFeld *geheimnis;
+    Knopf *weiter;
+    TextFeld *text;
+    Knopf *unregistrierung;
+    void zeigeNachricht( const char *txt );
 
 
 public:
 public:
-	// Konstruktor 
-	Unregistrierung( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor 
-	~Unregistrierung();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Knopfwurde gedrückt
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	bool unregistrierungME( void *obj, MausEreignis me ); // MausEreignis im Knopf unregistrierung
-	void setWeiterReturn( bool ret ); // setzt den Weiter Returnwert
-	void setFertigReturn( bool ret ); // setzt den Fertig Returnwert
-	// Reference Counting
-	Unregistrierung *getThis();
-	Unregistrierung *release();
+    // Konstruktor 
+    Unregistrierung( Fenster *zVorLoginFenster );
+    // Destruktor 
+    ~Unregistrierung();
+    // Knopfdruck
+    void druckFremdKnopf(); // Ein anderer Knopfwurde gedrückt
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    bool unregistrierungME( void *obj, MausEreignis me ); // MausEreignis im Knopf unregistrierung
+    void setWeiterReturn( bool ret ); // setzt den Weiter Returnwert
+    void setFertigReturn( bool ret ); // setzt den Fertig Returnwert
 };
 };
 
 
 // Ereignisse
 // Ereignisse

+ 303 - 318
KSGClient/VorLogin/Login/Login.cpp

@@ -7,400 +7,385 @@
 
 
 // Inhalt der Login Klasse aus Login.h
 // Inhalt der Login Klasse aus Login.h
 // Konstruktor 
 // Konstruktor 
-Login::Login( Schrift *zSchrift, Fenster *vorLoginFenster )
+Login::Login( Fenster *vorLoginFenster )
+    : ReferenceCounter()
 {
 {
-	Punkt bildschirmGröße = hauptScreen->getBackBufferSize();
-	login = initKnopf( 10, 50, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Login" );
-	login->setMausEreignisParameter( this );
-	login->setMausEreignis( loginLoginME );
-	initToolTip( login, "Einloggen.", zSchrift, hauptScreen );
-	vorLoginFenster->addMember( login->getThis() );
-	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, hauptScreen );
-	fenster->addMember( name->getThis() );
-	passwort = initTextFeld( 20, 55, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
-	passwort->setTastaturEreignisParameter( this );
-	passwort->setTastaturEreignis( loginPasswortTE );
-	initToolTip( passwort, "Account Passwort.", zSchrift, hauptScreen );
-	fenster->addMember( passwort->getThis() );
-	weiter = initKnopf( 75, 90, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Login" );
-	weiter->setMausEreignisParameter( this );
-	weiter->setMausEreignis( loginWeiterME );
-	fenster->addMember( weiter->getThis() );
-	nachricht = initTextFeld( 5, 5, 238, 90, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
-	fenster->addMember( nachricht->getThis() );
-	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, hauptScreen );
-	fenster->addMember( geheimnis->getThis() );
-	abbrechen = initKnopf( 10, 98, 100, 20, zSchrift, 0, "Abbrechen" );
-	abbrechen->setMausEreignisParameter( this );
-	abbrechen->setMausEreignis( loginAbbrechenME );
-	fenster->addMember( abbrechen->getThis() );
-	ok = initKnopf( 138, 98, 100, 20, zSchrift, 0, "Ok" );
-	ok->setMausEreignisParameter( this );
-	ok->setMausEreignis( loginOkME );
-	fenster->addMember( ok->getThis() );
-	vorLoginFenster->addMember( fenster->getThis() );
-	MausEreignis me;
-	me.id = ME_RLinks;
-	loginME( 0, me );
-	ref = 1;
+    Punkt bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
+    login = initKnopf( 10, 50, 130, 30, Knopf::Style::Sichtbar, "Login" );
+    login->setMausEreignisParameter( this );
+    login->setMausEreignis( loginLoginME );
+    initToolTip( login, "Einloggen." );
+    vorLoginFenster->addMember( dynamic_cast<Zeichnung *>( login->getThis() ) );
+    fenster = initFenster( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 75, 250, 150, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Login" );
+    name = initTextFeld( 20, 20, 208, 20, TextFeld::Style::TextFeld, "Name" );
+    name->setTastaturEreignisParameter( this );
+    name->setTastaturEreignis( loginNameTE );
+    initToolTip( name, "Account Name." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( name->getThis() ) );
+    passwort = initTextFeld( 20, 55, 208, 20, TextFeld::Style::TextFeld, "Passwort" );
+    passwort->setTastaturEreignisParameter( this );
+    passwort->setTastaturEreignis( loginPasswortTE );
+    initToolTip( passwort, "Account Passwort." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( passwort->getThis() ) );
+    weiter = initKnopf( 75, 90, 100, 20, Knopf::Style::Sichtbar, "Login" );
+    weiter->setMausEreignisParameter( this );
+    weiter->setMausEreignis( loginWeiterME );
+    fenster->addMember( dynamic_cast<Zeichnung *>( weiter->getThis() ) );
+    nachricht = initTextFeld( 5, 5, 238, 90, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
+    fenster->addMember( dynamic_cast<Zeichnung *>( nachricht->getThis() ) );
+    geheimnis = initTextFeld( 20, 55, 208, 20, TextFeld::Style::TextFeld, "Geheimnis" );
+    geheimnis->removeStyle( TextFeld::Style::Sichtbar );
+    geheimnis->setTastaturEreignisParameter( this );
+    geheimnis->setTastaturEreignis( loginGeheimnisTE );
+    initToolTip( geheimnis, "Account Geheimnis." );
+    fenster->addMember( dynamic_cast<Zeichnung *>( geheimnis->getThis() ) );
+    abbrechen = initKnopf( 10, 98, 100, 20, 0, "Abbrechen" );
+    abbrechen->setMausEreignisParameter( this );
+    abbrechen->setMausEreignis( loginAbbrechenME );
+    fenster->addMember( dynamic_cast<Zeichnung *>( abbrechen->getThis() ) );
+    ok = initKnopf( 138, 98, 100, 20, 0, "Ok" );
+    ok->setMausEreignisParameter( this );
+    ok->setMausEreignis( loginOkME );
+    fenster->addMember( dynamic_cast<Zeichnung *>( ok->getThis() ) );
+    vorLoginFenster->addMember( dynamic_cast<Zeichnung *>( fenster->getThis() ) );
+    MausEreignis me;
+    me.id = ME_RLinks;
+    loginME( 0, me );
 }
 }
 
 
 // Destruktor 
 // Destruktor 
 Login::~Login()
 Login::~Login()
 {
 {
-	if( fenster )
-		fenster = (Fenster *)fenster->release();
-	if( name )
-		name = (TextFeld *)name->release();
-	if( passwort )
-		passwort = (TextFeld *)passwort->release();
-	if( nachricht )
-		nachricht = (TextFeld *)nachricht->release();
-	if( geheimnis )
-		geheimnis = (TextFeld *)geheimnis->release();
-	if( weiter )
-		weiter = (Knopf *)weiter->release();
-	if( abbrechen )
-		abbrechen = (Knopf *)abbrechen->release();
-	if( ok )
-		ok = (Knopf *)ok->release();
-	if( login )
-		login = (Knopf *)login->release();
+    if( fenster )
+        fenster = (Fenster *)fenster->release();
+    if( name )
+        name = (TextFeld *)name->release();
+    if( passwort )
+        passwort = (TextFeld *)passwort->release();
+    if( nachricht )
+        nachricht = (TextFeld *)nachricht->release();
+    if( geheimnis )
+        geheimnis = (TextFeld *)geheimnis->release();
+    if( weiter )
+        weiter = (Knopf *)weiter->release();
+    if( abbrechen )
+        abbrechen = (Knopf *)abbrechen->release();
+    if( ok )
+        ok = (Knopf *)ok->release();
+    if( login )
+        login = (Knopf *)login->release();
 }
 }
 
 
 // Knopfdruck
 // Knopfdruck
 void Login::druckFremdKnopf() // Ein anderer Bereich des Programms wurde ausgewählt
 void Login::druckFremdKnopf() // Ein anderer Bereich des Programms wurde ausgewählt
 {
 {
-	fenster->removeStyle( Fenster::Style::Sichtbar );
-	login->setRahmenBreite( 2 );
-	login->setAlphaFeldFarbe( 0x5500FF00 );
-	login->setAlphaFeldStrength( -5 );
+    fenster->removeStyle( Fenster::Style::Sichtbar );
+    login->setRahmenBreite( 2 );
+    login->setAlphaFeldFarbe( 0x5500FF00 );
+    login->setAlphaFeldStrength( -5 );
 }
 }
 
 
 bool Login::nameTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld name
 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( 0, passwort->zText()->getLength() );
-	}
-	if( name->zText()->getLength() >= 25 && istSchreibbar( te.taste ) )
-		return 0;
-	return 1;
+    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( 0, passwort->zText()->getLength() );
+    }
+    if( name->zText()->getLength() >= 25 && istSchreibbar( te.taste ) )
+        return 0;
+    return 1;
 }
 }
 
 
 bool Login::passwortTE( void *obj, TastaturEreignis te ) // TastaturEreignis im Textfeld passwort
 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;
+    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
 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;
+    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
 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;
+    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
 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, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), 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( 0, name->zText()->getLength() );
-		}
-	}
-	return 1;
+    if( me.id == ME_RLinks )
+    {
+        if( geheimnis->hatStyle( TextFeld::Style::Sichtbar ) )
+            new AktionsThread( 3, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), 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( 0, name->zText()->getLength() );
+        }
+    }
+    return 1;
 }
 }
 
 
 bool Login::abbrechenME( void *obj, MausEreignis me ) // MausEreignis im Knopf abbrechen
 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( 0, name->zText()->getLength() );
-	}
-	return 1;
+    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( 0, name->zText()->getLength() );
+    }
+    return 1;
 }
 }
 
 
 bool Login::loginME( void *obj, MausEreignis me ) // MausEreignis im Knopf login
 bool Login::loginME( void *obj, MausEreignis me ) // MausEreignis im Knopf login
 {
 {
-	if( me.id == ME_RLinks )
-	{
-		vorLogin->setLogin( 1 );
+    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 );
+        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->setRahmenBreite( 3 );
-		login->setAlphaFeldFarbe( 0xFF000000 );
-		login->setAlphaFeldStrength( 20 );
-		name->addStyle( TextFeld::Style::Fokus );
-		name->setAuswahl( 0, name->zText()->getLength() );
-	}
-	return 1;
+        login->setRahmenBreite( 3 );
+        login->setAlphaFeldFarbe( 0xFF000000 );
+        login->setAlphaFeldStrength( 20 );
+        name->addStyle( TextFeld::Style::Fokus );
+        name->setAuswahl( 0, name->zText()->getLength() );
+    }
+    return 1;
 }
 }
 
 
 void Login::setLoginReturn( int ret ) // setzt den Returnwert vom login
 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( 0, geheimnis->zText()->getLength() );
-	}
-	else if( !ret && lastError.getLength() )
-	{
-		name->removeStyle( TextFeld::Style::Sichtbar );
-		passwort->removeStyle( TextFeld::Style::Sichtbar );
-		weiter->removeStyle( Knopf::Style::Sichtbar );
-		nachricht->setText( lastError );
-		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 );
-	}
+    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( 0, geheimnis->zText()->getLength() );
+    }
+    else if( !ret && lastError.getLength() )
+    {
+        name->removeStyle( TextFeld::Style::Sichtbar );
+        passwort->removeStyle( TextFeld::Style::Sichtbar );
+        weiter->removeStyle( Knopf::Style::Sichtbar );
+        nachricht->setText( lastError );
+        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
 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( lastError );
-		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;
+    if( ret == 1 )
+        new AktionsThread( 2, 0, 0, 0, 0, 0 );
+    else if( ret == 2 )
+    {
+        nachricht->setText( lastError );
+        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 );
+    }
 }
 }
 
 
 // Ereignisse
 // Ereignisse
 bool loginNameTE( void *p, void *obj, TastaturEreignis te )
 bool loginNameTE( void *p, void *obj, TastaturEreignis te )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->nameTE( obj, te );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->nameTE( obj, te );
 }
 }
 
 
 bool loginPasswortTE( void *p, void *obj, TastaturEreignis te )
 bool loginPasswortTE( void *p, void *obj, TastaturEreignis te )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->passwortTE( obj, te );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->passwortTE( obj, te );
 }
 }
 
 
 bool loginGeheimnisTE( void *p, void *obj, TastaturEreignis te )
 bool loginGeheimnisTE( void *p, void *obj, TastaturEreignis te )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->geheimnisTE( obj, te );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->geheimnisTE( obj, te );
 }
 }
 
 
 bool loginWeiterME( void *p, void *obj, MausEreignis me )
 bool loginWeiterME( void *p, void *obj, MausEreignis me )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->weiterME( obj, me );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->weiterME( obj, me );
 }
 }
 
 
 bool loginAbbrechenME( void *p, void *obj, MausEreignis me )
 bool loginAbbrechenME( void *p, void *obj, MausEreignis me )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->abbrechenME( obj, me );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->abbrechenME( obj, me );
 }
 }
 
 
 bool loginOkME( void *p, void *obj, MausEreignis me )
 bool loginOkME( void *p, void *obj, MausEreignis me )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->okME( obj, me );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->okME( obj, me );
 }
 }
 
 
 bool loginLoginME( void *p, void *obj, MausEreignis me )
 bool loginLoginME( void *p, void *obj, MausEreignis me )
 {
 {
-	if( !p )
-		return 0;
-	return ( (Login*)p )->loginME( obj, me );
+    if( !p )
+        return 0;
+    return ( (Login *)p )->loginME( obj, me );
 }
 }

+ 25 - 29
KSGClient/VorLogin/Login/Login.h

@@ -13,39 +13,35 @@
 using namespace Framework;
 using namespace Framework;
 using namespace Network;
 using namespace Network;
 
 
-class Login
+class Login : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	Knopf *weiter;
-	Knopf *login;
-	TextFeld *nachricht;
-	TextFeld *geheimnis;
-	Knopf *ok;
-	Knopf *abbrechen;
-	int ref;
+    Fenster *fenster;
+    TextFeld *name;
+    TextFeld *passwort;
+    Knopf *weiter;
+    Knopf *login;
+    TextFeld *nachricht;
+    TextFeld *geheimnis;
+    Knopf *ok;
+    Knopf *abbrechen;
 
 
 public:
 public:
-	// Konstruktor 
-	Login( Schrift *zSchrift, Fenster *vorLoginFenster );
-	// Destruktor 
-	~Login();
-	// Knopfdruck
-	void Login::druckFremdKnopf(); // Ein anderer Bereich des Programms wurde ausgewählt
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // TastaturEreignis im Textfeld passwort
-	bool geheimnisTE( void *obj, TastaturEreignis te ); // TastaturEreignis im Textfeld geheimnis
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	bool okME( void *obj, MausEreignis me ); // MausEreignis im Knopf ok
-	bool abbrechenME( void *obj, MausEreignis me ); // MausEreignis im Knopf abbrechen
-	bool loginME( void *obj, MausEreignis me ); // MausEreignis im Knopf login
-	void setLoginReturn( int ret ); // setzt den Returnwert vom login
-	void setKickReturn( int ret ); // setzt den returnwert vom kick
-	// Reference Counting
-	Login *getThis();
-	Login *release();
+    // Konstruktor 
+    Login( Fenster *vorLoginFenster );
+    // Destruktor 
+    ~Login();
+    // Knopfdruck
+    void Login::druckFremdKnopf(); // Ein anderer Bereich des Programms wurde ausgewählt
+    bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
+    bool passwortTE( void *obj, TastaturEreignis te ); // TastaturEreignis im Textfeld passwort
+    bool geheimnisTE( void *obj, TastaturEreignis te ); // TastaturEreignis im Textfeld geheimnis
+    bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
+    bool okME( void *obj, MausEreignis me ); // MausEreignis im Knopf ok
+    bool abbrechenME( void *obj, MausEreignis me ); // MausEreignis im Knopf abbrechen
+    bool loginME( void *obj, MausEreignis me ); // MausEreignis im Knopf login
+    void setLoginReturn( int ret ); // setzt den Returnwert vom login
+    void setKickReturn( int ret ); // setzt den returnwert vom kick
 };
 };
 
 
 bool loginNameTE( void *p, void *obj, TastaturEreignis te );
 bool loginNameTE( void *p, void *obj, TastaturEreignis te );

+ 44 - 68
KSGClient/VorLogin/VorLogin.cpp

@@ -1,14 +1,12 @@
 #include "VorLogin.h"
 #include "VorLogin.h"
 #include "..\Global\Initialisierung.h"
 #include "..\Global\Initialisierung.h"
+#include "..\Global\Variablen.h"
 
 
 // Inhalt der VorLogin Klasse aus VorLogin.h
 // Inhalt der VorLogin Klasse aus VorLogin.h
 // Konstruktor 
 // Konstruktor 
-VorLogin::VorLogin( Schrift *zSchrift, Bildschirm *zBildschirm )
+VorLogin::VorLogin()
+    : ReferenceCounter()
 {
 {
-    if( zSchrift )
-        schrift = zSchrift->getThis();
-    if( zBildschirm )
-        bildschirm = zBildschirm->getThis();
     fenster = 0;
     fenster = 0;
     beenden = 0;
     beenden = 0;
     login = 0;
     login = 0;
@@ -21,7 +19,6 @@ VorLogin::VorLogin( Schrift *zSchrift, Bildschirm *zBildschirm )
     passwortVergessen = 0;
     passwortVergessen = 0;
     registrierung = 0;
     registrierung = 0;
     unregistrierung = 0;
     unregistrierung = 0;
-    ref = 1;
 }
 }
 
 
 // Destruktor 
 // Destruktor 
@@ -29,10 +26,6 @@ VorLogin::~VorLogin()
 {
 {
     if( fenster )
     if( fenster )
         setSichtbar( 0 );
         setSichtbar( 0 );
-    if( schrift )
-        schrift = schrift->release();
-    if( bildschirm )
-        bildschirm = bildschirm->release();
 }
 }
 
 
 // nicht constant
 // nicht constant
@@ -42,56 +35,54 @@ void VorLogin::setSichtbar( bool s ) // Setzt die Sichtbarkeit der VorLogin Ober
     {
     {
         if( fenster )
         if( fenster )
             setSichtbar( 0 );
             setSichtbar( 0 );
-        fenster = new Fenster();
+        fenster = uiFactory.createFenster( uiFactory.initParam );
         fenster->addStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar );
         fenster->addStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar );
-        fenster->setSize( bildschirm->getBackBufferSize() );
+        fenster->setSize( uiFactory.initParam.bildschirm->getBackBufferSize() );
         fenster->setPosition( 0, 0 );
         fenster->setPosition( 0, 0 );
-        beenden = initKnopf( 10, 10, 130, 30, schrift, Knopf::Style::Sichtbar, "Beenden" );
+        beenden = initKnopf( 10, 10, 130, 30, Knopf::Style::Sichtbar, "Beenden" );
         beenden->setMausEreignis( VorLoginBeendenME );
         beenden->setMausEreignis( VorLoginBeendenME );
-        initToolTip( beenden, "Beendet den Kolja-Strohm Games Client.", schrift, bildschirm );
-        fenster->addMember( beenden->getThis() );
-        login = new Login( schrift, fenster );
-        eMailÄndern = new EMailÄndern( schrift, fenster );
-        eMailVergessen = new EMailVergessen( schrift, fenster );
-        geheimnisÄndern = new GeheimnisÄndern( schrift, fenster );
-        geheimnisVergessen = new GeheimnisVergessen( schrift, fenster );
-        nameVergessen = new NameVergessen( schrift, fenster );
-        passwortÄndern = new PasswortÄndern( schrift, fenster );
-        passwortVergessen = new PasswortVergessen( schrift, fenster );
-        registrierung = new Registrierung( schrift, fenster );
-        unregistrierung = new Unregistrierung( schrift, fenster );
-        bildschirm->addMember( fenster->getThis() );
+        initToolTip( beenden, "Beendet den Kolja-Strohm Games Client." );
+        fenster->addMember( beenden );
+        login = new Login( fenster );
+        eMailÄndern = new EMailÄndern( fenster );
+        eMailVergessen = new EMailVergessen( fenster );
+        geheimnisÄndern = new GeheimnisÄndern( fenster );
+        geheimnisVergessen = new GeheimnisVergessen( fenster );
+        nameVergessen = new NameVergessen( fenster );
+        passwortÄndern = new PasswortÄndern( fenster );
+        passwortVergessen = new PasswortVergessen( fenster );
+        registrierung = new Registrierung( fenster );
+        unregistrierung = new Unregistrierung( fenster );
+        uiFactory.initParam.bildschirm->addMember( fenster );
     }
     }
     else
     else
     {
     {
-        bildschirm->lock();
-        if( bildschirm )
-            bildschirm->removeMember( fenster );
-        if( beenden )
-            beenden = (Knopf *)beenden->release();
+        uiFactory.initParam.bildschirm->lock();
+        if( uiFactory.initParam.bildschirm )
+            uiFactory.initParam.bildschirm->removeMember( fenster );
         if( login )
         if( login )
-            login = login->release();
+            login = (Login *)login->release();
         if( eMailÄndern )
         if( eMailÄndern )
-            eMailÄndern = eMailÄndern->release();
+            eMailÄndern = (EMailÄndern *)eMailÄndern->release();
         if( eMailVergessen )
         if( eMailVergessen )
-            eMailVergessen = eMailVergessen->release();
+            eMailVergessen = (EMailVergessen *)eMailVergessen->release();
         if( geheimnisÄndern )
         if( geheimnisÄndern )
-            geheimnisÄndern = geheimnisÄndern->release();
+            geheimnisÄndern = (GeheimnisÄndern *)geheimnisÄndern->release();
         if( geheimnisVergessen )
         if( geheimnisVergessen )
-            geheimnisVergessen = geheimnisVergessen->release();
+            geheimnisVergessen = (GeheimnisVergessen *)geheimnisVergessen->release();
         if( nameVergessen )
         if( nameVergessen )
-            nameVergessen = nameVergessen->release();
+            nameVergessen = (NameVergessen *)nameVergessen->release();
         if( passwortÄndern )
         if( passwortÄndern )
-            passwortÄndern = passwortÄndern->release();
+            passwortÄndern = (PasswortÄndern *)passwortÄndern->release();
         if( passwortVergessen )
         if( passwortVergessen )
-            passwortVergessen = passwortVergessen->release();
+            passwortVergessen = (PasswortVergessen *)passwortVergessen->release();
         if( registrierung )
         if( registrierung )
-            registrierung = registrierung->release();
+            registrierung = (Registrierung *)registrierung->release();
         if( unregistrierung )
         if( unregistrierung )
-            unregistrierung = unregistrierung->release();
+            unregistrierung = (Unregistrierung *)unregistrierung->release();
         if( fenster )
         if( fenster )
             fenster = (Fenster *)fenster->release();
             fenster = (Fenster *)fenster->release();
-        bildschirm->unlock();
+        uiFactory.initParam.bildschirm->unlock();
     }
     }
 }
 }
 
 
@@ -324,9 +315,9 @@ void VorLogin::setUnregistrierung() // macht Unregistrierung Oberfl
 }
 }
 
 
 // constant
 // constant
-Login * VorLogin::getLogin() const // gibt die Login Oberfläche zurück
+Login *VorLogin::getLogin() const // gibt die Login Oberfläche zurück
 {
 {
-    return login ? login->getThis() : 0;
+    return login ? dynamic_cast<Login *>( login->getThis() ) : 0;
 }
 }
 
 
 Login *VorLogin::zLogin() const
 Login *VorLogin::zLogin() const
@@ -336,7 +327,7 @@ Login *VorLogin::zLogin() const
 
 
 EMailÄndern *VorLogin::getEMailÄndern() const // gibt die EMailÄndern Oberfläche zurück
 EMailÄndern *VorLogin::getEMailÄndern() const // gibt die EMailÄndern Oberfläche zurück
 {
 {
-    return eMailÄndern ? eMailÄndern->getThis() : 0;
+    return eMailÄndern ? dynamic_cast<EMailÄndern *>( eMailÄndern->getThis() ) : 0;
 }
 }
 
 
 EMailÄndern *VorLogin::zEMailÄndern() const
 EMailÄndern *VorLogin::zEMailÄndern() const
@@ -346,7 +337,7 @@ EMail
 
 
 EMailVergessen *VorLogin::getEMailVergessen() const // gibt die EMailVergessen Oberfläche zurück
 EMailVergessen *VorLogin::getEMailVergessen() const // gibt die EMailVergessen Oberfläche zurück
 {
 {
-    return eMailVergessen ? eMailVergessen->getThis() : 0;
+    return eMailVergessen ? dynamic_cast<EMailVergessen *>( eMailVergessen->getThis() ) : 0;
 }
 }
 
 
 EMailVergessen *VorLogin::zEMailVergessen() const
 EMailVergessen *VorLogin::zEMailVergessen() const
@@ -356,7 +347,7 @@ EMailVergessen *VorLogin::zEMailVergessen() const
 
 
 GeheimnisÄndern *VorLogin::getGeheimnisÄndern() const // gibt die GeheimnisÄndern Oberfläche zurück
 GeheimnisÄndern *VorLogin::getGeheimnisÄndern() const // gibt die GeheimnisÄndern Oberfläche zurück
 {
 {
-    return geheimnisÄndern ? geheimnisÄndern->getThis() : 0;
+    return geheimnisÄndern ? dynamic_cast<GeheimnisÄndern *>( geheimnisÄndern->getThis() ) : 0;
 }
 }
 
 
 GeheimnisÄndern *VorLogin::zGeheimnisÄndern() const
 GeheimnisÄndern *VorLogin::zGeheimnisÄndern() const
@@ -366,7 +357,7 @@ Geheimnis
 
 
 GeheimnisVergessen *VorLogin::getGeheimnisVergessen() const // gibt die GeheimnisVergessen Oberfläche zurück
 GeheimnisVergessen *VorLogin::getGeheimnisVergessen() const // gibt die GeheimnisVergessen Oberfläche zurück
 {
 {
-    return geheimnisVergessen ? geheimnisVergessen->getThis() : 0;
+    return geheimnisVergessen ? dynamic_cast<GeheimnisVergessen *>( geheimnisVergessen->getThis() ) : 0;
 }
 }
 
 
 GeheimnisVergessen *VorLogin::zGeheimnisVergessen() const
 GeheimnisVergessen *VorLogin::zGeheimnisVergessen() const
@@ -376,7 +367,7 @@ GeheimnisVergessen *VorLogin::zGeheimnisVergessen() const
 
 
 NameVergessen *VorLogin::getNameVergessen() const // gibt die NameVergessen Oberfläche zurück
 NameVergessen *VorLogin::getNameVergessen() const // gibt die NameVergessen Oberfläche zurück
 {
 {
-    return nameVergessen ? nameVergessen->getThis() : 0;
+    return nameVergessen ? dynamic_cast<NameVergessen *>( nameVergessen->getThis() ) : 0;
 }
 }
 
 
 NameVergessen *VorLogin::zNameVergessen() const
 NameVergessen *VorLogin::zNameVergessen() const
@@ -386,7 +377,7 @@ NameVergessen *VorLogin::zNameVergessen() const
 
 
 PasswortÄndern *VorLogin::getPasswortÄndern() const // gibt die PasswortÄndern Oberfläche zurück
 PasswortÄndern *VorLogin::getPasswortÄndern() const // gibt die PasswortÄndern Oberfläche zurück
 {
 {
-    return passwortÄndern ? passwortÄndern->getThis() : 0;
+    return passwortÄndern ? dynamic_cast<PasswortÄndern *>( passwortÄndern->getThis() ) : 0;
 }
 }
 
 
 PasswortÄndern *VorLogin::zPasswortÄndern() const
 PasswortÄndern *VorLogin::zPasswortÄndern() const
@@ -396,7 +387,7 @@ Passwort
 
 
 PasswortVergessen *VorLogin::getPasswortVergessen() const // gibt die PasswortVergessen Oberfläche zurück
 PasswortVergessen *VorLogin::getPasswortVergessen() const // gibt die PasswortVergessen Oberfläche zurück
 {
 {
-    return passwortVergessen ? passwortVergessen->getThis() : 0;
+    return passwortVergessen ? dynamic_cast<PasswortVergessen *>( passwortVergessen->getThis() ) : 0;
 }
 }
 
 
 PasswortVergessen *VorLogin::zPasswortVergessen() const
 PasswortVergessen *VorLogin::zPasswortVergessen() const
@@ -406,7 +397,7 @@ PasswortVergessen *VorLogin::zPasswortVergessen() const
 
 
 Registrierung *VorLogin::getRegistrierung() const // gibt die Registrierung Oberfläche zurück
 Registrierung *VorLogin::getRegistrierung() const // gibt die Registrierung Oberfläche zurück
 {
 {
-    return registrierung ? registrierung->getThis() : 0;
+    return registrierung ? dynamic_cast<Registrierung *>( registrierung->getThis() ) : 0;
 }
 }
 
 
 Registrierung *VorLogin::zRegistrierung() const
 Registrierung *VorLogin::zRegistrierung() const
@@ -416,7 +407,7 @@ Registrierung *VorLogin::zRegistrierung() const
 
 
 Unregistrierung *VorLogin::getUnregistrierung() const // gibt die Unregistrierung Oberfläche zurück
 Unregistrierung *VorLogin::getUnregistrierung() const // gibt die Unregistrierung Oberfläche zurück
 {
 {
-    return unregistrierung ? unregistrierung->getThis() : 0;
+    return unregistrierung ? dynamic_cast<Unregistrierung *>( unregistrierung->getThis() ) : 0;
 }
 }
 
 
 Unregistrierung *VorLogin::zUnregistrierung() const
 Unregistrierung *VorLogin::zUnregistrierung() const
@@ -429,21 +420,6 @@ Fenster *VorLogin::zFenster() const
     return fenster;
     return fenster;
 }
 }
 
 
-// Reference Counting
-VorLogin *VorLogin::getThis()
-{
-    ref++;
-    return this;
-}
-
-VorLogin *VorLogin::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 // Ereignisse
 // Ereignisse
 bool VorLoginBeendenME( void *p, void *obj, MausEreignis me )
 bool VorLoginBeendenME( void *p, void *obj, MausEreignis me )
 {
 {

+ 51 - 57
KSGClient/VorLogin/VorLogin.h

@@ -10,67 +10,61 @@
 #include "Account verwalten\Registrierung.h"
 #include "Account verwalten\Registrierung.h"
 #include "Account verwalten\Unregistrierung.h"
 #include "Account verwalten\Unregistrierung.h"
 
 
-class VorLogin
+class VorLogin : public virtual ReferenceCounter
 {
 {
 private:
 private:
-	Knopf				*beenden;
-	Login				*login;
-	EMailÄndern			*eMailÄndern;
-	EMailVergessen		*eMailVergessen;
-	GeheimnisÄndern		*geheimnisÄndern;
-	GeheimnisVergessen	*geheimnisVergessen;
-	NameVergessen		*nameVergessen;
-	PasswortÄndern		*passwortÄndern;
-	PasswortVergessen	*passwortVergessen;
-	Registrierung		*registrierung;
-	Unregistrierung		*unregistrierung;
-	Schrift				*schrift;
-	Bildschirm			*bildschirm;
-	Fenster             *fenster;
-	int ref;
+    Knopf *beenden;
+    Login *login;
+    EMailÄndern *eMailÄndern;
+    EMailVergessen *eMailVergessen;
+    GeheimnisÄndern *geheimnisÄndern;
+    GeheimnisVergessen *geheimnisVergessen;
+    NameVergessen *nameVergessen;
+    PasswortÄndern *passwortÄndern;
+    PasswortVergessen *passwortVergessen;
+    Registrierung *registrierung;
+    Unregistrierung *unregistrierung;
+    Fenster *fenster;
 
 
 public:
 public:
-	// Konstruktor 
-	VorLogin( Schrift *zSchrift, Bildschirm *zBildschirm );
-	// Destruktor 
-	~VorLogin();
-	// nicht constant
-	void setSichtbar( bool s ); // Setzt die Sichtbarkeit der VorLogin Oberfräche
-	void setLogin( bool knopfPress ); // macht Login Oberfläche sichtbar
-	void setEMailÄndern(); // macht EMailÄndern Oberfläche sichtbar
-	void setEMailVergessen(); // macht EMailVergessen Oberfläche sichtbar
-	void setGeheimnisÄndern(); // macht GeheimnisÄndern Oberfläche sichtbar
-	void setGeheilnisVergessen(); // macht GeheimnisVergessen Oberfläche sichtbar
-	void setNameVergessen(); // macht NameVergessen Oberfläche sichtbar
-	void setPasswortÄndern(); // macht PasswortÄndern Oberfläche sichtbar
-	void setPasswortVergessen(); // macht passwortVergessen Oberfläche sichtbar
-	void setRegistrierung(); // macht Registrierung Oberfläche sichtbar
-	void setUnregistrierung(); // macht Unregistrierung Oberfläche sichtbar
-	// constant
-	Login *getLogin() const; // gibt die Login Oberfläche zurück
-	Login *zLogin() const;
-	EMailÄndern *getEMailÄndern() const; // gibt die EMailÄndern Oberfläche zurück
-	EMailÄndern *zEMailÄndern() const;
-	EMailVergessen *getEMailVergessen() const; // gibt die EMailVergessen Oberfläche zurück
-	EMailVergessen *zEMailVergessen() const;
-	GeheimnisÄndern *getGeheimnisÄndern() const; // gibt die GeheimnisÄndern Oberfläche zurück
-	GeheimnisÄndern *zGeheimnisÄndern() const;
-	GeheimnisVergessen *getGeheimnisVergessen() const; // gibt die GeheimnisVergessen Oberfläche zurück
-	GeheimnisVergessen *zGeheimnisVergessen() const;
-	NameVergessen *getNameVergessen() const; // gibt die NameVergessen Oberfläche zurück
-	NameVergessen *zNameVergessen() const;
-	PasswortÄndern *getPasswortÄndern() const; // gibt die PasswortÄndern Oberfläche zurück
-	PasswortÄndern *zPasswortÄndern() const;
-	PasswortVergessen *getPasswortVergessen() const; // gibt die PasswortVergessen Oberfläche zurück
-	PasswortVergessen *zPasswortVergessen() const;
-	Registrierung *getRegistrierung() const; // gibt die Registrierung Oberfläche zurück
-	Registrierung *zRegistrierung() const;
-	Unregistrierung *getUnregistrierung() const; // gibt die Unregistrierung Oberfläche zurück
-	Unregistrierung *zUnregistrierung() const;
-	Fenster *zFenster() const;
-	// Reference Counting
-	VorLogin *getThis();
-	VorLogin *release();
+    // Konstruktor 
+    VorLogin();
+    // Destruktor 
+    ~VorLogin();
+    // nicht constant
+    void setSichtbar( bool s ); // Setzt die Sichtbarkeit der VorLogin Oberfräche
+    void setLogin( bool knopfPress ); // macht Login Oberfläche sichtbar
+    void setEMailÄndern(); // macht EMailÄndern Oberfläche sichtbar
+    void setEMailVergessen(); // macht EMailVergessen Oberfläche sichtbar
+    void setGeheimnisÄndern(); // macht GeheimnisÄndern Oberfläche sichtbar
+    void setGeheilnisVergessen(); // macht GeheimnisVergessen Oberfläche sichtbar
+    void setNameVergessen(); // macht NameVergessen Oberfläche sichtbar
+    void setPasswortÄndern(); // macht PasswortÄndern Oberfläche sichtbar
+    void setPasswortVergessen(); // macht passwortVergessen Oberfläche sichtbar
+    void setRegistrierung(); // macht Registrierung Oberfläche sichtbar
+    void setUnregistrierung(); // macht Unregistrierung Oberfläche sichtbar
+    // constant
+    Login *getLogin() const; // gibt die Login Oberfläche zurück
+    Login *zLogin() const;
+    EMailÄndern *getEMailÄndern() const; // gibt die EMailÄndern Oberfläche zurück
+    EMailÄndern *zEMailÄndern() const;
+    EMailVergessen *getEMailVergessen() const; // gibt die EMailVergessen Oberfläche zurück
+    EMailVergessen *zEMailVergessen() const;
+    GeheimnisÄndern *getGeheimnisÄndern() const; // gibt die GeheimnisÄndern Oberfläche zurück
+    GeheimnisÄndern *zGeheimnisÄndern() const;
+    GeheimnisVergessen *getGeheimnisVergessen() const; // gibt die GeheimnisVergessen Oberfläche zurück
+    GeheimnisVergessen *zGeheimnisVergessen() const;
+    NameVergessen *getNameVergessen() const; // gibt die NameVergessen Oberfläche zurück
+    NameVergessen *zNameVergessen() const;
+    PasswortÄndern *getPasswortÄndern() const; // gibt die PasswortÄndern Oberfläche zurück
+    PasswortÄndern *zPasswortÄndern() const;
+    PasswortVergessen *getPasswortVergessen() const; // gibt die PasswortVergessen Oberfläche zurück
+    PasswortVergessen *zPasswortVergessen() const;
+    Registrierung *getRegistrierung() const; // gibt die Registrierung Oberfläche zurück
+    Registrierung *zRegistrierung() const;
+    Unregistrierung *getUnregistrierung() const; // gibt die Unregistrierung Oberfläche zurück
+    Unregistrierung *zUnregistrierung() const;
+    Fenster *zFenster() const;
 };
 };
 
 
 // Ereignisse
 // Ereignisse