KSGSTextFeld.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  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( KSGScriptProcessor *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( dynamic_cast<Schrift *>( zObj->zSchrift()->getThis() ) );
  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 ) ? (unsigned char)parameter->z( 0 )->getInt() : (unsigned char)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, 1, 0, 0 };
  180. val->doPublicMausEreignis( 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 ? (const char *)*txt : 0, obj->zBildschirm(), obj->zSchrift() );
  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: // void setGrößeNachText()
  290. if( 1 )
  291. {
  292. TextRenderer *t = val->zTextRenderer();
  293. if( t )
  294. {
  295. t->setSchriftSize( val->getSchriftSize() );
  296. val->setSize( t->getTextBreite( val->zText()->getText() ), t->getTextHeight( val->zText()->getText() ) );
  297. }
  298. }
  299. break;
  300. case 46: // void setTextNachGröße()
  301. if( 1 )
  302. {
  303. TextRenderer *t = val->zTextRenderer();
  304. if( t )
  305. {
  306. t->setSchriftSize( val->getSchriftSize() );
  307. t->textFormatieren( val->zText(), val->getBreite() );
  308. }
  309. }
  310. break;
  311. default: // unbekannt
  312. error( 19, {}, obj );
  313. break;
  314. }
  315. parameter->release();
  316. return ret;
  317. }
  318. KSGSVariable *KSGSTextFeldKlasse::doOperator( int id, KSGSVariable *rechts )
  319. {
  320. if( !rechts )
  321. {
  322. error( 3, {}, obj );
  323. return 0;
  324. }
  325. KSGSVariable *ret = 0;
  326. switch( id )
  327. {
  328. case KSGS_O_SET:
  329. if( 1 )
  330. {
  331. val->release();
  332. val = rechts->getTextFeld();
  333. ret = dynamic_cast<KSGSVariable *>( getThis() );
  334. }
  335. break;
  336. }
  337. if( !ret )
  338. error( 21, {}, obj );
  339. if( rechts )
  340. rechts->release();
  341. return ret;
  342. }
  343. bool KSGSTextFeldKlasse::doMausEreignis( MausEreignis &me )
  344. {
  345. if( mausF < 0 )
  346. return 1;
  347. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  348. parameter->add( new KSGSMausEreignisKlasse( obj, me ) );
  349. KSGSVariable *ret = obj->startFunktion( mausF, parameter );
  350. if( ret )
  351. {
  352. bool r = ret->getBool();
  353. ret->release();
  354. return r;
  355. }
  356. return 1;
  357. }
  358. bool KSGSTextFeldKlasse::doTastaturEreignis( TastaturEreignis &te )
  359. {
  360. if( tastaturF < 0 )
  361. return 1;
  362. RCArray< KSGSVariable > *parameter = new RCArray< KSGSVariable >();
  363. parameter->add( new KSGSTastaturEreignisKlasse( obj, te ) );
  364. KSGSVariable *ret = obj->startFunktion( tastaturF, parameter );
  365. if( ret )
  366. {
  367. bool r = ret->getBool();
  368. ret->release();
  369. return r;
  370. }
  371. return 1;
  372. }
  373. // constant
  374. TextFeld *KSGSTextFeldKlasse::getVal() const
  375. {
  376. return dynamic_cast<TextFeld *>( val->getThis() );
  377. }
  378. TextFeld *KSGSTextFeldKlasse::zVal() const
  379. {
  380. return val;
  381. }
  382. // Ereignisse
  383. bool KSGScript::ksgsTextFeldME( void *var, void *obj, MausEreignis me )
  384. {
  385. if( !var )
  386. return 1;
  387. return ( (KSGSTextFeldKlasse *)var )->doMausEreignis( me );
  388. }
  389. bool KSGScript::ksgsTextFeldTE( void *var, void *obj, TastaturEreignis te )
  390. {
  391. if( !var )
  392. return 1;
  393. return ( (KSGSTextFeldKlasse *)var )->doTastaturEreignis( te );
  394. }