KEDateien.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. #include "KEDateien.h"
  2. #include <Schrift.h>
  3. #include <Text.h>
  4. #include "../../../../Global/Variablen.h"
  5. #include "../../../../Global/Initialisierung.h"
  6. #include "KEDModel2DEditor.h"
  7. #include "WAVDatei.h"
  8. // Inahlt der KEDateien Klasse aus KEDateien.h
  9. // Konstruktor
  10. KEDateien::KEDateien( int karte, Schrift *zSchrift )
  11. {
  12. schrift = zSchrift->getThis();
  13. Text *kName = infoKlient->getKarteName( karte );
  14. Text titel = kName ? kName->getText() : "<Karte>";
  15. titel += " - Dateien";
  16. if( kName )
  17. kName->release();
  18. fenster = initFenster( 10, 40, 880, 550, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
  19. editor = new KEDEditor( zSchrift );
  20. laden = (Animation2D*)ladeAnimation->dublizieren();
  21. laden->setPosition( 425, 275 );
  22. laden->setSichtbar( 0 );
  23. fenster->addMember( editor );
  24. fort = initFBalken( 375, 350, 150, 20, zSchrift, FBalken::Style::normal );
  25. animation = 0;
  26. tickVal = 0;
  27. sichtbar = 0;
  28. rechts = 0;
  29. xStart = 0;
  30. breite = 0;
  31. aktion = 0;
  32. this->karte = karte;
  33. alpha = 255;
  34. ref = 1;
  35. }
  36. // Destruktor
  37. KEDateien::~KEDateien()
  38. {
  39. if( run )
  40. {
  41. warteAufThread( 5000 );
  42. if( run )
  43. ende();
  44. }
  45. fenster->release();
  46. editor->release();
  47. laden->release();
  48. fort->release();
  49. schrift->release();
  50. }
  51. // nicht constant
  52. void KEDateien::setSichtbar( bool s, bool vr )
  53. {
  54. animation = 1;
  55. sichtbar = s;
  56. rechts = vr;
  57. if( sichtbar )
  58. {
  59. if( vr )
  60. {
  61. xStart = 900;
  62. breite = 0;
  63. }
  64. else
  65. {
  66. xStart = 0;
  67. breite = 0;
  68. }
  69. if( !run )
  70. {
  71. aktion = 0;
  72. start();
  73. }
  74. }
  75. else
  76. editor->setSichtbar( 0 );
  77. }
  78. void KEDateien::thread()
  79. {
  80. laden->setSichtbar( 1 );
  81. switch( aktion )
  82. {
  83. case 0: // Init
  84. {
  85. RCArray< Text > *list = new RCArray< Text >();
  86. int anz = editorKlient->deGetDateiListe( list );
  87. if( anz < 0 )
  88. {
  89. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  90. list->release();
  91. break;
  92. }
  93. editor->setDateiListe( list );
  94. break;
  95. }
  96. case 1: // Neue Datei
  97. {
  98. if( !editorKlient->deNeueDatei( (char)editor->getNeuDateiTyp(), editor->zNeuDateiName() ) )
  99. {
  100. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  101. break;
  102. }
  103. RCArray< Text > *list = new RCArray< Text >();
  104. int anz = editorKlient->deGetDateiListe( list );
  105. if( anz < 0 )
  106. {
  107. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  108. list->release();
  109. break;
  110. }
  111. editor->setDateiListe( list );
  112. break;
  113. }
  114. case 2: // Datei Auswählen
  115. {
  116. Text *zName = editor->zDateiAuswahl();
  117. if( zName->hat( ".ltdb" ) )
  118. {
  119. RCArray< Text > *list = new RCArray< Text >();
  120. int anz = editorKlient->deGetBildListe( zName, list );
  121. if( anz < 0 )
  122. {
  123. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  124. list->release();
  125. break;
  126. }
  127. editor->setBildListe( list );
  128. }
  129. else if( zName->hat( ".gsl" ) )
  130. {
  131. RCArray< Text > *list = new RCArray< Text >();
  132. int anz = editorKlient->deGetSoundListe( zName, list );
  133. if( anz < 0 )
  134. {
  135. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  136. list->release();
  137. break;
  138. }
  139. editor->setSoundListe( list );
  140. }
  141. else if( zName->hat( ".m2" ) )
  142. {
  143. RCArray< Text > *list = new RCArray< Text >();
  144. int anz = editorKlient->deGetModelListe( zName, list );
  145. if( anz < 0 )
  146. {
  147. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  148. list->release();
  149. break;
  150. }
  151. editor->setModel2dListe( list );
  152. }
  153. else
  154. {
  155. if( !editorKlient->deOrdnerÖffnen( zName ) )
  156. {
  157. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  158. break;
  159. }
  160. RCArray< Text > *list = new RCArray< Text >();
  161. int anz = editorKlient->deGetDateiListe( list );
  162. if( anz < 0 )
  163. {
  164. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  165. list->release();
  166. break;
  167. }
  168. editor->setDateiListe( list );
  169. }
  170. break;;
  171. }
  172. case 3: // Datei Löschen
  173. {
  174. Text p( "." );
  175. if( ( editor->zDateiAuswahl() && !editorKlient->deDateiLöschen( editor->zDateiAuswahl() ) ) || ( !editor->zDateiAuswahl() && !editorKlient->deDateiLöschen( &p ) ) )
  176. {
  177. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  178. break;
  179. }
  180. RCArray< Text > *list = new RCArray< Text >();
  181. int anz = editorKlient->deGetDateiListe( list );
  182. if( anz < 0 )
  183. {
  184. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  185. list->release();
  186. break;
  187. }
  188. editor->setDateiListe( list );
  189. break;
  190. }
  191. case 4: // Bild Auswählen
  192. {
  193. Bild *b = editorKlient->deBildLaden( editor->zDateiAuswahl(), editor->zBildAuswahl(), fort );
  194. if( !b )
  195. {
  196. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  197. break;
  198. }
  199. editor->setBild( b );
  200. break;
  201. }
  202. case 5: // Bild Löschen
  203. {
  204. if( !editorKlient->deBildLöschen( editor->zDateiAuswahl(), editor->zBildAuswahl() ) )
  205. {
  206. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  207. break;
  208. }
  209. RCArray< Text > *list = new RCArray< Text >();
  210. int anz = editorKlient->deGetBildListe( editor->zDateiAuswahl(), list );
  211. if( anz < 0 )
  212. {
  213. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  214. list->release();
  215. break;
  216. }
  217. editor->setBildListe( list );
  218. break;
  219. }
  220. case 6: // Bild Importieren
  221. {
  222. Text *pfad = editor->zBildImportPfad();
  223. pfad->ersetzen( "\\", "/" );
  224. Text *n = pfad->getTeilText( pfad->positionVon( "/", pfad->anzahlVon( "/" ) - 1 ) + 1 );
  225. Text name = n->getText();
  226. n->release();
  227. Text *err = new Text();
  228. Bild *b = ladeBild( pfad->getText(), err );
  229. if( !b )
  230. {
  231. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ) );
  232. break;
  233. }
  234. err->release();
  235. if( !editorKlient->deBildSpeichern( editor->zDateiAuswahl(), &name, b, fort ) )
  236. {
  237. b->release();
  238. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  239. break;
  240. }
  241. b->release();
  242. RCArray< Text > *list = new RCArray< Text >();
  243. int anz = editorKlient->deGetBildListe( editor->zDateiAuswahl(), list );
  244. if( anz < 0 )
  245. {
  246. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  247. list->release();
  248. break;
  249. }
  250. editor->setBildListe( list );
  251. break;
  252. }
  253. case 7: // Model Auswählen
  254. {
  255. Model2DData *d = editorKlient->deModelLaden( editor->zDateiAuswahl(), editor->zModel2dAuswahl(), fort );
  256. if( !d )
  257. {
  258. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  259. break;
  260. }
  261. editor->setModel2d( d );
  262. break;
  263. }
  264. case 8: // Model Löschen
  265. {
  266. if( !editorKlient->deModelLöschen( editor->zDateiAuswahl(), editor->zModel2dAuswahl() ) )
  267. {
  268. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  269. break;
  270. }
  271. RCArray< Text > *list = new RCArray< Text >();
  272. int anz = editorKlient->deGetModelListe( editor->zDateiAuswahl(), list );
  273. if( anz < 0 )
  274. {
  275. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  276. list->release();
  277. break;
  278. }
  279. editor->setModel2dListe( list );
  280. break;
  281. }
  282. case 9: // Model speichern
  283. {
  284. Model2DData *m = editor->getModelData();
  285. if( !editorKlient->deModelSpeichern( editor->zDateiAuswahl(), editor->zModel2dAuswahl(), m, fort ) )
  286. {
  287. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  288. m->release();
  289. break;
  290. }
  291. editor->setModel2d( m );
  292. break;
  293. }
  294. case 10: // Neues Model
  295. {
  296. Model2DData *m = new Model2DData();
  297. m->erstelleModell( new Array< Polygon2D >() );
  298. if( !editorKlient->deModelSpeichern( editor->zDateiAuswahl(), editor->zNeuModelName(), m, fort ) )
  299. {
  300. m->release();
  301. break;
  302. }
  303. m->release();
  304. RCArray< Text > *list = new RCArray< Text >();
  305. int anz = editorKlient->deGetModelListe( editor->zDateiAuswahl(), list );
  306. if( anz < 0 )
  307. {
  308. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  309. list->release();
  310. break;
  311. }
  312. editor->setModel2dListe( list );
  313. break;
  314. }
  315. case 11: // Sound Abspielen
  316. {
  317. GSL::GSLSoundV *s = editorKlient->deSoundLaden( editor->zDateiAuswahl(), editor->zSoundAuswahl(), fort );
  318. if( !s )
  319. {
  320. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  321. break;
  322. }
  323. editor->setSound( s );
  324. break;
  325. }
  326. case 12: // Sound Löschen
  327. {
  328. if( !editorKlient->deSoundLöschen( editor->zDateiAuswahl(), editor->zSoundAuswahl() ) )
  329. {
  330. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  331. break;
  332. }
  333. RCArray< Text > *list = new RCArray< Text >();
  334. int anz = editorKlient->deGetSoundListe( editor->zDateiAuswahl(), list );
  335. if( anz < 0 )
  336. {
  337. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  338. list->release();
  339. break;
  340. }
  341. editor->setSoundListe( list );
  342. break;
  343. }
  344. case 13: // Sound Importieren
  345. {
  346. Text *pfad = editor->zSoundImportPfad();
  347. pfad->ersetzen( "\\", "/" );
  348. Text *n = pfad->getTeilText( pfad->positionVon( "/", pfad->anzahlVon( "/" ) - 1 ) + 1 );
  349. Text name = n->getText();
  350. name.remove( ".wav" );
  351. n->release();
  352. WAVDatei *s = new WAVDatei();
  353. if( !s->lade( pfad->getText() ) )
  354. {
  355. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Fehler beim Lesen der Ausgewählten Datei." ), new Text( "Ok" ) );
  356. s->release();
  357. break;
  358. }
  359. if( !editorKlient->deSoundSpeichern( editor->zDateiAuswahl(), &name, s, fort ) )
  360. {
  361. s->release();
  362. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  363. break;
  364. }
  365. s->release();
  366. RCArray< Text > *list = new RCArray< Text >();
  367. int anz = editorKlient->deGetSoundListe( editor->zDateiAuswahl(), list );
  368. if( anz < 0 )
  369. {
  370. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  371. list->release();
  372. break;
  373. }
  374. editor->setSoundListe( list );
  375. break;
  376. }
  377. }
  378. laden->setSichtbar( 0 );
  379. run = 0;
  380. fort->reset();
  381. }
  382. void KEDateien::doMausEreignis( MausEreignis &me )
  383. {
  384. if( !run )
  385. fenster->doMausEreignis( me );
  386. }
  387. void KEDateien::doTastaturEreignis( TastaturEreignis &te )
  388. {
  389. if( !run )
  390. fenster->doTastaturEreignis( te );
  391. }
  392. bool KEDateien::tick( double z )
  393. {
  394. fort->tick( z );
  395. aktion = editor->getAktion();
  396. if( aktion && !run )
  397. start();
  398. bool ret = laden->tick( z );
  399. tickVal += z * 150;
  400. int val = (int)tickVal;
  401. tickVal -= val;
  402. if( val )
  403. {
  404. if( run && alpha > 100 )
  405. {
  406. if( alpha - val < 100 )
  407. alpha = 100;
  408. else
  409. alpha -= val;
  410. ret = 1;
  411. }
  412. if( sichtbar && !run && alpha != 255 )
  413. {
  414. if( alpha + val > 255 )
  415. alpha = 255;
  416. else
  417. alpha += val;
  418. ret = 1;
  419. }
  420. val *= 3;
  421. if( sichtbar )
  422. {
  423. if( alpha < 100 )
  424. {
  425. if( alpha + val > 100 )
  426. alpha = 100;
  427. else
  428. alpha += val;
  429. ret = 1;
  430. }
  431. if( xStart != 0 || breite != 900 )
  432. {
  433. if( rechts )
  434. {
  435. if( xStart - val <= 0 )
  436. {
  437. xStart = 0;
  438. breite = 900;
  439. animation = 0;
  440. editor->setSichtbar( 1 );
  441. }
  442. else
  443. {
  444. xStart -= val;
  445. breite += val;
  446. }
  447. }
  448. else
  449. {
  450. if( breite + val >= 900 )
  451. {
  452. breite = 900;
  453. animation = 0;
  454. editor->setSichtbar( 1 );
  455. }
  456. else
  457. breite += val;
  458. }
  459. ret = 1;
  460. }
  461. }
  462. else
  463. {
  464. if( breite != 0 )
  465. {
  466. if( rechts )
  467. {
  468. if( breite - val <= 0 )
  469. {
  470. breite = 0;
  471. animation = 0;
  472. }
  473. else
  474. breite -= val;
  475. }
  476. else
  477. {
  478. if( breite - val <= 0 )
  479. {
  480. breite = 0;
  481. xStart = 900;
  482. animation = 0;
  483. }
  484. else
  485. {
  486. breite -= val;
  487. xStart += val;
  488. }
  489. }
  490. ret = 1;
  491. }
  492. }
  493. }
  494. return ret || fenster->tick( z );
  495. }
  496. void KEDateien::render( Bild &zRObj )
  497. {
  498. if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
  499. return;
  500. zRObj.setAlpha( alpha );
  501. fenster->render( zRObj );
  502. zRObj.releaseAlpha();
  503. laden->render( zRObj );
  504. if( fort->getAktionAnzahl() && run )
  505. fort->render( zRObj );
  506. zRObj.releaseDrawOptions();
  507. }
  508. // constant
  509. bool KEDateien::istSichtbar() const
  510. {
  511. return sichtbar || animation;
  512. }
  513. // Reference Counting
  514. KEDateien *KEDateien::getThis()
  515. {
  516. ref++;
  517. return this;
  518. }
  519. KEDateien *KEDateien::release()
  520. {
  521. ref--;
  522. if( !ref )
  523. delete this;
  524. return 0;
  525. }