KSGSBildZ.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. #include "KSGSBildZ.h"
  2. #include "KSGSMausEreignis.h"
  3. #include "../Main/KSGScriptObj.h"
  4. #include "../Error/Error.h"
  5. #include "KSGSTyp.h"
  6. #include "KSGSBool.h"
  7. #include "KSGSBild.h"
  8. #include <ToolTip.h>
  9. #include "KSGSText.h"
  10. #include "KSGSInt.h"
  11. using namespace KSGScript;
  12. // Inhalt der KSGSBildZKlasse Klasse aus KSGSBildZ.h
  13. // Konstruktor
  14. KSGSBildZKlasse::KSGSBildZKlasse( KSGScriptObj *zObj, BildZ *std )
  15. : KSGSKlasseInstanz( KSGS_BILDO, 0, 0, zObj )
  16. {
  17. val = std;
  18. val->setMausEreignisParameter( this );
  19. val->setMausEreignis( ksgsBildZME );
  20. mausF = -1;
  21. }
  22. // Destruktor
  23. KSGSBildZKlasse::~KSGSBildZKlasse()
  24. {
  25. val->release();
  26. }
  27. // nicht constant
  28. KSGSVariable *KSGSBildZKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter )
  29. {
  30. KSGSVariable *ret = 0;
  31. switch( id )
  32. {
  33. case 0: // void setBild( Bild )
  34. if( parameter->getEintragAnzahl() < 1 )
  35. error( 20, {}, obj );
  36. val->setBild( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  37. break;
  38. case 1: // void setRFarbe( int )
  39. if( parameter->getEintragAnzahl() < 1 )
  40. error( 20, {}, obj );
  41. val->setLinienRahmenFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  42. break;
  43. case 2: // void setRBreite( int )
  44. if( parameter->getEintragAnzahl() < 1 )
  45. error( 20, {}, obj );
  46. val->setLinienRahmenBreite( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  47. break;
  48. case 3: // void setStyle( int )
  49. if( parameter->getEintragAnzahl() < 1 )
  50. error( 20, {}, obj );
  51. val->setStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  52. break;
  53. case 4: // void addStyle( int )
  54. if( parameter->getEintragAnzahl() < 1 )
  55. error( 20, {}, obj );
  56. val->addStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  57. break;
  58. case 5: // void löscheStyle( int )
  59. if( parameter->getEintragAnzahl() < 1 )
  60. error( 20, {}, obj );
  61. val->setStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0, 0 );
  62. break;
  63. case 6: // bool tick( double )
  64. if( parameter->getEintragAnzahl() < 1 )
  65. error( 20, {}, obj );
  66. ret = new KSGSBoolKlasse( obj, val->tick( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  67. break;
  68. case 7: // void setMausEreignis( Text )
  69. if( 1 )
  70. {
  71. if( parameter->getEintragAnzahl() < 1 )
  72. error( 20, {}, obj );
  73. Text *n = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  74. if( n )
  75. {
  76. mausF = obj->getFunktionId( *n );
  77. n->release();
  78. }
  79. else
  80. mausF = -1;
  81. }
  82. break;
  83. case 8: // void doMausEreignis( MausEreignis )
  84. if( 1 )
  85. {
  86. if( parameter->getEintragAnzahl() < 1 )
  87. error( 20, {}, obj );
  88. MausEreignis me = parameter->z( 0 ) ? parameter->z( 0 )->getMausEreignis() : MausEreignis{ 0, 0, 0, 0, 0, 0 };
  89. val->doMausEreignis( me );
  90. }
  91. break;
  92. case 9: // void render( int, int, Bild )
  93. if( 1 )
  94. {
  95. if( parameter->getEintragAnzahl() < 1 )
  96. error( 20, {}, obj );
  97. Bild *b = parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0;
  98. if( b )
  99. {
  100. val->render( *b );
  101. b->release();
  102. }
  103. }
  104. break;
  105. case 10: // Bild getBild()
  106. ret = new KSGSBildKlasse( obj, val->getBild() );
  107. break;
  108. case 11: // bool hatStyle( int )
  109. ret = new KSGSBoolKlasse( obj, val->hatStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  110. break;
  111. case 12: // bool hatStyleNicht( int )
  112. ret = new KSGSBoolKlasse( obj, val->hatStyleNicht( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  113. break;
  114. case 13: // BildZ dublizieren()
  115. ret = new KSGSBildZKlasse( obj, (BildZ*)val->dublizieren() );
  116. break;
  117. case 14: // void setToolTipText( Text )
  118. if( 1 )
  119. {
  120. if( parameter->getEintragAnzahl() < 1 )
  121. error( 20, {}, obj );
  122. Text *txt = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  123. val->setToolTipText( txt ? *txt : 0, obj->zBildschirm() );
  124. if( txt )
  125. txt->release();
  126. }
  127. break;
  128. case 15: // void setPosition( int, int )
  129. if( parameter->getEintragAnzahl() < 2 )
  130. error( 20, {}, obj );
  131. val->setPosition( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  132. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  133. break;
  134. case 16: // void setGröße( int, int )
  135. if( parameter->getEintragAnzahl() < 2 )
  136. error( 20, {}, obj );
  137. val->setSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  138. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  139. break;
  140. case 17: // int getBreite()
  141. ret = new KSGSIntKlasse( obj, val->getBreite() );
  142. break;
  143. case 18: // int getHöhe()
  144. ret = new KSGSIntKlasse( obj, val->getHeight() );
  145. break;
  146. case 19: // int getX()
  147. ret = new KSGSIntKlasse( obj, val->getX() );
  148. break;
  149. case 20: // int getY()
  150. ret = new KSGSIntKlasse( obj, val->getY() );
  151. break;
  152. case 21: // Text getToolTipText()
  153. if( 1 )
  154. {
  155. Text *txt = val->zToolTip() ? val->zToolTip()->zText() : 0;
  156. ret = new KSGSTextKlasse( obj, txt ? *txt : "" );
  157. }
  158. break;
  159. default: // unbekannt
  160. error( 19, {}, obj );
  161. break;
  162. }
  163. parameter->release();
  164. return ret;
  165. }
  166. KSGSVariable *KSGSBildZKlasse::doOperator( int id, KSGSVariable *rechts )
  167. {
  168. if( !rechts )
  169. {
  170. error( 3, {}, obj );
  171. return 0;
  172. }
  173. KSGSVariable *ret = 0;
  174. switch( id )
  175. {
  176. case KSGS_O_SET:
  177. if( 1 )
  178. {
  179. val->release();
  180. val = rechts->getBildZ();
  181. ret = getThis();
  182. }
  183. break;
  184. }
  185. if( !ret )
  186. error( 21, {}, obj );
  187. if( rechts )
  188. rechts->release();
  189. return ret;
  190. }
  191. bool KSGSBildZKlasse::doMausEreignis( MausEreignis &me )
  192. {
  193. if( mausF < 0 )
  194. return 1;
  195. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  196. parameter->add( new KSGSMausEreignisKlasse( obj, me ) );
  197. KSGSVariable *ret = obj->startFunktion( mausF, parameter );
  198. if( ret )
  199. {
  200. bool r = ret->getBool();
  201. ret->release();
  202. return r;
  203. }
  204. return 1;
  205. }
  206. // constant
  207. BildZ *KSGSBildZKlasse::getVal() const
  208. {
  209. return val->getThis();
  210. }
  211. BildZ *KSGSBildZKlasse::zVal() const
  212. {
  213. return val;
  214. }
  215. // Reference Counting
  216. KSGSVariable *KSGSBildZKlasse::release()
  217. {
  218. ref--;
  219. if( !ref )
  220. delete this;
  221. return 0;
  222. }
  223. // Ereignisse
  224. bool KSGScript::ksgsBildZME( void *var, void *obj, MausEreignis me )
  225. {
  226. if( !var )
  227. return 1;
  228. return ( (KSGSBildZKlasse*)var )->doMausEreignis( me );
  229. }