ChatLeiste.cpp 36 KB

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