KEShopSeite.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. #include "KEShopSeite.h"
  2. #include <Schrift.h>
  3. #include <Datei.h>
  4. #include "../../../../Global/Variablen.h"
  5. #include "../../../../Global/Initialisierung.h"
  6. #include <Bild.h>
  7. // Inhalt der KEShopSeite Klasse aus KEShopSeite.h
  8. // Konstruktor
  9. KEShopSeite::KEShopSeite( int karte, Schrift *zSchrift )
  10. : Thread()
  11. {
  12. schrift = zSchrift->getThis();
  13. Text *kName = infoKlient->getKarteName( karte );
  14. Text titel = kName ? kName->getText() : "<Karte>";
  15. titel += " - Shop Seite";
  16. if( kName )
  17. kName->release();
  18. fenster = initFenster( 10, 40, 880, 550, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
  19. editor = new KESSEditor( zSchrift );
  20. vorschau = new KESSVorschau( zSchrift );
  21. laden = (Animation2D*)ladeAnimation->dublizieren();
  22. laden->setPosition( 425, 275 );
  23. laden->setSichtbar( 0 );
  24. fenster->addMember( editor );
  25. fenster->addMember( vorschau );
  26. animation = 0;
  27. tickVal = 0;
  28. sichtbar = 0;
  29. rechts = 0;
  30. xStart = 0;
  31. breite = 0;
  32. aktion = 0;
  33. zeile = 0;
  34. this->karte = karte;
  35. alpha = 255;
  36. ref = 1;
  37. }
  38. // Destruktor
  39. KEShopSeite::~KEShopSeite()
  40. {
  41. if( run )
  42. {
  43. warteAufThread( 5000 );
  44. if( run )
  45. ende();
  46. }
  47. fenster->release();
  48. editor->release();
  49. vorschau->release();
  50. laden->release();
  51. schrift->release();
  52. }
  53. // nicht constant
  54. void KEShopSeite::setSichtbar( bool s, bool vr )
  55. {
  56. animation = 1;
  57. sichtbar = s;
  58. rechts = vr;
  59. if( sichtbar )
  60. {
  61. if( vr )
  62. {
  63. xStart = 900;
  64. breite = 0;
  65. }
  66. else
  67. {
  68. xStart = 0;
  69. breite = 0;
  70. }
  71. if( !run )
  72. {
  73. aktion = 0;
  74. start();
  75. }
  76. }
  77. }
  78. void KEShopSeite::thread()
  79. {
  80. laden->setSichtbar( 1 );
  81. switch( aktion )
  82. {
  83. case 0: // Init
  84. {
  85. RCArray< Text > *list = new RCArray< Text >();
  86. int anz = editorKlient->ssGetDateiListe( list );
  87. if( anz < 0 )
  88. {
  89. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  90. list->release();
  91. break;
  92. }
  93. editor->setDateiListe( list );
  94. break;
  95. }
  96. case 1: // Neue Datei
  97. {
  98. if( !editorKlient->ssDateiErstellen( editor->zNeuDateiName()->getText(), editor->getNeuDateiTyp() ) )
  99. {
  100. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  101. break;
  102. }
  103. RCArray< Text > *list = new RCArray< Text >();
  104. int anz = editorKlient->ssGetDateiListe( list );
  105. if( anz < 0 )
  106. {
  107. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  108. list->release();
  109. break;
  110. }
  111. editor->setDateiListe( list );
  112. break;
  113. }
  114. case 2: // Datei Auswählen
  115. {
  116. Text *zName = editor->zDateiAuswahl();
  117. if( zName->hat( ".ltdb" ) )
  118. {
  119. RCArray< Text > *list = new RCArray< Text >();
  120. int anz = editorKlient->ssGetBildListe( zName->getText(), list );
  121. if( anz < 0 )
  122. {
  123. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  124. list->release();
  125. break;
  126. }
  127. editor->setBildListe( list );
  128. }
  129. else if( zName->hat( ".ksgs" ) )
  130. {
  131. Text *txt = editorKlient->ssTextLaden( zName->getText() );
  132. if( !txt )
  133. {
  134. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  135. break;
  136. }
  137. editor->setDateiText( txt );
  138. }
  139. else
  140. {
  141. if( !editorKlient->ssOrdnerÖffnen(zName->getText() ) )
  142. {
  143. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  144. break;
  145. }
  146. RCArray< Text > *list = new RCArray< Text >();
  147. int anz = editorKlient->ssGetDateiListe( list );
  148. if( anz < 0 )
  149. {
  150. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  151. list->release();
  152. break;
  153. }
  154. editor->setDateiListe( list );
  155. }
  156. break;
  157. }
  158. case 3: // Bild Auswählen
  159. {
  160. Bild *b = editorKlient->ssBildLaden( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() );
  161. if( !b )
  162. {
  163. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  164. break;
  165. }
  166. editor->setBild( b );
  167. break;
  168. }
  169. case 4: // Datei Löschen
  170. {
  171. if( ( editor->zDateiAuswahl() && !editorKlient->ssDateiLöschen( editor->zDateiAuswahl()->getText() ) ) || ( !editor->zDateiAuswahl() && !editorKlient->ssDateiLöschen( "." ) ) )
  172. {
  173. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  174. break;
  175. }
  176. RCArray< Text > *list = new RCArray< Text >();
  177. int anz = editorKlient->ssGetDateiListe( list );
  178. if( anz < 0 )
  179. {
  180. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  181. list->release();
  182. break;
  183. }
  184. editor->setDateiListe( list );
  185. break;
  186. }
  187. case 5: // Text Speichern
  188. {
  189. if( !editorKlient->ssTextSpeichern( editor->zDateiAuswahl()->getText(), editor->zDateiText() ) )
  190. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  191. break;
  192. }
  193. case 6: // Bild Löschen
  194. {
  195. if( !editorKlient->ssBildLöschen( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() ) )
  196. {
  197. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  198. break;
  199. }
  200. RCArray< Text > *list = new RCArray< Text >();
  201. int anz = editorKlient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list );
  202. if( anz < 0 )
  203. {
  204. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  205. list->release();
  206. break;
  207. }
  208. editor->setBildListe( list );
  209. break;
  210. }
  211. case 7: // Importieren
  212. {
  213. Text *pfad = editor->zBildImportPfad();
  214. pfad->ersetzen( "\\", "/" );
  215. Text *n = pfad->getTeilText( pfad->positionVon( "/", pfad->anzahlVon( "/" ) - 1 ) + 1 );
  216. Text name = n->getText();
  217. n->release();
  218. Text *err = new Text();
  219. Bild *b = ladeBild( pfad->getText(), err );
  220. if( !b )
  221. {
  222. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ) );
  223. break;
  224. }
  225. err->release();
  226. if( !editorKlient->ssBildSpeichern( editor->zDateiAuswahl()->getText(), name, b ) )
  227. {
  228. b->release();
  229. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  230. break;
  231. }
  232. b->release();
  233. RCArray< Text > *list = new RCArray< Text >();
  234. int anz = editorKlient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list );
  235. if( anz < 0 )
  236. {
  237. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  238. list->release();
  239. break;
  240. }
  241. editor->setBildListe( list );
  242. break;
  243. }
  244. case 8: // Vorschau
  245. {
  246. editor->setSichtbar( 0 );
  247. if( !editorKlient->ladeShopSeiteVorschau() )
  248. {
  249. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  250. editor->setSichtbar( 1 );
  251. break;
  252. }
  253. vorschau->ladeKarte( "data/tmp/ke/ssv" );
  254. vorschau->setSichtbar( 1 );
  255. break;
  256. }
  257. case 9: // Veröffentlichen
  258. {
  259. if( !editorKlient->shopSeiteVeröffentlichen() )
  260. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  261. break;
  262. }
  263. case 10: // Vorschau Beenden
  264. {
  265. vorschau->setSichtbar( 0 );
  266. DateiRemove( "data/tmp/ke/ssv" );
  267. editor->setSichtbar( 1 );
  268. break;
  269. }
  270. }
  271. laden->setSichtbar( 0 );
  272. run = 0;
  273. }
  274. void KEShopSeite::doMausEreignis( MausEreignis &me )
  275. {
  276. if( !run )
  277. fenster->doMausEreignis( me );
  278. }
  279. void KEShopSeite::doTastaturEreignis( TastaturEreignis &te )
  280. {
  281. if( !run )
  282. fenster->doTastaturEreignis( te );
  283. }
  284. bool KEShopSeite::tick( double z )
  285. {
  286. aktion = vorschau->getAktion();
  287. if( aktion )
  288. aktion += 9;
  289. else
  290. aktion = editor->getAktion();
  291. if( aktion && !run )
  292. start();
  293. bool ret = laden->tick( z );
  294. tickVal += z * 150;
  295. int val = (int)tickVal;
  296. tickVal -= val;
  297. if( val )
  298. {
  299. if( run && alpha > 100 )
  300. {
  301. if( alpha - val < 100 )
  302. alpha = 100;
  303. else
  304. alpha -= val;
  305. ret = 1;
  306. }
  307. if( sichtbar && !run && alpha != 255 )
  308. {
  309. if( alpha + val > 255 )
  310. alpha = 255;
  311. else
  312. alpha += val;
  313. ret = 1;
  314. }
  315. val *= 3;
  316. if( sichtbar )
  317. {
  318. if( alpha < 100 )
  319. {
  320. if( alpha + val > 100 )
  321. alpha = 100;
  322. else
  323. alpha += val;
  324. ret = 1;
  325. }
  326. if( xStart != 0 || breite != 900 )
  327. {
  328. if( rechts )
  329. {
  330. if( xStart - val <= 0 )
  331. {
  332. xStart = 0;
  333. breite = 900;
  334. animation = 0;
  335. if( !editor->istSichtbar() && !vorschau->istSichtbar() )
  336. editor->setSichtbar( 1 );
  337. }
  338. else
  339. {
  340. xStart -= val;
  341. breite += val;
  342. }
  343. }
  344. else
  345. {
  346. if( breite + val >= 900 )
  347. {
  348. breite = 900;
  349. animation = 0;
  350. if( !editor->istSichtbar() && !vorschau->istSichtbar() )
  351. editor->setSichtbar( 1 );
  352. }
  353. else
  354. breite += val;
  355. }
  356. ret = 1;
  357. }
  358. }
  359. else
  360. {
  361. if( breite != 0 )
  362. {
  363. if( rechts )
  364. {
  365. if( breite - val <= 0 )
  366. {
  367. breite = 0;
  368. animation = 0;
  369. }
  370. else
  371. breite -= val;
  372. }
  373. else
  374. {
  375. if( breite - val <= 0 )
  376. {
  377. breite = 0;
  378. xStart = 900;
  379. animation = 0;
  380. }
  381. else
  382. {
  383. breite -= val;
  384. xStart += val;
  385. }
  386. }
  387. ret = 1;
  388. }
  389. }
  390. }
  391. return ret || fenster->tick( z );
  392. }
  393. void KEShopSeite::render( Bild &zRObj )
  394. {
  395. if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
  396. return;
  397. zRObj.setAlpha( alpha );
  398. fenster->render( zRObj );
  399. zRObj.releaseAlpha();
  400. laden->render( zRObj );
  401. zRObj.releaseDrawOptions();
  402. }
  403. // constant
  404. bool KEShopSeite::istSichtbar() const
  405. {
  406. return sichtbar || animation;
  407. }
  408. // Reference Counting
  409. KEShopSeite *KEShopSeite::getThis()
  410. {
  411. ref++;
  412. return this;
  413. }
  414. KEShopSeite *KEShopSeite::release()
  415. {
  416. ref--;
  417. if( !ref )
  418. delete this;
  419. return 0;
  420. }