KEDEditor.cpp 32 KB

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