Start.cpp 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  1. #include <main.h>
  2. #include <Fenster.h>
  3. #include <Punkt.h>
  4. #include <Bildschirm.h>
  5. #include <RenderThread.h>
  6. #include <Knopf.h>
  7. #include <DateiSystem.h>
  8. #include <AuswahlBox.h>
  9. #include <Liste.h>
  10. #include <Schrift.h>
  11. #include <Bild.h>
  12. #include <Text.h>
  13. #include "Initialisierung.h"
  14. #include <MausEreignis.h>
  15. #include <TastaturEreignis.h>
  16. #include <Scroll.h>
  17. #include <AlphaFeld.h>
  18. #include <Rahmen.h>
  19. #include <Datei.h>
  20. #include <DateiDialog.h>
  21. #include <AsynchronCall.h>
  22. #include <Dialog.h>
  23. using namespace Framework;
  24. struct Variablen
  25. {
  26. // Normale Schrift
  27. Schrift *nSchrift;
  28. // Schrift zum Bearbeiten laden
  29. TextFeld *sPfad;
  30. Knopf *sLaden;
  31. Schrift *schrift;
  32. LTDSDatei *sDatei;
  33. // Auswählen der zu Bearbeitenden Zeichen und Größen
  34. AuswahlListe *größe;
  35. AuswahlListe *zeichen;
  36. // Löschen
  37. Knopf *gLöschen;
  38. Knopf *zLöschen;
  39. // Hinzufügen
  40. Knopf *neuGröße;
  41. Knopf *neuZeichen;
  42. // Bearbeiten
  43. Knopf *editZeichen;
  44. // Schrift Vorschau
  45. TextFeld *vorschau;
  46. TextFeld *vFgT;
  47. TextFeld *vFg;
  48. TextFeld *vBgT;
  49. TextFeld *vBg;
  50. Knopf *vBgB;
  51. TextFeld *vGrößeT;
  52. TextFeld *vGröße;
  53. AuswahlBox *vStyle;
  54. // Neue Größe erstellen
  55. Fenster *neuGrößeF;
  56. TextFeld *nGGrößeT;
  57. TextFeld *nGGröße;
  58. Knopf *nGOk;
  59. // Neues Zeichen erstellen
  60. Fenster *neuZeichenF;
  61. TextFeld *nZZeichenT;
  62. TextFeld *nZZeichen;
  63. TextFeld *nZVorschau;
  64. TextFeld *nZBreiteT;
  65. TextFeld *nZBreite;
  66. TextFeld *nZHöheT;
  67. TextFeld *nZHöhe;
  68. Knopf *nZOk;
  69. // Zeichen Editor
  70. Fenster *editF;
  71. TextFeld *editFgT;
  72. TextFeld *editFg;
  73. TextFeld *editBgT;
  74. TextFeld *editBg;
  75. TextFeld *editAlphaT;
  76. TextFeld *editAlpha;
  77. BildZ *editObj;
  78. Knopf *editSpeichern;
  79. };
  80. void beenden( void *p, void *obj )
  81. {
  82. StopNachrichtenSchleife( ( (WFenster *)obj )->getFensterHandle() );
  83. }
  84. void SetErlaubt( bool e, Variablen *var )
  85. {
  86. if( !e )
  87. {
  88. var->sLaden->removeStyle( Knopf::Style::Erlaubt );
  89. var->größe->removeStyle( AuswahlListe::Style::Erlaubt );
  90. var->zeichen->removeStyle( AuswahlListe::Style::Erlaubt );
  91. var->neuGröße->removeStyle( Knopf::Style::Erlaubt );
  92. var->gLöschen->removeStyle( Knopf::Style::Erlaubt );
  93. var->editZeichen->removeStyle( Knopf::Style::Erlaubt );
  94. var->zLöschen->removeStyle( Knopf::Style::Erlaubt );
  95. var->neuZeichen->removeStyle( Knopf::Style::Erlaubt );
  96. }
  97. else
  98. {
  99. var->sLaden->addStyle( Knopf::Style::Erlaubt );
  100. var->größe->addStyle( AuswahlListe::Style::Erlaubt );
  101. var->zeichen->setStyle( AuswahlListe::Style::Erlaubt, var->größe->getAuswahl() >= 0 );
  102. var->neuGröße->addStyle( AuswahlListe::Style::Erlaubt );
  103. var->gLöschen->setStyle( Knopf::Style::Erlaubt, var->größe->getAuswahl() >= 0 );
  104. var->editZeichen->setStyle( Knopf::Style::Erlaubt, var->zeichen->getAuswahl() >= 0 );
  105. var->zLöschen->setStyle( Knopf::Style::Erlaubt, var->zeichen->getAuswahl() >= 0 );
  106. var->neuZeichen->setStyle( Knopf::Style::Erlaubt, var->größe->getAuswahl() >= 0 );
  107. }
  108. var->vorschau->addStyle( TextFeld::Style::Erlaubt );
  109. }
  110. void SchriftLaden( Variablen *var )
  111. {
  112. if( var->schrift )
  113. var->schrift->release();
  114. var->schrift = var->sDatei->ladeSchrift();
  115. if( !var->schrift )
  116. var->schrift = new Schrift();
  117. var->vorschau->setSchriftZ( dynamic_cast<Schrift *>( var->schrift->getThis() ) );
  118. int anz = var->zeichen->getEintragAnzahl();
  119. for( int i = 0; i < anz; i++ )
  120. var->zeichen->removeEintrag( 0 );
  121. var->zeichen->deSelect();
  122. anz = var->größe->getEintragAnzahl();
  123. for( int i = 0; i < anz; i++ )
  124. var->größe->removeEintrag( 0 );
  125. var->größe->deSelect();
  126. anz = var->schrift->getAlphabetAnzahl();
  127. for( int i = 0; i < anz; i++ )
  128. {
  129. Text n = "";
  130. n += var->schrift->zAlphabetI( i )->getSchriftSize();
  131. var->größe->addEintrag( n );
  132. var->größe->zEintrag( i )->setSchriftZ( dynamic_cast<Schrift *>( var->nSchrift->getThis() ) );
  133. var->größe->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
  134. var->größe->zEintrag( i )->setSize( 0, 20 );
  135. }
  136. SetErlaubt( 1, var );
  137. }
  138. bool SLadenME( void *p, void *obj, MausEreignis me )
  139. {
  140. if( me.id == ME_RLinks )
  141. {
  142. Variablen *var = (Variablen *)p;
  143. if( !DateiExistiert( var->sPfad->getText() ) )
  144. DateiPfadErstellen( var->sPfad->getText() );
  145. var->sDatei->setPfad( var->sPfad->getText() );
  146. var->sDatei->leseDaten();
  147. SchriftLaden( var );
  148. }
  149. return 1;
  150. }
  151. bool GrößeME( void *p, void *obj, MausEreignis me )
  152. {
  153. if( me.id == ME_RLinks )
  154. {
  155. Variablen *var = (Variablen *)p;
  156. int anz = var->zeichen->getEintragAnzahl();
  157. for( int i = 0; i < anz; i++ )
  158. var->zeichen->removeEintrag( 0 );
  159. var->zeichen->deSelect();
  160. var->editZeichen->removeStyle( Knopf::Style::Erlaubt );
  161. var->zLöschen->removeStyle( Knopf::Style::Erlaubt );
  162. if( var->größe->getKlickEintrag( me.my ) < 0 )
  163. {
  164. var->zeichen->removeStyle( AuswahlListe::Style::Erlaubt );
  165. var->neuZeichen->removeStyle( Knopf::Style::Erlaubt );
  166. var->gLöschen->removeStyle( Knopf::Style::Erlaubt );
  167. return 1;
  168. }
  169. Alphabet *tmp = var->schrift->zAlphabet( (int)*var->größe->zEintrag( var->größe->getKlickEintrag( me.my ) )->zText() );
  170. for( int c = 1; c < 256; c++ )
  171. {
  172. if( !tmp->hatBuchstabe( (unsigned char)c ) )
  173. continue;
  174. Text n = "";
  175. n.append( (char)c );
  176. n += " (";
  177. n += (int)c;
  178. n += ")";
  179. var->zeichen->addEintrag( n );
  180. var->zeichen->zEintrag( var->zeichen->getEintragAnzahl() - 1 )->setSchriftZ( dynamic_cast<Schrift *>( var->nSchrift->getThis() ) );
  181. var->zeichen->zEintrag( var->zeichen->getEintragAnzahl() - 1 )->setSchriftFarbe( 0xFFFFFFFF );
  182. var->zeichen->zEintrag( var->zeichen->getEintragAnzahl() - 1 )->setSize( 0, 20 );
  183. }
  184. var->zeichen->addStyle( AuswahlListe::Style::Erlaubt );
  185. var->neuZeichen->addStyle( Knopf::Style::Erlaubt );
  186. var->gLöschen->addStyle( Knopf::Style::Erlaubt );
  187. }
  188. return 1;
  189. }
  190. bool ZeichenME( void *p, void *obj, MausEreignis me )
  191. {
  192. if( me.id == ME_RLinks )
  193. {
  194. Variablen *var = (Variablen *)p;
  195. if( var->zeichen->getKlickEintrag( me.my ) < 0 )
  196. {
  197. var->editZeichen->removeStyle( Knopf::Style::Erlaubt );
  198. var->zLöschen->removeStyle( Knopf::Style::Erlaubt );
  199. }
  200. else
  201. {
  202. var->editZeichen->addStyle( Knopf::Style::Erlaubt );
  203. var->zLöschen->addStyle( Knopf::Style::Erlaubt );
  204. }
  205. }
  206. return 1;
  207. }
  208. bool GLöschenME( void *p, void *obj, MausEreignis me )
  209. {
  210. if( me.id == ME_RLinks )
  211. {
  212. Variablen *var = (Variablen *)p;
  213. if( var->größe->getAuswahl() < 0 )
  214. return 1;
  215. var->sDatei->löscheSchrifrGröße( (int)*var->größe->zEintrag( var->größe->getAuswahl() )->zText() );
  216. SchriftLaden( var );
  217. }
  218. return 1;
  219. }
  220. bool NeuGrößeME( void *p, void *obj, MausEreignis me )
  221. {
  222. if( me.id == ME_RLinks )
  223. {
  224. Variablen *var = (Variablen *)p;
  225. var->neuGrößeF->addStyle( Fenster::Style::Sichtbar );
  226. SetErlaubt( 0, var );
  227. }
  228. return 1;
  229. }
  230. bool NeuGrößeFME( void *p, void *obj, MausEreignis me )
  231. {
  232. if( me.id == ME_RLinks )
  233. {
  234. Variablen *var = (Variablen *)p;
  235. var->neuGrößeF->removeStyle( Fenster::Style::Sichtbar );
  236. SetErlaubt( 1, var );
  237. }
  238. return 1;
  239. }
  240. bool NGOkME( void *p, void *obj, MausEreignis me )
  241. {
  242. if( me.id == ME_RLinks )
  243. {
  244. Variablen *var = (Variablen *)p;
  245. if( (int)*var->nGGröße->zText() <= 0 )
  246. return 1;
  247. Alphabet *a = new Alphabet();
  248. a->setSchriftSize( (int)*var->nGGröße->zText() );
  249. var->sDatei->addSchriftgröße( a );
  250. var->neuGrößeF->removeStyle( Fenster::Style::Sichtbar );
  251. SchriftLaden( var );
  252. }
  253. return 1;
  254. }
  255. bool VFgTE( void *p, void *obj, TastaturEreignis te )
  256. {
  257. bool ret = te.taste == T_Enter;
  258. Variablen *var = (Variablen *)p;
  259. if( te.taste >= '0' && te.taste <= '9' && var->vFg->zText()->getLength() < 6 )
  260. ret = 1;
  261. if( te.taste >= 'A' && te.taste <= 'F' && var->vFg->zText()->getLength() < 6 )
  262. ret = 1;
  263. if( te.taste >= 'a' && te.taste <= 'f' && var->vFg->zText()->getLength() < 6 )
  264. ret = 1;
  265. if( te.taste == T_Links || te.taste == T_Rechts || te.taste == T_BackSpace || te.taste == T_Entf )
  266. ret = 1;
  267. if( !ret )
  268. return 0;
  269. Text fgT = "0xFF";
  270. fgT += var->vFg->zText()->getText();
  271. for( int i = fgT.getLength(); i < 10; i++ )
  272. fgT += "0";
  273. var->vorschau->setSchriftFarbe( 0xFF000000 | (int)fgT );
  274. return ret;
  275. }
  276. bool VBgTE( void *p, void *obj, TastaturEreignis te )
  277. {
  278. bool ret = te.taste == T_Enter;
  279. Variablen *var = (Variablen *)p;
  280. if( te.taste >= '0' && te.taste <= '9' && var->vBg->zText()->getLength() < 6 )
  281. ret = 1;
  282. if( te.taste >= 'A' && te.taste <= 'F' && var->vBg->zText()->getLength() < 6 )
  283. ret = 1;
  284. if( te.taste >= 'a' && te.taste <= 'f' && var->vBg->zText()->getLength() < 6 )
  285. ret = 1;
  286. if( te.taste == T_Links || te.taste == T_Rechts || te.taste == T_BackSpace || te.taste == T_Entf )
  287. ret = 1;
  288. if( !ret )
  289. return 0;
  290. Text bgT = "0xFF";
  291. bgT += var->vBg->zText()->getText();
  292. for( int i = bgT.getLength(); i < 10; i++ )
  293. bgT += "0";
  294. var->vorschau->setHintergrundFarbe( 0xFF000000 | (int)bgT );
  295. return ret;
  296. }
  297. bool VBgBME( void *p, void *obj, MausEreignis me )
  298. {
  299. if( me.id == ME_RLinks )
  300. {
  301. if( ( (Variablen *)p )->vorschau->hatStyle( TextFeld::Style::HBild ) )
  302. ( (Variablen *)p )->vorschau->removeStyle( TextFeld::Style::HBild );
  303. else
  304. {
  305. ( (Variablen *)p )->vorschau->addStyle( TextFeld::Style::HBild );
  306. new AsynchronCall( [p]()
  307. {
  308. DateiDialog *dialog = new DateiDialog();
  309. dialog->addDateiTyp( "Bild Datei", "*.ltdb" );
  310. Text *path = dialog->anzeigen( 1 );
  311. if( path )
  312. {
  313. LTDBDatei dat;
  314. dat.setDatei( path );
  315. dat.leseDaten( 0 );
  316. if( dat.getBildAnzahl() )
  317. {
  318. MultiplChoiceDialog *choice = new MultiplChoiceDialog();
  319. for( auto i = dat.zBildListe()->getIterator(); i; i++ )
  320. {
  321. choice->addChoice( i->getText(), i._ );
  322. }
  323. Text *zBild = (Text *)choice->anzeigen( ( (Variablen *)p )->nSchrift );
  324. if( zBild )
  325. {
  326. Bild *b = dat.laden( 0, dynamic_cast<Text *>( zBild->getThis() ) );
  327. ( (Variablen *)p )->vorschau->setHintergrundBildZ( b );
  328. }
  329. choice->release();
  330. }
  331. }
  332. dialog->release();
  333. } );
  334. }
  335. }
  336. return 1;
  337. }
  338. bool VGrößeTE( void *p, void *obj, TastaturEreignis te )
  339. {
  340. bool ret = te.taste == T_Enter;
  341. Variablen *var = (Variablen *)p;
  342. if( te.taste >= '0' && te.taste <= '9' && var->vGröße->zText()->getLength() < 3 )
  343. ret = 1;
  344. if( te.taste == T_Links || te.taste == T_Rechts || te.taste == T_BackSpace || te.taste == T_Entf )
  345. ret = 1;
  346. if( !ret )
  347. return 0;
  348. var->vorschau->setSchriftSize( (unsigned char)(int)*var->vGröße->zText() );
  349. var->vorschau->updateVScroll();
  350. return ret;
  351. }
  352. bool NeuZeichenME( void *p, void *obj, MausEreignis me )
  353. {
  354. if( me.id == ME_RLinks )
  355. {
  356. Variablen *var = (Variablen *)p;
  357. if( var->größe->getAuswahl() < 0 )
  358. return 1;
  359. var->neuZeichenF->addStyle( Fenster::Style::Sichtbar );
  360. SetErlaubt( 0, var );
  361. }
  362. return 1;
  363. }
  364. bool NeuZeichenFME( void *p, void *obj, MausEreignis me )
  365. {
  366. if( me.id == ME_RLinks )
  367. {
  368. Variablen *var = (Variablen *)p;
  369. var->neuZeichenF->removeStyle( Fenster::Style::Sichtbar );
  370. SetErlaubt( 1, var );
  371. }
  372. return 1;
  373. }
  374. bool NZZeichenTE( void *p, void *obj, TastaturEreignis te )
  375. {
  376. bool ret = te.taste == T_Enter;
  377. Variablen *var = (Variablen *)p;
  378. if( te.taste >= '0' && te.taste <= '9' && var->nZZeichen->zText()->getLength() < 3 )
  379. ret = 1;
  380. if( te.taste == T_Links || te.taste == T_Rechts || te.taste == T_BackSpace || te.taste == T_Entf )
  381. ret = 1;
  382. if( !ret )
  383. return 0;
  384. Text v;
  385. v.append( (char)(int)*var->nZZeichen->zText() );
  386. var->nZVorschau->setText( v );
  387. return 1;
  388. }
  389. bool NZOkME( void *p, void *obj, MausEreignis me )
  390. {
  391. if( me.id == ME_RLinks )
  392. {
  393. Variablen *var = (Variablen *)p;
  394. if( (int)*var->nZBreite->zText() <= 0 || (int)*var->nZHöhe->zText() <= 0 || (int)*var->nZZeichen->zText() <= 0 || (int)*var->nZZeichen->zText() > 255 )
  395. return 1;
  396. Buchstabe *b = new Buchstabe();
  397. b->NeuBuchstabe( Punkt( (int)*var->nZBreite->zText(), (int)*var->nZHöhe->zText() ) );
  398. var->sDatei->addBuchstabe( *var->größe->zEintrag( var->größe->getAuswahl() )->zText(), b, (unsigned char)(int)*var->nZZeichen->zText() );
  399. var->neuZeichenF->removeStyle( Fenster::Style::Sichtbar );
  400. int ausw = var->größe->getAuswahl();
  401. SchriftLaden( var );
  402. MausEreignis me;
  403. me.id = ME_RLinks;
  404. me.mx = 20;
  405. me.my = 50 + ausw * 20 - var->größe->getVertikalScrollPos();
  406. me.verarbeitet = 0;
  407. var->größe->doPublicMausEreignis( me );
  408. }
  409. return 1;
  410. }
  411. bool ZLöschenME( void *p, void *obj, MausEreignis me )
  412. {
  413. if( me.id == ME_RLinks )
  414. {
  415. Variablen *var = (Variablen *)p;
  416. if( var->größe->getAuswahl() < 0 || var->zeichen->getAuswahl() < 0 )
  417. return 1;
  418. var->sDatei->löscheBuchstabe( *var->größe->zEintrag( var->größe->getAuswahl() )->zText(),
  419. (unsigned char)var->zeichen->zEintrag( var->zeichen->getAuswahl() )->zText()->getText()[ 0 ] );
  420. int ausw = var->größe->getAuswahl();
  421. SchriftLaden( var );
  422. MausEreignis me;
  423. me.id = ME_RLinks;
  424. me.mx = 20;
  425. me.my = 50 + ausw * 20 - var->größe->getVertikalScrollPos();
  426. me.verarbeitet = 0;
  427. var->größe->doPublicMausEreignis( me );
  428. }
  429. return 1;
  430. }
  431. bool EditZeichenME( void *p, void *obj, MausEreignis me )
  432. {
  433. if( me.id == ME_RLinks )
  434. {
  435. Variablen *var = (Variablen *)p;
  436. if( var->größe->getAuswahl() < 0 || var->zeichen->getAuswahl() < 0 )
  437. return 1;
  438. unsigned char zeichen = (unsigned char)var->zeichen->zEintrag( var->zeichen->getAuswahl() )->zText()->getText()[ 0 ];
  439. int größe = *var->größe->zEintrag( var->größe->getAuswahl() )->zText();
  440. Alphabet *a = var->schrift->zAlphabet( größe );
  441. if( !a || !a->hatBuchstabe( zeichen ) )
  442. return 1;
  443. Bild *editB = new Bild();
  444. editB->neuBild( a->zBuchstabe( zeichen )->getSize().x * 10, a->zBuchstabe( zeichen )->getSize().y * 10, 0 );
  445. var->editObj->setSize( 440 < editB->getBreite() + 2 ? 440 : editB->getBreite() + 2, 390 < editB->getHeight() + 2 ? 390 : editB->getHeight() + 2 );
  446. var->editObj->setStyle( BildZ::Style::HScroll, 440 < editB->getBreite() + 2 );
  447. var->editObj->setStyle( BildZ::Style::VScroll, 390 < editB->getHeight() + 2 );
  448. var->editObj->setBildZ( editB );
  449. var->editF->addStyle( Fenster::Style::Sichtbar );
  450. SetErlaubt( 0, var );
  451. }
  452. return 1;
  453. }
  454. bool EditFME( void *p, void *obj, MausEreignis me )
  455. {
  456. if( me.id == ME_RLinks )
  457. {
  458. Variablen *var = (Variablen *)p;
  459. var->editF->removeStyle( Fenster::Style::Sichtbar );
  460. int gAusw = var->größe->getAuswahl();
  461. int zAusw = var->zeichen->getAuswahl();
  462. SchriftLaden( var );
  463. MausEreignis me;
  464. me.id = ME_RLinks;
  465. me.mx = 20;
  466. me.my = 50 + gAusw * 20 - var->größe->getVertikalScrollPos();
  467. me.verarbeitet = 0;
  468. var->größe->doPublicMausEreignis( me );
  469. me.id = ME_RLinks;
  470. me.mx = 140;
  471. me.my = 50 + zAusw * 20 - var->zeichen->getVertikalScrollPos();
  472. me.verarbeitet = 0;
  473. var->zeichen->doPublicMausEreignis( me );
  474. }
  475. return 1;
  476. }
  477. bool EditObjME( void *p, void *obj, MausEreignis me )
  478. {
  479. if( me.id == ME_PLinks )
  480. {
  481. Variablen *var = (Variablen *)p;
  482. if( var->editObj->hatStyle( BildZ::Style::VScroll ) && me.mx >= 425 )
  483. return 1;
  484. if( var->editObj->hatStyle( BildZ::Style::HScroll ) && me.my >= 375 )
  485. return 1;
  486. Text aT = "0x";
  487. aT += var->editAlpha->zText()->getText();
  488. for( int i = aT.getLength(); i < 4; i++ )
  489. aT += "0";
  490. int a = aT;
  491. if( a < 0 || a > 255 )
  492. return 1;
  493. int px = ( me.mx + var->editObj->getHorizontalScrollPos() ) / 10;
  494. int py = ( me.my + var->editObj->getVertikalScrollPos() ) / 10;
  495. Buchstabe *zeichen = var->schrift->zAlphabet( *var->größe->zEintrag( var->größe->getAuswahl() )->zText() )->zBuchstabe(
  496. (unsigned char)var->zeichen->zEintrag( var->zeichen->getAuswahl() )->zText()->getText()[ 0 ] );
  497. zeichen->getBuff()[ px + py * zeichen->getSize().x ] = (unsigned char)a;
  498. var->editObj->setRender();
  499. }
  500. return 1;
  501. }
  502. bool EditSpeichernME( void *p, void *obj, MausEreignis me )
  503. {
  504. if( me.id == ME_RLinks )
  505. {
  506. Variablen *var = (Variablen *)p;
  507. int gr = *var->größe->zEintrag( var->größe->getAuswahl() )->zText();
  508. unsigned char z = (unsigned char)var->zeichen->zEintrag( var->zeichen->getAuswahl() )->zText()->getText()[ 0 ];
  509. Buchstabe *zeichen = var->schrift->zAlphabet( gr )->getBuchstabe( z );
  510. var->sDatei->löscheBuchstabe( gr, z );
  511. var->sDatei->addBuchstabe( gr, zeichen, z );
  512. }
  513. return 1;
  514. }
  515. bool TestME( void *p, void *obj, MausEreignis me )
  516. {
  517. if( me.id == ME_PLinks )
  518. {
  519. return 1;
  520. }
  521. return 1;
  522. }
  523. void renderE( void *p, void *obj, Bild *zRObj )
  524. {
  525. Variablen *var = (Variablen *)p;
  526. if( var->editF->hatStyle( Fenster::Style::Sichtbar ) )
  527. {
  528. Buchstabe *zeichen = var->schrift->zAlphabet( *var->größe->zEintrag( var->größe->getAuswahl() )->zText() )->zBuchstabe(
  529. (unsigned char)var->zeichen->zEintrag( var->zeichen->getAuswahl() )->zText()->getText()[ 0 ] );
  530. Text fgT = "0x00";
  531. fgT += var->editFg->zText()->getText();
  532. for( int i = fgT.getLength(); i < 10; i++ )
  533. fgT += "0";
  534. int fg = fgT;
  535. Text bgT = "0xFF";
  536. bgT += var->editBg->zText()->getText();
  537. for( int i = bgT.getLength(); i < 10; i++ )
  538. bgT += "0";
  539. var->editObj->zBild()->fillRegion( 0, 0, var->editObj->zBild()->getBreite(), var->editObj->zBild()->getHeight(), bgT );
  540. for( int i = 0; i < zeichen->getSize().x; i++ )
  541. {
  542. for( int j = 0; j < zeichen->getSize().y; j++ )
  543. var->editObj->zBild()->alphaRegion( i * 10, j * 10, 10, 10, ( zeichen->getBuff()[ i + j * zeichen->getSize().x ] << 24 ) | fg );
  544. }
  545. }
  546. }
  547. int KSGStart Framework::Start( Startparam p )
  548. {
  549. Variablen var;
  550. WNDCLASS wc = F_Normal( p.hinst );
  551. wc.lpszClassName = "Schrift Editor 2.0";
  552. WFenster *f = new WFenster();
  553. f->setVSchließAktion( beenden );
  554. f->setMausAktion( TestME );
  555. f->setTastaturAktion( _ret1TE );
  556. f->erstellen( WS_OVERLAPPEDWINDOW, wc );
  557. f->setSize( 750, 730 );
  558. f->setPosition( Bildschirmmitte( dynamic_cast<WFenster *>( f->getThis() ) ) );
  559. f->setVerschiebbar( 1 );
  560. f->setAnzeigeModus( 1 );
  561. Bildschirm *b = new Bildschirm3D( dynamic_cast<WFenster *>( f->getThis() ) );
  562. f->setBildschirm( dynamic_cast<Bildschirm *>( b->getThis() ) );
  563. b->update();
  564. RenderTh *r = new RenderTh();
  565. r->setBildschirm( dynamic_cast<Bildschirm *>( b->getThis() ) );
  566. r->beginn();
  567. LTDSDatei *sND = new LTDSDatei();
  568. sND->setPfad( new Text( "../data/normal.ltds" ) );
  569. sND->leseDaten();
  570. var.nSchrift = sND->ladeSchrift();
  571. sND->release();
  572. var.schrift = 0;
  573. var.sDatei = new LTDSDatei();
  574. var.sPfad = initTextFeld( 10, 10, 620, 20, var.nSchrift, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "LTDS Datei Pfad" );
  575. b->addMember( var.sPfad );
  576. var.sLaden = initKnopf( 640, 10, 100, 20, var.nSchrift, Knopf::Style::Sichtbar, "LTDS Laden" );
  577. var.sLaden->setMausEreignis( SLadenME );
  578. var.sLaden->setMausEreignisParameter( &var );
  579. b->addMember( var.sLaden );
  580. var.größe = new AuswahlListe();
  581. var.größe->setStyle( AuswahlListe::Style::Sichtbar | AuswahlListe::Style::Rahmen | AuswahlListe::Style::AuswahlBuffer | AuswahlListe::Style::AuswahlRahmen | AuswahlListe::Style::VScroll );
  582. var.größe->setPosition( 10, 40 );
  583. var.größe->setSize( 100, 590 );
  584. var.größe->setAlphaFeldFarbe( 0x7500FF00 );
  585. var.größe->setAlphaFeldStrength( 8 );
  586. var.größe->setRahmenFarbe( 0xFFFFFFFF );
  587. var.größe->setRahmenBreite( 2 );
  588. var.größe->setALRZ( new LRahmen() );
  589. var.größe->zARahmen()->setFarbe( 0xFF00FF00 );
  590. var.größe->setVertikalKlickScroll( 10 );
  591. var.größe->setMausEreignis( GrößeME );
  592. var.größe->setMausEreignisParameter( &var );
  593. var.größe->update();
  594. b->addMember( var.größe );
  595. var.zeichen = new AuswahlListe();
  596. var.zeichen->setStyle( AuswahlListe::Style::Sichtbar | AuswahlListe::Style::Rahmen | AuswahlListe::Style::AuswahlBuffer | AuswahlListe::Style::AuswahlRahmen | AuswahlListe::Style::VScroll );
  597. var.zeichen->setPosition( 120, 40 );
  598. var.zeichen->setSize( 105, 560 );
  599. var.zeichen->setAlphaFeldFarbe( 0x7500FF00 );
  600. var.zeichen->setAlphaFeldStrength( 8 );
  601. var.zeichen->setRahmenFarbe( 0xFFFFFFFF );
  602. var.zeichen->setRahmenBreite( 2 );
  603. var.zeichen->setALRZ( new LRahmen() );
  604. var.zeichen->zARahmen()->setFarbe( 0xFF00FF00 );
  605. var.zeichen->setVertikalKlickScroll( 10 );
  606. var.zeichen->setMausEreignis( ZeichenME );
  607. var.zeichen->setMausEreignisParameter( &var );
  608. var.zeichen->update();
  609. b->addMember( var.zeichen );
  610. var.gLöschen = initKnopf( 10, 640, 100, 20, var.nSchrift, Knopf::Style::Sichtbar, "Größe Löschen" );
  611. var.gLöschen->removeStyle( Knopf::Style::Erlaubt );
  612. var.gLöschen->setMausEreignis( GLöschenME );
  613. var.gLöschen->setMausEreignisParameter( &var );
  614. b->addMember( var.gLöschen );
  615. var.neuGröße = initKnopf( 10, 670, 100, 20, var.nSchrift, Knopf::Style::Sichtbar, "Neue Größe" );
  616. var.neuGröße->removeStyle( Knopf::Style::Erlaubt );
  617. var.neuGröße->setMausEreignis( NeuGrößeME );
  618. var.neuGröße->setMausEreignisParameter( &var );
  619. b->addMember( var.neuGröße );
  620. var.editZeichen = initKnopf( 120, 610, 105, 20, var.nSchrift, Knopf::Style::Sichtbar, "Zeichen ändern" );
  621. var.editZeichen->removeStyle( Knopf::Style::Erlaubt );
  622. var.editZeichen->setMausEreignis( EditZeichenME );
  623. var.editZeichen->setMausEreignisParameter( &var );
  624. b->addMember( var.editZeichen );
  625. var.zLöschen = initKnopf( 120, 640, 105, 20, var.nSchrift, Knopf::Style::Sichtbar, "Zeichen Löschen" );
  626. var.zLöschen->removeStyle( Knopf::Style::Erlaubt );
  627. var.zLöschen->setMausEreignis( ZLöschenME );
  628. var.zLöschen->setMausEreignisParameter( &var );
  629. b->addMember( var.zLöschen );
  630. var.neuZeichen = initKnopf( 120, 670, 105, 20, var.nSchrift, Knopf::Style::Sichtbar, "Neues Zeichen" );
  631. var.neuZeichen->removeStyle( Knopf::Style::Erlaubt );
  632. var.neuZeichen->setMausEreignis( NeuZeichenME );
  633. var.neuZeichen->setMausEreignisParameter( &var );
  634. b->addMember( var.neuZeichen );
  635. var.vorschau = initTextFeld( 230, 40, 510, 150, 0, TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt, "Vorschau" );
  636. b->addMember( var.vorschau );
  637. var.vFgT = initTextFeld( 230, 200, 40, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Farbe:" );
  638. b->addMember( var.vFgT );
  639. var.vFg = initTextFeld( 270, 200, 60, 20, var.nSchrift, TextFeld::Style::TextFeld, "FFFFFF" );
  640. var.vFg->setTastaturEreignis( VFgTE );
  641. var.vFg->setTastaturEreignisParameter( &var );
  642. b->addMember( var.vFg );
  643. var.vBgT = initTextFeld( 340, 200, 80, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Hintergrund:" );
  644. b->addMember( var.vBgT );
  645. var.vBg = initTextFeld( 415, 200, 60, 20, var.nSchrift, TextFeld::Style::TextFeld, "000000" );
  646. var.vBg->setTastaturEreignis( VBgTE );
  647. var.vBg->setTastaturEreignisParameter( &var );
  648. b->addMember( var.vBg );
  649. var.vBgB = initKnopf( 485, 200, 50, 20, var.nSchrift, Knopf::Style::Normal, "Bild" );
  650. var.vBgB->setMausEreignis( VBgBME );
  651. var.vBgB->setMausEreignisParameter( &var );
  652. b->addMember( var.vBgB );
  653. var.vGrößeT = initTextFeld( 550, 200, 50, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Größe:" );
  654. b->addMember( var.vGrößeT );
  655. var.vGröße = initTextFeld( 600, 200, 60, 20, var.nSchrift, TextFeld::Style::TextFeld, "12" );
  656. var.vGröße->setTastaturEreignis( VGrößeTE );
  657. var.vGröße->setTastaturEreignisParameter( &var );
  658. b->addMember( var.vGröße );
  659. var.vStyle = new AuswahlBox();
  660. var.vStyle->setPosition( 670, 200 );
  661. var.vStyle->setSize( 70, 20 );
  662. var.vStyle->setHintergrundFarbe( 0xFF000000 );
  663. var.vStyle->setRahmenBreite( 1 );
  664. var.vStyle->setRahmenFarbe( 0xFFFFFFFF );
  665. var.vStyle->setMaxAuskappHeight( 120 );
  666. var.vStyle->setMausRahmenBreite( 1 );
  667. var.vStyle->setMausRahmenFarbe( 0xFF005500 );
  668. var.vStyle->setMausAlphaFeldFarbe( 0x00008700 );
  669. var.vStyle->setMausAlphaFeldStrength( -8 );
  670. var.vStyle->setAuswRahmenBreite( 1 );
  671. var.vStyle->setAuswRahmenFarbe( 0xFF00FF00 );
  672. var.vStyle->setAuswAlphaFeldFarbe( 0x0000FF00 );
  673. var.vStyle->setAuswAlphaFeldStrength( -8 );
  674. var.vStyle->setStyle( AuswahlBox::Style::Normal );
  675. var.vStyle->setSchriftZ( dynamic_cast<Schrift *>( var.nSchrift->getThis() ) );
  676. var.vStyle->addEintrag( "Normal" );
  677. var.vStyle->addEintrag( "Gravur" );
  678. var.vStyle->setMausEreignis( _ret1ME );
  679. var.vStyle->setEventAktion( [var]( void *p, AuswahlBox *o, int alt, int neu )
  680. {
  681. switch( neu )
  682. {
  683. case 0:
  684. var.vorschau->setTextRendererZ( new TextRenderer( var.schrift ) );
  685. break;
  686. case 1:
  687. var.vorschau->setTextRendererZ( new GravurTextRenderer( var.schrift ) );
  688. break;
  689. }
  690. } );
  691. b->addMember( var.vStyle );
  692. var.editF = initFenster( 230, 230, 460, 460, var.nSchrift, Fenster::Style::normal | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::ClosingHintergrund, "Zeichen Editor" );
  693. var.editF->setClosingMe( EditFME );
  694. var.editF->setClosingMeParam( &var );
  695. var.editF->removeStyle( Fenster::Style::Sichtbar );
  696. b->addMember( var.editF );
  697. var.editObj = initBildZ( 10, 10, 440, 390, BildZ::Style::Sichtbar | BildZ::Style::HScroll | BildZ::Style::VScroll | BildZ::Style::Rahmen | BildZ::Style::Erlaubt, 0 );
  698. var.editObj->setMausEreignis( EditObjME );
  699. var.editObj->setMausEreignisParameter( &var );
  700. var.editF->addMember( var.editObj );
  701. var.editFgT = initTextFeld( 10, 410, 80, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Vordergrund:" );
  702. var.editF->addMember( var.editFgT );
  703. var.editFg = initTextFeld( 90, 410, 60, 20, var.nSchrift, TextFeld::Style::TextFeld, "FFFFFF" );
  704. var.editFg->setTastaturEreignis( _nurHexTE );
  705. var.editF->addMember( var.editFg );
  706. var.editBgT = initTextFeld( 160, 410, 80, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Hintergrund:" );
  707. var.editF->addMember( var.editBgT );
  708. var.editBg = initTextFeld( 240, 410, 60, 20, var.nSchrift, TextFeld::Style::TextFeld, "000000" );
  709. var.editBg->setTastaturEreignis( _nurHexTE );
  710. var.editF->addMember( var.editBg );
  711. var.editAlphaT = initTextFeld( 310, 410, 40, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Alpha:" );
  712. var.editF->addMember( var.editAlphaT );
  713. var.editAlpha = initTextFeld( 350, 410, 30, 20, var.nSchrift, TextFeld::Style::TextFeld, "FF" );
  714. var.editAlpha->setTastaturEreignis( _nurHexTE );
  715. var.editF->addMember( var.editAlpha );
  716. var.editSpeichern = initKnopf( 390, 410, 60, 20, var.nSchrift, Knopf::Style::Sichtbar, "Save" );
  717. var.editSpeichern->setMausEreignis( EditSpeichernME );
  718. var.editSpeichern->setMausEreignisParameter( &var );
  719. var.editF->addMember( var.editSpeichern );
  720. var.neuGrößeF = initFenster( 290, 305, 120, 90, var.nSchrift, Fenster::Style::normal | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::ClosingHintergrund, "Neue Größe" );
  721. var.neuGrößeF->setClosingMe( NeuGrößeFME );
  722. var.neuGrößeF->setClosingMeParam( &var );
  723. var.neuGrößeF->removeStyle( Fenster::Style::Sichtbar );
  724. b->addMember( var.neuGrößeF );
  725. var.nGGrößeT = initTextFeld( 10, 10, 50, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Größe:" );
  726. var.neuGrößeF->addMember( var.nGGrößeT );
  727. var.nGGröße = initTextFeld( 60, 10, 50, 20, var.nSchrift, TextFeld::Style::TextFeld, "12" );
  728. var.nGGröße->setTastaturEreignis( _nurNummernTE );
  729. var.neuGrößeF->addMember( var.nGGröße );
  730. var.nGOk = initKnopf( 10, 40, 100, 20, var.nSchrift, Knopf::Style::Sichtbar, "Ok" );
  731. var.nGOk->setMausEreignis( NGOkME );
  732. var.nGOk->setMausEreignisParameter( &var );
  733. var.neuGrößeF->addMember( var.nGOk );
  734. var.neuZeichenF = initFenster( 290, 275, 120, 150, var.nSchrift, Fenster::Style::normal | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::ClosingHintergrund, "Neues Zeichen" );
  735. var.neuZeichenF->setClosingMe( NeuZeichenFME );
  736. var.neuZeichenF->setClosingMeParam( &var );
  737. var.neuZeichenF->removeStyle( Fenster::Style::Sichtbar );
  738. b->addMember( var.neuZeichenF );
  739. var.nZZeichenT = initTextFeld( 10, 10, 60, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Zeichen:" );
  740. var.neuZeichenF->addMember( var.nZZeichenT );
  741. var.nZZeichen = initTextFeld( 70, 10, 30, 20, var.nSchrift, TextFeld::Style::TextFeld, "" );
  742. var.nZZeichen->setTastaturEreignis( NZZeichenTE );
  743. var.nZZeichen->setTastaturEreignisParameter( &var );
  744. var.neuZeichenF->addMember( var.nZZeichen );
  745. var.nZVorschau = initTextFeld( 105, 10, 10, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "" );
  746. var.neuZeichenF->addMember( var.nZVorschau );
  747. var.nZBreiteT = initTextFeld( 10, 40, 50, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Breite" );
  748. var.neuZeichenF->addMember( var.nZBreiteT );
  749. var.nZBreite = initTextFeld( 60, 40, 50, 20, var.nSchrift, TextFeld::Style::TextFeld, "" );
  750. var.nZBreite->setTastaturEreignis( _nurNummernTE );
  751. var.neuZeichenF->addMember( var.nZBreite );
  752. var.nZHöheT = initTextFeld( 10, 70, 50, 20, var.nSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Höhe" );
  753. var.neuZeichenF->addMember( var.nZHöheT );
  754. var.nZHöhe = initTextFeld( 60, 70, 50, 20, var.nSchrift, TextFeld::Style::TextFeld, "" );
  755. var.nZHöhe->setTastaturEreignis( _nurNummernTE );
  756. var.neuZeichenF->addMember( var.nZHöhe );
  757. var.nZOk = initKnopf( 10, 100, 100, 20, var.nSchrift, Knopf::Style::Sichtbar, "Ok" );
  758. var.nZOk->setMausEreignis( NZOkME );
  759. var.nZOk->setMausEreignisParameter( &var );
  760. var.neuZeichenF->addMember( var.nZOk );
  761. r->setRenderFunktionParameter( &var );
  762. r->setRenderFunktion( renderE );
  763. StartNachrichtenSchleife();
  764. r->beenden();
  765. r->release();
  766. var.nSchrift->release();
  767. if( var.schrift )
  768. var.schrift->release();
  769. var.sDatei->release();
  770. b->release();
  771. f->setBildschirm( 0 );
  772. f->setAnzeigeModus( 0 );
  773. f->zerstören();
  774. f->release();
  775. return 0;
  776. }