ChatLeiste.cpp 38 KB

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