KSGSKnopf.cpp 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. #include "KSGSKnopf.h"
  2. #include "KSGSTyp.h"
  3. #include "../Error/Error.h"
  4. #include "../Main/KSGScriptObj.h"
  5. #include "KSGSMausEreignis.h"
  6. #include "KSGSText.h"
  7. #include "KSGSInt.h"
  8. #include "KSGSBool.h"
  9. #include "KSGSBild.h"
  10. #include <ToolTip.h>
  11. using namespace KSGScript;
  12. // Inhalt der KSGSKnopfKlasse Klasse aus KSGSKnopf.h
  13. // Konstruktor
  14. KSGSKnopfKlasse::KSGSKnopfKlasse( KSGScriptObj *zObj, Knopf *std )
  15. : KSGSKlasseInstanz( KSGS_KNOPF, 0, 0, zObj )
  16. {
  17. mausF = -1;
  18. val = std;
  19. val->setMausEreignisParameter( this );
  20. val->setMausEreignis( ksgsKnopfME );
  21. if( zObj->zSchrift() )
  22. val->setSchriftZ( zObj->getSchrift() );
  23. }
  24. // Destruktor
  25. KSGSKnopfKlasse::~KSGSKnopfKlasse()
  26. {
  27. val->release();
  28. }
  29. // nicht constant
  30. KSGSVariable *KSGSKnopfKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter )
  31. {
  32. KSGSVariable *ret = 0;
  33. switch( id )
  34. {
  35. case 0: // void setText( Text )
  36. if( parameter->getEintragAnzahl() < 1 )
  37. error( 20, {}, obj );
  38. val->setText( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text() );
  39. break;
  40. case 1: // void setHintergrundBild( Bild )
  41. if( parameter->getEintragAnzahl() < 1 )
  42. error( 20, {}, obj );
  43. val->setHintergrundBildZ( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  44. break;
  45. case 2: // void setHintergrundFarbe( int )
  46. if( parameter->getEintragAnzahl() < 1 )
  47. error( 20, {}, obj );
  48. val->setHintergrundFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  49. break;
  50. case 3: // void setSchriftGröße( int )
  51. if( parameter->getEintragAnzahl() < 1 )
  52. error( 20, {}, obj );
  53. val->setSchriftSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  54. break;
  55. case 4: // void setSchriftFarbe( int )
  56. if( parameter->getEintragAnzahl() < 1 )
  57. error( 20, {}, obj );
  58. val->setSchriftFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  59. break;
  60. case 5: // void setAFStärke( int )
  61. if( parameter->getEintragAnzahl() < 1 )
  62. error( 20, {}, obj );
  63. val->setAlphaFeldStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  64. break;
  65. case 6: // void setAFFarbe( int )
  66. if( parameter->getEintragAnzahl() < 1 )
  67. error( 20, {}, obj );
  68. val->setAlphaFeldFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  69. break;
  70. case 7: // void setLRBreite( int )
  71. if( parameter->getEintragAnzahl() < 1 )
  72. error( 20, {}, obj );
  73. val->setLinienRahmenBreite( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  74. break;
  75. case 8: // void setLRFarbe( int )
  76. if( parameter->getEintragAnzahl() < 1 )
  77. error( 20, {}, obj );
  78. val->setLinienRahmenFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  79. break;
  80. case 9: // void setKlickFarbe( int )
  81. if( parameter->getEintragAnzahl() < 1 )
  82. error( 20, {}, obj );
  83. val->setKlickFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  84. break;
  85. case 10: // void setKlickBild( Bild )
  86. if( parameter->getEintragAnzahl() < 1 )
  87. error( 20, {}, obj );
  88. val->setKlickBildZ( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  89. break;
  90. case 11: // void setKBStärke( int )
  91. if( parameter->getEintragAnzahl() < 1 )
  92. error( 20, {}, obj );
  93. val->setKBStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  94. break;
  95. case 12: // void setKBFarbe( int )
  96. if( parameter->getEintragAnzahl() < 1 )
  97. error( 20, {}, obj );
  98. val->setKBFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  99. break;
  100. case 13: // void setStyle( int )
  101. if( parameter->getEintragAnzahl() < 1 )
  102. error( 20, {}, obj );
  103. val->setStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  104. break;
  105. case 14: // void addStyle( int )
  106. if( parameter->getEintragAnzahl() < 1 )
  107. error( 20, {}, obj );
  108. val->addStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  109. break;
  110. case 15: // void löscheStyle( int )
  111. if( parameter->getEintragAnzahl() < 1 )
  112. error( 20, {}, obj );
  113. val->removeStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  114. break;
  115. case 16: // bool tick( double )
  116. if( parameter->getEintragAnzahl() < 1 )
  117. error( 20, {}, obj );
  118. ret = new KSGSBoolKlasse( obj, val->tick( parameter->z( 0 ) ? parameter->z( 0 )->getDouble() : 0 ) );
  119. break;
  120. case 17: // void setMausEreignis( Text )
  121. if( 1 )
  122. {
  123. if( parameter->getEintragAnzahl() < 1 )
  124. error( 20, {}, obj );
  125. Text *n = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  126. if( n )
  127. {
  128. mausF = obj->getFunktionId( *n );
  129. n->release();
  130. }
  131. else
  132. mausF = -1;
  133. }
  134. break;
  135. case 18: // void doMausEreignis( MausEreignis )
  136. if( 1 )
  137. {
  138. if( parameter->getEintragAnzahl() < 1 )
  139. error( 20, {}, obj );
  140. MausEreignis me = parameter->z( 0 ) ? parameter->z( 0 )->getMausEreignis() : MausEreignis{ 0, 0, 0, 0, 0, 0 };
  141. val->doMausEreignis( me );
  142. }
  143. break;
  144. case 19: // void render( int, int, Bild )if( 1 )
  145. {
  146. if( parameter->getEintragAnzahl() < 1 )
  147. error( 20, {}, obj );
  148. Bild *b = parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0;
  149. if( b )
  150. {
  151. val->render( *b );
  152. b->release();
  153. }
  154. }
  155. break;
  156. case 20: // Text getText()
  157. if( 1 )
  158. {
  159. Text *txt = val->getText();
  160. ret = new KSGSTextKlasse( obj, *txt );
  161. txt->release();
  162. }
  163. break;
  164. case 21: // Bild getHintergrundBild()
  165. ret = new KSGSBildKlasse( obj, val->getHintergrundBild() );
  166. break;
  167. case 22: // int getHintergrundFarbe()
  168. ret = new KSGSIntKlasse( obj, val->getHintergrundFarbe() );
  169. break;
  170. case 23: // int getSchriftGröße()
  171. ret = new KSGSIntKlasse( obj, val->getSchriftSize() );
  172. break;
  173. case 24: // int getSchriftFarbe()
  174. ret = new KSGSIntKlasse( obj, val->getSchriftFarbe() );
  175. break;
  176. case 25: // int getAFStärke()
  177. ret = new KSGSIntKlasse( obj, val->getAlphaFeldStrength() );
  178. break;
  179. case 26: // int getAFFarbe()
  180. ret = new KSGSIntKlasse( obj, val->getAlphaFeldFarbe() );
  181. break;
  182. case 27: // int getLRBreite()
  183. ret = new KSGSIntKlasse( obj, val->getLinienRahmenBreite() );
  184. break;
  185. case 28: // int getLRFarbe()
  186. ret = new KSGSIntKlasse( obj, val->getLinienRahmenFarbe() );
  187. break;
  188. case 29: // int getKlickFarbe()
  189. ret = new KSGSIntKlasse( obj, val->getKlickFarbe() );
  190. break;
  191. case 30: // Bild getKlickBild()
  192. ret = new KSGSBildKlasse( obj, val->getKlickBild() );
  193. break;
  194. case 31: // int getKBFarbe()
  195. ret = new KSGSIntKlasse( obj, val->getKBFarbe() );
  196. break;
  197. case 32: // int getKBStärke()
  198. ret = new KSGSIntKlasse( obj, val->getKBStrength() );
  199. break;
  200. case 33: // bool hatStyle( int )
  201. ret = new KSGSBoolKlasse( obj, val->hatStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  202. break;
  203. case 34: // bool hatStyleNicht( int )
  204. ret = new KSGSBoolKlasse( obj, val->hatStyleNicht( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  205. break;
  206. case 35: // Knopf dublizieren()
  207. ret = new KSGSKnopfKlasse( obj, (Knopf*)val->dublizieren() );
  208. break;
  209. case 36: // void setToolTipText( Text )
  210. if( 1 )
  211. {
  212. if( parameter->getEintragAnzahl() < 1 )
  213. error( 20, {}, obj );
  214. Text *txt = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  215. val->setToolTipText( txt ? *txt : 0, obj->zBildschirm() );
  216. if( txt )
  217. txt->release();
  218. }
  219. break;
  220. case 37: // void setPosition( int, int )
  221. if( parameter->getEintragAnzahl() < 2 )
  222. error( 20, {}, obj );
  223. val->setPosition( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  224. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  225. break;
  226. case 38: // void setGröße( int, int )
  227. if( parameter->getEintragAnzahl() < 2 )
  228. error( 20, {}, obj );
  229. val->setSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  230. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  231. break;
  232. case 39: // int getBreite()
  233. ret = new KSGSIntKlasse( obj, val->getBreite() );
  234. break;
  235. case 40: // int getHöhe()
  236. ret = new KSGSIntKlasse( obj, val->getHeight() );
  237. break;
  238. case 41: // int getX()
  239. ret = new KSGSIntKlasse( obj, val->getX() );
  240. break;
  241. case 42: // int getY()
  242. ret = new KSGSIntKlasse( obj, val->getY() );
  243. break;
  244. case 43: // Text getToolTipText()
  245. if( 1 )
  246. {
  247. Text *txt = val->zToolTip() ? val->zToolTip()->zText() : 0;
  248. ret = new KSGSTextKlasse( obj, txt ? *txt : "" );
  249. }
  250. break;
  251. default: // unbekannt
  252. error( 19, {}, obj );
  253. break;
  254. }
  255. parameter->release();
  256. return ret;
  257. }
  258. KSGSVariable *KSGSKnopfKlasse::doOperator( int id, KSGSVariable *rechts )
  259. {
  260. if( !rechts )
  261. {
  262. error( 3, {}, obj );
  263. return 0;
  264. }
  265. KSGSVariable *ret = 0;
  266. switch( id )
  267. {
  268. case KSGS_O_SET:
  269. if( 1 )
  270. {
  271. val->release();
  272. val = rechts->getKnopf();
  273. ret = getThis();
  274. }
  275. break;
  276. }
  277. if( !ret )
  278. error( 21, {}, obj );
  279. if( rechts )
  280. rechts->release();
  281. return ret;
  282. }
  283. bool KSGSKnopfKlasse::doMausEreignis( MausEreignis &me )
  284. {
  285. if( mausF < 0 )
  286. return 1;
  287. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  288. parameter->add( new KSGSMausEreignisKlasse( obj, me ) );
  289. KSGSVariable *ret = obj->startFunktion( mausF, parameter );
  290. if( ret )
  291. {
  292. bool r = ret->getBool();
  293. ret->release();
  294. return r;
  295. }
  296. return 1;
  297. }
  298. // constant
  299. Knopf *KSGSKnopfKlasse::getVal() const
  300. {
  301. return val->getThis();
  302. }
  303. Knopf *KSGSKnopfKlasse::zVal() const
  304. {
  305. return val;
  306. }
  307. // Reference Counting
  308. KSGSVariable *KSGSKnopfKlasse::release()
  309. {
  310. ref--;
  311. if( !ref )
  312. delete this;
  313. return 0;
  314. }
  315. // Ereignisse
  316. bool KSGScript::ksgsKnopfME( void *var, void *obj, MausEreignis me )
  317. {
  318. if( !var )
  319. return 1;
  320. return ( (KSGSKnopfKlasse*)var )->doMausEreignis( me );
  321. }