ChatLeiste.cpp 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321
  1. #include "ChatLeiste.h"
  2. #include "..\..\Global\Initialisierung.h"
  3. #include <Bild.h>
  4. #include <Rahmen.h>
  5. #include <Punkt.h>
  6. #include "..\..\Global\Variablen.h"
  7. #include <DateiSystem.h>
  8. #include <ToolTip.h>
  9. #include <GSLDateiV.h>
  10. #include <Globals.h>
  11. typedef GSL::GSLDateiV *( *GetGSLDatei )( );
  12. // Inhalt der Chat Klasse aus ChatLeiste.h
  13. // Konstruktor
  14. Chat::Chat( Schrift *zSchrift )
  15. {
  16. Bild *minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
  17. Bild *closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
  18. rahmen = new LRahmen();
  19. rahmen->setAlpha( 1 );
  20. rahmen->setFarbe( 0xFFFFFFFF );
  21. rahmen->setRamenBreite( 1 );
  22. verlauf = initTextFeld( 7, 7, 184, 210, zSchrift, TextFeld::Style::TextGebiet, "" );
  23. verlauf->removeStyle( TextFeld::Style::Erlaubt );
  24. verlauf->updateVScroll();
  25. nachricht = initTextFeld( 1, 220, 198, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  26. initToolTip( nachricht, "Nachricht senden.", zSchrift, hauptScreen );
  27. name = initTextFeld( 1, 250, 198, 29, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "" );
  28. minimieren = initKnopf( 159, 255, 20, 20, 0, 0, "" );
  29. minimieren->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  30. minimieren->setHintergrundBildZ( minimierenBild );
  31. initToolTip( minimieren, "Fenster einklappen.", zSchrift, hauptScreen );
  32. close = initKnopf( 179, 255, 20, 20, 0, 0, "" );
  33. close->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  34. close->setHintergrundBildZ( closeBild );
  35. initToolTip( close, "Fenster schließen.", zSchrift, hauptScreen );
  36. bildschirmGröße = BildschirmGröße();
  37. admin = 0;
  38. tickVal = 0;
  39. sichtbar = 1;
  40. breite = 0;
  41. höhe = 30;
  42. animation = 1;
  43. rend = 0;
  44. msgSound = 0;
  45. HMODULE dll = Framework::getDLLRegister()->ladeDLL( "GSL.dll", "data/bin/GSL.dll" );
  46. if( dll )
  47. {
  48. GetGSLDatei getGSLDatei = (GetGSLDatei)GetProcAddress( dll, "getGSLDatei" );
  49. if( getGSLDatei )
  50. {
  51. GSL::GSLDateiV *sDat = getGSLDatei();
  52. sDat->setDatei( "data/sounds/popup.gsl" );
  53. sDat->leseDaten();
  54. msgSound = sDat->getSound( "chat.wav" );
  55. sDat->release();
  56. if( msgSound )
  57. msgSound->setVolume( 0xFFFF, 0xFFFF );
  58. }
  59. if( !msgSound )
  60. Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
  61. }
  62. ref = 1;
  63. }
  64. // Destruktor
  65. Chat::~Chat()
  66. {
  67. if( msgSound )
  68. {
  69. msgSound->release();
  70. Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
  71. }
  72. rahmen->release();
  73. verlauf = (TextFeld *)verlauf->release();
  74. nachricht = (TextFeld *)nachricht->release();
  75. name = (TextFeld *)name->release();
  76. minimieren = (Knopf *)minimieren->release();
  77. close = (Knopf *)close->release();
  78. }
  79. // nicht constant
  80. void Chat::setSichtbar( bool sichtbar )
  81. {
  82. if( sichtbar )
  83. animation = 2;
  84. else
  85. animation = 3;
  86. this->sichtbar = sichtbar;
  87. }
  88. void Chat::entfernen()
  89. {
  90. animation = 4;
  91. }
  92. void Chat::addNachricht( char *txt )
  93. {
  94. if( msgSound )
  95. msgSound->playSound();
  96. Text * n = new Text( txt );
  97. verlauf->zTextRenderer()->textFormatieren( n, verlauf->getBreite() - 20 );
  98. if( n->getText()[ n->getLength() - 1 ] != '\n' )
  99. n->append( "\n" );
  100. verlauf->zText()->append( n );
  101. verlauf->setSchriftFarbe( verlauf->zText()->getLength() - n->getLength(), verlauf->zText()->getLength(), 0xFFFFFFFF );
  102. if( animation != 4 )
  103. animation = 2;
  104. verlauf->updateVScroll();
  105. rend = 1;
  106. }
  107. void Chat::setAdmin()
  108. {
  109. admin = 1;
  110. rend = 1;
  111. }
  112. void Chat::addSpieler( int accountId )
  113. {
  114. // nur bei chatroom
  115. }
  116. void Chat::removeSpieler( int accountId )
  117. {
  118. // nur bei chatroom
  119. }
  120. bool Chat::tick( double tickVal )
  121. {
  122. // virtual
  123. return 0;
  124. }
  125. void Chat::doMausEreignis( MausEreignis & me )
  126. {
  127. // virtual
  128. }
  129. void Chat::doTastaturEreignis( TastaturEreignis & te )
  130. {
  131. // virtual
  132. }
  133. void Chat::render( int x, Bild & zRObj )
  134. {
  135. // virtual
  136. }
  137. // constant
  138. TextFeld *Chat::getName() const
  139. {
  140. return (TextFeld *)name->getThis();
  141. }
  142. TextFeld *Chat::zName() const
  143. {
  144. return name;
  145. }
  146. int Chat::getAccountId() const
  147. {
  148. // nur bei chat
  149. return 0;
  150. }
  151. int Chat::getChatroomId() const
  152. {
  153. // nur bei chatroom
  154. return 0;
  155. }
  156. int Chat::getBreite() const
  157. {
  158. return breite;
  159. }
  160. bool Chat::istSichtbar() const
  161. {
  162. return sichtbar;
  163. }
  164. // Reference Counting
  165. void *Chat::getThis()
  166. {
  167. // virtual
  168. return 0;
  169. }
  170. void *Chat::release()
  171. {
  172. // virtual
  173. return 0;
  174. }
  175. // Inhalt der ChatFenster Klasse aus ChatLeiste.h
  176. // Konstruktor
  177. ChatFenster::ChatFenster( Schrift * zSchrift, int accountId )
  178. : Chat( zSchrift )
  179. {
  180. this->accountId = accountId;
  181. name->setTextZ( infoClient->getSpielerName( accountId ) );
  182. }
  183. // Destruktor
  184. ChatFenster::~ChatFenster()
  185. {
  186. }
  187. // nicht constant
  188. bool ChatFenster::tick( double tickVal )
  189. {
  190. rend |= close->tick( tickVal );
  191. rend |= minimieren->tick( tickVal );
  192. rend |= verlauf->tick( tickVal );
  193. rend |= nachricht->tick( tickVal );
  194. if( !animation )
  195. {
  196. bool ret = rend;
  197. rend = 0;
  198. return ret;
  199. }
  200. this->tickVal += tickVal * 300;
  201. int val = (int)this->tickVal;
  202. if( val < 1 )
  203. {
  204. bool ret = rend;
  205. rend = 0;
  206. return ret;
  207. }
  208. if( val > 10 )
  209. val = 10;
  210. this->tickVal -= val;
  211. switch( animation )
  212. {
  213. case 1: // erstellen
  214. case 2: // ausfahren
  215. if( breite == 200 )
  216. {
  217. höhe += val;
  218. if( höhe > 280 )
  219. {
  220. höhe = 280;
  221. animation = 0;
  222. }
  223. }
  224. else
  225. {
  226. breite += val;
  227. if( breite > 200 )
  228. breite = 200;
  229. }
  230. rend = 1;
  231. break;
  232. case 3: // einfahren
  233. if( höhe == 30 )
  234. {
  235. breite -= val;
  236. if( breite < 100 )
  237. {
  238. breite = 100;
  239. animation = 0;
  240. }
  241. }
  242. else
  243. {
  244. höhe -= val;
  245. if( höhe < 30 )
  246. höhe = 30;
  247. }
  248. rend = 1;
  249. break;
  250. case 4: // close
  251. if( höhe == 30 )
  252. {
  253. breite -= val;
  254. if( breite < 0 )
  255. {
  256. nachLogin->zChatLeiste()->removeChat( this ); // delete this
  257. return 1;
  258. }
  259. }
  260. else
  261. {
  262. höhe -= val;
  263. if( höhe < 30 )
  264. höhe = 30;
  265. }
  266. rend = 1;
  267. break;
  268. }
  269. bool ret = rend;
  270. rend = 0;
  271. return ret;
  272. }
  273. void ChatFenster::doMausEreignis( MausEreignis & me )
  274. {
  275. bool tmp = me.verarbeitet;
  276. if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
  277. me.verarbeitet = 1;
  278. verlauf->doMausEreignis( me );
  279. bool vera = me.verarbeitet;
  280. minimieren->doMausEreignis( me );
  281. int aktion = me.verarbeitet && !vera ? 1 : 0;
  282. close->doMausEreignis( me );
  283. if( !aktion )
  284. aktion = me.verarbeitet && !vera ? 2 : 0;
  285. nachricht->doMausEreignis( me );
  286. if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
  287. {
  288. me.verarbeitet = tmp;
  289. return;
  290. }
  291. if( !aktion && !sichtbar && !vera )
  292. {
  293. if( me.mx < breite &&me.mx > 0 && me.my > 250 && me.my < 280 )
  294. aktion = 3;
  295. }
  296. switch( aktion )
  297. {
  298. case 1: // einfahren
  299. if( me.id == ME_RLinks )
  300. this->setSichtbar( 0 );
  301. break;
  302. case 2: // close
  303. if( me.id == ME_RLinks )
  304. animation = 4;
  305. break;
  306. case 3: // ausfahren
  307. if( me.id == ME_RLinks )
  308. this->setSichtbar( 1 );
  309. break;
  310. }
  311. }
  312. void ChatFenster::doTastaturEreignis( TastaturEreignis & te )
  313. {
  314. bool tmp = te.verarbeitet;
  315. if( animation )
  316. te.verarbeitet = 1;
  317. nachricht->doTastaturEreignis( te );
  318. int aktion = te.verarbeitet && !tmp ? 1 : 0;
  319. if( animation )
  320. {
  321. te.verarbeitet = tmp;
  322. return;
  323. }
  324. switch( aktion )
  325. {
  326. case 1:
  327. if( te.id == TE_Release && te.taste == T_Enter )
  328. {
  329. if( !nachricht->zText()->getLength() )
  330. break;
  331. nachricht->zText()->remove( "\n" );
  332. if( chatClient->chatNachricht( accountId, nachricht->zText()->getText() ) )
  333. {
  334. Text *n = new Text( nachricht->zText()->getText() );
  335. verlauf->zTextRenderer()->textFormatieren( n, verlauf->getBreite() - 15 );
  336. if( n->getText()[ n->getLength() - 1 ] != '\n' )
  337. n->append( "\n" );
  338. verlauf->zText()->append( n->getText() );
  339. verlauf->setSchriftFarbe( verlauf->zText()->getLength() - n->getLength(), verlauf->zText()->getLength(), 0xFF00FF00 );
  340. n->release();
  341. verlauf->updateVScroll();
  342. nachricht->setText( "" );
  343. nachricht->setAuswahl( 0, 0 );
  344. rend = 1;
  345. }
  346. }
  347. break;
  348. }
  349. }
  350. void ChatFenster::render( int xPos, Bild & zRObj )
  351. {
  352. int x = xPos;
  353. int y = 280 - höhe;
  354. int br = breite;
  355. int hö = höhe;
  356. if( !zRObj.setDrawOptions( x, y, br, hö ) )
  357. return;
  358. zRObj.alphaRegion( 0, 0, br, hö, 0xA0000000 );
  359. rahmen->setSize( br, hö );
  360. rahmen->render( zRObj );
  361. zRObj.addScrollOffset( 0, 280 - höhe );
  362. verlauf->render( zRObj );
  363. nachricht->render( zRObj );
  364. name->render( zRObj );
  365. minimieren->render( zRObj );
  366. close->render( zRObj );
  367. zRObj.releaseDrawOptions();
  368. }
  369. // constant
  370. int ChatFenster::getAccountId() const
  371. {
  372. return accountId;
  373. }
  374. // Reference Counting
  375. void *ChatFenster::getThis()
  376. {
  377. ref++;
  378. return this;
  379. }
  380. void *ChatFenster::release()
  381. {
  382. ref--;
  383. if( !ref )
  384. delete this;
  385. return 0;
  386. }
  387. // Inhalt der ChatroomFenster Klasse aus ChatLeiste.h
  388. // Konstruktor
  389. ChatroomFenster::ChatroomFenster( Schrift * zSchrift, int chatroomId )
  390. : Chat( zSchrift )
  391. {
  392. Bild *maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
  393. this->chatroomId = chatroomId;
  394. spielerName = initTextFeld( 200, 5, 120, 0, zSchrift, TextFeld::Style::TextFeld, "" );
  395. initToolTip( spielerName, "Name des Spielers der eingeladen werden soll.", zSchrift, hauptScreen );
  396. einladen = initKnopf( 325, 5, 20, 0, 0, 0, "" );
  397. einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  398. einladen->setHintergrundBildZ( maximierenBild );
  399. initToolTip( einladen, "Spieler ins Chatroom einladen.", zSchrift, hauptScreen );
  400. spieler = new ObjTabelle();
  401. spieler->setMausEreignis( _ret1ME );
  402. spieler->setStyle( ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Rahmen | ObjTabelle::Style::VScroll | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::VScroll | ObjTabelle::Style::Raster );
  403. spieler->setVertikalKlickScroll( 5 );
  404. spieler->setPosition( 200, 1 );
  405. spieler->setSize( 149, 240 );
  406. spieler->setRasterFarbe( 0xFF555555 );
  407. spieler->setRahmenFarbe( 0xFFFFFFFF );
  408. spieler->addSpalte( 0, "Name" );
  409. spieler->addSpalte( 1, "Freund" );
  410. spieler->addSpalte( 2, "Kick" );
  411. spieler->setSpaltenBreite( 0, 110 );
  412. spieler->setSpaltenBreite( 1, 20 );
  413. spieler->setSpaltenBreite( 2, 0 );
  414. schrift = zSchrift->getThis();
  415. name->setTextZ( infoClient->getChatroomName( chatroomId ) );
  416. close->setPosition( close->getX() + 150, close->getY() );
  417. minimieren->setPosition( minimieren->getX() + 150, minimieren->getY() );
  418. neueSpieler = new Array< int >();
  419. alteSpieler = new Array< int >();
  420. neueSpielerAnzahl = 0;
  421. alteSpielerAnzahl = 0;
  422. }
  423. // Destruktor
  424. ChatroomFenster::~ChatroomFenster()
  425. {
  426. chatClient->chatroomVerlassen( chatroomId );
  427. schrift = schrift->release();
  428. neueSpieler = neueSpieler->release();
  429. alteSpieler = alteSpieler->release();
  430. spieler = (ObjTabelle *)spieler->release();
  431. spielerName = (TextFeld *)spielerName->release();
  432. einladen = (Knopf *)einladen->release();
  433. }
  434. // nicht constant
  435. void ChatroomFenster::addSpieler( int accountId )
  436. {
  437. Text *zeile = new Text();
  438. zeile->append( accountId );
  439. if( spieler->getZeilenNummer( zeile->getText() ) >= 0 )
  440. return;
  441. Bild * einladenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
  442. Bild * closeBild = bilder->get( "data/client/bilder/chat.ltdb/entfernen.png" );
  443. spieler->addZeile( zeile->getText() );
  444. spieler->setZeilenHeight( zeile->getText(), 0 );
  445. Text * name = infoClient->getSpielerName( accountId );
  446. TextFeld * sName = initTextFeld( 0, 0, 110, 20, schrift, TextFeld::Style::Sichtbar | TextFeld::Style::Text | TextFeld::Style::Center, name->getText() );
  447. name = name->release();
  448. spieler->setZeichnungZ( "Name", zeile->getText(), sName );
  449. Knopf * freund = initKnopf( 0, 0, 20, 20, 0, 0, "" );
  450. freund->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  451. freund->setHintergrundBildZ( einladenBild );
  452. freund->setMausEreignisParameter( this );
  453. freund->setMausEreignis( chatroomFensterFreundME );
  454. initToolTip( freund, "Freundeseinladung an den Spieler schicken.", schrift, hauptScreen );
  455. spieler->setZeichnungZ( "Freund", zeile->getText(), freund );
  456. Knopf * entfernen = initKnopf( 0, 0, 0, 20, 0, 0, "" );
  457. entfernen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  458. entfernen->setHintergrundBildZ( closeBild );
  459. entfernen->setMausEreignisParameter( this );
  460. entfernen->setMausEreignis( chatroomFensterEntfernenME );
  461. initToolTip( entfernen, "Spieler aus Chatroom entfernen.", schrift, hauptScreen );
  462. spieler->setZeichnungZ( "Kick", zeile->getText(), entfernen );
  463. neueSpieler->add( accountId, neueSpielerAnzahl );
  464. neueSpielerAnzahl++;
  465. zeile = zeile->release();
  466. rend = 1;
  467. }
  468. void ChatroomFenster::removeSpieler( int accountId )
  469. {
  470. Text *zeile = new Text();
  471. zeile->append( accountId );
  472. if( spieler->getZeilenNummer( zeile ) >= 0 )
  473. {
  474. alteSpieler->add( accountId, alteSpielerAnzahl );
  475. alteSpielerAnzahl++;
  476. rend = 1;
  477. }
  478. }
  479. bool ChatroomFenster::tick( double tickVal )
  480. {
  481. rend |= close->tick( tickVal );
  482. rend |= minimieren->tick( tickVal );
  483. rend |= einladen->tick( tickVal );
  484. rend |= spieler->tick( tickVal );
  485. rend |= spielerName->tick( tickVal );
  486. rend |= verlauf->tick( tickVal );
  487. rend |= nachricht->tick( tickVal );
  488. this->tickVal += tickVal * 300;
  489. int val = (int)this->tickVal;
  490. if( val < 1 )
  491. {
  492. bool ret = rend;
  493. rend = 0;
  494. return ret;
  495. }
  496. if( val > 10 )
  497. val = 10;
  498. this->tickVal -= val;
  499. switch( animation )
  500. {
  501. case 1: // erstellen
  502. case 2: // ausfahren
  503. if( breite == 350 )
  504. {
  505. höhe += val;
  506. if( höhe > 280 )
  507. {
  508. höhe = 280;
  509. animation = 0;
  510. }
  511. }
  512. else
  513. {
  514. breite += val;
  515. if( breite > 350 )
  516. breite = 350;
  517. }
  518. rend = 1;
  519. break;
  520. case 3: // einfahren
  521. if( höhe == 30 )
  522. {
  523. breite -= val;
  524. if( breite < 100 )
  525. {
  526. breite = 100;
  527. animation = 0;
  528. }
  529. }
  530. else
  531. {
  532. höhe -= val;
  533. if( höhe < 30 )
  534. höhe = 30;
  535. }
  536. rend = 1;
  537. break;
  538. case 4: // close
  539. if( höhe == 30 )
  540. {
  541. breite -= val;
  542. if( breite < 0 )
  543. {
  544. nachLogin->zChatLeiste()->removeChat( this ); // delete this
  545. return 1;
  546. }
  547. }
  548. else
  549. {
  550. höhe -= val;
  551. if( höhe < 30 )
  552. höhe = 30;
  553. }
  554. rend = 1;
  555. break;
  556. }
  557. Text *zeile = new Text( "" );
  558. for( int i = 0; i < neueSpielerAnzahl; i++ )
  559. {
  560. int id = neueSpieler->hat( i ) ? neueSpieler->get( i ) : 0;
  561. zeile->append( id );
  562. int z = spieler->getZeilenNummer( zeile->getText() );
  563. spieler->setZeilenHeight( z, spieler->getZeilenHeight( z ) + val / 2 );
  564. if( spieler->getZeilenHeight( z ) > 20 )
  565. {
  566. spieler->setZeilenHeight( z, 20 );
  567. neueSpieler->remove( i );
  568. neueSpielerAnzahl--;
  569. i--;
  570. }
  571. zeile->setText( "" );
  572. rend = 1;
  573. }
  574. for( int i = 0; i < alteSpielerAnzahl; i++ )
  575. {
  576. int id = alteSpieler->hat( i ) ? alteSpieler->get( i ) : 0;
  577. zeile->append( id );
  578. int z = spieler->getZeilenNummer( zeile->getText() );
  579. spieler->setZeilenHeight( z, spieler->getZeilenHeight( z ) - val / 2 );
  580. if( spieler->getZeilenHeight( z ) <= 0 )
  581. {
  582. spieler->removeZeile( z );
  583. alteSpieler->remove( i );
  584. alteSpielerAnzahl--;
  585. i--;
  586. }
  587. zeile->setText( "" );
  588. rend = 1;
  589. }
  590. zeile = zeile->release();
  591. if( admin )
  592. {
  593. if( spielerName->getHeight() != 20 )
  594. {
  595. spielerName->setSize( spielerName->getBreite(), spielerName->getHeight() + val / 2 );
  596. einladen->setSize( einladen->getBreite(), einladen->getHeight() + val / 2 );
  597. spieler->setPosition( spieler->getX(), spieler->getY() + val / 2 );
  598. spieler->setSize( spieler->getBreite(), spieler->getHeight() - val / 2 );
  599. if( spielerName->getHeight() >= 20 )
  600. {
  601. spielerName->setSize( spielerName->getBreite(), 20 );
  602. einladen->setSize( einladen->getBreite(), 20 );
  603. spieler->setPosition( spieler->getX(), 30 );
  604. spieler->setSize( spieler->getBreite(), 210 );
  605. }
  606. rend = 1;
  607. }
  608. if( spieler->getSpaltenBreite( 2 ) != 20 )
  609. {
  610. spieler->setSpaltenBreite( 2, spieler->getSpaltenBreite( 2 ) + val / 2 );
  611. spieler->setSpaltenBreite( 0, spieler->getSpaltenBreite( 0 ) - val / 2 );
  612. if( spieler->getSpaltenBreite( 2 ) > 20 )
  613. {
  614. spieler->setSpaltenBreite( 2, 20 );
  615. spieler->setSpaltenBreite( 0, 90 );
  616. }
  617. rend = 1;
  618. }
  619. }
  620. bool ret = rend;
  621. rend = 0;
  622. return ret;
  623. }
  624. void ChatroomFenster::doMausEreignis( MausEreignis & me )
  625. {
  626. bool tmp = me.verarbeitet;
  627. if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
  628. me.verarbeitet = 1;
  629. verlauf->doMausEreignis( me );
  630. bool vera = me.verarbeitet;
  631. minimieren->doMausEreignis( me );
  632. int aktion = me.verarbeitet && !vera ? 1 : 0;
  633. close->doMausEreignis( me );
  634. if( !aktion )
  635. aktion = me.verarbeitet && !vera ? 2 : 0;
  636. einladen->doMausEreignis( me );
  637. if( !aktion )
  638. aktion = me.verarbeitet && !vera ? 4 : 0;
  639. nachricht->doMausEreignis( me );
  640. spielerName->doMausEreignis( me );
  641. spieler->doMausEreignis( me );
  642. if( me.mx < 0 || me.mx > breite || me.my < 280 - höhe || animation )
  643. {
  644. me.verarbeitet = tmp;
  645. return;
  646. }
  647. if( !aktion && !sichtbar && !vera )
  648. {
  649. if( me.mx < breite &&me.mx > 0 && me.my > 250 && me.my < 280 )
  650. aktion = 3;
  651. }
  652. switch( aktion )
  653. {
  654. case 1: // einfahren
  655. if( me.id == ME_RLinks )
  656. this->setSichtbar( 0 );
  657. break;
  658. case 2: // close
  659. if( me.id == ME_RLinks )
  660. animation = 4;
  661. break;
  662. case 3: // ausfahren
  663. if( me.id == ME_RLinks )
  664. this->setSichtbar( 1 );
  665. break;
  666. case 4: // einladen
  667. if( me.id != ME_RLinks )
  668. break;
  669. if( spielerName->zText()->getLength() )
  670. {
  671. int accountId = infoClient->getAccountId( spielerName->zText()->getText() );
  672. if( accountId )
  673. {
  674. if( chatClient->chatroomEinladung( accountId, chatroomId ) )
  675. {
  676. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Chatroom Einladung" ), new Text( "Es wurde eine Chatroom Einladung an den Spieler gesendet." ),
  677. new Text( "Ok" ), 0 );
  678. spielerName->setText( "" );
  679. spielerName->setAuswahl( 0, 0 );
  680. rend = 1;
  681. }
  682. }
  683. else
  684. {
  685. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Der Spieler wurde nicht gefunden." ),
  686. new Text( "Ok" ), 0 );
  687. }
  688. }
  689. break;
  690. }
  691. }
  692. void ChatroomFenster::doTastaturEreignis( TastaturEreignis & te )
  693. {
  694. bool tmp = te.verarbeitet;
  695. if( animation )
  696. te.verarbeitet = 1;
  697. nachricht->doTastaturEreignis( te );
  698. int aktion = te.verarbeitet && !tmp ? 1 : 0;
  699. if( admin )
  700. {
  701. spielerName->doTastaturEreignis( te );
  702. if( !aktion )
  703. aktion = te.verarbeitet && !tmp ? 2 : 0;
  704. }
  705. if( animation )
  706. {
  707. te.verarbeitet = tmp;
  708. return;
  709. }
  710. switch( aktion )
  711. {
  712. case 1:
  713. if( te.id == TE_Release && te.taste == T_Enter )
  714. {
  715. nachricht->zText()->remove( "\n" );
  716. chatClient->chatroomNachricht( chatroomId, nachricht->zText()->getText() );
  717. nachricht->setText( "" );
  718. nachricht->setAuswahl( 0, 0 );
  719. rend = 1;
  720. }
  721. break;
  722. case 2:
  723. if( te.id == TE_Release && te.taste == T_Enter )
  724. {
  725. if( !spielerName->zText()->getLength() )
  726. break;
  727. int accountId = infoClient->getAccountId( spielerName->zText()->getText() );
  728. if( accountId )
  729. {
  730. if( chatClient->chatroomEinladung( accountId, chatroomId ) )
  731. {
  732. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Chatroom Einladung" ), new Text( "Es wurde eine Chatroom Einladung an den Spieler gesendet." ),
  733. new Text( "Ok" ), 0 );
  734. spielerName->setText( "" );
  735. spielerName->setAuswahl( 0, 0 );
  736. rend = 1;
  737. }
  738. }
  739. else
  740. {
  741. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Der Spieler wurde nicht gefunden." ),
  742. new Text( "Ok" ), 0 );
  743. }
  744. }
  745. break;
  746. }
  747. }
  748. void ChatroomFenster::render( int xPos, Bild & zRObj )
  749. {
  750. int x = xPos;
  751. int y = 280 - höhe;
  752. int br = breite;
  753. int hö = höhe;
  754. if( !zRObj.setDrawOptions( x, y, br, hö ) )
  755. return;
  756. zRObj.alphaRegion( 0, 0, br, hö, 0x88000000 );
  757. rahmen->setSize( br, hö );
  758. rahmen->render( zRObj );
  759. zRObj.addScrollOffset( 0, 280 - höhe );
  760. verlauf->render( zRObj );
  761. nachricht->render( zRObj );
  762. spieler->render( zRObj );
  763. name->render( zRObj );
  764. minimieren->render( zRObj );
  765. close->render( zRObj );
  766. if( spielerName->getHeight() )
  767. {
  768. spielerName->render( zRObj );
  769. einladen->render( zRObj );
  770. }
  771. zRObj.releaseDrawOptions();
  772. }
  773. bool ChatroomFenster::druckFreund( void *obj, MausEreignis & me )
  774. {
  775. if( me.id == ME_RLinks )
  776. {
  777. Punkt p = spieler->getZeichnungPosition( (Zeichnung *)obj );
  778. if( p.y >= 0 )
  779. {
  780. int accountId = TextZuInt( spieler->zZeilenName( p.y )->getText(), 10 );
  781. if( chatClient->freundesAnfrage( accountId ) )
  782. {
  783. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundes Einladung" ), new Text( "Es wurde eine Freundesanfrage an den Spieler gesendet." ),
  784. new Text( "Ok" ), 0 );
  785. }
  786. }
  787. return 0;
  788. }
  789. return 1;
  790. }
  791. bool ChatroomFenster::druckEntfernen( void *obj, MausEreignis & me )
  792. {
  793. if( me.id == ME_RLinks && admin )
  794. {
  795. Punkt p = spieler->getZeichnungPosition( (Zeichnung *)obj );
  796. if( p.y >= 0 )
  797. {
  798. int accountId = TextZuInt( spieler->zZeilenName( p.y )->getText(), 10 );
  799. if( chatClient->chatroomKick( chatroomId, accountId ) )
  800. {
  801. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Kick" ), new Text( "Der Spieler musste das Chatroom verlassen." ),
  802. new Text( "Ok" ), 0 );
  803. }
  804. }
  805. return 0;
  806. }
  807. return 1;
  808. }
  809. // constant
  810. int ChatroomFenster::getChatroomId() const
  811. {
  812. return chatroomId;
  813. }
  814. // Reference Counting
  815. void *ChatroomFenster::getThis()
  816. {
  817. ref++;
  818. return this;
  819. }
  820. void *ChatroomFenster::release()
  821. {
  822. ref--;
  823. if( !ref )
  824. delete this;
  825. return 0;
  826. }
  827. // Inhalt der ChatLeisteObj Klasse aus ChatLeiste.h
  828. // Konstruktor
  829. ChatLeisteObj::ChatLeisteObj( Schrift * zSchrift )
  830. : Zeichnung()
  831. {
  832. schrift = zSchrift->getThis();
  833. chats = new RCArray< Chat >();
  834. hsb = new HScrollBar();
  835. bildschirmGröße = BildschirmGröße();
  836. anzahl = 0;
  837. nowME = -1;
  838. }
  839. // Destruktor
  840. ChatLeisteObj::~ChatLeisteObj()
  841. {
  842. chats = chats->release();
  843. hsb = (HScrollBar *)hsb->release();
  844. schrift = schrift->release();
  845. }
  846. // nicht constant
  847. void ChatLeisteObj::chatNachricht( int vonAccount, char *txt )
  848. {
  849. if( !vonAccount )
  850. return;
  851. lockZeichnung();
  852. bool gefunden = 0;
  853. for( int i = 0; i < anzahl; i++ )
  854. {
  855. Chat *tmp = chats->z( i );
  856. if( tmp->getAccountId() == vonAccount )
  857. {
  858. tmp->addNachricht( txt );
  859. gefunden = 1;
  860. break;
  861. }
  862. }
  863. if( !gefunden )
  864. {
  865. addChat( vonAccount, 0 );
  866. chatNachricht( vonAccount, txt );
  867. }
  868. unlockZeichnung();
  869. }
  870. void ChatLeisteObj::chatroomNachricht( int chatroomId, char *txt )
  871. {
  872. lockZeichnung();
  873. bool gefunden = 0;
  874. for( int i = 0; i < anzahl; i++ )
  875. {
  876. Chat *tmp = chats->z( i );
  877. if( tmp->getChatroomId() == chatroomId )
  878. {
  879. tmp->addNachricht( txt );
  880. gefunden = 1;
  881. break;
  882. }
  883. }
  884. if( !gefunden )
  885. {
  886. addChat( 0, chatroomId );
  887. chatroomNachricht( chatroomId, txt );
  888. }
  889. unlockZeichnung();
  890. }
  891. void ChatLeisteObj::addChat( int accountId, int chatroomId )
  892. {
  893. lockZeichnung();
  894. bool gefunden = 0;
  895. if( accountId )
  896. {
  897. for( int i = 0; i < anzahl; i++ )
  898. {
  899. Chat *tmp = chats->z( i );
  900. if( tmp->getAccountId() == accountId )
  901. {
  902. tmp->setSichtbar( 1 );
  903. gefunden = 1;
  904. break;
  905. }
  906. }
  907. if( !gefunden )
  908. {
  909. ChatFenster *neu = new ChatFenster( schrift, accountId );
  910. chats->add( neu, anzahl );
  911. anzahl++;
  912. rend = 1;
  913. }
  914. }
  915. else if( chatroomId )
  916. {
  917. for( int i = 0; i < anzahl; i++ )
  918. {
  919. Chat *tmp = chats->z( i );
  920. if( tmp->getChatroomId() == chatroomId )
  921. {
  922. tmp->setSichtbar( 1 );
  923. gefunden = 1;
  924. break;
  925. }
  926. }
  927. if( !gefunden )
  928. {
  929. ChatroomFenster *neu = new ChatroomFenster( schrift, chatroomId );
  930. chats->add( neu, anzahl );
  931. anzahl++;
  932. rend = 1;
  933. }
  934. }
  935. unlockZeichnung();
  936. }
  937. void ChatLeisteObj::removeChat( int accountId, int chatroomId )
  938. {
  939. lockZeichnung();
  940. if( accountId )
  941. {
  942. for( int i = 0; i < anzahl; i++ )
  943. {
  944. Chat *tmp = chats->z( i );
  945. if( tmp->getAccountId() == accountId )
  946. tmp->entfernen();
  947. }
  948. }
  949. else if( chatroomId )
  950. {
  951. for( int i = 0; i < anzahl; i++ )
  952. {
  953. Chat *tmp = chats->z( i );
  954. if( tmp->getChatroomId() == chatroomId )
  955. tmp->entfernen();
  956. }
  957. }
  958. rend = 1;
  959. unlockZeichnung();
  960. }
  961. void ChatLeisteObj::removeChat( Chat * zChat )
  962. {
  963. lockZeichnung();
  964. for( int i = 0; i < anzahl; i++ )
  965. {
  966. if( chats->z( i ) == zChat )
  967. {
  968. chats->remove( i );
  969. anzahl--;
  970. rend = 1;
  971. break;
  972. }
  973. }
  974. unlockZeichnung();
  975. }
  976. void ChatLeisteObj::removeAll()
  977. {
  978. lockZeichnung();
  979. chats->leeren();
  980. anzahl = 0;
  981. rend = 1;
  982. unlockZeichnung();
  983. }
  984. void ChatLeisteObj::addSpieler( int chatroomId, int accountId )
  985. {
  986. if( !chatroomId || !accountId )
  987. return;
  988. lockZeichnung();
  989. for( int i = 0; i < anzahl; i++ )
  990. {
  991. Chat *tmp = chats->z( i );
  992. if( tmp->getChatroomId() == chatroomId )
  993. {
  994. tmp->addSpieler( accountId );
  995. break;
  996. }
  997. }
  998. unlockZeichnung();
  999. }
  1000. void ChatLeisteObj::removeSpieler( int chatroomId, int accountId )
  1001. {
  1002. lockZeichnung();
  1003. if( !chatroomId || !accountId )
  1004. return;
  1005. for( int i = 0; i < anzahl; i++ )
  1006. {
  1007. Chat *tmp = chats->z( i );
  1008. if( tmp->getChatroomId() == chatroomId )
  1009. {
  1010. tmp->removeSpieler( accountId );
  1011. break;
  1012. }
  1013. }
  1014. unlockZeichnung();
  1015. }
  1016. void ChatLeisteObj::setChatroomAdmin( int chatroomId )
  1017. {
  1018. lockZeichnung();
  1019. for( int i = 0; i < anzahl; i++ )
  1020. {
  1021. Chat *tmp = chats->z( i );
  1022. if( tmp->getChatroomId() == chatroomId )
  1023. {
  1024. tmp->setAdmin();
  1025. break;
  1026. }
  1027. }
  1028. unlockZeichnung();
  1029. }
  1030. bool ChatLeisteObj::tick( double tickVal )
  1031. {
  1032. rend |= hsb->getRend();
  1033. rend |= nachLogin->zChatLeiste()->tick( tickVal );
  1034. for( int i = 0; i < anzahl; i++ )
  1035. rend |= chats->z( i )->tick( tickVal );
  1036. bool ret = rend;
  1037. rend = 0;
  1038. return ret;
  1039. }
  1040. void ChatLeisteObj::doTastaturEreignis( TastaturEreignis & te )
  1041. {
  1042. for( int i = 0; i < anzahl; i++ )
  1043. chats->z( i )->doTastaturEreignis( te );
  1044. }
  1045. void ChatLeisteObj::doMausEreignis( MausEreignis & me )
  1046. {
  1047. int mx = me.mx;
  1048. int my = me.my;
  1049. me.my += 250;
  1050. me.mx += hsb->getScroll();
  1051. for( int i = 0; i < anzahl; i++ )
  1052. {
  1053. Chat *tmp = chats->z( i );
  1054. nowME = i;
  1055. tmp->doMausEreignis( me );
  1056. nowME = -1;
  1057. me.mx -= tmp->getBreite();
  1058. }
  1059. me.mx = mx;
  1060. me.my = my;
  1061. hsb->doMausMessage( 1, 30, bildschirmGröße.x - 20, 20, me );
  1062. }
  1063. void ChatLeisteObj::render( Bild & zRObj )
  1064. {
  1065. int x = pos.x;
  1066. int y = pos.y;
  1067. int br = bildschirmGröße.x - 20;
  1068. int hö = 300;
  1069. if( !zRObj.setDrawOptionsErzwingen( x, y - 250, br, hö ) )
  1070. return;
  1071. int breite = 0;
  1072. for( int i = 0; i < anzahl; i++ )
  1073. {
  1074. Chat *tmp = chats->z( i );
  1075. tmp->render( breite - ( hsb ? hsb->getScroll() : 0 ), zRObj );
  1076. breite += tmp->getBreite();
  1077. }
  1078. if( hsb )
  1079. {
  1080. hsb->update( breite, bildschirmGröße.x - 22 );
  1081. hsb->render( 0, 280, bildschirmGröße.x - 22, 20, zRObj );
  1082. }
  1083. zRObj.releaseDrawOptions();
  1084. }
  1085. // Inhalt der ChatLeiste Klasse aus ChatLeiste.h
  1086. // Konstruktor
  1087. ChatLeiste::ChatLeiste( Schrift * zSchrift, Fenster * zNachLoginFenster )
  1088. {
  1089. minimierenBild = bilder->get( "data/client/bilder/chat.ltdb/minimieren.png" );
  1090. maximierenBild = bilder->get( "data/client/bilder/chat.ltdb/maximieren.png" );
  1091. bildschirmGröße = BildschirmGröße();
  1092. 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, "" );
  1093. fenster->setKBgFarbe( 0xFF000000 );
  1094. minMax = initKnopf( bildschirmGröße.x - 21, 1, 20, 20, 0, 0, "" );
  1095. minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  1096. minMax->setHintergrundBildZ( minimierenBild->getThis() );
  1097. minMax->setMausEreignisParameter( this );
  1098. minMax->setMausEreignis( chatLeisteMinMaxME );
  1099. initToolTip( minMax, "Chat Leiste minimieren.", zSchrift, hauptScreen );
  1100. fenster->addMember( minMax->getThis() );
  1101. chatLeiste = new ChatLeisteObj( zSchrift );
  1102. fenster->addMember( chatLeiste->getThis() );
  1103. zNachLoginFenster->addMember( fenster->getThis() );
  1104. tickVal = 0;
  1105. animation = 1;
  1106. ref = 1;
  1107. rend = 0;
  1108. chatClient->chatNachrichtAnfrage();
  1109. }
  1110. // Destruktor
  1111. ChatLeiste::~ChatLeiste()
  1112. {
  1113. minimierenBild = minimierenBild->release();
  1114. maximierenBild = maximierenBild->release();
  1115. fenster = (Fenster *)fenster->release();
  1116. minMax = (Knopf *)minMax->release();
  1117. chatLeiste = (ChatLeisteObj *)chatLeiste->release();
  1118. }
  1119. // nicht constant
  1120. void ChatLeiste::chatNachricht( int vonAccount, char *txt )
  1121. {
  1122. chatLeiste->chatNachricht( vonAccount, txt );
  1123. }
  1124. void ChatLeiste::chatroomNachricht( int chatroomId, int vonAccount, char *txt )
  1125. {
  1126. chatLeiste->chatroomNachricht( chatroomId, txt );
  1127. }
  1128. void ChatLeiste::addChat( int accountId, int chatroomId )
  1129. {
  1130. chatLeiste->addChat( accountId, chatroomId );
  1131. }
  1132. void ChatLeiste::removeChat( int accountId, int chatroomId )
  1133. {
  1134. chatLeiste->removeChat( accountId, chatroomId );
  1135. }
  1136. void ChatLeiste::removeChat( Chat * zChat )
  1137. {
  1138. chatLeiste->removeChat( zChat );
  1139. }
  1140. void ChatLeiste::removeAll()
  1141. {
  1142. chatLeiste->removeAll();
  1143. }
  1144. void ChatLeiste::addSpieler( int chatroomId, int accountId )
  1145. {
  1146. chatLeiste->addSpieler( chatroomId, accountId );
  1147. }
  1148. void ChatLeiste::removeSpieler( int chatroomId, int accountId )
  1149. {
  1150. chatLeiste->removeSpieler( chatroomId, accountId );
  1151. }
  1152. void ChatLeiste::setChatroomAdmin( int chatroomId )
  1153. {
  1154. chatLeiste->setChatroomAdmin( chatroomId );
  1155. }
  1156. bool ChatLeiste::tick( double tickVal )
  1157. {
  1158. this->tickVal += tickVal * 500;
  1159. int val = (int)this->tickVal;
  1160. if( val < 1 )
  1161. {
  1162. bool ret = rend;
  1163. rend = 0;
  1164. return ret;
  1165. }
  1166. if( val > 16 )
  1167. val = 16;
  1168. this->tickVal -= val;
  1169. switch( animation )
  1170. {
  1171. case 1: // einfahren
  1172. if( fenster->getX() < 0 )
  1173. fenster->setPosition( fenster->getX() + val, fenster->getY() );
  1174. else
  1175. {
  1176. fenster->setPosition( 0, fenster->getY() );
  1177. animation = 0;
  1178. }
  1179. rend = 1;
  1180. break;
  1181. case 2: // ausfahren
  1182. if( fenster->getX() + fenster->getBreite() > 21 )
  1183. fenster->setPosition( fenster->getX() - val, fenster->getY() );
  1184. else
  1185. {
  1186. fenster->setPosition( 21 - fenster->getBreite(), fenster->getY() );
  1187. animation = 0;
  1188. }
  1189. rend = 1;
  1190. break;
  1191. }
  1192. bool ret = rend;
  1193. rend = 0;
  1194. return ret;
  1195. }
  1196. bool ChatLeiste::druckMinMax( MausEreignis & me )
  1197. {
  1198. if( animation )
  1199. return 1;
  1200. if( me.id == ME_RLinks )
  1201. {
  1202. if( minMax->zHintergrundBild() == minimierenBild )
  1203. {
  1204. animation = 2;
  1205. minMax->setHintergrundBildZ( maximierenBild->getThis() );
  1206. // TODO minMax->zToolTip()->setText( "Chat Leiste maximieren." );
  1207. }
  1208. else
  1209. {
  1210. animation = 1;
  1211. minMax->setHintergrundBildZ( minimierenBild->getThis() );
  1212. // TODO minMax->zToolTip()->setText( "Chat Leiste minimieren." );
  1213. }
  1214. }
  1215. return 1;
  1216. }
  1217. // constant
  1218. // Reference Counting
  1219. ChatLeiste *ChatLeiste::getThis()
  1220. {
  1221. ref++;
  1222. return this;
  1223. }
  1224. ChatLeiste *ChatLeiste::release()
  1225. {
  1226. ref--;
  1227. if( !ref )
  1228. delete this;
  1229. return 0;
  1230. }
  1231. // Nachrichten
  1232. bool chatLeisteMinMaxME( void *p, void *obj, MausEreignis me )
  1233. {
  1234. return ( (ChatLeiste *)p )->druckMinMax( me );
  1235. }
  1236. bool chatroomFensterFreundME( void *p, void *obj, MausEreignis me )
  1237. {
  1238. return ( (ChatroomFenster *)p )->druckFreund( obj, me );
  1239. }
  1240. bool chatroomFensterEntfernenME( void *p, void *obj, MausEreignis me )
  1241. {
  1242. return ( (ChatroomFenster *)p )->druckEntfernen( obj, me );
  1243. }