KSGSTextFeld.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  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->setLinienRahmenBreite( 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->setLinienRahmenFarbe( 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->getLinienRahmenBreite() );
  234. break;
  235. case 33: // int getLRFarbe()
  236. ret = new KSGSIntKlasse( obj, val->getLinienRahmenFarbe() );
  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. Schrift *s = val->zSchrift();
  300. if( s )
  301. {
  302. s->lock();
  303. s->setSchriftSize( val->getSchriftSize() );
  304. val->setSize( s->getTextBreite( val->zText() ), s->getTextHeight( val->zText() ) );
  305. s->unlock();
  306. }
  307. }
  308. break;
  309. case 47: // void setTextNachGröße()
  310. if( 1 )
  311. {
  312. Schrift *s = val->zSchrift();
  313. if( s )
  314. {
  315. val->lockZeichnung();
  316. s->textFormatieren( val->zText(), val->getBreite(), val->getSchriftSize() );
  317. val->unlockZeichnung();
  318. }
  319. }
  320. break;
  321. default: // unbekannt
  322. error( 19, {}, obj );
  323. break;
  324. }
  325. parameter->release();
  326. return ret;
  327. }
  328. KSGSVariable *KSGSTextFeldKlasse::doOperator( int id, KSGSVariable *rechts )
  329. {
  330. if( !rechts )
  331. {
  332. error( 3, {}, obj );
  333. return 0;
  334. }
  335. KSGSVariable *ret = 0;
  336. switch( id )
  337. {
  338. case KSGS_O_SET:
  339. if( 1 )
  340. {
  341. val->release();
  342. val = rechts->getTextFeld();
  343. ret = getThis();
  344. }
  345. break;
  346. }
  347. if( !ret )
  348. error( 21, {}, obj );
  349. if( rechts )
  350. rechts->release();
  351. return ret;
  352. }
  353. bool KSGSTextFeldKlasse::doMausEreignis( MausEreignis &me )
  354. {
  355. if( mausF < 0 )
  356. return 1;
  357. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  358. parameter->add( new KSGSMausEreignisKlasse( obj, me ) );
  359. KSGSVariable *ret = obj->startFunktion( mausF, parameter );
  360. if( ret )
  361. {
  362. bool r = ret->getBool();
  363. ret->release();
  364. return r;
  365. }
  366. return 1;
  367. }
  368. bool KSGSTextFeldKlasse::doTastaturEreignis( TastaturEreignis &te )
  369. {
  370. if( tastaturF < 0 )
  371. return 1;
  372. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  373. parameter->add( new KSGSTastaturEreignisKlasse( obj, te ) );
  374. KSGSVariable *ret = obj->startFunktion( tastaturF, parameter );
  375. if( ret )
  376. {
  377. bool r = ret->getBool();
  378. ret->release();
  379. return r;
  380. }
  381. return 1;
  382. }
  383. // constant
  384. TextFeld *KSGSTextFeldKlasse::getVal() const
  385. {
  386. return val->getThis();
  387. }
  388. TextFeld *KSGSTextFeldKlasse::zVal() const
  389. {
  390. return val;
  391. }
  392. // Reference Counting
  393. KSGSVariable *KSGSTextFeldKlasse::release()
  394. {
  395. ref--;
  396. if( !ref )
  397. delete this;
  398. return 0;
  399. }
  400. // Ereignisse
  401. bool KSGScript::ksgsTextFeldME( void *var, void *obj, MausEreignis me )
  402. {
  403. if( !var )
  404. return 1;
  405. return ( (KSGSTextFeldKlasse*)var )->doMausEreignis( me );
  406. }
  407. bool KSGScript::ksgsTextFeldTE( void *var, void *obj, TastaturEreignis te )
  408. {
  409. if( !var )
  410. return 1;
  411. return ( (KSGSTextFeldKlasse*)var )->doTastaturEreignis( te );
  412. }