KSGSTextFeld.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. #include "KSGSTextFeld.h"
  2. #include "KSGSTyp.h"
  3. #include "../Error/Error.h"
  4. #include "KSGSBool.h"
  5. #include "KSGSText.h"
  6. #include "KSGSBild.h"
  7. #include "KSGSInt.h"
  8. #include "KSGSBool.h"
  9. #include "../Main/KSGScriptObj.h"
  10. #include "KSGSMausEreignis.h"
  11. #include "KSGSTastaturEreignis.h"
  12. #include <ToolTip.h>
  13. using namespace KSGScript;
  14. // Inhalt der KSGSTextFeldKlasse Klasse aus KSGSTextFeld.h
  15. // Konstruktor
  16. KSGSTextFeldKlasse::KSGSTextFeldKlasse( KSGScriptObj *zObj, TextFeld *std )
  17. : KSGSKlasseInstanz( KSGS_TEXTFELD, 0, 0, zObj )
  18. {
  19. val = std;
  20. mausF = -1;
  21. tastaturF = -1;
  22. val->setMausEreignisParameter( this );
  23. val->setMausEreignis( ksgsTextFeldME );
  24. val->setTastaturEreignisParameter( this );
  25. val->setTastaturEreignis( ksgsTextFeldTE );
  26. if( zObj->zSchrift() )
  27. val->setSchriftZ( zObj->getSchrift() );
  28. }
  29. // Destruktor
  30. KSGSTextFeldKlasse::~KSGSTextFeldKlasse()
  31. {
  32. val->release();
  33. }
  34. // nicht constant
  35. KSGSVariable *KSGSTextFeldKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter )
  36. {
  37. KSGSVariable *ret = 0;
  38. switch( id )
  39. {
  40. case 0: // void setText( Text )
  41. if( parameter->getEintragAnzahl() < 1 )
  42. error( 20, {}, obj );
  43. val->setText( parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text() );
  44. break;
  45. case 1: // void addZeile( Text )
  46. if( 1 )
  47. {
  48. if( parameter->getEintragAnzahl() < 1 )
  49. error( 20, {}, obj );
  50. Text *txt = parameter->z( 0 ) ? parameter->z( 0 )->getText() : new Text();
  51. val->addZeile( *txt );
  52. txt->release();
  53. }
  54. break;
  55. case 2: // void setAuswahl( int, int )
  56. if( parameter->getEintragAnzahl() < 2 )
  57. error( 20, {}, obj );
  58. val->setAuswahl( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  59. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  60. break;
  61. case 3: // void setHintergrundBild( Bild )
  62. if( parameter->getEintragAnzahl() < 1 )
  63. error( 20, {}, obj );
  64. val->setHintergrundBildZ( parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0 );
  65. break;
  66. case 4: // void setHintergrundFarbe( int )
  67. if( parameter->getEintragAnzahl() < 1 )
  68. error( 20, {}, obj );
  69. val->setHintergrundFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  70. break;
  71. case 5: // void setSchriftGröße( int )
  72. if( parameter->getEintragAnzahl() < 1 )
  73. error( 20, {}, obj );
  74. val->setSchriftSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  75. break;
  76. case 6: // void setSchriftFarbe( int )
  77. if( parameter->getEintragAnzahl() < 1 )
  78. error( 20, {}, obj );
  79. val->setSchriftFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  80. break;
  81. case 7: // void setAFStärke( int )
  82. if( parameter->getEintragAnzahl() < 1 )
  83. error( 20, {}, obj );
  84. val->setAlphaFeldStrength( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  85. break;
  86. case 8: // void setAFFarbe( int )
  87. if( parameter->getEintragAnzahl() < 1 )
  88. error( 20, {}, obj );
  89. val->setAlphaFeldFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  90. break;
  91. case 9: // void setLRBreite( int )
  92. if( parameter->getEintragAnzahl() < 1 )
  93. error( 20, {}, obj );
  94. val->setRahmenBreite( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  95. break;
  96. case 10: // void setLRFarbe( int )
  97. if( parameter->getEintragAnzahl() < 1 )
  98. error( 20, {}, obj );
  99. val->setRahmenFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  100. break;
  101. case 11: // void setShowChar( int )
  102. if( parameter->getEintragAnzahl() < 1 )
  103. error( 20, {}, obj );
  104. val->setSchowChar( (char)( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  105. break;
  106. case 12: // void setVKlickScroll( int )
  107. if( parameter->getEintragAnzahl() < 1 )
  108. error( 20, {}, obj );
  109. val->setVertikalKlickScroll( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  110. break;
  111. case 13: // void setVScrollPos( int )
  112. if( parameter->getEintragAnzahl() < 1 )
  113. error( 20, {}, obj );
  114. val->setVertikalScrollPos( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  115. break;
  116. case 14: // void setVScrollZuZeile( int )
  117. if( parameter->getEintragAnzahl() < 1 )
  118. error( 20, {}, obj );
  119. val->setVScrollZuZeile( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  120. break;
  121. case 15: // void updateVScroll()
  122. val->updateVScroll();
  123. break;
  124. case 16: // void setStyle( int )
  125. if( parameter->getEintragAnzahl() < 1 )
  126. error( 20, {}, obj );
  127. val->setStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  128. break;
  129. case 17: // void addStyle( int )
  130. if( parameter->getEintragAnzahl() < 1 )
  131. error( 20, {}, obj );
  132. val->addStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  133. break;
  134. case 18: // void löscheStyle( int )
  135. if( parameter->getEintragAnzahl() < 1 )
  136. error( 20, {}, obj );
  137. val->removeStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
  138. break;
  139. case 19: // bool tick( double )
  140. if( parameter->getEintragAnzahl() < 1 )
  141. error( 20, {}, obj );
  142. ret = new KSGSBoolKlasse( obj, val->tick( parameter->z( 0 ) ? parameter->z( 0 )->getDouble() : 0 ) );
  143. break;
  144. case 20: // void setMausEreignis( Text )
  145. if( 1 )
  146. {
  147. if( parameter->getEintragAnzahl() < 1 )
  148. error( 20, {}, obj );
  149. Text *n = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  150. if( n )
  151. {
  152. mausF = obj->getFunktionId( *n );
  153. n->release();
  154. }
  155. else
  156. mausF = -1;
  157. }
  158. break;
  159. case 21: // void setTastaturEreignis( Text )
  160. if( 1 )
  161. {
  162. if( parameter->getEintragAnzahl() < 1 )
  163. error( 20, {}, obj );
  164. Text *n = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  165. if( n )
  166. {
  167. tastaturF = obj->getFunktionId( *n );
  168. n->release();
  169. }
  170. else
  171. tastaturF = -1;
  172. }
  173. break;
  174. case 22: // void doMausEreignis( MausEreignis )
  175. if( 1 )
  176. {
  177. if( parameter->getEintragAnzahl() < 1 )
  178. error( 20, {}, obj );
  179. MausEreignis me = parameter->z( 0 ) ? parameter->z( 0 )->getMausEreignis() : MausEreignis{ 0, 0, 0, 0, 0, 0 };
  180. val->doMausEreignis( me );
  181. }
  182. break;
  183. case 23: // void doTastaturEreignis( TastaturEreignis )
  184. if( 1 )
  185. {
  186. if( parameter->getEintragAnzahl() < 1 )
  187. error( 20, {}, obj );
  188. TastaturEreignis te = parameter->z( 0 ) ? parameter->z( 0 )->getTastaturEreignis() : TastaturEreignis{ 0, 0, 0 };
  189. val->doTastaturEreignis( te );
  190. }
  191. break;
  192. case 24: // void render( int, int, Bild )
  193. if( 1 )
  194. {
  195. if( parameter->getEintragAnzahl() < 1 )
  196. error( 20, {}, obj );
  197. Bild *b = parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0;
  198. if( b )
  199. {
  200. val->render( *b );
  201. b->release();
  202. }
  203. }
  204. break;
  205. case 25: // Text getText()
  206. if( 1 )
  207. {
  208. Text *txt = val->getText();
  209. ret = new KSGSTextKlasse( obj, *txt );
  210. txt->release();
  211. }
  212. break;
  213. case 26: // Bild getHintergrundBild()
  214. if( val->zHintergrundBild() )
  215. ret = new KSGSBildKlasse( obj, val->getHintergrundBild() );
  216. break;
  217. case 27: // int getHintergrundFarbe()
  218. ret = new KSGSIntKlasse( obj, val->getHintergrundFarbe() );
  219. break;
  220. case 28: // int getSchriftGröße()
  221. ret = new KSGSIntKlasse( obj, val->getSchriftSize() );
  222. break;
  223. case 29: // int getSchriftFarbe()
  224. ret = new KSGSIntKlasse( obj, val->getSchriftFarbe() );
  225. break;
  226. case 30: // int getAFStärke()
  227. ret = new KSGSIntKlasse( obj, val->getAlphaFeldStrength() );
  228. break;
  229. case 31: // int getAFFarbe()
  230. ret = new KSGSIntKlasse( obj, val->getAlphaFeldFarbe() );
  231. break;
  232. case 32: // int getLRBreite()
  233. ret = new KSGSIntKlasse( obj, val->getRahmenBreite() );
  234. break;
  235. case 33: // int getLRFarbe()
  236. ret = new KSGSIntKlasse( obj, val->getRahmenFarbe() );
  237. break;
  238. case 34: // int getShowChar()
  239. ret = new KSGSIntKlasse( obj, val->getShowChar() );
  240. break;
  241. case 35: // bool hatStyle( int )
  242. if( parameter->getEintragAnzahl() < 1 )
  243. error( 20, {}, obj );
  244. ret = new KSGSBoolKlasse( obj, val->hatStyle( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  245. break;
  246. case 36: // bool hatStyleNicht( int )
  247. if( parameter->getEintragAnzahl() < 1 )
  248. error( 20, {}, obj );
  249. ret = new KSGSBoolKlasse( obj, val->hatStyleNicht( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 ) );
  250. break;
  251. case 37: // TextFeld dublizieren()
  252. ret = new KSGSTextFeldKlasse( obj, (TextFeld*)val->dublizieren() );
  253. break;
  254. case 38: // void setToolTipText( Text )
  255. if( 1 )
  256. {
  257. if( parameter->getEintragAnzahl() < 1 )
  258. error( 20, {}, obj );
  259. Text *txt = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
  260. val->setToolTipText( txt ? *txt : 0, obj->zBildschirm() );
  261. if( txt )
  262. txt->release();
  263. }
  264. break;
  265. case 39: // void setPosition( int, int )
  266. if( parameter->getEintragAnzahl() < 2 )
  267. error( 20, {}, obj );
  268. val->setPosition( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  269. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  270. break;
  271. case 40: // void setGröße( int, int )
  272. if( parameter->getEintragAnzahl() < 2 )
  273. error( 20, {}, obj );
  274. val->setSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
  275. parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
  276. break;
  277. case 41: // int getBreite()
  278. ret = new KSGSIntKlasse( obj, val->getBreite() );
  279. break;
  280. case 42: // int getHöhe()
  281. ret = new KSGSIntKlasse( obj, val->getHeight() );
  282. break;
  283. case 43: // int getX()
  284. ret = new KSGSIntKlasse( obj, val->getX() );
  285. break;
  286. case 44: // int getY()
  287. ret = new KSGSIntKlasse( obj, val->getY() );
  288. break;
  289. case 45: // Text getToolTipText()
  290. if( 1 )
  291. {
  292. Text *txt = val->zToolTip() ? val->zToolTip()->zText() : 0;
  293. ret = new KSGSTextKlasse( obj, txt ? *txt : "" );
  294. }
  295. break;
  296. case 46: // void setGrößeNachText()
  297. if( 1 )
  298. {
  299. TextRenderer *t = val->zTextRenderer();
  300. if( t )
  301. {
  302. t->setSchriftSize( val->getSchriftSize() );
  303. val->setSize( t->getTextBreite( val->zText()->getText() ), t->getTextHeight( val->zText()->getText() ) );
  304. }
  305. }
  306. break;
  307. case 47: // void setTextNachGröße()
  308. if( 1 )
  309. {
  310. TextRenderer *t = val->zTextRenderer();
  311. if( t )
  312. {
  313. t->setSchriftSize( val->getSchriftSize() );
  314. t->textFormatieren( val->zText(), val->getBreite() );
  315. }
  316. }
  317. break;
  318. default: // unbekannt
  319. error( 19, {}, obj );
  320. break;
  321. }
  322. parameter->release();
  323. return ret;
  324. }
  325. KSGSVariable *KSGSTextFeldKlasse::doOperator( int id, KSGSVariable *rechts )
  326. {
  327. if( !rechts )
  328. {
  329. error( 3, {}, obj );
  330. return 0;
  331. }
  332. KSGSVariable *ret = 0;
  333. switch( id )
  334. {
  335. case KSGS_O_SET:
  336. if( 1 )
  337. {
  338. val->release();
  339. val = rechts->getTextFeld();
  340. ret = getThis();
  341. }
  342. break;
  343. }
  344. if( !ret )
  345. error( 21, {}, obj );
  346. if( rechts )
  347. rechts->release();
  348. return ret;
  349. }
  350. bool KSGSTextFeldKlasse::doMausEreignis( MausEreignis &me )
  351. {
  352. if( mausF < 0 )
  353. return 1;
  354. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  355. parameter->add( new KSGSMausEreignisKlasse( obj, me ) );
  356. KSGSVariable *ret = obj->startFunktion( mausF, parameter );
  357. if( ret )
  358. {
  359. bool r = ret->getBool();
  360. ret->release();
  361. return r;
  362. }
  363. return 1;
  364. }
  365. bool KSGSTextFeldKlasse::doTastaturEreignis( TastaturEreignis &te )
  366. {
  367. if( tastaturF < 0 )
  368. return 1;
  369. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  370. parameter->add( new KSGSTastaturEreignisKlasse( obj, te ) );
  371. KSGSVariable *ret = obj->startFunktion( tastaturF, parameter );
  372. if( ret )
  373. {
  374. bool r = ret->getBool();
  375. ret->release();
  376. return r;
  377. }
  378. return 1;
  379. }
  380. // constant
  381. TextFeld *KSGSTextFeldKlasse::getVal() const
  382. {
  383. return (TextFeld*)val->getThis();
  384. }
  385. TextFeld *KSGSTextFeldKlasse::zVal() const
  386. {
  387. return val;
  388. }
  389. // Reference Counting
  390. KSGSVariable *KSGSTextFeldKlasse::release()
  391. {
  392. ref--;
  393. if( !ref )
  394. delete this;
  395. return 0;
  396. }
  397. // Ereignisse
  398. bool KSGScript::ksgsTextFeldME( void *var, void *obj, MausEreignis me )
  399. {
  400. if( !var )
  401. return 1;
  402. return ( (KSGSTextFeldKlasse*)var )->doMausEreignis( me );
  403. }
  404. bool KSGScript::ksgsTextFeldTE( void *var, void *obj, TastaturEreignis te )
  405. {
  406. if( !var )
  407. return 1;
  408. return ( (KSGSTextFeldKlasse*)var )->doTastaturEreignis( te );
  409. }