KEDEditor.cpp 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198
  1. #include "KEDEditor.h"
  2. #include "../../../../Global/Initialisierung.h"
  3. #include <MausEreignis.h>
  4. #include "../../../../Global/Variablen.h"
  5. #include <Model2D.h>
  6. #include <Globals.h>
  7. // Inhalt der KEDBildSeite Klasse aus KEDEditor.h
  8. // Konstruktor
  9. KEDBildSeite::KEDBildSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiRemove )
  10. {
  11. bilder = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
  12. bildObj = initBildZ( 430, 10, 440, 440, BildZ::Style::normal | BildZ::Style::Alpha, 0 );
  13. bildLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bild Löschen" );
  14. importieren = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Importieren" );
  15. dateiLöschen = (Knopf *)zDateiRemove->getThis();
  16. neueDatei = (Knopf *)zNeueDatei->getThis();
  17. importDialog = 0;
  18. importPfad = 0;
  19. aktion = 0;
  20. sichtbar = 0;
  21. alpha = 0;
  22. alpha2 = 0;
  23. tickVal = 0;
  24. ref = 1;
  25. }
  26. // Destruktor
  27. KEDBildSeite::~KEDBildSeite()
  28. {
  29. bilder->release();
  30. bildObj->release();
  31. bildLöschen->release();
  32. importieren->release();
  33. dateiLöschen->release();
  34. neueDatei->release();
  35. if( importDialog )
  36. importDialog->release();
  37. if( importPfad )
  38. importPfad->release();
  39. }
  40. // nicht constant
  41. int KEDBildSeite::getAktion()
  42. {
  43. int ret = aktion;
  44. aktion = 0;
  45. return ret;
  46. }
  47. void KEDBildSeite::setBildListe( RCArray< Text > * list )
  48. {
  49. hauptScreen->lock();
  50. Text txt = bilder->zEintrag( bilder->getAuswahl() ) ? bilder->zEintrag( bilder->getAuswahl() )->zText()->getText() : "";
  51. while( bilder->getEintragAnzahl() )
  52. bilder->removeEintrag( 0 );
  53. int anz = list->getEintragAnzahl();
  54. int ausw = -1;
  55. for( int i = 0; i < anz; i++ )
  56. {
  57. if( list->z( i )->istGleich( txt ) )
  58. ausw = i;
  59. bilder->addEintrag( list->get( i ) );
  60. }
  61. if( ausw >= 0 )
  62. bilder->setAuswahl( ausw );
  63. else
  64. bilder->deSelect();
  65. list->release();
  66. hauptScreen->unlock();
  67. }
  68. void KEDBildSeite::setBild( Bild * b )
  69. {
  70. hauptScreen->lock();
  71. bildObj->setBild( b );
  72. hauptScreen->unlock();
  73. }
  74. void KEDBildSeite::setSichtbar( bool s )
  75. {
  76. sichtbar = s;
  77. }
  78. bool KEDBildSeite::tick( double tv )
  79. {
  80. if( importDialog )
  81. {
  82. if( !importDialog->isRunning() )
  83. {
  84. if( importPfad )
  85. importPfad->release();
  86. importPfad = importDialog->getPfad();
  87. importDialog = importDialog->release();
  88. if( sichtbar &&importPfad )
  89. aktion = 3;
  90. }
  91. }
  92. bool ret = bilder->tick( tv );
  93. ret |= bildObj->tick( tv );
  94. ret |= bildLöschen->tick( tv );
  95. ret |= importieren->tick( tv );
  96. ret |= dateiLöschen->tick( tv );
  97. ret |= neueDatei->tick( tv );
  98. tickVal += tv * 150;
  99. int val = 0;
  100. if( tickVal > 1 )
  101. val = (int)tickVal;
  102. else
  103. return ret;
  104. if( sichtbar && alpha != 255 )
  105. {
  106. if( alpha + val > 255 )
  107. alpha = 255;
  108. else
  109. alpha += val;
  110. ret = 1;
  111. }
  112. if( !sichtbar && alpha != 0 )
  113. {
  114. if( alpha - val < 0 )
  115. alpha = 0;
  116. else
  117. alpha -= val;
  118. ret = 1;
  119. }
  120. if( sichtbar && bilder->getAuswahl() >= 0 && alpha2 != 255 )
  121. {
  122. if( alpha2 + val > 255 )
  123. alpha2 = 255;
  124. else
  125. alpha2 += val;
  126. ret = 1;
  127. }
  128. if( ( !sichtbar || bilder->getAuswahl() < 0 ) && alpha2 != 0 )
  129. {
  130. if( alpha2 - val < 0 )
  131. alpha2 = 0;
  132. else
  133. alpha2 -= val;
  134. ret = 1;
  135. }
  136. return ret;
  137. }
  138. void KEDBildSeite::doMausEreignis( MausEreignis & me )
  139. {
  140. if( !sichtbar )
  141. return;
  142. int ausw = bilder->getAuswahl();
  143. bilder->doMausEreignis( me );
  144. if( ausw != bilder->getAuswahl() && me.id == ME_RLinks )
  145. {
  146. if( bilder->getAuswahl() >= 0 )
  147. aktion = 1;
  148. else
  149. bilder->setAuswahl( ausw );
  150. }
  151. bool vera = me.verarbeitet;
  152. dateiLöschen->doMausEreignis( me );
  153. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  154. aktion = 4;
  155. vera = me.verarbeitet;
  156. neueDatei->doMausEreignis( me );
  157. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  158. aktion = 5;
  159. vera = me.verarbeitet;
  160. importieren->doMausEreignis( me );
  161. if( !vera && me.verarbeitet && me.id == ME_RLinks )
  162. {
  163. if( !importDialog )
  164. {
  165. importDialog = new DateiDialogTh();
  166. importDialog->setOpen( 1 );
  167. importDialog->setDateiTypAuswahl( 4 );
  168. importDialog->addDateiTyp( "JPEG-Bild", "*.jpg;*.jpeg;*.jpe" );
  169. importDialog->addDateiTyp( "GIF-Bild", "*.gif" );
  170. importDialog->addDateiTyp( "PNG-Bild", "*.png" );
  171. importDialog->addDateiTyp( "Alle Dateien", "*.*" );
  172. importDialog->start();
  173. }
  174. }
  175. if( bilder->getAuswahl() < 0 )
  176. return;
  177. bildObj->doMausEreignis( me );
  178. vera = me.verarbeitet;
  179. bildLöschen->doMausEreignis( me );
  180. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  181. aktion = 2;
  182. }
  183. void KEDBildSeite::render( Bild & zRObj )
  184. {
  185. if( !alpha )
  186. return;
  187. zRObj.setAlpha( alpha );
  188. bilder->render( zRObj );
  189. neueDatei->setPosition( 540, 490 );
  190. neueDatei->render( zRObj );
  191. dateiLöschen->setPosition( 540, 460 );
  192. dateiLöschen->render( zRObj );
  193. importieren->render( zRObj );
  194. zRObj.setAlpha( alpha2 );
  195. bildObj->render( zRObj );
  196. bildLöschen->render( zRObj );
  197. zRObj.releaseAlpha();
  198. zRObj.releaseAlpha();
  199. }
  200. // constant
  201. Text *KEDBildSeite::zBildImportPfad() const
  202. {
  203. return importPfad;
  204. }
  205. Text *KEDBildSeite::zBildAuswahl() const
  206. {
  207. if( !bilder->zEintrag( bilder->getAuswahl() ) )
  208. return 0;
  209. return bilder->zEintrag( bilder->getAuswahl() )->zText();
  210. }
  211. // Reference Counting
  212. KEDBildSeite *KEDBildSeite::getThis()
  213. {
  214. ref++;
  215. return this;
  216. }
  217. KEDBildSeite *KEDBildSeite::release()
  218. {
  219. ref--;
  220. if( !ref )
  221. delete this;
  222. return 0;
  223. }
  224. bool kEDEditorNeuModelOkME( void *p, void *obj, MausEreignis me )
  225. {
  226. if( p )
  227. return ( (KEDModellSeite *)p )->neuModelOkME( me );
  228. else if( me.id == ME_RLinks )
  229. ( (Fenster *)obj )->removeStyle( Fenster::Style::Sichtbar );
  230. return 1;
  231. }
  232. // Inhalt der KEDModellSeite Klasse aus KEDEditor.h
  233. // Konstruktor
  234. KEDModellSeite::KEDModellSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zDateiRemove, AuswahlListe * datL )
  235. {
  236. dateien = datL;
  237. modelle = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
  238. modelObj = new M2DVorschau();
  239. modelObj->setPosition( 430, 10 );
  240. modelObj->setSize( 440, 440 );
  241. modelObj->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::Erlaubt | M2DVorschau::Style::Sichtbar | M2DVorschau::Style::UsrMove | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrScale );
  242. modelObj->setRahmenFarbe( 0xFFFFFFFF );
  243. modelObj->setMausEreignis( _ret1ME );
  244. modelObj->setModel2DZ( new Model2D() );
  245. modelObj->zModel()->setStyle( Model2D::Style::Erlaubt | Model2D::Style::Mesh | Model2D::Style::Sichtbar );
  246. modelObj->zModel()->setFarbe( 0xFFFFFFFF );
  247. modelLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Modell2D Löschen" );
  248. neuesModel = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Neues Modell2D" );
  249. bearbeiten = initKnopf( 550, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bearbeiten" );
  250. dateiLöschen = (Knopf *)zDateiRemove->getThis();
  251. neueDatei = (Knopf *)zNeueDatei->getThis();
  252. editor = new Model2DEditor::GUI( zSchrift );
  253. neuModelF = initFenster( 365, 160, 150, 90, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
  254. Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
  255. Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neues Modell" );
  256. neuModelF->setKBgFarbe( 0xC0000000 );
  257. neuModelF->setSBgFarbe( 0xC0000000 );
  258. neuModelF->setTBgFarbe( 0xC0000000 );
  259. neuModelF->setClosingMe( kEDEditorNeuModelOkME );
  260. neuModelName = initTextFeld( 10, 10, 130, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
  261. neuModelOk = initKnopf( 25, 40, 100, 20, zSchrift, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
  262. neuModelOk->setMausEreignisParameter( this );
  263. neuModelOk->setMausEreignis( kEDEditorNeuModelOkME );
  264. neuModelF->addMember( neuModelName->getThis() );
  265. neuModelF->addMember( neuModelOk->getThis() );
  266. aktion = 0;
  267. sichtbar = 0;
  268. alpha = 0;
  269. alpha2 = 0;
  270. alpha3 = 0;
  271. tickVal = 0;
  272. ref = 1;
  273. }
  274. // Destruktor
  275. KEDModellSeite::~KEDModellSeite()
  276. {
  277. dateien->release();
  278. modelle->release();
  279. modelObj->release();
  280. modelLöschen->release();
  281. neuesModel->release();
  282. dateiLöschen->release();
  283. neueDatei->release();
  284. bearbeiten->release();
  285. editor->release();
  286. neuModelF->release();
  287. neuModelName->release();
  288. neuModelOk->release();
  289. }
  290. // nicht constant
  291. int KEDModellSeite::getAktion()
  292. {
  293. int ret = aktion;
  294. aktion = 0;
  295. return ret;
  296. }
  297. bool KEDModellSeite::neuModelOkME( MausEreignis & me )
  298. {
  299. if( me.id == ME_RLinks )
  300. {
  301. neuModelF->removeStyle( Fenster::Style::Sichtbar );
  302. aktion = 4;
  303. }
  304. return 1;
  305. }
  306. void KEDModellSeite::setModelListe( RCArray< Text > * list )
  307. {
  308. hauptScreen->lock();
  309. Text txt = modelle->zEintrag( modelle->getAuswahl() ) ? modelle->zEintrag( modelle->getAuswahl() )->zText()->getText() : "";
  310. while( modelle->getEintragAnzahl() )
  311. modelle->removeEintrag( 0 );
  312. int anz = list->getEintragAnzahl();
  313. int ausw = -1;
  314. for( int i = 0; i < anz; i++ )
  315. {
  316. if( list->z( i )->istGleich( txt ) )
  317. ausw = i;
  318. modelle->addEintrag( list->get( i ) );
  319. }
  320. if( ausw >= 0 )
  321. modelle->setAuswahl( ausw );
  322. else
  323. modelle->deSelect();
  324. list->release();
  325. hauptScreen->unlock();
  326. }
  327. void KEDModellSeite::setModel( Model2DData * mdl )
  328. {
  329. modelObj->setModel2D( mdl->getThis() );
  330. editor->setModel( mdl );
  331. }
  332. void KEDModellSeite::setSichtbar( bool s )
  333. {
  334. sichtbar = s;
  335. }
  336. bool KEDModellSeite::tick( double tv )
  337. {
  338. bool ret = modelle->tick( tv );
  339. ret |= modelObj->tick( tv );
  340. ret |= modelLöschen->tick( tv );
  341. ret |= neuesModel->tick( tv );
  342. ret |= dateiLöschen->tick( tv );
  343. ret |= neueDatei->tick( tv );
  344. ret |= bearbeiten->tick( tv );
  345. ret |= editor->tick( tv );
  346. ret |= neuModelF->tick( tv );
  347. int a = editor->getAktion();
  348. if( a == 1 || a == 2 )
  349. {
  350. editor->setSichtbar( 0 );
  351. modelObj->addStyle( Model2D::Style::Sichtbar );
  352. modelle->addStyle( Model2D::Style::Sichtbar );
  353. dateien->addStyle( AuswahlListe::Style::Sichtbar );
  354. dateiLöschen->addStyle( Knopf::Style::Sichtbar );
  355. neueDatei->addStyle( Knopf::Style::Sichtbar );
  356. neuesModel->addStyle( Knopf::Style::Sichtbar );
  357. modelLöschen->addStyle( Knopf::Style::Sichtbar );
  358. bearbeiten->addStyle( Knopf::Style::Sichtbar );
  359. }
  360. if( a == 1 )
  361. aktion = 3;
  362. tickVal += tv * 150;
  363. int val = 0;
  364. if( tickVal > 1 )
  365. val = (int)tickVal;
  366. else
  367. return ret;
  368. if( sichtbar && alpha != 255 )
  369. {
  370. if( alpha + val > 255 )
  371. alpha = 255;
  372. else
  373. alpha += val;
  374. ret = 1;
  375. }
  376. if( !sichtbar && alpha != 0 )
  377. {
  378. if( alpha - val < 0 )
  379. alpha = 0;
  380. else
  381. alpha -= val;
  382. ret = 1;
  383. }
  384. if( sichtbar && modelle->getAuswahl() >= 0 && alpha2 != 255 )
  385. {
  386. if( alpha2 + val > 255 )
  387. alpha2 = 255;
  388. else
  389. alpha2 += val;
  390. ret = 1;
  391. }
  392. if( ( !sichtbar || modelle->getAuswahl() < 0 ) && alpha2 != 0 )
  393. {
  394. if( alpha2 - val < 0 )
  395. alpha2 = 0;
  396. else
  397. alpha2 -= val;
  398. ret = 1;
  399. }
  400. if( sichtbar && neuModelF->hatStyle( Fenster::Style::Sichtbar ) && alpha3 > 100 )
  401. {
  402. if( alpha3 - val < 100 )
  403. alpha3 = 100;
  404. else
  405. alpha3 -= val;
  406. ret = 1;
  407. }
  408. if( sichtbar &&neuModelF->hatStyleNicht( Fenster::Style::Sichtbar ) && alpha3 < 255 )
  409. {
  410. if( alpha3 + val > 255 )
  411. alpha3 = 255;
  412. else
  413. alpha3 += val;
  414. ret = 1;
  415. }
  416. return ret;
  417. }
  418. void KEDModellSeite::doMausEreignis( MausEreignis & me )
  419. {
  420. if( !sichtbar )
  421. return;
  422. if( neuModelF->hatStyle( Fenster::Style::Sichtbar ) )
  423. {
  424. neuModelF->doMausEreignis( me );
  425. return;
  426. }
  427. int ausw = modelle->getAuswahl();
  428. modelle->doMausEreignis( me );
  429. if( ausw != modelle->getAuswahl() && me.id == ME_RLinks )
  430. {
  431. if( modelle->getAuswahl() >= 0 )
  432. aktion = 1;
  433. else
  434. modelle->setAuswahl( ausw );
  435. }
  436. bool vera = me.verarbeitet;
  437. dateiLöschen->doMausEreignis( me );
  438. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  439. aktion = 5;
  440. vera = me.verarbeitet;
  441. neueDatei->doMausEreignis( me );
  442. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  443. aktion = 6;
  444. vera = me.verarbeitet;
  445. neuesModel->doMausEreignis( me );
  446. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  447. neuModelF->addStyle( Fenster::Style::Sichtbar );
  448. vera = me.verarbeitet;
  449. if( modelle->getAuswahl() < 0 )
  450. return;
  451. bearbeiten->doMausEreignis( me );
  452. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  453. {
  454. editor->setSichtbar( 1 );
  455. modelObj->removeStyle( Model2D::Style::Sichtbar );
  456. modelle->removeStyle( Model2D::Style::Sichtbar );
  457. dateien->removeStyle( AuswahlListe::Style::Sichtbar );
  458. dateiLöschen->removeStyle( Knopf::Style::Sichtbar );
  459. neueDatei->removeStyle( Knopf::Style::Sichtbar );
  460. neuesModel->removeStyle( Knopf::Style::Sichtbar );
  461. bearbeiten->removeStyle( Knopf::Style::Sichtbar );
  462. modelLöschen->removeStyle( Knopf::Style::Sichtbar );
  463. }
  464. modelObj->doMausEreignis( me );
  465. editor->doMausEreignis( me );
  466. vera = me.verarbeitet;
  467. modelLöschen->doMausEreignis( me );
  468. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  469. aktion = 2;
  470. }
  471. void KEDModellSeite::doTastaturEreignis( TastaturEreignis & te )
  472. {
  473. if( neuModelF->hatStyle( Fenster::Style::Sichtbar ) )
  474. {
  475. neuModelF->doTastaturEreignis( te );
  476. return;
  477. }
  478. editor->doTastaturEreignis( te );
  479. }
  480. void KEDModellSeite::render( Bild & zRObj )
  481. {
  482. if( !alpha )
  483. return;
  484. zRObj.setAlpha( alpha );
  485. zRObj.setAlpha( alpha3 );
  486. modelle->render( zRObj );
  487. neuesModel->render( zRObj );
  488. neueDatei->setPosition( 670, 490 );
  489. neueDatei->render( zRObj );
  490. dateiLöschen->setPosition( 670, 460 );
  491. dateiLöschen->render( zRObj );
  492. if( modelle->getAuswahl() >= 0 )
  493. {
  494. bearbeiten->render( zRObj );
  495. modelLöschen->render( zRObj );
  496. zRObj.setAlpha( alpha2 );
  497. modelObj->render( zRObj );
  498. editor->render( zRObj );
  499. zRObj.releaseAlpha();
  500. }
  501. zRObj.releaseAlpha();
  502. neuModelF->render( zRObj );
  503. zRObj.releaseAlpha();
  504. }
  505. // constant
  506. Text *KEDModellSeite::zModelAuswahl() const
  507. {
  508. if( !modelle->zEintrag( modelle->getAuswahl() ) )
  509. return 0;
  510. return modelle->zEintrag( modelle->getAuswahl() )->zText();
  511. }
  512. Text *KEDModellSeite::zNeuModelName() const
  513. {
  514. return neuModelName->zText();
  515. }
  516. Model2DData *KEDModellSeite::getModelData() const
  517. {
  518. return editor->getM2Data();
  519. }
  520. // Reference Counting
  521. KEDModellSeite *KEDModellSeite::getThis()
  522. {
  523. ref++;
  524. return this;
  525. }
  526. KEDModellSeite *KEDModellSeite::release()
  527. {
  528. ref--;
  529. if( !ref )
  530. delete this;
  531. return 0;
  532. }
  533. // Inhalt der KEDSoundSeite Klasse aus KEDEditor.h
  534. // Konstruktor
  535. KEDSoundSeite::KEDSoundSeite( Schrift * zSchrift, Knopf * zNeueDatei, Knopf * zDateiRemove )
  536. {
  537. Framework::getDLLRegister()->ladeDLL( "GSL.dll", "data/bin/GSL.dll" );
  538. sounds = initAuswahlListe( 220, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
  539. play = initKnopf( 430, 430, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Play" );
  540. soundLöschen = initKnopf( 430, 460, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Bild Löschen" );
  541. importieren = initKnopf( 430, 490, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Importieren" );
  542. dateiLöschen = (Knopf *)zDateiRemove->getThis();
  543. neueDatei = (Knopf *)zNeueDatei->getThis();
  544. importDialog = 0;
  545. importPfad = 0;
  546. aktion = 0;
  547. sichtbar = 0;
  548. alpha = 0;
  549. alpha2 = 0;
  550. tickVal = 0;
  551. sound = 0;
  552. ref = 1;
  553. }
  554. // Destruktor
  555. KEDSoundSeite::~KEDSoundSeite()
  556. {
  557. if( sound )
  558. {
  559. sound->stopSound();
  560. sound->release();
  561. }
  562. Framework::getDLLRegister()->releaseDLL( "GSL.dll" );
  563. sounds->release();
  564. play->release();
  565. soundLöschen->release();
  566. importieren->release();
  567. dateiLöschen->release();
  568. neueDatei->release();
  569. if( importDialog )
  570. importDialog->release();
  571. if( importPfad )
  572. importPfad->release();
  573. }
  574. // nicht constant
  575. int KEDSoundSeite::getAktion()
  576. {
  577. int ret = aktion;
  578. aktion = 0;
  579. return ret;
  580. }
  581. void KEDSoundSeite::setSoundListe( RCArray< Text > * list )
  582. {
  583. hauptScreen->lock();
  584. Text txt = sounds->zEintrag( sounds->getAuswahl() ) ? sounds->zEintrag( sounds->getAuswahl() )->zText()->getText() : "";
  585. while( sounds->getEintragAnzahl() )
  586. sounds->removeEintrag( 0 );
  587. int anz = list->getEintragAnzahl();
  588. int ausw = -1;
  589. for( int i = 0; i < anz; i++ )
  590. {
  591. if( list->z( i )->istGleich( txt ) )
  592. ausw = i;
  593. sounds->addEintrag( list->get( i ) );
  594. }
  595. if( ausw >= 0 )
  596. sounds->setAuswahl( ausw );
  597. else
  598. sounds->deSelect();
  599. list->release();
  600. hauptScreen->unlock();
  601. }
  602. void KEDSoundSeite::setSound( GSL::GSLSoundV * b )
  603. {
  604. if( sound )
  605. {
  606. sound->stopSound();
  607. sound->release();
  608. }
  609. sound = b;
  610. sound->playSound();
  611. }
  612. void KEDSoundSeite::setSichtbar( bool s )
  613. {
  614. sichtbar = s;
  615. }
  616. bool KEDSoundSeite::tick( double tv )
  617. {
  618. if( importDialog )
  619. {
  620. if( !importDialog->isRunning() )
  621. {
  622. if( importPfad )
  623. importPfad->release();
  624. importPfad = importDialog->getPfad();
  625. importDialog = importDialog->release();
  626. if( sichtbar &&importPfad )
  627. aktion = 3;
  628. }
  629. }
  630. bool ret = sounds->tick( tv );
  631. ret |= play->tick( tv );
  632. ret |= soundLöschen->tick( tv );
  633. ret |= importieren->tick( tv );
  634. ret |= dateiLöschen->tick( tv );
  635. ret |= neueDatei->tick( tv );
  636. tickVal += tv * 150;
  637. int val = 0;
  638. if( tickVal > 1 )
  639. val = (int)tickVal;
  640. else
  641. return ret;
  642. if( sichtbar && alpha != 255 )
  643. {
  644. if( alpha + val > 255 )
  645. alpha = 255;
  646. else
  647. alpha += val;
  648. ret = 1;
  649. }
  650. if( !sichtbar && alpha != 0 )
  651. {
  652. if( alpha - val < 0 )
  653. alpha = 0;
  654. else
  655. alpha -= val;
  656. ret = 1;
  657. }
  658. if( sichtbar && sounds->getAuswahl() >= 0 && alpha2 != 255 )
  659. {
  660. if( alpha2 + val > 255 )
  661. alpha2 = 255;
  662. else
  663. alpha2 += val;
  664. ret = 1;
  665. }
  666. if( ( !sichtbar || sounds->getAuswahl() < 0 ) && alpha2 != 0 )
  667. {
  668. if( alpha2 - val < 0 )
  669. alpha2 = 0;
  670. else
  671. alpha2 -= val;
  672. ret = 1;
  673. }
  674. return ret;
  675. }
  676. void KEDSoundSeite::doMausEreignis( MausEreignis & me )
  677. {
  678. if( !sichtbar )
  679. return;
  680. int ausw = sounds->getAuswahl();
  681. sounds->doMausEreignis( me );
  682. if( ausw != sounds->getAuswahl() && me.id == ME_RLinks )
  683. {
  684. if( sounds->getAuswahl() >= 0 )
  685. {
  686. if( sound )
  687. sound->stopSound();
  688. }
  689. else
  690. sounds->setAuswahl( ausw );
  691. }
  692. bool vera = me.verarbeitet;
  693. dateiLöschen->doMausEreignis( me );
  694. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  695. aktion = 4;
  696. vera = me.verarbeitet;
  697. neueDatei->doMausEreignis( me );
  698. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  699. aktion = 5;
  700. vera = me.verarbeitet;
  701. importieren->doMausEreignis( me );
  702. if( !vera && me.verarbeitet && me.id == ME_RLinks )
  703. {
  704. if( !importDialog )
  705. {
  706. importDialog = new DateiDialogTh();
  707. importDialog->setOpen( 1 );
  708. importDialog->setDateiTypAuswahl( 4 );
  709. importDialog->addDateiTyp( "WAV-Sound", "*.wav" );
  710. importDialog->addDateiTyp( "Alle Dateien", "*.*" );
  711. importDialog->start();
  712. }
  713. }
  714. if( sounds->getAuswahl() < 0 )
  715. return;
  716. vera = me.verarbeitet;
  717. play->doMausEreignis( me );
  718. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  719. {
  720. if( sound )
  721. sound->stopSound();
  722. aktion = 1;
  723. }
  724. vera = me.verarbeitet;
  725. soundLöschen->doMausEreignis( me );
  726. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  727. aktion = 2;
  728. }
  729. void KEDSoundSeite::render( Bild & zRObj )
  730. {
  731. if( !alpha )
  732. return;
  733. zRObj.setAlpha( alpha );
  734. sounds->render( zRObj );
  735. neueDatei->setPosition( 540, 490 );
  736. neueDatei->render( zRObj );
  737. dateiLöschen->setPosition( 540, 460 );
  738. dateiLöschen->render( zRObj );
  739. importieren->render( zRObj );
  740. zRObj.setAlpha( alpha2 );
  741. play->render( zRObj );
  742. soundLöschen->render( zRObj );
  743. zRObj.releaseAlpha();
  744. zRObj.releaseAlpha();
  745. }
  746. // constant
  747. Text *KEDSoundSeite::zSoundImportPfad() const
  748. {
  749. return importPfad;
  750. }
  751. Text *KEDSoundSeite::zSoundAuswahl() const
  752. {
  753. if( !sounds->zEintrag( sounds->getAuswahl() ) )
  754. return 0;
  755. return sounds->zEintrag( sounds->getAuswahl() )->zText();
  756. }
  757. // Reference Counting
  758. KEDSoundSeite *KEDSoundSeite::getThis()
  759. {
  760. ref++;
  761. return this;
  762. }
  763. KEDSoundSeite *KEDSoundSeite::release()
  764. {
  765. ref--;
  766. if( !ref )
  767. delete this;
  768. return 0;
  769. }
  770. bool kEDEditorNeuDateiOkME( void *p, void *obj, MausEreignis me )
  771. {
  772. if( p )
  773. return ( (KEDEditor *)p )->neuDateiOkME( me );
  774. else if( me.id == ME_RLinks )
  775. ( (Fenster *)obj )->removeStyle( Fenster::Style::Sichtbar );
  776. return 1;
  777. }
  778. // Inhalt der KEDEditor Klasse aus KEDEditor.h
  779. // Konstruktor
  780. KEDEditor::KEDEditor( Schrift * zSchrift )
  781. : Zeichnung()
  782. {
  783. neueDatei = initKnopf( 0, 0, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Neue Datei" );
  784. dateiLöschen = initKnopf( 0, 0, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Datei Löschen" );
  785. dateien = initAuswahlListe( 10, 10, 200, 510, zSchrift, AuswahlListe::Style::Normal, {} );
  786. bildSeite = new KEDBildSeite( zSchrift, neueDatei, dateiLöschen );
  787. modelSeite = new KEDModellSeite( zSchrift, neueDatei, dateiLöschen, (AuswahlListe *)dateien->getThis() );
  788. soundSeite = new KEDSoundSeite( zSchrift, neueDatei, dateiLöschen );
  789. neuDateiF = initFenster( 365, 145, 150, 120, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::BodyHintergrund | Fenster::Style::BodyHAlpha |
  790. Fenster::Style::Rahmen | Fenster::Style::Closable | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund |
  791. Fenster::Style::ClosingHAlpha | Fenster::Style::Titel | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::TitelBuffered, "Neue Datei" );
  792. neuDateiF->setKBgFarbe( 0xC0000000 );
  793. neuDateiF->setSBgFarbe( 0xC0000000 );
  794. neuDateiF->setTBgFarbe( 0xC0000000 );
  795. neuDateiF->setClosingMe( kEDEditorNeuDateiOkME );
  796. neuDateiTyp = initAuswahlBox( 10, 10, 130, 20, zSchrift, ABSTYLE, { "Ordner", "Bild (.ltdb)", "Modell 2D (.m2)", "Sound (.gsl)" } );
  797. neuDateiName = initTextFeld( 10, 40, 130, 20, zSchrift, TextFeld::Style::TextFeld, "Datei Name" );
  798. neuDateiOk = initKnopf( 25, 70, 100, 20, zSchrift, Knopf::Style::Normal | Knopf::Style::Sichtbar, "Erstellen" );
  799. neuDateiOk->setMausEreignisParameter( this );
  800. neuDateiOk->setMausEreignis( kEDEditorNeuDateiOkME );
  801. neuDateiF->addMember( neuDateiName->getThis() );
  802. neuDateiF->addMember( neuDateiOk->getThis() );
  803. neuDateiF->addMember( neuDateiTyp->getThis() );
  804. aktion = 0;
  805. sichtbar = 0;
  806. alpha = 0;
  807. alpha2 = 0;
  808. tickVal = 0;
  809. }
  810. // Destruktor
  811. KEDEditor::~KEDEditor()
  812. {
  813. dateien->release();
  814. bildSeite->release();
  815. modelSeite->release();
  816. soundSeite->release();
  817. neuDateiF->release();
  818. neuDateiTyp->release();
  819. neuDateiName->release();
  820. neuDateiOk->release();
  821. neueDatei->release();
  822. dateiLöschen->release();
  823. }
  824. // nicht constant
  825. int KEDEditor::getAktion()
  826. {
  827. int ret = aktion;
  828. aktion = 0;
  829. return ret;
  830. }
  831. bool KEDEditor::neuDateiOkME( MausEreignis & me )
  832. {
  833. if( me.id == ME_RLinks )
  834. {
  835. neuDateiF->removeStyle( Fenster::Style::Sichtbar );
  836. aktion = 1;
  837. }
  838. return 1;
  839. }
  840. void KEDEditor::setDateiListe( RCArray< Text > * list )
  841. {
  842. hauptScreen->lock();
  843. dateien->deSelect();
  844. while( dateien->getEintragAnzahl() )
  845. dateien->removeEintrag( 0 );
  846. int anz = list->getEintragAnzahl();
  847. for( int i = 0; i < anz; i++ )
  848. dateien->addEintrag( list->get( i ) );
  849. bildSeite->setSichtbar( 0 );
  850. soundSeite->setSichtbar( 0 );
  851. modelSeite->setSichtbar( 0 );
  852. neuDateiF->removeStyle( Fenster::Style::Sichtbar );
  853. list->release();
  854. hauptScreen->unlock();
  855. }
  856. void KEDEditor::setBildListe( RCArray< Text > * list )
  857. {
  858. soundSeite->setSichtbar( 0 );
  859. modelSeite->setSichtbar( 0 );
  860. bildSeite->setBildListe( list );
  861. bildSeite->setSichtbar( 1 );
  862. }
  863. void KEDEditor::setSoundListe( RCArray< Text > * list )
  864. {
  865. modelSeite->setSichtbar( 0 );
  866. bildSeite->setSichtbar( 0 );
  867. soundSeite->setSoundListe( list );
  868. soundSeite->setSichtbar( 1 );
  869. }
  870. void KEDEditor::setModel2dListe( RCArray< Text > * list )
  871. {
  872. bildSeite->setSichtbar( 0 );
  873. soundSeite->setSichtbar( 0 );
  874. modelSeite->setModelListe( list );
  875. modelSeite->setSichtbar( 1 );
  876. }
  877. void KEDEditor::setBild( Bild * b )
  878. {
  879. bildSeite->setBild( b );
  880. }
  881. void KEDEditor::setSound( GSL::GSLSoundV * s )
  882. {
  883. soundSeite->setSound( s );
  884. }
  885. void KEDEditor::setModel2d( Model2DData * d )
  886. {
  887. modelSeite->setModel( d );
  888. }
  889. void KEDEditor::setSichtbar( bool s )
  890. {
  891. sichtbar = s;
  892. }
  893. bool KEDEditor::tick( double tv )
  894. {
  895. int ak = bildSeite->getAktion();
  896. switch( ak )
  897. {
  898. case 1: // Bild Auswählen
  899. aktion = 4;
  900. break;
  901. case 2: // Bild Löschen
  902. aktion = 5;
  903. break;
  904. case 3: // Importieren
  905. aktion = 6;
  906. break;
  907. case 4: // Datei Löschen
  908. aktion = 3;
  909. break;
  910. case 5: // Neue Datei
  911. neuDateiF->addStyle( Fenster::Style::Sichtbar );
  912. break;
  913. }
  914. ak = modelSeite->getAktion();
  915. switch( ak )
  916. {
  917. case 1: // Model Auswählen
  918. aktion = 7;
  919. break;
  920. case 2: // Model Löschen
  921. aktion = 8;
  922. break;
  923. case 3: // Model speichern
  924. aktion = 9;
  925. break;
  926. case 4: // Neues Modell
  927. aktion = 10;
  928. break;
  929. case 5: // Datei Löschen
  930. aktion = 3;
  931. break;
  932. case 6: // Neue Datei
  933. neuDateiF->addStyle( Fenster::Style::Sichtbar );
  934. break;
  935. }
  936. ak = soundSeite->getAktion();
  937. switch( ak )
  938. {
  939. case 1: // Sound Abspielen
  940. aktion = 11;
  941. break;
  942. case 2: // Sound Löschen
  943. aktion = 12;
  944. break;
  945. case 3: // Importieren
  946. aktion = 13;
  947. break;
  948. case 4: // Datei Löschen
  949. aktion = 3;
  950. break;
  951. case 5: // Neue Datei
  952. neuDateiF->addStyle( Fenster::Style::Sichtbar );
  953. break;
  954. }
  955. bool ret = dateien->tick( tv );
  956. ret |= bildSeite->tick( tv );
  957. ret |= soundSeite->tick( tv );
  958. ret |= modelSeite->tick( tv );
  959. ret |= neuDateiF->tick( tv );
  960. if( dateien->getAuswahl() < 0 )
  961. {
  962. ret |= neueDatei->tick( tv );
  963. if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
  964. ret |= dateiLöschen->tick( tv );
  965. }
  966. tickVal += tv * 150;
  967. int val = 0;
  968. if( tickVal > 1 )
  969. {
  970. val = (int)tickVal;
  971. tickVal -= val;
  972. }
  973. else
  974. return ret;
  975. if( sichtbar && neuDateiF->hatStyle( Fenster::Style::Sichtbar ) && alpha2 > 100 )
  976. {
  977. if( alpha2 - val < 100 )
  978. alpha2 = 100;
  979. else
  980. alpha2 -= val;
  981. ret = 1;
  982. }
  983. if( sichtbar && neuDateiF->hatStyleNicht( Fenster::Style::Sichtbar ) && alpha2 < 255 )
  984. {
  985. if( alpha2 + val > 255 )
  986. alpha2 = 255;
  987. else
  988. alpha2 += val;
  989. ret = 1;
  990. }
  991. if( sichtbar && alpha != 255 )
  992. {
  993. if( alpha + val > 255 )
  994. alpha = 255;
  995. else
  996. alpha += val;
  997. ret = 1;
  998. }
  999. if( !sichtbar && alpha != 0 )
  1000. {
  1001. if( alpha - val < 0 )
  1002. alpha = 0;
  1003. else
  1004. alpha -= val;
  1005. ret = 1;
  1006. }
  1007. return ret;
  1008. }
  1009. void KEDEditor::doMausEreignis( MausEreignis & me )
  1010. {
  1011. if( !sichtbar )
  1012. return;
  1013. if( neuDateiF->hatStyle( Fenster::Style::Sichtbar ) )
  1014. {
  1015. neuDateiF->doMausEreignis( me );
  1016. return;
  1017. }
  1018. int ausw = dateien->getAuswahl();
  1019. dateien->doMausEreignis( me );
  1020. if( ausw != dateien->getAuswahl() && me.id == ME_RLinks )
  1021. {
  1022. if( dateien->getAuswahl() >= 0 )
  1023. aktion = 2;
  1024. else
  1025. dateien->setAuswahl( ausw );
  1026. }
  1027. bildSeite->doMausEreignis( me );
  1028. soundSeite->doMausEreignis( me );
  1029. modelSeite->doMausEreignis( me );
  1030. if( dateien->getAuswahl() < 0 )
  1031. {
  1032. bool vera = me.verarbeitet;
  1033. neueDatei->doMausEreignis( me );
  1034. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  1035. neuDateiF->addStyle( Fenster::Style::Sichtbar );
  1036. if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
  1037. {
  1038. vera = me.verarbeitet;
  1039. dateiLöschen->doMausEreignis( me );
  1040. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  1041. aktion = 3;
  1042. }
  1043. }
  1044. }
  1045. void KEDEditor::doTastaturEreignis( TastaturEreignis & te )
  1046. {
  1047. if( neuDateiF->hatStyle( Fenster::Style::Sichtbar ) )
  1048. {
  1049. neuDateiF->doTastaturEreignis( te );
  1050. return;
  1051. }
  1052. modelSeite->doTastaturEreignis( te );
  1053. }
  1054. void KEDEditor::render( Bild & zRObj )
  1055. {
  1056. zRObj.setAlpha( alpha );
  1057. zRObj.setAlpha( alpha2 );
  1058. dateien->render( zRObj );
  1059. bildSeite->render( zRObj );
  1060. modelSeite->render( zRObj );
  1061. soundSeite->render( zRObj );
  1062. if( dateien->getAuswahl() < 0 )
  1063. {
  1064. neueDatei->setPosition( 770, 440 );
  1065. neueDatei->render( zRObj );
  1066. if( dateien->getEintragAnzahl() > 0 && dateien->zEintrag( 0 )->zText()->istGleich( ".." ) )
  1067. {
  1068. dateiLöschen->setPosition( 770, 410 );
  1069. dateiLöschen->render( zRObj );
  1070. }
  1071. }
  1072. zRObj.releaseAlpha();
  1073. neuDateiF->render( zRObj );
  1074. zRObj.releaseAlpha();
  1075. }
  1076. // constant
  1077. Text *KEDEditor::zBildImportPfad() const
  1078. {
  1079. return bildSeite->zBildImportPfad();
  1080. }
  1081. Text *KEDEditor::zSoundImportPfad() const
  1082. {
  1083. return soundSeite->zSoundImportPfad();
  1084. }
  1085. Text *KEDEditor::zDateiAuswahl() const
  1086. {
  1087. if( !dateien->zEintrag( dateien->getAuswahl() ) )
  1088. return 0;
  1089. return dateien->zEintrag( dateien->getAuswahl() )->zText();
  1090. }
  1091. Text *KEDEditor::zSoundAuswahl() const
  1092. {
  1093. return soundSeite->zSoundAuswahl();
  1094. }
  1095. Text *KEDEditor::zModel2dAuswahl() const
  1096. {
  1097. return modelSeite->zModelAuswahl();
  1098. }
  1099. Model2DData *KEDEditor::getModelData() const
  1100. {
  1101. return modelSeite->getModelData();
  1102. }
  1103. Text *KEDEditor::zNeuModelName() const
  1104. {
  1105. return modelSeite->zNeuModelName();
  1106. }
  1107. Text *KEDEditor::zBildAuswahl() const
  1108. {
  1109. return bildSeite->zBildAuswahl();
  1110. }
  1111. int KEDEditor::getNeuDateiTyp() const
  1112. {
  1113. return neuDateiTyp->getAuswahl();
  1114. }
  1115. Text *KEDEditor::zNeuDateiName() const
  1116. {
  1117. return neuDateiName->zText();
  1118. }
  1119. bool KEDEditor::istSichtbar() const
  1120. {
  1121. return sichtbar;
  1122. }