FreundesListe.cpp 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269
  1. #include "FreundesListe.h"
  2. #include "..\..\Global\Variablen.h"
  3. #include "..\..\Global\Initialisierung.h"
  4. #include <Rahmen.h>
  5. #include <AlphaFeld.h>
  6. #include <MausEreignis.h>
  7. #include <Scroll.h>
  8. #include <Punkt.h>
  9. #include <DateiSystem.h>
  10. #include <Tooltip.h>
  11. // Inhalt der FreundData Klasse aus FreundesListe.h
  12. // Konstruktor
  13. FreundData::FreundData( int accountId, LRahmen *rahmen, AlphaFeld *auswahlBuffer, Schrift *zSchrift )
  14. : Thread()
  15. {
  16. Bild *entfernenBild = bilder->get( "chat.ltdb/entfernen.png" );
  17. if( !entfernenBild )
  18. {
  19. LTDBDatei *datei = new LTDBDatei();
  20. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  21. datei->leseDaten( 0 );
  22. entfernenBild = datei->laden( 0, new Text( "entfernen.png" ) );
  23. datei->release();
  24. bilder->add( "chat.ltdb/entfernen.png", entfernenBild->getThis() );
  25. }
  26. Bild *ansehenBild = bilder->get( "chat.ltdb/ansehen.png" );
  27. if( !ansehenBild )
  28. {
  29. LTDBDatei *datei = new LTDBDatei();
  30. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  31. datei->leseDaten( 0 );
  32. ansehenBild = datei->laden( 0, new Text( "ansehen.png" ) );
  33. datei->release();
  34. bilder->add( "chat.ltdb/ansehen.png", ansehenBild->getThis() );
  35. }
  36. Bild *nachrichtBild = bilder->get( "chat.ltdb/nachricht.png" );
  37. if( !nachrichtBild )
  38. {
  39. LTDBDatei *datei = new LTDBDatei();
  40. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  41. datei->leseDaten( 0 );
  42. nachrichtBild = datei->laden( 0, new Text( "nachricht.png" ) );
  43. datei->release();
  44. bilder->add( "chat.ltdb/nachricht.png", nachrichtBild->getThis() );
  45. }
  46. Bild *einladenBild = bilder->get( "chat.ltdb/neuerfreund.png" );
  47. if( !einladenBild )
  48. {
  49. LTDBDatei *datei = new LTDBDatei();
  50. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  51. datei->leseDaten( 0 );
  52. einladenBild = datei->laden( 0, new Text( "neuerfreund.png" ) );
  53. datei->release();
  54. bilder->add( "chat.ltdb/neuerfreund.png", einladenBild->getThis() );
  55. }
  56. this->accountId = accountId;
  57. this->rahmen = rahmen;
  58. this->auswahlBuffer = auswahlBuffer;
  59. name = new TextFeld();
  60. name->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
  61. name->setSchriftZ( zSchrift->getThis() );
  62. name->setSchriftFarbe( 0xFFFFFFFF );
  63. name->setSchriftSize( 12 );
  64. name->setText( "" );
  65. name->setSize( 200, 20 );
  66. name->setPosition( 25, 1 );
  67. status = new TextFeld();
  68. status->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
  69. status->setSchriftZ( zSchrift->getThis() );
  70. status->setSchriftFarbe( 0xFFFF0000 );
  71. status->setSchriftSize( 12 );
  72. status->setText( "offline" );
  73. status->setSize( 200, 20 );
  74. status->setPosition( 25, 24 );
  75. entfernen = initKnopf( 228, 49, 20, 20, 0, 0, "" );
  76. entfernen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  77. entfernen->setHintergrundBildZ( entfernenBild );
  78. entfernen->setHintergrundFarbe( 0 );
  79. initToolTip( entfernen, "Freund entfernen.", zSchrift->getThis(), hauptScreen );
  80. ansehen = initKnopf( 208, 49, 20, 20, 0, 0, "" );
  81. ansehen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  82. ansehen->setHintergrundBildZ( ansehenBild );
  83. ansehen->setHintergrundFarbe( 0 );
  84. initToolTip( ansehen, "Account ansehen.", zSchrift->getThis(), hauptScreen );
  85. nachricht = initKnopf( 188, 49, 20, 20, 0, 0, "" );
  86. nachricht->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  87. nachricht->setHintergrundBildZ( nachrichtBild );
  88. nachricht->setHintergrundFarbe( 0 );
  89. initToolTip( nachricht, "Nachricht senden.", zSchrift->getThis(), hauptScreen );
  90. einladen = initKnopf( 168, 49, 20, 20, 0, 0, "" );
  91. einladen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  92. einladen->setHintergrundBildZ( einladenBild );
  93. einladen->setHintergrundFarbe( 0 );
  94. initToolTip( einladen, "Spieler in Gruppe einladen.\nDies kann nur der Gruppen Administrator.", zSchrift->getThis(), hauptScreen );
  95. online = 0;
  96. einladenSichtbar = 0;
  97. ausgewählt = 0;
  98. höhe = 0;
  99. animation = 1;
  100. auswahlAlpha = 0;
  101. tickVal = 0;
  102. rend = 0;
  103. ref = 1;
  104. start();
  105. }
  106. // Destruktor
  107. FreundData::~FreundData()
  108. {
  109. rahmen = rahmen->release();
  110. auswahlBuffer = auswahlBuffer->release();
  111. name = name->release();
  112. status = status->release();
  113. entfernen = entfernen->release();
  114. ansehen = ansehen->release();
  115. nachricht = nachricht->release();
  116. einladen = einladen->release();
  117. }
  118. // nicht constant
  119. void FreundData::thread()
  120. {
  121. if( infoClient )
  122. {
  123. Text *n = infoClient->getSpielerName( accountId );
  124. name->setTextZ( n );
  125. }
  126. run = 0;
  127. }
  128. void FreundData::setName( char *txt )
  129. {
  130. name->setText( txt );
  131. rend = 1;
  132. }
  133. void FreundData::setStatus( char *txt )
  134. {
  135. status->setText( txt );
  136. rend = 1;
  137. }
  138. void FreundData::setOnline( bool online )
  139. {
  140. this->online = online;
  141. if( online )
  142. {
  143. status->setSchriftFarbe( 0xFF00FF00 );
  144. status->setText( "online" );
  145. }
  146. else
  147. {
  148. status->setSchriftFarbe( 0xFFFF0000 );
  149. status->setText( "offline" );
  150. }
  151. einladen->setStyle( Knopf::Style::Erlaubt, einladenSichtbar && online );
  152. rend = 1;
  153. }
  154. void FreundData::setAusgewählt( bool ausw )
  155. {
  156. if( animation != 3 )
  157. {
  158. ausgewählt = ausw;
  159. if( ausw )
  160. animation = 2;
  161. else
  162. animation = 1;
  163. }
  164. }
  165. void FreundData::remove()
  166. {
  167. animation = 3;
  168. }
  169. void FreundData::zeigeEinladeKnopf( bool zeigen )
  170. {
  171. einladenSichtbar = zeigen;
  172. einladen->setStyle( Knopf::Style::Erlaubt, einladenSichtbar && online );
  173. rend = 1;
  174. }
  175. void FreundData::doMausEreignis( MausEreignis &me )
  176. {
  177. if( animation != 3 )
  178. {
  179. bool tmp = 0;
  180. if( me.my > höhe || !ausgewählt )
  181. {
  182. tmp = me.verarbeitet;
  183. me.verarbeitet = 1;
  184. }
  185. char aktion = 0;
  186. bool vera = me.verarbeitet;
  187. nachricht->doMausEreignis( me );
  188. aktion = me.verarbeitet && !vera ? 1 : 0;
  189. ansehen->doMausEreignis( me );
  190. if( !aktion )
  191. aktion = me.verarbeitet && !vera ? 2 : 0;
  192. entfernen->doMausEreignis( me );
  193. if( !aktion )
  194. aktion = me.verarbeitet && !vera ? 3 : 0;
  195. einladen->doMausEreignis( me );
  196. if( !aktion )
  197. aktion = me.verarbeitet && !vera ? 4 : 0;
  198. if( me.my > höhe || !ausgewählt )
  199. {
  200. me.verarbeitet = tmp;
  201. return;
  202. }
  203. switch( aktion )
  204. {
  205. case 1:
  206. // Nachricht senden
  207. if( me.id == ME_RLinks )
  208. nachLogin->zChatLeiste()->addChat( accountId, 0 );
  209. break;
  210. case 2:
  211. // profil ansehen
  212. if( me.id == ME_RLinks )
  213. {
  214. if( nachLogin->zAccountAnsehenFenster()->setSpielerDetails( accountId, 2 ) )
  215. {
  216. MausEreignis me = { ME_RLinks, 0, 0, 0, 0, 0 };
  217. nachLogin->zTitelLeiste()->druckAccountAnsehen( me );
  218. }
  219. }
  220. break;
  221. case 3:
  222. // freund entfernen
  223. if( me.id == ME_RLinks )
  224. {
  225. int id = accountId;
  226. Text *nachricht = new Text( "Möchtest du deine Freundschaft mit " );
  227. nachricht->append( name->zText()->getText() );
  228. nachricht->append( " wirklich beenden?" );
  229. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Bist du dir Sicher?" ), nachricht, new Text( "ja" ),
  230. new Text( "abbrechen" ), [ id ]()
  231. {
  232. chatClient->freundschaftBeenden( id );
  233. } );
  234. }
  235. break;
  236. case 4: // In Gruppe einladen
  237. if( me.id == ME_RLinks )
  238. {
  239. if( !anmeldungClient )
  240. anmeldungClient = mainClient->createAnmeldungServerClient();
  241. if( !anmeldungClient )
  242. {
  243. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
  244. new Text( "Ok" ), 0 );
  245. }
  246. if( anmeldungClient && anmeldungClient->verbinde() )
  247. {
  248. if( !anmeldungClient->gruppeSpielerEinladen( accountId, nachLogin->zSpielenFenster()->getGruppeId() ) )
  249. {
  250. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
  251. new Text( "Ok" ), 0 );
  252. }
  253. anmeldungClient->trenne( 0 );
  254. }
  255. else
  256. {
  257. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
  258. new Text( "Ok" ), 0 );
  259. }
  260. }
  261. default:
  262. // nichts
  263. break;
  264. }
  265. }
  266. }
  267. bool FreundData::tick( double tickVal )
  268. {
  269. rend |= name->tick( tickVal );
  270. rend |= status->tick( tickVal );
  271. rend |= entfernen->tick( tickVal );
  272. rend |= ansehen->tick( tickVal );
  273. rend |= nachricht->tick( tickVal );
  274. rend |= einladen->tick( tickVal );
  275. this->tickVal += tickVal * 100;
  276. int val = ( int )this->tickVal;
  277. if( val < 1 )
  278. {
  279. bool ret = rend;
  280. rend = 0;
  281. return ret;
  282. }
  283. if( val > 4 )
  284. val = 4;
  285. this->tickVal -= val;
  286. switch( animation )
  287. {
  288. case 1:
  289. if( höhe != 50 )
  290. {
  291. if( höhe > 50 )
  292. {
  293. höhe -= val;
  294. if( höhe < 50 )
  295. höhe = 50;
  296. }
  297. else
  298. {
  299. höhe += val;
  300. if( höhe > 50 )
  301. höhe = 50;
  302. }
  303. rend = 1;
  304. }
  305. else
  306. animation = 0;
  307. break;
  308. case 2:
  309. if( höhe != 70 )
  310. {
  311. höhe += val;
  312. if( höhe > 70 )
  313. höhe = 70;
  314. rend = 1;
  315. }
  316. else
  317. animation = 0;
  318. break;
  319. case 3:
  320. höhe -= val;
  321. if( höhe <= 0 )
  322. {
  323. nachLogin->zFreundesListe()->removeMember( this ); // delete this
  324. return 1;
  325. }
  326. rend = 1;
  327. break;
  328. }
  329. if( ausgewählt && auswahlAlpha < 50 )
  330. {
  331. if( auswahlAlpha + val > 50 )
  332. auswahlAlpha = 50;
  333. else
  334. auswahlAlpha += val;
  335. rend = 1;
  336. }
  337. else if( !ausgewählt && auswahlAlpha > 0 )
  338. {
  339. if( auswahlAlpha - val < 0 )
  340. auswahlAlpha = 0;
  341. else
  342. auswahlAlpha -= val;
  343. rend = 1;
  344. }
  345. bool ret = rend;
  346. rend = 0;
  347. return ret;
  348. }
  349. void FreundData::render( int yPos, Bild &zRObj )
  350. {
  351. int br = 250;
  352. if( !zRObj.setDrawOptions( 0, yPos, br, höhe ) )
  353. return;
  354. rahmen->setSize( br, höhe );
  355. rahmen->render( zRObj );
  356. int rbr = rahmen->getRBreite();
  357. if( !zRObj.setDrawOptions( rbr, rbr, br - rbr * 2, höhe - rbr * 2 ) )
  358. {
  359. zRObj.releaseDrawOptions();
  360. return;
  361. }
  362. if( auswahlAlpha > 0 )
  363. {
  364. auswahlBuffer->setFarbe( 0x0000FF00 | ( ( (int)auswahlAlpha << 24 ) & 0xFF000000 ) );
  365. auswahlBuffer->setSize( br - rbr * 2, höhe - rbr * 2 );
  366. auswahlBuffer->render( zRObj );
  367. }
  368. name->render( zRObj );
  369. status->render( zRObj );
  370. einladen->render( zRObj );
  371. nachricht->render( zRObj );
  372. ansehen->render( zRObj );
  373. entfernen->render( zRObj );
  374. zRObj.releaseDrawOptions();
  375. zRObj.releaseDrawOptions();
  376. }
  377. // constant
  378. bool FreundData::istOnline() const
  379. {
  380. return online;
  381. }
  382. bool FreundData::istAusgewählt() const
  383. {
  384. return ausgewählt;
  385. }
  386. char *FreundData::zName() const
  387. {
  388. return name->zText()->getText();
  389. }
  390. Text *FreundData::getName() const
  391. {
  392. return name->getText();
  393. }
  394. char *FreundData::zStatus() const
  395. {
  396. return status->zText()->getText();
  397. }
  398. Text *FreundData::getStatus() const
  399. {
  400. return status->getText();
  401. }
  402. int FreundData::getAccountId() const
  403. {
  404. return accountId;
  405. }
  406. int FreundData::getHeight() const
  407. {
  408. return höhe;
  409. }
  410. // reference Counting
  411. FreundData *FreundData::getThis()
  412. {
  413. ref++;
  414. return this;
  415. }
  416. FreundData *FreundData::release()
  417. {
  418. ref--;
  419. if( !ref )
  420. delete this;
  421. return 0;
  422. }
  423. // Inhalt der FreundesListeObj Klasse aus FreundesListe.h
  424. // Konstruktor
  425. FreundesListeObj::FreundesListeObj( Schrift *zSchrift )
  426. : Zeichnung()
  427. {
  428. members = new RCArray< FreundData >();
  429. schrift = zSchrift->getThis();
  430. memberRahmen = new LRahmen();
  431. memberRahmen->setFarbe( 0xFFFFFFFF );
  432. memberRahmen->setRamenBreite( 1 );
  433. auswahlBuffer = new AlphaFeld();
  434. auswahlBuffer->setStrength( -2 );
  435. auswahlBuffer->setPosition( 1, 1 );
  436. vsb = new VScrollBar();
  437. vsb->setKlickScroll( 10 );
  438. bildschirmGröße = BildschirmGröße();
  439. vsb->update( 0, bildschirmGröße.y - 200 );
  440. memberNummer = 0;
  441. einladenSichtbar = 0;
  442. ref = 1;
  443. }
  444. // Destruktor
  445. FreundesListeObj::~FreundesListeObj()
  446. {
  447. members = members->release();
  448. schrift = schrift->release();
  449. memberRahmen = memberRahmen->release();
  450. auswahlBuffer = auswahlBuffer->release();
  451. vsb = (VScrollBar*)vsb->release();
  452. }
  453. // nicht constant
  454. void FreundesListeObj::addMember( int accountId )
  455. {
  456. FreundData *tmp = new FreundData( accountId, memberRahmen->getThis(), auswahlBuffer->getThis(), schrift );
  457. members->add( tmp, memberNummer );
  458. memberNummer++;
  459. if( einladenSichtbar )
  460. tmp->zeigeEinladeKnopf( 1 );
  461. rend = 1;
  462. }
  463. void FreundesListeObj::removeMember( int accountId )
  464. {
  465. for( int i = 0; i < memberNummer; i++ )
  466. {
  467. FreundData *tmp = members->z( i );
  468. if( tmp->getAccountId() == accountId )
  469. {
  470. tmp->remove();
  471. break;
  472. }
  473. }
  474. }
  475. void FreundesListeObj::removeMember( FreundData *member )
  476. {
  477. for( int i = 0; i < memberNummer; i++ )
  478. {
  479. if( members->z( i ) == member )
  480. {
  481. members->remove( i );
  482. memberNummer--;
  483. rend = 1;
  484. break;
  485. }
  486. }
  487. }
  488. void FreundesListeObj::removeAll()
  489. {
  490. members->leeren();
  491. memberNummer = 0;
  492. rend = 1;
  493. }
  494. void FreundesListeObj::setName( int accountId, char *txt )
  495. {
  496. for( int i = 0; i < memberNummer; i++ )
  497. {
  498. FreundData *tmp = members->z( i );
  499. if( tmp->getAccountId() == accountId )
  500. {
  501. tmp->setName( txt );
  502. break;
  503. }
  504. }
  505. }
  506. void FreundesListeObj::setStatus( int accountId, char *txt )
  507. {
  508. for( int i = 0; i < memberNummer; i++ )
  509. {
  510. FreundData *tmp = members->z( i );
  511. if( tmp->getAccountId() == accountId )
  512. {
  513. tmp->setStatus( txt );
  514. break;
  515. }
  516. }
  517. }
  518. void FreundesListeObj::setOnline( int accountId, bool online )
  519. {
  520. for( int i = 0; i < memberNummer; i++ )
  521. {
  522. FreundData *tmp = members->z( i );
  523. if( tmp->getAccountId() == accountId )
  524. {
  525. tmp->setOnline( online );
  526. break;
  527. }
  528. }
  529. }
  530. void FreundesListeObj::zeigeEinladeKnopf( bool zeigen )
  531. {
  532. einladenSichtbar = zeigen;
  533. for( int i = 0; i < memberNummer; i++ )
  534. {
  535. FreundData *tmp = members->z( i );
  536. tmp->zeigeEinladeKnopf( zeigen );
  537. }
  538. }
  539. bool FreundesListeObj::tick( double tickVal )
  540. {
  541. rend |= vsb->getRend();
  542. rend |= nachLogin->zFreundesListe()->tick( tickVal );
  543. for( int i = 0; i < memberNummer; i++ )
  544. {
  545. FreundData *tmp = members->z( i );
  546. if( tmp )
  547. rend |= tmp->tick( tickVal );
  548. }
  549. bool ret = rend;
  550. rend = 0;
  551. return ret;
  552. }
  553. void FreundesListeObj::doMausEreignis( MausEreignis &me )
  554. {
  555. int my = me.my;
  556. me.my -= pos.y;
  557. if( me.mx <= 250 && me.mx > 0 && me.my >= 0 )
  558. {
  559. me.my += vsb->getScroll();
  560. for( int i = 0; i < memberNummer; i++ )
  561. {
  562. FreundData *tmp = members->z( i );
  563. if( tmp )
  564. {
  565. if( me.my > 0 && me.my < tmp->getHeight() )
  566. tmp->setAusgewählt( 1 );
  567. else
  568. tmp->setAusgewählt( 0 );
  569. tmp->doMausEreignis( me );
  570. me.my -= tmp->getHeight();
  571. }
  572. }
  573. me.my -= vsb->getScroll();
  574. }
  575. else
  576. {
  577. me.my += vsb->getScroll();
  578. for( int i = 0; i < memberNummer; i++ )
  579. {
  580. FreundData *tmp = members->z( i );
  581. if( tmp )
  582. {
  583. tmp->setAusgewählt( 0 );
  584. tmp->doMausEreignis( me );
  585. me.my -= tmp->getHeight();
  586. }
  587. }
  588. me.my -= vsb->getScroll();
  589. }
  590. me.my = my;
  591. vsb->doMausMessage( 250, pos.y, 20, gr.y, me );
  592. }
  593. void FreundesListeObj::render( Bild &zrObj )
  594. {
  595. if( !zrObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
  596. return;
  597. int höhe = 0;
  598. for( int i = 0; i < memberNummer; i++ )
  599. {
  600. FreundData *tmp = members->z( i );
  601. tmp->render( höhe, zrObj );
  602. höhe += tmp->getHeight();
  603. }
  604. vsb->update( höhe, gr.y );
  605. vsb->render( 250, 0, 20, gr.y, zrObj );
  606. zrObj.releaseDrawOptions();
  607. }
  608. // constant
  609. bool FreundesListeObj::istFreund( int accId ) const
  610. {
  611. for( int i = 0; i < memberNummer; i++ )
  612. {
  613. FreundData *tmp = members->z( i );
  614. if( tmp->getAccountId() == accId )
  615. return 1;
  616. }
  617. return 0;
  618. }
  619. // reference Counting
  620. FreundesListeObj *FreundesListeObj::getThis()
  621. {
  622. ref++;
  623. return this;
  624. }
  625. FreundesListeObj *FreundesListeObj::release()
  626. {
  627. ref--;
  628. if( !ref )
  629. delete this;
  630. return 0;
  631. }
  632. // Inhalt der FreundesListe Klasse aus FreundesListe.h
  633. // Konstruktor
  634. FreundesListe::FreundesListe( Schrift *zSchrift, Fenster *zNachLoginFenster )
  635. : Thread()
  636. {
  637. minimierenBild = bilder->get( "chat.ltdb/minimieren.png" );
  638. if( !minimierenBild )
  639. {
  640. LTDBDatei *datei = new LTDBDatei();
  641. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  642. datei->leseDaten( 0 );
  643. minimierenBild = datei->laden( 0, new Text( "minimieren.png" ) );
  644. datei->release();
  645. bilder->add( "chat.ltdb/minimieren.png", minimierenBild->getThis() );
  646. }
  647. maximierenBild = bilder->get( "chat.ltdb/maximieren.png" );
  648. if( !maximierenBild )
  649. {
  650. LTDBDatei *datei = new LTDBDatei();
  651. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  652. datei->leseDaten( 0 );
  653. maximierenBild = datei->laden( 0, new Text( "maximieren.png" ) );
  654. datei->release();
  655. bilder->add( "chat.ltdb/maximieren.png", maximierenBild->getThis() );
  656. }
  657. Bild *neuerFreundBild = bilder->get( "chat.ltdb/neuerfreund.png" );
  658. if( !neuerFreundBild )
  659. {
  660. LTDBDatei *datei = new LTDBDatei();
  661. datei->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  662. datei->leseDaten( 0 );
  663. neuerFreundBild = datei->laden( 0, new Text( "neuerfreund.png" ) );
  664. datei->release();
  665. bilder->add( "chat.ltdb/neuerfreund.png", neuerFreundBild->getThis() );
  666. }
  667. bildschirmGröße = BildschirmGröße();
  668. fenster = new Fenster();
  669. fenster->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHintergrund );
  670. fenster->setSize( 270, 20 );
  671. fenster->setRFarbe( 0xFFFFFFFF );
  672. fenster->setKBgFarbe( 0xFF000000 );
  673. fenster->setPosition( -250, 100 );
  674. minMax = initKnopf( 249, 1, 20, 20, 0, 0, "" );
  675. minMax->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  676. minMax->setHintergrundBildZ( minimierenBild->getThis() );
  677. minMax->setMausEreignisParameter( this );
  678. minMax->setMausEreignis( freundesListeMinMaxME );
  679. initToolTip( minMax, "Freundes Leiste minimieren.", zSchrift->getThis(), hauptScreen );
  680. fenster->addMember( minMax );
  681. überschrift = initTextFeld( 0, 5, 250, 25, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center | TextFeld::Style::Sichtbar, "Freunde" );
  682. überschrift->setSchriftSize( 15 );
  683. fenster->addMember( überschrift );
  684. accountName = initTextFeld( 25, 40, 200, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::Sichtbar, "" );
  685. accountName->setTastaturEreignisParameter( this );
  686. accountName->setTastaturEreignis( freundesListeNameTE );
  687. initToolTip( accountName, "Mit diesem Namen bist du bei anderen Spielern sichtbar.", zSchrift->getThis(), hauptScreen );
  688. fenster->addMember( accountName );
  689. LTDBDatei *chatBilder = new LTDBDatei();
  690. chatBilder->setDatei( new Text( "data/client/bilder/chat.ltdb" ) );
  691. chatBilder->leseDaten( 0 );
  692. Bild *neuerChatBild = chatBilder->laden( 0, new Text( "neuerchat.png" ) );
  693. chatBilder = chatBilder->release();
  694. neuerFreund = initKnopf( 5, 75, 20, 20, 0, 0, "" );
  695. neuerFreund->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  696. neuerFreund->setHintergrundBildZ( neuerFreundBild );
  697. neuerFreund->setMausEreignisParameter( this );
  698. neuerFreund->setMausEreignis( freundesListeNeuerFreundME );
  699. initToolTip( neuerFreund, "Freundesanfrage senden.", zSchrift->getThis(), hauptScreen );
  700. fenster->addMember( neuerFreund );
  701. neuerChat = initKnopf( 30, 75, 20, 20, 0, 0, "" );
  702. neuerChat->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  703. neuerChat->setHintergrundBildZ( neuerChatBild );
  704. neuerChat->setMausEreignisParameter( this );
  705. neuerChat->setMausEreignis( freundesListeNeuerChatME );
  706. initToolTip( neuerChat, "Nachricht senden.", zSchrift->getThis(), hauptScreen );
  707. fenster->addMember( neuerChat );
  708. neuerFreundFenster = initFenster( 0, 100, 270, 0, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0 );
  709. neuerFreundSpielerName = initTextFeld( 5, 5, 235, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name" );
  710. neuerFreundSpielerName->setTastaturEreignisParameter( this );
  711. neuerFreundSpielerName->setTastaturEreignis( freundesListeNeuerFreundSpielerNameTE );
  712. initToolTip( neuerFreundSpielerName, "Name des Spielers an den eine Freundesanfrage gesendet werden soll.", zSchrift->getThis(), hauptScreen );
  713. neuerFreundFenster->addMember( neuerFreundSpielerName );
  714. neuerFreundFertig = initKnopf( 245, 5, 20, 20, 0, 0, "" );
  715. neuerFreundFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  716. neuerFreundFertig->setHintergrundBildZ( maximierenBild->getThis() );
  717. neuerFreundFertig->setMausEreignisParameter( this );
  718. neuerFreundFertig->setMausEreignis( freundesListeNeuerFreundFertigME );
  719. initToolTip( neuerFreundFertig, "Diesem Spieler eine Freundesanfrage senden.", zSchrift->getThis(), hauptScreen );
  720. neuerFreundFenster->addMember( neuerFreundFertig );
  721. fenster->addMember( neuerFreundFenster );
  722. neuerChatFenster = initFenster( 0, 100, 270, 0, 0, Fenster::Style::Erlaubt | Fenster::Style::Rahmen, 0 );
  723. neuerChatName = initTextFeld( 5, 5, 235, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Spieler Name" );
  724. neuerChatName->setTastaturEreignisParameter( this );
  725. neuerChatName->setTastaturEreignis( freundesListeNeuerChatNameTE );
  726. initToolTip( neuerChatName, "Name des Spielers an den eine Nachricht gesendet werden soll.", zSchrift->getThis(), hauptScreen );
  727. neuerChatFenster->addMember( neuerChatName );
  728. neuerChatFertig = initKnopf( 245, 5, 20, 20, 0, 0, "" );
  729. neuerChatFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  730. neuerChatFertig->setHintergrundBildZ( maximierenBild->getThis() );
  731. neuerChatFertig->setMausEreignisParameter( this );
  732. neuerChatFertig->setMausEreignis( freundesListeNeuerChatFertigME );
  733. initToolTip( neuerChatFertig, "Diesem Spieler eine Nachricht senden.", zSchrift->getThis(), hauptScreen );
  734. neuerChatFenster->addMember( neuerChatFertig );
  735. neuesChatroomName = initTextFeld( 5, 30, 235, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::TextFeld, "Chatroom Name" );
  736. neuesChatroomName->setTastaturEreignisParameter( this );
  737. neuesChatroomName->setTastaturEreignis( freundesListeNeuesChatroomNameTE );
  738. initToolTip( neuesChatroomName, "Name des Chatroom dem du beitreten möchtest.", zSchrift->getThis(), hauptScreen );
  739. neuerChatFenster->addMember( neuesChatroomName );
  740. neuesChatroomFertig = initKnopf( 245, 30, 20, 20, 0, 0, "" );
  741. neuesChatroomFertig->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::HAlpha | Knopf::Style::KlickBuffer );
  742. neuesChatroomFertig->setHintergrundBildZ( maximierenBild->getThis() );
  743. neuesChatroomFertig->setMausEreignisParameter( this );
  744. neuesChatroomFertig->setMausEreignis( freundesListeNeuesChatroomFertigME );
  745. initToolTip( neuesChatroomFertig, "Chatroom erstellen oder beitreten.", zSchrift->getThis(), hauptScreen );
  746. neuerChatFenster->addMember( neuesChatroomFertig );
  747. fenster->addMember( neuerChatFenster );
  748. freundesListe = new FreundesListeObj( zSchrift );
  749. freundesListe->setPosition( 0, 100 );
  750. freundesListe->setSize( 270, bildschirmGröße.y - 200 );
  751. fenster->addMember( freundesListe );
  752. zNachLoginFenster->addMember( fenster );
  753. animation = 1;
  754. tickVal = 0;
  755. ref = 1;
  756. neuerFreundSichtbar = 0;
  757. neuerChatSichtbar = 0;
  758. rend = 0;
  759. start();
  760. }
  761. // Destruktor
  762. FreundesListe::~FreundesListe()
  763. {
  764. ende();
  765. fenster = fenster->release();
  766. minimierenBild = minimierenBild->release();
  767. maximierenBild = maximierenBild->release();
  768. minMax = minMax->release();
  769. überschrift = überschrift->release();
  770. accountName = accountName->release();
  771. freundesListe = freundesListe->release();
  772. neuerFreund = neuerFreund->release();
  773. neuerChat = neuerChat->release();
  774. neuerFreundFenster = neuerFreundFenster->release();
  775. neuerFreundSpielerName = neuerFreundSpielerName->release();
  776. neuerFreundFertig = neuerFreundFertig->release();
  777. neuerChatFenster = neuerChatFenster->release();
  778. neuerChatName = neuerChatName->release();
  779. neuerChatFertig = neuerChatFertig->release();
  780. neuesChatroomName = neuesChatroomName->release();
  781. neuesChatroomFertig = neuesChatroomFertig->release();
  782. }
  783. // nicht constant
  784. void FreundesListe::addMember( int accountId )
  785. {
  786. freundesListe->addMember( accountId );
  787. }
  788. void FreundesListe::removeMember( int accountId )
  789. {
  790. freundesListe->removeMember( accountId );
  791. }
  792. void FreundesListe::removeMember( FreundData *member )
  793. {
  794. freundesListe->removeMember( member );
  795. }
  796. void FreundesListe::removeAll()
  797. {
  798. freundesListe->removeAll();
  799. }
  800. void FreundesListe::setName( int accountId, char *txt )
  801. {
  802. freundesListe->setName( accountId, txt );
  803. }
  804. void FreundesListe::setStatus( int accountId, char *txt )
  805. {
  806. freundesListe->setStatus( accountId, txt );
  807. }
  808. void FreundesListe::setOnline( int accountId, bool online )
  809. {
  810. freundesListe->setOnline( accountId, online );
  811. }
  812. void FreundesListe::setAnimation( int animation )
  813. {
  814. this->animation = animation;
  815. }
  816. void FreundesListe::thread()
  817. {
  818. bool err = 1;
  819. if( infoClient && loginClient )
  820. {
  821. Text *name = infoClient->getSpielerName( loginClient->getAccountId() );
  822. if( name )
  823. {
  824. accountName->setText( name->getText() );
  825. name->release();
  826. err = 0;
  827. }
  828. }
  829. if( err && nachLogin->zNachrichtenListe() )
  830. {
  831. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  832. new Text( "Dein Accountname konnte nicht ermittelt werden." ),
  833. new Text( "Ok" ),
  834. 0 );
  835. }
  836. err = 0;
  837. if( ( !chatClient || !chatClient->freundesListeAnfragen() ) && nachLogin->zNachrichtenListe() )
  838. {
  839. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  840. new Text( "Deine Freunde konnten nicht geladen werden." ),
  841. new Text( "Ok" ),
  842. 0 );
  843. }
  844. run = 0;
  845. }
  846. void FreundesListe::zeigeEinladeKnopf( bool zeigen )
  847. {
  848. freundesListe->zeigeEinladeKnopf( zeigen );
  849. }
  850. bool FreundesListe::tick( double tickVal )
  851. {
  852. this->tickVal += tickVal * 400;
  853. int val = ( int )this->tickVal;
  854. if( val < 1 )
  855. {
  856. bool ret = rend;
  857. rend = 0;
  858. return ret;
  859. }
  860. if( val > 14 )
  861. val = 14;
  862. this->tickVal -= val;
  863. switch( animation )
  864. {
  865. case 1:
  866. if( fenster->getX() < 0 )
  867. {
  868. fenster->setPosition( fenster->getX() + val, fenster->getY() );
  869. if( fenster->getX() > 0 )
  870. fenster->setPosition( 0, fenster->getY() );
  871. }
  872. else if( fenster->getHeight() < bildschirmGröße.y - 100 )
  873. {
  874. fenster->setSize( fenster->getBreite(), fenster->getHeight() + val );
  875. if( fenster->getHeight() > bildschirmGröße.y - 100 )
  876. fenster->setSize( fenster->getBreite(), bildschirmGröße.y - 100 );
  877. }
  878. else
  879. animation = 0;
  880. rend = 1;
  881. break;
  882. case 2:
  883. if( fenster->getHeight() > 20 )
  884. {
  885. fenster->setSize( fenster->getBreite(), fenster->getHeight() - val );
  886. if( fenster->getHeight() < 20 )
  887. fenster->setSize( fenster->getBreite(), 20 );
  888. }
  889. else if( fenster->getX() > -250 )
  890. {
  891. fenster->setPosition( fenster->getX() - val, fenster->getY() );
  892. if( fenster->getX() < -250 )
  893. fenster->setPosition( -250, fenster->getY() );
  894. }
  895. else
  896. animation = 0;
  897. rend = 1;
  898. break;
  899. }
  900. if( neuerFreundSichtbar )
  901. {
  902. if( neuerFreundFenster->getHeight() != 30 && neuerChatFenster->hatStyleNicht( Fenster::Style::Sichtbar ) )
  903. {
  904. neuerFreundFenster->addStyle( Fenster::Style::Sichtbar );
  905. neuerFreundFenster->setSize( neuerFreundFenster->getBreite(), neuerFreundFenster->getHeight() + val );
  906. freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() + val );
  907. freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() - val );
  908. if( neuerFreundFenster->getHeight() > 30 )
  909. {
  910. neuerFreundFenster->setSize( neuerFreundFenster->getBreite(), 30 );
  911. freundesListe->setPosition( freundesListe->getX(), 130 );
  912. freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 230 );
  913. }
  914. rend = 1;
  915. }
  916. }
  917. else
  918. {
  919. if( neuerFreundFenster->hatStyle( Fenster::Style::Sichtbar ) )
  920. {
  921. neuerFreundFenster->setSize( neuerFreundFenster->getBreite(), neuerFreundFenster->getHeight() - val );
  922. freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() - val );
  923. freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() + val );
  924. if( neuerFreundFenster->getHeight() < 0 )
  925. {
  926. neuerFreundFenster->setSize( neuerFreundFenster->getBreite(), 0 );
  927. neuerFreundFenster->removeStyle( Fenster::Style::Sichtbar );
  928. freundesListe->setPosition( freundesListe->getX(), 100 );
  929. freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 200 );
  930. }
  931. rend = 1;
  932. }
  933. }
  934. if( neuerChatSichtbar )
  935. {
  936. if( neuerChatFenster->getHeight() != 55 && neuerFreundFenster->hatStyleNicht( Fenster::Style::Sichtbar ) )
  937. {
  938. neuerChatFenster->addStyle( Fenster::Style::Sichtbar );
  939. neuerChatFenster->setSize( neuerChatFenster->getBreite(), neuerChatFenster->getHeight() + val );
  940. freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() + val );
  941. freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() - val );
  942. if( neuerChatFenster->getHeight() > 55 )
  943. {
  944. neuerChatFenster->setSize( neuerChatFenster->getBreite(), 55 );
  945. freundesListe->setPosition( freundesListe->getX(), 155 );
  946. freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 255 );
  947. }
  948. rend = 1;
  949. }
  950. }
  951. else
  952. {
  953. if( neuerChatFenster->hatStyle( Fenster::Style::Sichtbar ) )
  954. {
  955. neuerChatFenster->setSize( neuerChatFenster->getBreite(), neuerChatFenster->getHeight() - val );
  956. freundesListe->setPosition( freundesListe->getX(), freundesListe->getY() - val );
  957. freundesListe->setSize( freundesListe->getBreite(), freundesListe->getHeight() + val );
  958. if( neuerChatFenster->getHeight() < 0 )
  959. {
  960. neuerChatFenster->setSize( neuerChatFenster->getBreite(), 0 );
  961. neuerChatFenster->removeStyle( Fenster::Style::Sichtbar );
  962. freundesListe->setPosition( freundesListe->getX(), 100 );
  963. freundesListe->setSize( freundesListe->getBreite(), bildschirmGröße.y - 200 );
  964. }
  965. rend = 1;
  966. }
  967. }
  968. bool ret = rend;
  969. rend = 0;
  970. return ret;
  971. }
  972. bool FreundesListe::druckMinMax( MausEreignis &me )
  973. {
  974. if( me.id == ME_RLinks )
  975. {
  976. if( minMax->zHintergrundBild() == minimierenBild )
  977. {
  978. animation = 2;
  979. minMax->setHintergrundBildZ( maximierenBild->getThis() );
  980. minMax->zToolTip()->setText( "Freundes Leiste maximieren." );
  981. }
  982. else
  983. {
  984. animation = 1;
  985. minMax->setHintergrundBildZ( minimierenBild->getThis() );
  986. minMax->zToolTip()->setText( "Freundes Leiste minimieren." );
  987. }
  988. }
  989. return 1;
  990. }
  991. bool FreundesListe::druckName( TastaturEreignis &te )
  992. {
  993. if( te.id == TE_Release && te.taste == T_Enter )
  994. chatClient->accountNameÄndern( accountName->zText()->getText() );
  995. return 1;
  996. }
  997. bool FreundesListe::druckNeuerFreund( MausEreignis &me )
  998. {
  999. if( me.id == ME_RLinks )
  1000. {
  1001. neuerChatSichtbar = 0;
  1002. neuerFreundSichtbar = !neuerFreundSichtbar;
  1003. }
  1004. return 1;
  1005. }
  1006. bool FreundesListe::druckNeuerChat( MausEreignis &me )
  1007. {
  1008. if( me.id == ME_RLinks )
  1009. {
  1010. neuerFreundSichtbar = 0;
  1011. neuerChatSichtbar = !neuerChatSichtbar;
  1012. }
  1013. return 1;
  1014. }
  1015. bool FreundesListe::druckNeuerFreundSpielerName( TastaturEreignis &te )
  1016. {
  1017. if( !neuerFreundSichtbar )
  1018. return 0;
  1019. if( te.id == TE_Release && te.taste == T_Enter )
  1020. {
  1021. MausEreignis me = { ME_RLinks, 0, 0, 0 };
  1022. druckNeuerFreundFertig( me );
  1023. }
  1024. return 1;
  1025. }
  1026. bool FreundesListe::druckNeuerFreundFertig( MausEreignis &me )
  1027. {
  1028. if( !neuerFreundSichtbar )
  1029. return 0;
  1030. if( me.id == ME_RLinks )
  1031. {
  1032. if( neuerFreundSpielerName->zText()->getLength() )
  1033. {
  1034. int accountId = infoClient->getAccountId( neuerFreundSpielerName->zText()->getText() );
  1035. if( accountId )
  1036. {
  1037. if( chatClient->freundesAnfrage( accountId ) )
  1038. {
  1039. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundesanfrage" ), new Text( "Es wurde eine Anfrage an den Spieler gesendet." ),
  1040. new Text( "Ok" ), 0 );
  1041. neuerFreundSichtbar = 0;
  1042. }
  1043. }
  1044. else
  1045. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Der Spieler wurde nicht gefunden." ),
  1046. new Text( "Ok" ), 0 );
  1047. }
  1048. }
  1049. return 1;
  1050. }
  1051. bool FreundesListe::druckNeuerChatName( TastaturEreignis &te )
  1052. {
  1053. if( !neuerChatSichtbar )
  1054. return 0;
  1055. if( te.id == TE_Release && te.taste == T_Enter )
  1056. {
  1057. MausEreignis me = { ME_RLinks, 0, 0, 0 };
  1058. druckNeuerChatFertig( me );
  1059. }
  1060. return 1;
  1061. }
  1062. bool FreundesListe::druckNeuerChatFertig( MausEreignis &me )
  1063. {
  1064. if( !neuerChatSichtbar )
  1065. return 0;
  1066. if( me.id == ME_RLinks )
  1067. {
  1068. if( neuerChatName->zText()->getLength() )
  1069. {
  1070. int accountId = infoClient->getAccountId( neuerChatName->zText()->getText() );
  1071. if( accountId )
  1072. {
  1073. nachLogin->zChatLeiste()->addChat( accountId, 0 );
  1074. neuerChatSichtbar = 0;
  1075. }
  1076. else
  1077. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Der Spieler wurde nicht gefunden." ),
  1078. new Text( "Ok" ), 0 );
  1079. }
  1080. }
  1081. return 1;
  1082. }
  1083. bool FreundesListe::druckNeuesChatroomName( TastaturEreignis &te )
  1084. {
  1085. if( !neuerChatSichtbar )
  1086. return 0;
  1087. if( te.id == TE_Release && te.taste == T_Enter )
  1088. {
  1089. MausEreignis me = { ME_RLinks, 0, 0, 0 };
  1090. druckNeuesChatroomFertig( me );
  1091. }
  1092. return 1;
  1093. }
  1094. bool FreundesListe::druckNeuesChatroomFertig( MausEreignis &me )
  1095. {
  1096. if( !neuerChatSichtbar )
  1097. return 0;
  1098. if( me.id == ME_RLinks )
  1099. {
  1100. if( neuesChatroomName->zText()->getLength() )
  1101. {
  1102. int chatroomId = infoClient->getChatroomId( neuesChatroomName->zText()->getText() );
  1103. if( chatroomId )
  1104. {
  1105. if( chatClient->chatroomBetreten( chatroomId ) )
  1106. {
  1107. nachLogin->zChatLeiste()->addChat( 0, chatroomId );
  1108. neuerChatSichtbar = 0;
  1109. }
  1110. }
  1111. else
  1112. {
  1113. chatroomId = chatClient->chatroomErstellen( neuesChatroomName->zText()->getText() );
  1114. if( chatroomId )
  1115. {
  1116. nachLogin->zChatLeiste()->addChat( 0, chatroomId );
  1117. neuerChatSichtbar = 0;
  1118. }
  1119. }
  1120. }
  1121. }
  1122. return 1;
  1123. }
  1124. // constant
  1125. bool FreundesListe::istFreund( int accId ) const
  1126. {
  1127. return freundesListe->istFreund( accId );
  1128. }
  1129. // reference Counting
  1130. FreundesListe *FreundesListe::getThis()
  1131. {
  1132. ref++;
  1133. return this;
  1134. }
  1135. FreundesListe *FreundesListe::release()
  1136. {
  1137. ref--;
  1138. if( !ref )
  1139. delete this;
  1140. return 0;
  1141. }
  1142. // Nachrichten
  1143. bool freundesListeMinMaxME( void *p, void *obj, MausEreignis me )
  1144. {
  1145. return ( (FreundesListe*)p )->druckMinMax( me );
  1146. }
  1147. bool freundesListeNameTE( void *p, void *obj, TastaturEreignis te )
  1148. {
  1149. return ( (FreundesListe*)p )->druckName( te );
  1150. }
  1151. bool freundesListeNeuerFreundME( void *p, void *obj, MausEreignis me )
  1152. {
  1153. return ( (FreundesListe*)p )->druckNeuerFreund( me );
  1154. }
  1155. bool freundesListeNeuerChatME( void *p, void *obj, MausEreignis me )
  1156. {
  1157. return ( (FreundesListe*)p )->druckNeuerChat( me );
  1158. }
  1159. bool freundesListeNeuerFreundSpielerNameTE( void *p, void *obj, TastaturEreignis te )
  1160. {
  1161. return ( (FreundesListe*)p )->druckNeuerFreundSpielerName( te );
  1162. }
  1163. bool freundesListeNeuerFreundFertigME( void *p, void *obj, MausEreignis me )
  1164. {
  1165. return ( (FreundesListe*)p )->druckNeuerFreundFertig( me );
  1166. }
  1167. bool freundesListeNeuerChatNameTE( void *p, void *obj, TastaturEreignis te )
  1168. {
  1169. return ( (FreundesListe*)p )->druckNeuerChatName( te );
  1170. }
  1171. bool freundesListeNeuerChatFertigME( void *p, void *obj, MausEreignis me )
  1172. {
  1173. return ( (FreundesListe*)p )->druckNeuerChatFertig( me );
  1174. }
  1175. bool freundesListeNeuesChatroomNameTE( void *p, void *obj, TastaturEreignis te )
  1176. {
  1177. return ( (FreundesListe*)p )->druckNeuesChatroomName( te );
  1178. }
  1179. bool freundesListeNeuesChatroomFertigME( void *p, void *obj, MausEreignis me )
  1180. {
  1181. return ( (FreundesListe*)p )->druckNeuesChatroomFertig( me );
  1182. }