FreundesListe.cpp 34 KB

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