FreundesListe.cpp 34 KB

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