KEBVorschau.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. #include "KEBVorschau.h"
  2. #include <Datei.h>
  3. #include <Globals.h>
  4. #include "../../../../Global/Initialisierung.h"
  5. #include "../../../../Global/Variablen.h"
  6. void kEBVorschauKSGSAktion(
  7. void* p, RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
  8. {
  9. if (!p) return;
  10. ((KEBVorschauKarteScript*)p)->ksgsAktion(parameter, retVal);
  11. }
  12. // Inhalt der KEBVorschauKarteScript Klasse aus KEBVorschau.h
  13. // Konstruktor
  14. KEBVorschauKarteScript::KEBVorschauKarteScript(TextFeld* zLog)
  15. : Thread()
  16. {
  17. ksgs = Framework::getDLLRegister()->ladeDLL(
  18. "KSGScript.dll", "data/bin/KSGScript.dll");
  19. if (ksgs)
  20. {
  21. KSGSGetZeichnung getKSGScript
  22. = (KSGSGetZeichnung)GetProcAddress(ksgs, KSGS_START_FUNKTION);
  23. if (getKSGScript)
  24. {
  25. fenster = getKSGScript();
  26. fenster->setSchriftZ(
  27. dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  28. fenster->setSize(578, 428);
  29. fenster->setCallbackParam(this);
  30. fenster->setCallbackFunktion(kEBVorschauKSGSAktion);
  31. fenster->setLog(dynamic_cast<TextFeld*>(zLog->getThis()));
  32. }
  33. else
  34. {
  35. fenster = 0;
  36. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  37. new Text(
  38. "Der Einstiegspunkt '" KSGS_START_FUNKTION
  39. "' in der DLL-Datei "
  40. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  41. new Text("Ok"),
  42. 0);
  43. }
  44. }
  45. else
  46. {
  47. fenster = 0;
  48. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  49. new Text("Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht "
  50. "geladen werden."),
  51. new Text("Ok"),
  52. 0);
  53. }
  54. ram = new LRahmen();
  55. ram->setSize(578, 428);
  56. ram->setFarbe(0xFFFFFFFF);
  57. pos = Punkt(120, 10);
  58. erlaubt = 1;
  59. sichtbar = 0;
  60. alpha = 0;
  61. aktion = 0;
  62. ak = 0;
  63. }
  64. // Destruktor
  65. KEBVorschauKarteScript::~KEBVorschauKarteScript()
  66. {
  67. if (fenster)
  68. {
  69. fenster->reset();
  70. fenster->release();
  71. }
  72. ram->release();
  73. if (ksgs) Framework::getDLLRegister()->releaseDLL("KSGScript.dll");
  74. }
  75. // nicht constant
  76. void KEBVorschauKarteScript::thread()
  77. {
  78. sichtbar = 0;
  79. while (alpha)
  80. Sleep(100);
  81. if (ak == 1)
  82. {
  83. pfad += "/seite.ksgs";
  84. if (fenster) fenster->setScriptDatei(pfad);
  85. }
  86. fenster->neuLaden();
  87. KSGSGetVariable getKSGSVar
  88. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  89. RCArray<KSGSVariable>* params = new RCArray<KSGSVariable>();
  90. KSGSVariableDef p1;
  91. p1.typId = KSGS_BOOL;
  92. p1.wert = erlaubt;
  93. params->add(getKSGSVar(fenster, &p1));
  94. if (fenster)
  95. {
  96. KSGSVariable* var = fenster->startFunktion(
  97. fenster->getFunktionId("_set_Erlaubt"), params);
  98. if (var) var->release();
  99. }
  100. sichtbar = 1;
  101. ak = 0;
  102. run = 0;
  103. }
  104. void KEBVorschauKarteScript::setErlaubt(bool e)
  105. {
  106. erlaubt = e;
  107. KSGSGetVariable getKSGSVar
  108. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  109. RCArray<KSGSVariable>* params = new RCArray<KSGSVariable>();
  110. KSGSVariableDef p1;
  111. p1.typId = KSGS_BOOL;
  112. p1.wert = erlaubt;
  113. params->add(getKSGSVar(fenster, &p1));
  114. KSGSVariable* var = fenster->startFunktion(
  115. fenster->getFunktionId("_set_Erlaubt"), params);
  116. if (var) var->release();
  117. }
  118. void KEBVorschauKarteScript::ladeKarteSeite(const char* pfad)
  119. {
  120. if (run) warteAufThread(5000);
  121. if (run) ende();
  122. this->pfad = pfad;
  123. ak = 1;
  124. start();
  125. }
  126. void KEBVorschauKarteScript::ksgsAktion(
  127. RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
  128. {}
  129. void KEBVorschauKarteScript::doPublicMausEreignis(MausEreignis& me)
  130. {
  131. me.mx -= pos.x;
  132. me.my -= pos.y;
  133. if (fenster) fenster->doPublicMausEreignis(me);
  134. me.mx += pos.x;
  135. me.my += pos.y;
  136. }
  137. void KEBVorschauKarteScript::doTastaturEreignis(TastaturEreignis& te)
  138. {
  139. if (fenster) fenster->doTastaturEreignis(te);
  140. }
  141. bool KEBVorschauKarteScript::tick(double zeit)
  142. {
  143. bool rend = fenster ? fenster->tick(zeit) : 0;
  144. if (!sichtbar && alpha > 0)
  145. {
  146. if (alpha - zeit * 150 < 0)
  147. alpha = 0;
  148. else
  149. alpha -= (unsigned char)(zeit * 150);
  150. rend = 1;
  151. }
  152. if (sichtbar && alpha < 255)
  153. {
  154. if (alpha + zeit * 150 > 255)
  155. alpha = 255;
  156. else
  157. alpha += (unsigned char)(zeit * 150);
  158. rend = 1;
  159. }
  160. return rend;
  161. }
  162. void KEBVorschauKarteScript::render(Bild& zRObj)
  163. {
  164. if (!zRObj.setDrawOptions(pos.x, pos.y, ram->getBreite(), ram->getHeight()))
  165. return;
  166. zRObj.setAlpha(alpha);
  167. ram->render(zRObj);
  168. if (fenster) fenster->render(zRObj);
  169. zRObj.releaseAlpha();
  170. zRObj.releaseDrawOptions();
  171. }
  172. // Inhalt der KEBVorschau Klasse aus KEBVorschau.h
  173. // Konstruktor
  174. KEBVorschau::KEBVorschau()
  175. : Zeichnung()
  176. {
  177. neu = initKnopf(10, 10, 100, 20, Knopf::Style::Sichtbar, "Neu starten");
  178. beenden = initKnopf(10, 40, 100, 20, Knopf::Style::Sichtbar, "Beenden");
  179. log = initTextFeld(10,
  180. 445,
  181. 860,
  182. 75,
  183. (TextFeld::Style::TextGebiet | TextFeld::Style::HScroll)
  184. & ~TextFeld::Style::Erlaubt,
  185. "Log:\n");
  186. script = new KEBVorschauKarteScript(log);
  187. erlaubt = initKontrollKnopf(10,
  188. 70,
  189. 100,
  190. 20,
  191. KontrollKnopf::Style::Normal | KontrollKnopf::Style::Selected,
  192. "Erlaubt");
  193. alpha = 0;
  194. sichtbar = 0;
  195. tickVal = 0;
  196. aktion = 0;
  197. rend = 0;
  198. }
  199. // Destruktor
  200. KEBVorschau::~KEBVorschau()
  201. {
  202. script->release();
  203. neu->release();
  204. beenden->release();
  205. log->release();
  206. erlaubt->release();
  207. }
  208. // nicht constant
  209. int KEBVorschau::getAktion()
  210. {
  211. int ret = aktion;
  212. aktion = 0;
  213. return ret;
  214. }
  215. bool KEBVorschau::ladeKarte()
  216. {
  217. Text* scr = editorClient->beschreibungLaden();
  218. if (!scr)
  219. {
  220. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  221. new Text(editorClient->getLetzterFehler()),
  222. new Text("Ok"));
  223. return 0;
  224. }
  225. else
  226. {
  227. Datei d;
  228. d.setDatei("data/tmp/ke/kbv/seite.ksgs");
  229. d.erstellen();
  230. if (!d.open(Datei::Style::schreiben))
  231. {
  232. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  233. new Text(
  234. "Fehler beim open der Datei 'data/tmp/ke/kbv/seite.ksgs'"),
  235. new Text("Ok"));
  236. return 0;
  237. }
  238. d.schreibe(scr->getText(), scr->getLength());
  239. d.close();
  240. scr->release();
  241. script->ladeKarteSeite("data/tmp/ke/kbv");
  242. }
  243. return 1;
  244. }
  245. void KEBVorschau::setSichtbar(bool sicht)
  246. {
  247. sichtbar = sicht;
  248. }
  249. void KEBVorschau::doPublicMausEreignis(MausEreignis& me)
  250. {
  251. if (!sichtbar) return;
  252. script->doPublicMausEreignis(me);
  253. bool mev = me.verarbeitet;
  254. neu->doPublicMausEreignis(me);
  255. if (!mev && me.verarbeitet && me.id == ME_RLinks)
  256. script->ladeKarteSeite("data/tmp/ke/kbv");
  257. mev = me.verarbeitet;
  258. beenden->doPublicMausEreignis(me);
  259. if (!mev && me.verarbeitet && me.id == ME_RLinks) aktion = 1;
  260. log->doPublicMausEreignis(me);
  261. bool eu = 0;
  262. bool sel = erlaubt->hatStyle(KontrollKnopf::Style::Selected);
  263. erlaubt->doPublicMausEreignis(me);
  264. if (sel != erlaubt->hatStyle(KontrollKnopf::Style::Selected))
  265. script->setErlaubt(erlaubt->hatStyle(KontrollKnopf::Style::Selected));
  266. }
  267. void KEBVorschau::doTastaturEreignis(TastaturEreignis& te)
  268. {
  269. if (!sichtbar) return;
  270. script->doTastaturEreignis(te);
  271. }
  272. bool KEBVorschau::tick(double zeit)
  273. {
  274. bool ret = script->tick(zeit);
  275. ret |= neu->tick(zeit);
  276. ret |= beenden->tick(zeit);
  277. ret |= log->tick(zeit);
  278. ret |= erlaubt->tick(zeit);
  279. tickVal += zeit * 150;
  280. int val = 0;
  281. if (tickVal > 1)
  282. val = (int)tickVal;
  283. else
  284. return ret;
  285. if (sichtbar && alpha != 255)
  286. {
  287. if (alpha + val > 255)
  288. alpha = 255;
  289. else
  290. alpha += val;
  291. ret = 1;
  292. }
  293. if (!sichtbar && alpha != 0)
  294. {
  295. if (alpha - val < 0)
  296. alpha = 0;
  297. else
  298. alpha -= val;
  299. ret = 1;
  300. }
  301. return ret;
  302. }
  303. void KEBVorschau::render(Bild& zRObj)
  304. {
  305. zRObj.setAlpha(alpha);
  306. script->render(zRObj);
  307. neu->render(zRObj);
  308. beenden->render(zRObj);
  309. log->render(zRObj);
  310. erlaubt->render(zRObj);
  311. zRObj.releaseAlpha();
  312. }
  313. // constant
  314. bool KEBVorschau::istSichtbar() const
  315. {
  316. return sichtbar;
  317. }