KSGSFenster.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. #include "KSGSFenster.h"
  2. #include "KSGSTyp.h"
  3. #include "../Error/Error.h"
  4. #include "../Main/KSGScriptObj.h"
  5. #include "KSGSMausEreignis.h"
  6. #include "KSGSTastaturEreignis.h"
  7. #include "KSGSBool.h"
  8. #include "KSGSText.h"
  9. #include "KSGSInt.h"
  10. #include "KSGSBild.h"
  11. #include <Punkt.h>
  12. #include <ToolTip.h>
  13. using namespace KSGScript;
  14. // Inahlt der KSGSFensterKlasse Klasse aus KSGSFenster.h
  15. // Konstruktor
  16. KSGSFensterKlasse::KSGSFensterKlasse( KSGScriptObj *zObj, Fenster *std )
  17. : KSGSKlasseInstanz( KSGS_FENSTER, 0, 0, zObj )
  18. {
  19. val = std;
  20. val->setMausEreignisParameter( this );
  21. val->setMausEreignis( ksgsFensterME );
  22. val->setTastaturEreignisParameter( this );
  23. val->setTastaturEreignis( ksgsFensterTE );
  24. if( zObj->zSchrift() )
  25. val->setTSchriftZ( zObj->getSchrift() );
  26. mausF = -1;
  27. tastaturF = -1;
  28. }
  29. // Destruktor
  30. KSGSFensterKlasse::~KSGSFensterKlasse()
  31. {
  32. val->release();
  33. }
  34. // nicht constant
  35. KSGSVariable *KSGSFensterKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter )
  36. {
  37. KSGSVariable *ret = 0;
  38. switch( id )
  39. {
  40. case 0: // void setRFarbe( int )
  41. if( parameter->getEintragAnzahl() < 1 )
  42. error( 20, {}, obj );
  43. val->setRFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  44. break;
  45. case 1: // void setRBreite( int )
  46. if( parameter->getEintragAnzahl() < 1 )
  47. error( 20, {}, obj );
  48. val->setRBreite( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  49. break;
  50. case 2: // void setTitel( Text )
  51. if( parameter->getEintragAnzahl() < 1 )
  52. error( 20, {}, obj );
  53. val->setTitel( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text() );
  54. break;
  55. case 3: // void setTSFarbe( int )
  56. if( parameter->getEintragAnzahl() < 1 )
  57. error( 20, {}, obj );
  58. val->setTSFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  59. break;
  60. case 4: // void setTSGröße( int )
  61. if( parameter->getEintragAnzahl() < 1 )
  62. error( 20, {}, obj );
  63. val->setTSSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  64. break;
  65. case 5: // void setTBgFarbe( int )
  66. if( parameter->getEintragAnzahl() < 1 )
  67. error( 20, {}, obj );
  68. val->setTBgFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  69. break;
  70. case 6: // void setTAfFarbe( int )
  71. if( parameter->getEintragAnzahl() < 1 )
  72. error( 20, {}, obj );
  73. val->setTAfFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  74. break;
  75. case 7: // void setTAfStärke( int )
  76. if( parameter->getEintragAnzahl() < 1 )
  77. error( 20, {}, obj );
  78. val->setTAfStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  79. break;
  80. case 8: // void setTBgBild( Bild )
  81. if( parameter->getEintragAnzahl() < 1 )
  82. error( 20, {}, obj );
  83. val->setTBgBild( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  84. break;
  85. case 9: // void setTRFarbe( int )
  86. if( parameter->getEintragAnzahl() < 1 )
  87. error( 20, {}, obj );
  88. val->setTRFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  89. break;
  90. case 10: // void setTRBreite( int )
  91. if( parameter->getEintragAnzahl() < 1 )
  92. error( 20, {}, obj );
  93. val->setTRBreite( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  94. break;
  95. case 11: // void setKBgFarbe( int )
  96. if( parameter->getEintragAnzahl() < 1 )
  97. error( 20, {}, obj );
  98. val->setKBgFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  99. break;
  100. case 12: // void setKBgBild( Bild )
  101. if( parameter->getEintragAnzahl() < 1 )
  102. error( 20, {}, obj );
  103. val->setKBgBild( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  104. break;
  105. case 13: // void setKAfFarbe( int )
  106. if( parameter->getEintragAnzahl() < 1 )
  107. error( 20, {}, obj );
  108. val->setKAfFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  109. break;
  110. case 14: // void setKAfStärke( int )
  111. if( parameter->getEintragAnzahl() < 1 )
  112. error( 20, {}, obj );
  113. val->setKAfStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  114. break;
  115. case 15: // void setSBgFarbe( int )
  116. if( parameter->getEintragAnzahl() < 1 )
  117. error( 20, {}, obj );
  118. val->setSBgFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  119. break;
  120. case 16: // void setSBgBild( Bild )
  121. if( parameter->getEintragAnzahl() < 1 )
  122. error( 20, {}, obj );
  123. val->setSBgBild( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  124. break;
  125. case 17: // void setSAfFarbe( int )
  126. if( parameter->getEintragAnzahl() < 1 )
  127. error( 20, {}, obj );
  128. val->setSAfFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  129. break;
  130. case 18: // void setSAfStärke( int )
  131. if( parameter->getEintragAnzahl() < 1 )
  132. error( 20, {}, obj );
  133. val->setSAfStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  134. break;
  135. case 19: // void setSKAfFarbe( int )
  136. if( parameter->getEintragAnzahl() < 1 )
  137. error( 20, {}, obj );
  138. val->setSKAfFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  139. break;
  140. case 20: // void setSKAfStärke( int )
  141. if( parameter->getEintragAnzahl() < 1 )
  142. error( 20, {}, obj );
  143. val->setSKAfStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  144. break;
  145. case 21: // void setMin( int, int )
  146. if( parameter->getEintragAnzahl() < 2 )
  147. error( 20, {}, obj );
  148. val->setMin( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  149. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  150. break;
  151. case 22: // void setMax( int, int )
  152. if( parameter->getEintragAnzahl() < 2 )
  153. error( 20, {}, obj );
  154. val->setMax( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  155. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  156. break;
  157. case 23: // void setKMin( int, int )
  158. if( parameter->getEintragAnzahl() < 2 )
  159. error( 20, {}, obj );
  160. val->setKMin( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  161. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  162. break;
  163. case 24: // void setKMax( int, int )
  164. if( parameter->getEintragAnzahl() < 2 )
  165. error( 20, {}, obj );
  166. val->setKMax( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  167. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  168. break;
  169. case 25: // void setHSBMax( int )
  170. if( parameter->getEintragAnzahl() < 1 )
  171. error( 20, {}, obj );
  172. val->setHSBMax( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  173. break;
  174. case 26: // void setVSBMax( int )
  175. if( parameter->getEintragAnzahl() < 1 )
  176. error( 20, {}, obj );
  177. val->setVSBMax( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  178. break;
  179. case 27: // void setHSBScroll( int )
  180. if( parameter->getEintragAnzahl() < 1 )
  181. error( 20, {}, obj );
  182. val->setHSBScroll( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  183. break;
  184. case 28: // void setVSBScroll( int )
  185. if( parameter->getEintragAnzahl() < 1 )
  186. error( 20, {}, obj );
  187. val->setVSBScroll( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  188. break;
  189. case 29: // void setStyle( int )
  190. if( parameter->getEintragAnzahl() < 1 )
  191. error( 20, {}, obj );
  192. val->setStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  193. break;
  194. case 30: // void addStyle( int )
  195. if( parameter->getEintragAnzahl() < 1 )
  196. error( 20, {}, obj );
  197. val->addStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  198. break;
  199. case 31: // void removeStyle( int )
  200. if( parameter->getEintragAnzahl() < 1 )
  201. error( 20, {}, obj );
  202. val->removeStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  203. break;
  204. case 32: // void addMember( Zeichnung )
  205. if( 1 )
  206. {
  207. if( parameter->getEintragAnzahl() < 1 )
  208. error( 20, {}, obj );
  209. Zeichnung *obj = parameter->z( 0 ) ? parameter->z( 0 )->getZeichnung() : 0;
  210. if( obj )
  211. val->addMember( obj );
  212. }
  213. break;
  214. case 33: // void removeMember( Zeichnung )
  215. if( 1 )
  216. {
  217. if( parameter->getEintragAnzahl() < 1 )
  218. error( 20, {}, obj );
  219. Zeichnung *obj = parameter->z( 0 ) ? parameter->z( 0 )->getZeichnung() : 0;
  220. if( obj )
  221. val->removeMember( obj );
  222. }
  223. break;
  224. case 34: // bool tick( double )
  225. if( parameter->getEintragAnzahl() < 1 )
  226. error( 20, {}, obj );
  227. ret = new KSGSBoolKlasse( obj, val->tick( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  228. break;
  229. case 35: // void setMausEreignis( Text )
  230. if( 1 )
  231. {
  232. if( parameter->getEintragAnzahl() < 1 )
  233. error( 20, {}, obj );
  234. Text *n = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  235. if( n )
  236. {
  237. mausF = obj->getFunktionId( *n );
  238. n->release();
  239. }
  240. else
  241. mausF = -1;
  242. }
  243. break;
  244. case 36: // void setTastaturEreignis( Text )
  245. if( 1 )
  246. {
  247. if( parameter->getEintragAnzahl() < 1 )
  248. error( 20, {}, obj );
  249. Text *n = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  250. if( n )
  251. {
  252. tastaturF = obj->getFunktionId( *n );
  253. n->release();
  254. }
  255. else
  256. tastaturF = -1;
  257. }
  258. break;
  259. case 37: // void doMausEreignis( MausEreignis )
  260. if( 1 )
  261. {
  262. if( parameter->getEintragAnzahl() < 1 )
  263. error( 20, {}, obj );
  264. MausEreignis me = parameter->z( 0 ) ? parameter->z( 0 )->getMausEreignis() : MausEreignis{ 0, 0, 0, 0, 0, 0 };
  265. val->doMausEreignis( me );
  266. }
  267. break;
  268. case 38: // void doTastaturEreignis( TastaturEreignis )
  269. if( 1 )
  270. {
  271. if( parameter->getEintragAnzahl() < 1 )
  272. error( 20, {}, obj );
  273. TastaturEreignis te = parameter->z( 0 ) ? parameter->z( 0 )->getTastaturEreignis() : TastaturEreignis{ 0, 0, 0 };
  274. val->doTastaturEreignis( te );
  275. }
  276. break;
  277. case 39: // void render( int, int, Bild )
  278. if( 1 )
  279. {
  280. if( parameter->getEintragAnzahl() < 1 )
  281. error( 20, {}, obj );
  282. Bild *b = parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0;
  283. if( b )
  284. {
  285. val->render( *b );
  286. b->release();
  287. }
  288. }
  289. break;
  290. case 40: // int getRFarbe()
  291. ret = new KSGSIntKlasse( obj, val->getRFarbe() );
  292. break;
  293. case 41: // int getRBreite()
  294. ret = new KSGSIntKlasse( obj, val->getRBreite() );
  295. break;
  296. case 42: // Tect getTitel()
  297. ret = new KSGSTextKlasse( obj, val->zTitel() ? val->zTitel()->getText() : "" );
  298. break;
  299. case 43: // int getTSFarbe()
  300. ret = new KSGSIntKlasse( obj, val->getTSFarbe() );
  301. break;
  302. case 44: // int getTSGröße()
  303. ret = new KSGSIntKlasse( obj, val->getTSSize() );
  304. break;
  305. case 45: // int getTBgFarbe()
  306. ret = new KSGSIntKlasse( obj, val->getTBgFarbe() );
  307. break;
  308. case 46: // int getTAfFarbe()
  309. ret = new KSGSIntKlasse( obj, val->getTAfFarbe() );
  310. break;
  311. case 47: // int getTAfStärke()
  312. ret = new KSGSIntKlasse( obj, val->getTAfStrength() );
  313. break;
  314. case 48: // Bild getTBgBild()
  315. ret = new KSGSBildKlasse( obj, val->getTBgBild() );
  316. break;
  317. case 49: // int getTRFarbe()
  318. ret = new KSGSIntKlasse( obj, val->getTRFarbe() );
  319. break;
  320. case 50: // int getTRBreite()
  321. ret = new KSGSIntKlasse( obj, val->getTRBreite() );
  322. break;
  323. case 51: // int getKBgFarbe()
  324. ret = new KSGSIntKlasse( obj, val->getKBgFarbe() );
  325. break;
  326. case 52: // Bild getKBgBild()
  327. ret = new KSGSBildKlasse( obj, val->getKBgBild() );
  328. break;
  329. case 53: // int getKAfFarbe()
  330. ret = new KSGSIntKlasse( obj, val->getKAfFarbe() );
  331. break;
  332. case 54: // int getKAfStärke()
  333. ret = new KSGSIntKlasse( obj, val->getKAfStrength() );
  334. break;
  335. case 55: // int getSBgFarbe()
  336. ret = new KSGSIntKlasse( obj, val->getSBgFarbe() );
  337. break;
  338. case 56: // Bild getSBgBild()
  339. ret = new KSGSBildKlasse( obj, val->getSBgBild() );
  340. break;
  341. case 57: // int getSAfFarbe()
  342. ret = new KSGSIntKlasse( obj, val->getSAfFarbe() );
  343. break;
  344. case 58: // int getSAfStärke()
  345. ret = new KSGSIntKlasse( obj, val->getSAfStrength() );
  346. break;
  347. case 59: // int getSKAfFarbe()
  348. ret = new KSGSIntKlasse( obj, val->getSKAfFarbe() );
  349. break;
  350. case 60: // int getSKAfStärke()
  351. ret = new KSGSIntKlasse( obj, val->getSKAfStrength() );
  352. break;
  353. case 61: // int getMinBreite()
  354. ret = new KSGSIntKlasse( obj, val->getMin().x );
  355. break;
  356. case 62: // int getMinHöhe()
  357. ret = new KSGSIntKlasse( obj, val->getMin().y );
  358. break;
  359. case 63: // int getMaxBreite()
  360. ret = new KSGSIntKlasse( obj, val->getMax().x );
  361. break;
  362. case 64: // int getMaxHöhe()
  363. ret = new KSGSIntKlasse( obj, val->getMax().y );
  364. break;
  365. case 65: // int getKMinBreite()
  366. ret = new KSGSIntKlasse( obj, val->getKMin().x );
  367. break;
  368. case 66: // int getKMinHöhe()
  369. ret = new KSGSIntKlasse( obj, val->getKMin().y );
  370. break;
  371. case 67: // int getKMaxBreite()
  372. ret = new KSGSIntKlasse( obj, val->getKMax().x );
  373. break;
  374. case 68: // int getKMaxHöhe()
  375. ret = new KSGSIntKlasse( obj, val->getKMax().y );
  376. break;
  377. case 69: // bool hatStyle( int )
  378. if( parameter->getEintragAnzahl() < 1 )
  379. error( 20, {}, obj );
  380. ret = new KSGSBoolKlasse( obj, val->hatStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  381. break;
  382. case 70: // bool hatStyleNicht( int )
  383. if( parameter->getEintragAnzahl() < 1 )
  384. error( 20, {}, obj );
  385. ret = new KSGSBoolKlasse( obj, val->hatStyleNicht( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  386. break;
  387. case 71: // Fenster dublizieren()
  388. ret = new KSGSFensterKlasse( obj, (Fenster*)val->dublizieren() );
  389. break;
  390. case 72: // void setToolTipText( Text )
  391. if( 1 )
  392. {
  393. if( parameter->getEintragAnzahl() < 1 )
  394. error( 20, {}, obj );
  395. Text *txt = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  396. val->setToolTipText( txt ? *txt : 0, obj->zBildschirm() );
  397. if( txt )
  398. txt->release();
  399. }
  400. break;
  401. case 73: // void setPosition( int, int )
  402. if( parameter->getEintragAnzahl() < 2 )
  403. error( 20, {}, obj );
  404. val->setPosition( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  405. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  406. break;
  407. case 74: // void setGröße( int, int )
  408. if( parameter->getEintragAnzahl() < 2 )
  409. error( 20, {}, obj );
  410. val->setSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  411. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  412. break;
  413. case 75: // int getBreite()
  414. ret = new KSGSIntKlasse( obj, val->getBreite() );
  415. break;
  416. case 76: // int getHöhe()
  417. ret = new KSGSIntKlasse( obj, val->getHeight() );
  418. break;
  419. case 77: // int getX()
  420. ret = new KSGSIntKlasse( obj, val->getX() );
  421. break;
  422. case 78: // int getY()
  423. ret = new KSGSIntKlasse( obj, val->getY() );
  424. break;
  425. case 79: // Text getToolTipText()
  426. if( 1 )
  427. {
  428. Text *txt = val->zToolTip() ? val->zToolTip()->zText() : 0;
  429. ret = new KSGSTextKlasse( obj, txt ? *txt : "" );
  430. }
  431. break;
  432. default: // unbekannt
  433. error( 19, {}, obj );
  434. break;
  435. }
  436. parameter->release();
  437. return ret;
  438. }
  439. KSGSVariable *KSGSFensterKlasse::doOperator( int id, KSGSVariable *rechts )
  440. {
  441. if( !rechts )
  442. {
  443. error( 3, {}, obj );
  444. return 0;
  445. }
  446. KSGSVariable *ret = 0;
  447. switch( id )
  448. {
  449. case KSGS_O_SET:
  450. if( 1 )
  451. {
  452. val->release();
  453. val = rechts->getFenster();
  454. ret = getThis();
  455. }
  456. break;
  457. }
  458. if( !ret )
  459. error( 21, {}, obj );
  460. if( rechts )
  461. rechts->release();
  462. return ret;
  463. }
  464. bool KSGSFensterKlasse::doMausEreignis( MausEreignis &me )
  465. {
  466. if( mausF < 0 )
  467. return 1;
  468. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  469. parameter->add( new KSGSMausEreignisKlasse( obj, me ) );
  470. KSGSVariable *ret = obj->startFunktion( mausF, parameter );
  471. if( ret )
  472. {
  473. bool r = ret->getBool();
  474. ret->release();
  475. return r;
  476. }
  477. return 1;
  478. }
  479. bool KSGSFensterKlasse::doTastaturEreignis( TastaturEreignis &te )
  480. {
  481. if( tastaturF < 0 )
  482. return 1;
  483. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  484. parameter->add( new KSGSTastaturEreignisKlasse( obj, te ) );
  485. KSGSVariable *ret = obj->startFunktion( tastaturF, parameter );
  486. if( ret )
  487. {
  488. bool r = ret->getBool();
  489. ret->release();
  490. return r;
  491. }
  492. return 1;
  493. }
  494. // constant
  495. Fenster *KSGSFensterKlasse::getVal() const
  496. {
  497. return val->getThis();
  498. }
  499. Fenster *KSGSFensterKlasse::zVal() const
  500. {
  501. return val;
  502. }
  503. // Reference Counting
  504. KSGSVariable *KSGSFensterKlasse::release()
  505. {
  506. ref--;
  507. if( !ref )
  508. delete this;
  509. return 0;
  510. }
  511. // Ereignisse
  512. bool KSGScript::ksgsFensterME( void *var, void *obj, MausEreignis me )
  513. {
  514. if( !var )
  515. return 1;
  516. return ( (KSGSFensterKlasse*)var )->doMausEreignis( me );
  517. }
  518. bool KSGScript::ksgsFensterTE( void *var, void *obj, TastaturEreignis te )
  519. {
  520. if( !var )
  521. return 1;
  522. return ( (KSGSFensterKlasse*)var )->doTastaturEreignis( te );
  523. }