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