ChatLeiste.cpp 36 KB

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