KEDateien.cpp 17 KB

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