FreundesListe.cpp 35 KB

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