KEBeschreibung.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. #include "KEBeschreibung.h"
  2. #include "../../../../Global/Initialisierung.h"
  3. #include "../../../../Global/Variablen.h"
  4. bool KEBKnopfPressME( void *p, void *obj, MausEreignis me )
  5. {
  6. if( p )
  7. ( (KEBeschreibung*)p )->knopfPress( (Knopf*)obj, &me );
  8. return 1;
  9. }
  10. // Inhalt der KEBeschreibung Klasse aus KEBeschreibung.h
  11. // Konstruktor
  12. KEBeschreibung::KEBeschreibung( int karte, Schrift *zSchrift )
  13. : Thread()
  14. {
  15. schrift = zSchrift->getThis();
  16. Text *kName = infoKlient->getKarteName( karte );
  17. Text titel = kName ? kName->getText() : "<Karte>";
  18. titel += " - Beschreibung";
  19. if( kName )
  20. kName->release();
  21. fenster = initFenster( 10, 40, 880, 550, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
  22. editor = new KEBEditor( zSchrift, this );
  23. vorschau = new KEBVorschau( zSchrift );
  24. fenster->addMember( editor );
  25. fenster->addMember( vorschau );
  26. laden = (Animation2D*)ladeAnimation->dublizieren();
  27. laden->setPosition( 425, 275 );
  28. laden->setSichtbar( 0 );
  29. importDialog = 0;
  30. importPfad = 0;
  31. animation = 0;
  32. tickVal = 0;
  33. sichtbar = 0;
  34. rechts = 0;
  35. xStart = 0;
  36. breite = 0;
  37. aktion = 0;
  38. jetzt = 0;
  39. this->karte = karte;
  40. alpha = 255;
  41. ref = 1;
  42. }
  43. // Destruktor
  44. KEBeschreibung::~KEBeschreibung()
  45. {
  46. if( run )
  47. {
  48. warteAufThread( 5000 );
  49. if( run )
  50. ende();
  51. }
  52. fenster->release();
  53. laden->release();
  54. schrift->release();
  55. editor->release();
  56. vorschau->release();
  57. if( importDialog )
  58. importDialog->release();
  59. if( importPfad )
  60. importPfad->release();
  61. }
  62. // nicht constant
  63. void KEBeschreibung::setSichtbar( bool s, bool vr )
  64. {
  65. animation = 1;
  66. sichtbar = s;
  67. rechts = vr;
  68. if( sichtbar )
  69. {
  70. if( vr )
  71. {
  72. xStart = 900;
  73. breite = 0;
  74. }
  75. else
  76. {
  77. xStart = 0;
  78. breite = 0;
  79. }
  80. if( !run )
  81. {
  82. aktion = 0;
  83. start();
  84. }
  85. }
  86. }
  87. void KEBeschreibung::thread()
  88. {
  89. laden->setSichtbar( 1 );
  90. if( aktion == 0 )
  91. {
  92. if( jetzt == 1 )
  93. { // beschreibung laden
  94. Text *t = editorKlient->beschreibungLaden();
  95. t->ersetzen( "\r\n", "\n" );
  96. hauptScreen->lock();
  97. if( !t )
  98. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  99. else
  100. editor->setText( t );
  101. hauptScreen->unlock();
  102. t->release();
  103. }
  104. if( jetzt == 2 )
  105. { // Titelbild laden
  106. Bild *b = editorKlient->titelbildLaden();
  107. hauptScreen->lock();
  108. if( !b )
  109. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  110. else
  111. editor->setBild( b );
  112. hauptScreen->unlock();
  113. b->release();
  114. }
  115. if( jetzt == 3 )
  116. { // Minimap Bild laden
  117. Bild *b = editorKlient->minimapLaden();
  118. hauptScreen->lock();
  119. if( !b )
  120. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  121. else
  122. editor->setBild( b );
  123. hauptScreen->unlock();
  124. b->release();
  125. }
  126. if( jetzt == 4 )
  127. { // Ladebild laden
  128. Bild *b = editorKlient->ladebildLaden();
  129. hauptScreen->lock();
  130. if( !b )
  131. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  132. else
  133. editor->setBild( b );
  134. hauptScreen->unlock();
  135. b->release();
  136. }
  137. editor->setSichtbar( 1 );
  138. }
  139. if( aktion == 1 )
  140. {
  141. if( jetzt == 1 )
  142. { // Beschreibung speichern
  143. if( !editorKlient->beschreibungSpeichern( editor->zBeschreibung() ) )
  144. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  145. }
  146. if( jetzt == 2 )
  147. { // Titelbild hochladen
  148. importPfad->ersetzen( "\\", "/" );
  149. Text *n = importPfad->getTeilText( importPfad->positionVon( "/", importPfad->anzahlVon( "/" ) - 1 ) + 1 );
  150. Text name = n->getText();
  151. n->release();
  152. Text *err = new Text();
  153. Bild *b = ladeBild( importPfad->getText(), err );
  154. if( !b )
  155. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ) );
  156. else
  157. {
  158. err->release();
  159. if( !editorKlient->titelbildSpeichern( b ) )
  160. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  161. hauptScreen->lock();
  162. editor->setBild( b );
  163. hauptScreen->unlock();
  164. b->release();
  165. }
  166. }
  167. if( jetzt == 3 )
  168. { // Minimap hochladen
  169. importPfad->ersetzen( "\\", "/" );
  170. Text *n = importPfad->getTeilText( importPfad->positionVon( "/", importPfad->anzahlVon( "/" ) - 1 ) + 1 );
  171. Text name = n->getText();
  172. n->release();
  173. Text *err = new Text();
  174. Bild *b = ladeBild( importPfad->getText(), err );
  175. if( !b )
  176. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ) );
  177. else
  178. {
  179. err->release();
  180. if( !editorKlient->minimapSpeichern( b ) )
  181. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  182. hauptScreen->lock();
  183. editor->setBild( b );
  184. hauptScreen->unlock();
  185. b->release();
  186. }
  187. }
  188. if( jetzt == 4 )
  189. { // Ladebild hochladen
  190. importPfad->ersetzen( "\\", "/" );
  191. Text *n = importPfad->getTeilText( importPfad->positionVon( "/", importPfad->anzahlVon( "/" ) - 1 ) + 1 );
  192. Text name = n->getText();
  193. n->release();
  194. Text *err = new Text();
  195. Bild *b = ladeBild( importPfad->getText(), err );
  196. if( !b )
  197. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ) );
  198. else
  199. {
  200. err->release();
  201. if( !editorKlient->ladebildSpeichern( b ) )
  202. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  203. hauptScreen->lock();
  204. editor->setBild( b );
  205. hauptScreen->unlock();
  206. b->release();
  207. }
  208. }
  209. }
  210. if( aktion == 2 )
  211. { // Vorschau
  212. if( vorschau->ladeKarte() )
  213. {
  214. editor->setSichtbar( 0 );
  215. vorschau->setSichtbar( 1 );
  216. }
  217. }
  218. run = 0;
  219. laden->setSichtbar( 0 );
  220. return;
  221. }
  222. void KEBeschreibung::knopfPress( Knopf *k, MausEreignis *me )
  223. {
  224. if( run || me->id != ME_RLinks )
  225. return;
  226. if( editor->getKNum( k ) > 0 && jetzt != editor->getKNum( k ) )
  227. {
  228. jetzt = editor->getKNum( k );
  229. aktion = 0;
  230. start();
  231. }
  232. if( editor->getKNum( k ) == -1 )
  233. {
  234. aktion = 1;
  235. start();
  236. }
  237. if( editor->getKNum( k ) == -2 )
  238. {
  239. if( !importDialog )
  240. {
  241. importDialog = new DateiDialogTh();
  242. importDialog->setOpen( 1 );
  243. importDialog->setDateiTypAuswahl( 4 );
  244. importDialog->addDateiTyp( "JPEG-Bild", "*.jpg;*.jpeg;*.jpe" );
  245. importDialog->addDateiTyp( "GIF-Bild", "*.gif" );
  246. importDialog->addDateiTyp( "PNG-Bild", "*.png" );
  247. importDialog->addDateiTyp( "Alle Dateien", "*.*" );
  248. importDialog->start();
  249. }
  250. }
  251. if( editor->getKNum( k ) == -3 )
  252. {
  253. aktion = 2;
  254. start();
  255. }
  256. }
  257. void KEBeschreibung::doMausEreignis( MausEreignis &me )
  258. {
  259. if( !run )
  260. fenster->doMausEreignis( me );
  261. }
  262. void KEBeschreibung::doTastaturEreignis( TastaturEreignis &te )
  263. {
  264. if( !run )
  265. fenster->doTastaturEreignis( te );
  266. }
  267. bool KEBeschreibung::tick( double z )
  268. {
  269. if( importDialog )
  270. {
  271. if( !importDialog->isRunning() )
  272. {
  273. if( importPfad )
  274. importPfad->release();
  275. importPfad = importDialog->getPfad();
  276. importDialog = importDialog->release();
  277. if( sichtbar && importPfad )
  278. {
  279. aktion = 1;
  280. start();
  281. }
  282. }
  283. }
  284. if( vorschau->istSichtbar() )
  285. {
  286. if( vorschau->getAktion() )
  287. {
  288. vorschau->setSichtbar( 0 );
  289. editor->setSichtbar( 1 );
  290. }
  291. }
  292. bool ret = laden->tick( z );
  293. tickVal += z * 150;
  294. int val = (int)tickVal;
  295. tickVal -= val;
  296. if( val )
  297. {
  298. if( run && alpha > 100 )
  299. {
  300. if( alpha - val < 100 )
  301. alpha = 100;
  302. else
  303. alpha -= val;
  304. ret = 1;
  305. }
  306. if( sichtbar && !run && alpha != 255 )
  307. {
  308. if( alpha + val > 255 )
  309. alpha = 255;
  310. else
  311. alpha += val;
  312. ret = 1;
  313. }
  314. val *= 3;
  315. if( sichtbar )
  316. {
  317. if( alpha < 100 )
  318. {
  319. if( alpha + val > 100 )
  320. alpha = 100;
  321. else
  322. alpha += val;
  323. ret = 1;
  324. }
  325. if( xStart != 0 || breite != 900 )
  326. {
  327. if( rechts )
  328. {
  329. if( xStart - val <= 0 )
  330. {
  331. xStart = 0;
  332. breite = 900;
  333. animation = 0;
  334. }
  335. else
  336. {
  337. xStart -= val;
  338. breite += val;
  339. }
  340. }
  341. else
  342. {
  343. if( breite + val >= 900 )
  344. {
  345. breite = 900;
  346. animation = 0;
  347. }
  348. else
  349. breite += val;
  350. }
  351. ret = 1;
  352. }
  353. }
  354. else
  355. {
  356. if( breite != 0 )
  357. {
  358. if( rechts )
  359. {
  360. if( breite - val <= 0 )
  361. {
  362. breite = 0;
  363. animation = 0;
  364. }
  365. else
  366. breite -= val;
  367. }
  368. else
  369. {
  370. if( breite - val <= 0 )
  371. {
  372. breite = 0;
  373. xStart = 900;
  374. animation = 0;
  375. }
  376. else
  377. {
  378. breite -= val;
  379. xStart += val;
  380. }
  381. }
  382. ret = 1;
  383. }
  384. }
  385. }
  386. return ret || fenster->tick( z );
  387. }
  388. void KEBeschreibung::render( Bild &zRObj )
  389. {
  390. if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
  391. return;
  392. zRObj.setAlpha( alpha );
  393. fenster->render( zRObj );
  394. zRObj.releaseAlpha();
  395. laden->render( zRObj );
  396. zRObj.releaseDrawOptions();
  397. }
  398. // constant
  399. bool KEBeschreibung::istSichtbar() const
  400. {
  401. return sichtbar || animation;
  402. }
  403. // Reference Counting
  404. KEBeschreibung *KEBeschreibung::getThis()
  405. {
  406. ref++;
  407. return this;
  408. }
  409. KEBeschreibung *KEBeschreibung::release()
  410. {
  411. ref--;
  412. if( !ref )
  413. delete this;
  414. return 0;
  415. }