AuswahlBox.cpp 69 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101
  1. #include "AuswahlBox.h"
  2. #include "AlphaFeld.h"
  3. #include "Bild.h"
  4. #include "Knopf.h"
  5. #include "MausEreignis.h"
  6. #include "Rahmen.h"
  7. #include "Schrift.h"
  8. #include "Scroll.h"
  9. #include "TastaturEreignis.h"
  10. #include "Text.h"
  11. #include "TextFeld.h"
  12. #include "ToolTip.h"
  13. using namespace Framework;
  14. // Inhalt der AuswahlBox Klasse aus AuswahlBox.h
  15. // Konstruktor
  16. AuswahlBox::AuswahlBox()
  17. : ZeichnungHintergrund(),
  18. textRd(0),
  19. msStyle(0),
  20. members(new RCArray<TextFeld>()),
  21. ausfahren(new Knopf()),
  22. auswRahmen(new LRahmen()),
  23. auswBgF(0xFF000000),
  24. auswBgB(0),
  25. auswAf(new AlphaFeld()),
  26. msAuswRahmen(0),
  27. msAuswBgF(0),
  28. msAuswBgB(0),
  29. msAuswAf(0),
  30. mausRahmen(new LRahmen()),
  31. mausBgF(0xFF000000),
  32. mausBgB(0),
  33. mausAf(new AlphaFeld()),
  34. msMausRahmen(0),
  35. msMausBgF(0),
  36. msMausBgB(0),
  37. msMausAf(0),
  38. anzahl(0),
  39. auswahl(0),
  40. ausgeklappt(0),
  41. ausklappHeight(0),
  42. ausklapMaxHeight(200),
  43. eintragHeight(15),
  44. tickval(0),
  45. mausEintrag(0),
  46. scrollAnzeigen(0),
  47. eAkP(0),
  48. eAk(0)
  49. {
  50. vertikalScrollBar = new VScrollBar();
  51. style = Style::Normal;
  52. rahmen = new LRahmen();
  53. rahmen->setFarbe(0xFFFFFFFF);
  54. rahmen->setRamenBreite(1);
  55. ausfahren->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  56. | Knopf::Style::KlickBuffer);
  57. ausfahren->setKBFarbe(0xA0000000);
  58. ausfahren->setKBStrength(10);
  59. ausfahren->setSize(18, 18);
  60. ausfahren->setSchriftFarbe(0xFFFFFFFF);
  61. ausfahren->setText("\\/");
  62. auswRahmen->setFarbe(0xFF00FF00);
  63. auswRahmen->setRamenBreite(1);
  64. auswAf->setFarbe(0xA000FF00);
  65. auswAf->setStrength(7);
  66. mausRahmen->setFarbe(0xFF00FF00);
  67. mausRahmen->setRamenBreite(1);
  68. mausAf->setFarbe(0x5000FF00);
  69. mausAf->setStrength(7);
  70. gr.x = 20;
  71. gr.y = 20;
  72. }
  73. // Destruktor
  74. AuswahlBox::~AuswahlBox()
  75. {
  76. if (textRd) textRd->release();
  77. if (msStyle) msStyle->release();
  78. if (members) members->release();
  79. if (ausfahren) ausfahren->release();
  80. if (auswRahmen) auswRahmen->release();
  81. if (auswBgB) auswBgB->release();
  82. if (auswAf) auswAf->release();
  83. if (msAuswRahmen) msAuswRahmen->release();
  84. if (msAuswAf) msAuswAf->release();
  85. if (msAuswBgB) msAuswBgB->release();
  86. if (msAuswBgF) msAuswBgF->release();
  87. if (mausRahmen) mausRahmen->release();
  88. if (mausAf) mausAf->release();
  89. if (mausBgB) mausBgB->release();
  90. if (msMausRahmen) msMausRahmen->release();
  91. if (msMausAf) msMausAf->release();
  92. if (msMausBgB) msMausBgB->release();
  93. if (msMausBgF) msMausBgF->release();
  94. }
  95. void AuswahlBox::doMausEreignis(MausEreignis& me, bool userRet) // Maus
  96. {
  97. if (hatStyleNicht(Style::Erlaubt) || hatStyleNicht(Style::Fokus)
  98. || me.verarbeitet)
  99. {
  100. ausgeklappt = 0;
  101. me.verarbeitet = 1;
  102. return;
  103. }
  104. if (!userRet) return;
  105. mausEintrag = -1;
  106. bool insideParent = me.insideParent;
  107. me.insideParent = me.mx >= 0 && me.mx < gr.x && me.my >= 0
  108. && me.my < gr.y + ausklappHeight;
  109. bool vera = me.verarbeitet;
  110. if (ausfahren)
  111. {
  112. int tmpMx = me.mx;
  113. int tmpMy = me.my;
  114. if (me.mx >= 0 && me.my >= 0 && me.mx < gr.x && me.my < gr.y)
  115. me.mx = ausfahren->getX(), me.my = ausfahren->getY() + 1;
  116. ausfahren->doPublicMausEreignis(me);
  117. me.mx = tmpMx, me.my = tmpMy;
  118. }
  119. if (me.verarbeitet && !vera && me.id == ME_RLinks)
  120. {
  121. ausgeklappt = !ausgeklappt;
  122. if (ausgeklappt) mausEintrag = auswahl;
  123. if (scrollAnzeigen) scrollZuEintrag(mausEintrag);
  124. }
  125. if (hatStyle(Style::VScroll) && vertikalScrollBar && ausgeklappt
  126. && scrollAnzeigen)
  127. {
  128. int rbr = 0;
  129. if (rahmen && hatStyle(Style::Rahmen)) rbr = rahmen->getRBreite();
  130. if ((me.mx > gr.x - 15 - rbr && me.my > gr.y) || me.id == ME_UScroll
  131. || me.id == ME_DScroll)
  132. {
  133. vertikalScrollBar->doMausMessage(gr.x - rbr - 15,
  134. gr.y,
  135. 15,
  136. vertikalScrollBar->getScrollData()->anzeige,
  137. me);
  138. me.verarbeitet = 1;
  139. }
  140. }
  141. if (!me.verarbeitet)
  142. {
  143. int eintr = -1;
  144. int tmp = me.my - gr.y
  145. + (vertikalScrollBar ? vertikalScrollBar->getScroll() : 0);
  146. if (hatStyle(Style::MultiStyled))
  147. {
  148. for (int i = 0; i < anzahl; ++i)
  149. {
  150. if (tmp > 0
  151. && tmp < (members->z(i) ? members->z(i)->getHeight() : 0))
  152. {
  153. eintr = i;
  154. break;
  155. }
  156. tmp -= members->z(i) ? members->z(i)->getHeight() : 0;
  157. }
  158. }
  159. else
  160. {
  161. for (int i = 0; i < anzahl; ++i)
  162. {
  163. if (tmp > 0 && tmp < eintragHeight)
  164. {
  165. eintr = i;
  166. break;
  167. }
  168. tmp -= eintragHeight;
  169. }
  170. }
  171. if (ausgeklappt && me.mx > 0 && me.mx < gr.x && me.my > gr.y
  172. && me.my < gr.y + ausklappHeight)
  173. {
  174. if (eintr >= 0)
  175. {
  176. if (me.id == ME_RLinks)
  177. {
  178. if (auswahl != eintr) rend = 1;
  179. auswahl = eintr;
  180. if (eAk) eAk(eAkP, this, 0, auswahl);
  181. }
  182. if (mausEintrag != eintr) rend = 1;
  183. mausEintrag = eintr;
  184. }
  185. }
  186. }
  187. me.verarbeitet = 1;
  188. me.insideParent = insideParent;
  189. }
  190. // nicht constant
  191. void AuswahlBox::setEventParam(void* p) // setzt den Event Parameter
  192. {
  193. eAkP = p;
  194. }
  195. void AuswahlBox::setEventAktion(
  196. std::function<void(void*, AuswahlBox*, int, int)>
  197. event) // setzt die Event Funktion
  198. {
  199. this->eAk = event;
  200. }
  201. void AuswahlBox::setSchriftZ(Schrift* schrift) // setzt die schrift
  202. {
  203. if (!this->textRd)
  204. textRd = new TextRenderer(schrift);
  205. else
  206. textRd->setSchriftZ(schrift);
  207. ausfahren->setSchriftZ(dynamic_cast<Schrift*>(schrift->getThis()));
  208. rend = 1;
  209. }
  210. void AuswahlBox::setTextRendererZ(TextRenderer* textRd)
  211. {
  212. if (this->textRd) this->textRd->release();
  213. this->textRd = textRd;
  214. }
  215. void AuswahlBox::addEintrag(const char* txt) // Eintrag hinzufügen
  216. {
  217. TextFeld* tf = new TextFeld();
  218. if (textRd) tf->setSchriftZ(textRd->getSchrift());
  219. tf->addStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center
  220. | TextFeld::Style::Rahmen);
  221. tf->setText(txt);
  222. tf->setSchriftFarbe(0xFFFFFFFF);
  223. tf->setRahmenFarbe(0xFFFFFFFF);
  224. tf->setSize(0, eintragHeight);
  225. members->add(tf, anzahl);
  226. ++anzahl;
  227. rend = 1;
  228. }
  229. void AuswahlBox::addEintrag(Text* txt)
  230. {
  231. TextFeld* tf = new TextFeld();
  232. if (textRd) tf->setSchriftZ(textRd->getSchrift());
  233. tf->addStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center
  234. | TextFeld::Style::Rahmen);
  235. tf->setText(txt);
  236. tf->setSchriftFarbe(0xFFFFFFFF);
  237. tf->setRahmenFarbe(0xFFFFFFFF);
  238. tf->setSize(0, eintragHeight);
  239. members->add(tf, anzahl);
  240. ++anzahl;
  241. rend = 1;
  242. }
  243. void AuswahlBox::addEintragZ(TextFeld* txt)
  244. {
  245. members->add(txt, anzahl);
  246. ++anzahl;
  247. rend = 1;
  248. }
  249. void AuswahlBox::setEintrag(int i, const char* txt) // Eintrag setzen
  250. {
  251. if (members->z(i)) members->z(i)->setText(txt);
  252. rend = 1;
  253. }
  254. void AuswahlBox::setEintrag(int i, Text* txt)
  255. {
  256. if (members->z(i))
  257. members->z(i)->setText(txt);
  258. else
  259. txt->release();
  260. rend = 1;
  261. }
  262. void AuswahlBox::setEintragZ(int i, TextFeld* txt)
  263. {
  264. if (i < anzahl)
  265. members->set(txt, i);
  266. else
  267. txt->release();
  268. rend = 1;
  269. }
  270. void AuswahlBox::removeEintrag(int i) // Eintrag entfernen
  271. {
  272. if (i < anzahl)
  273. {
  274. members->remove(i);
  275. if (msStyle) msStyle->remove(i);
  276. if (msAuswRahmen) msAuswRahmen->remove(i);
  277. if (msAuswBgF) msAuswBgF->remove(i);
  278. if (msAuswBgB) msAuswBgB->remove(i);
  279. if (msAuswAf) msAuswAf->remove(i);
  280. if (msMausRahmen) msMausRahmen->remove(i);
  281. if (msMausBgF) msMausBgF->remove(i);
  282. if (msMausBgB) msMausBgB->remove(i);
  283. if (msMausAf) msMausAf->remove(i);
  284. if (auswahl > i) --auswahl;
  285. if (mausEintrag > i) --mausEintrag;
  286. --anzahl;
  287. rend = 1;
  288. }
  289. }
  290. void AuswahlBox::setAusklappKnopfZ(Knopf* ausK) // Ausklapp Knopf setzen
  291. {
  292. if (ausfahren) ausfahren->release();
  293. ausfahren = ausK;
  294. rend = 1;
  295. }
  296. void AuswahlBox::setEintragRahmenZ(
  297. int i, Rahmen* rahmen) // Eintrag Rahmen setzen
  298. {
  299. if (members->z(i))
  300. members->z(i)->setRahmenZ(rahmen);
  301. else
  302. rahmen->release();
  303. rend = 1;
  304. }
  305. void AuswahlBox::setEintragRahmenFarbe(
  306. int i, int f) // Eintrag Rahmen Farbe setzen
  307. {
  308. if (members->z(i)) members->z(i)->setRahmenFarbe(f);
  309. rend = 1;
  310. }
  311. void AuswahlBox::setEintragRahmenBreite(
  312. int i, int rbr) // Eintrag Rahmen Breite setzen
  313. {
  314. if (members->z(i)) members->z(i)->setRahmenBreite(rbr);
  315. rend = 1;
  316. }
  317. void AuswahlBox::setEintragHintergrundFarbe(
  318. int i, int f) // Eintrag Hintergrund farbe setzen
  319. {
  320. if (members->z(i)) members->z(i)->setHintergrundFarbe(f);
  321. rend = 1;
  322. }
  323. void AuswahlBox::setEintragHintergrundBildZ(
  324. int i, Bild* bgB) // Eintrag Hintergrund Bild setzen
  325. {
  326. if (members->z(i))
  327. members->z(i)->setHintergrundBildZ(bgB);
  328. else
  329. bgB->release();
  330. rend = 1;
  331. }
  332. void AuswahlBox::setEintragHintergrundBild(int i, Bild* bgB)
  333. {
  334. if (members->z(i))
  335. members->z(i)->setHintergrundBild(bgB);
  336. else
  337. bgB->release();
  338. rend = 1;
  339. }
  340. void AuswahlBox::setEintragAlphaFeldZ(
  341. int i, AlphaFeld* af) // Eintrag AlphaFeld setzen
  342. {
  343. if (members->z(i)) members->z(i)->setAlphaFeldZ(af);
  344. rend = 1;
  345. }
  346. void AuswahlBox::setEintragAlphaFeldFarbe(
  347. int i, int afF) // Eintrag AlphaFeld Farbe setzen
  348. {
  349. if (members->z(i)) members->z(i)->setAlphaFeldFarbe(afF);
  350. rend = 1;
  351. }
  352. void AuswahlBox::setEintragAlphaFeldStrength(
  353. int i, int afSt) // Eintrag AlphaFeld Stärke setzen
  354. {
  355. if (members->z(i)) members->z(i)->setAlphaFeldStrength(afSt);
  356. rend = 1;
  357. }
  358. void AuswahlBox::setAuswRahmenZ(Rahmen* rahmen) // Auswahl Rahmen setzen
  359. {
  360. if (auswRahmen) auswRahmen->release();
  361. auswRahmen = rahmen;
  362. rend = 1;
  363. }
  364. void AuswahlBox::setAuswRahmenFarbe(int f) // Auswahl Rahmen Farbe setzen
  365. {
  366. if (!auswRahmen) auswRahmen = new LRahmen();
  367. auswRahmen->setFarbe(f);
  368. rend = 1;
  369. }
  370. void AuswahlBox::setAuswRahmenBreite(int rbr) // Auswahl Rahmen Breite setzen
  371. {
  372. if (!auswRahmen) auswRahmen = new LRahmen();
  373. auswRahmen->setRamenBreite(rbr);
  374. rend = 1;
  375. }
  376. void AuswahlBox::setAuswHintergrundFarbe(
  377. int f) // Auswahl Hintergrund Farbe setzen
  378. {
  379. auswBgF = f;
  380. rend = 1;
  381. }
  382. void AuswahlBox::setAuswHintergrundBildZ(
  383. Bild* bgB) // Auswahl Hintergrund Bild setzen
  384. {
  385. if (auswBgB) auswBgB->release();
  386. auswBgB = bgB;
  387. rend = 1;
  388. }
  389. void AuswahlBox::setAuswHintergrundBild(Bild* bgB)
  390. {
  391. if (!auswBgB) auswBgB = new Bild();
  392. auswBgB->neuBild(bgB->getBreite(), bgB->getHeight(), 0);
  393. auswBgB->drawBild(0, 0, bgB->getBreite(), bgB->getHeight(), *bgB);
  394. bgB->release();
  395. rend = 1;
  396. }
  397. void AuswahlBox::setAuswAlphaFeldZ(AlphaFeld* af) // Auswahl AlphaFeld setzen
  398. {
  399. if (auswAf) auswAf->release();
  400. auswAf = af;
  401. rend = 1;
  402. }
  403. void AuswahlBox::setAuswAlphaFeldFarbe(
  404. int afF) // Auswahl AlphaFeld Farbe setzen
  405. {
  406. if (!auswAf) auswAf = new AlphaFeld();
  407. auswAf->setFarbe(afF);
  408. rend = 1;
  409. }
  410. void AuswahlBox::setAuswAlphaFeldStrength(
  411. int afSt) // Auswahl Alpha Feld stärke setzen
  412. {
  413. if (!auswAf) auswAf = new AlphaFeld();
  414. auswAf->setStrength(afSt);
  415. rend = 1;
  416. }
  417. void AuswahlBox::setMsAuswRahmenZ(
  418. int i, Rahmen* rahmen) // Multistyle Auswahl Rahmen setzen
  419. {
  420. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  421. {
  422. rahmen->release();
  423. return;
  424. }
  425. if (!msAuswRahmen) msAuswRahmen = new RCArray<Rahmen>();
  426. msAuswRahmen->set(rahmen, i);
  427. rend = 1;
  428. }
  429. void AuswahlBox::setMsAuswRahmenFarbe(
  430. int i, int f) // Multistyle Auswahl Rahmen Farbe setzen
  431. {
  432. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  433. if (!msAuswRahmen) msAuswRahmen = new RCArray<Rahmen>();
  434. if (!msAuswRahmen->z(i)) msAuswRahmen->set(new LRahmen(), i);
  435. msAuswRahmen->z(i)->setFarbe(f);
  436. rend = 1;
  437. }
  438. void AuswahlBox::setMsAuswRahmenBreite(
  439. int i, int rbr) // Multistyle Auswahl Breite setzen
  440. {
  441. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  442. if (!msAuswRahmen) msAuswRahmen = new RCArray<Rahmen>();
  443. if (!msAuswRahmen->z(i)) msAuswRahmen->set(new LRahmen(), i);
  444. msAuswRahmen->z(i)->setRamenBreite(rbr);
  445. rend = 1;
  446. }
  447. void AuswahlBox::setMsAuswHintergrundFarbe(
  448. int i, int f) // Multistyle Auswahl Hintergrund Farbe setzen
  449. {
  450. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  451. if (!msAuswBgF) msAuswBgF = new Array<int>();
  452. msAuswBgF->set(f, i);
  453. rend = 1;
  454. }
  455. void AuswahlBox::setMsAuswHintergrundBildZ(
  456. int i, Bild* bgB) // Multistyle Auswahl Hintergrund Bild setzen
  457. {
  458. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  459. {
  460. bgB->release();
  461. return;
  462. }
  463. if (!msAuswBgB) msAuswBgB = new RCArray<Bild>();
  464. msAuswBgB->set(bgB, i);
  465. rend = 1;
  466. }
  467. void AuswahlBox::setMsAuswHintergrundBild(int i, Bild* bgB)
  468. {
  469. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  470. {
  471. bgB->release();
  472. return;
  473. }
  474. if (!msAuswBgB) msAuswBgB = new RCArray<Bild>();
  475. if (!msAuswBgB->z(i))
  476. {
  477. Bild* z = new Bild;
  478. z->neuBild(bgB->getBreite(), bgB->getHeight(), 0);
  479. z->drawBild(0, 0, bgB->getBreite(), bgB->getHeight(), *bgB);
  480. msAuswBgB->set(z, i);
  481. }
  482. else
  483. {
  484. msAuswBgB->z(i)->neuBild(bgB->getBreite(), bgB->getHeight(), 0);
  485. msAuswBgB->z(i)->drawBild(
  486. 0, 0, bgB->getBreite(), bgB->getHeight(), *bgB);
  487. }
  488. bgB->release();
  489. rend = 1;
  490. }
  491. void AuswahlBox::setMsAuswAlphaFeldZ(
  492. int i, AlphaFeld* af) // Multistyle Auswahl AlphaFeld setzen
  493. {
  494. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  495. {
  496. af->release();
  497. return;
  498. }
  499. if (!msAuswAf) msAuswAf = new RCArray<AlphaFeld>();
  500. msAuswAf->set(af, i);
  501. rend = 1;
  502. }
  503. void AuswahlBox::setMsAuswAlphaFeldFarbe(
  504. int i, int afF) // Multistyle Auswahl AlphaFeld Farbe setzen
  505. {
  506. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  507. if (!msAuswAf) msAuswAf = new RCArray<AlphaFeld>();
  508. if (!msAuswAf->z(i)) msAuswAf->set(new AlphaFeld(), i);
  509. msAuswAf->z(i)->setFarbe(afF);
  510. rend = 1;
  511. }
  512. void AuswahlBox::setMsAuswAlphaFeldStrength(
  513. int i, int afSt) // Multistyle Auswahl AlphaFeld stärke setzen
  514. {
  515. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  516. if (!msAuswAf) msAuswAf = new RCArray<AlphaFeld>();
  517. if (!msAuswAf->z(i)) msAuswAf->set(new AlphaFeld(), i);
  518. msAuswAf->z(i)->setStrength(afSt);
  519. rend = 1;
  520. }
  521. void AuswahlBox::setMausRahmenZ(Rahmen* rahmen) // Maus Rahmen setzen
  522. {
  523. if (mausRahmen) mausRahmen->release();
  524. mausRahmen = rahmen;
  525. rend = 1;
  526. }
  527. void AuswahlBox::setMausRahmenFarbe(int f) // Maus Rahmen Farbe setzen
  528. {
  529. if (!mausRahmen) mausRahmen = new LRahmen();
  530. mausRahmen->setFarbe(f);
  531. rend = 1;
  532. }
  533. void AuswahlBox::setMausRahmenBreite(int rbr) // Maus Rahmen breite setzen
  534. {
  535. if (!mausRahmen) mausRahmen = new LRahmen();
  536. mausRahmen->setRamenBreite(rbr);
  537. rend = 1;
  538. }
  539. void AuswahlBox::setMausHintergrundFarbe(int f) // Maus Hintergrund Farbe setzen
  540. {
  541. mausBgF = f;
  542. rend = 1;
  543. }
  544. void AuswahlBox::setMausHintergrundBildZ(
  545. Bild* bgB) // Maus Hintergrund Bild setzen
  546. {
  547. if (mausBgB) mausBgB->release();
  548. mausBgB = bgB;
  549. rend = 1;
  550. }
  551. void AuswahlBox::setMausHintergrundBild(Bild* bgB)
  552. {
  553. if (!mausBgB) mausBgB = new Bild();
  554. mausBgB->neuBild(bgB->getBreite(), bgB->getHeight(), 0);
  555. mausBgB->drawBild(0, 0, bgB->getBreite(), bgB->getHeight(), *bgB);
  556. bgB->release();
  557. rend = 1;
  558. }
  559. void AuswahlBox::setMausAlphaFeldZ(AlphaFeld* af) // Maus AlphaFeld setzen
  560. {
  561. if (mausAf) mausAf->release();
  562. mausAf = af;
  563. rend = 1;
  564. }
  565. void AuswahlBox::setMausAlphaFeldFarbe(int afF) // Maus AlphaFeld Farbe setzen
  566. {
  567. if (!mausAf) mausAf = new AlphaFeld();
  568. mausAf->setFarbe(afF);
  569. rend = 1;
  570. }
  571. void AuswahlBox::setMausAlphaFeldStrength(
  572. int afSt) // Maus AlphaFeld stärke setzen
  573. {
  574. if (!mausAf) mausAf = new AlphaFeld();
  575. mausAf->setStrength(afSt);
  576. rend = 1;
  577. }
  578. void AuswahlBox::setMsMausRahmenZ(
  579. int i, Rahmen* rahmen) // Multistyle Maus Rahmen setzen
  580. {
  581. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  582. {
  583. rahmen->release();
  584. return;
  585. }
  586. if (!msMausRahmen) msMausRahmen = new RCArray<Rahmen>();
  587. msMausRahmen->set(rahmen, i);
  588. rend = 1;
  589. }
  590. void AuswahlBox::setMsMausRahmenFarbe(
  591. int i, int f) // Multistyle Maus Rahmen Farbe setzen
  592. {
  593. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  594. if (!msMausRahmen) msMausRahmen = new RCArray<Rahmen>();
  595. if (!msMausRahmen->z(i)) msMausRahmen->set(new LRahmen(), i);
  596. msMausRahmen->z(i)->setFarbe(f);
  597. rend = 1;
  598. }
  599. void AuswahlBox::setMsMausRahmenBreite(
  600. int i, int rbr) // Multistyle Maus Rahmen breite setzen
  601. {
  602. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  603. if (!msMausRahmen) msMausRahmen = new RCArray<Rahmen>();
  604. if (!msMausRahmen->z(i)) msMausRahmen->set(new LRahmen(), i);
  605. msMausRahmen->z(i)->setRamenBreite(rbr);
  606. rend = 1;
  607. }
  608. void AuswahlBox::setMsMausHintergrundFarbe(
  609. int i, int f) // Multistyle Maus Hintergrund Farbe setzen
  610. {
  611. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  612. if (!msMausBgF) msMausBgF = new Array<int>();
  613. msMausBgF->set(f, i);
  614. rend = 1;
  615. }
  616. void AuswahlBox::setMsMausHintergrundBildZ(
  617. int i, Bild* bgB) // Multistyle Maus Hintergrund Bild setzen
  618. {
  619. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  620. {
  621. bgB->release();
  622. return;
  623. }
  624. if (!msMausBgB) msMausBgB = new RCArray<Bild>();
  625. msMausBgB->set(bgB, i);
  626. rend = 1;
  627. }
  628. void AuswahlBox::setMsMausHintergrundBild(int i, Bild* bgB)
  629. {
  630. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  631. {
  632. bgB->release();
  633. return;
  634. }
  635. if (!msMausBgB) msMausBgB = new RCArray<Bild>();
  636. if (!msMausBgB->z(i))
  637. {
  638. Bild* z = new Bild;
  639. z->neuBild(bgB->getBreite(), bgB->getHeight(), 0);
  640. z->drawBild(0, 0, bgB->getBreite(), bgB->getHeight(), *bgB);
  641. msMausBgB->set(z, i);
  642. }
  643. else
  644. {
  645. msMausBgB->z(i)->neuBild(bgB->getBreite(), bgB->getHeight(), 0);
  646. msMausBgB->z(i)->drawBild(
  647. 0, 0, bgB->getBreite(), bgB->getHeight(), *bgB);
  648. }
  649. bgB->release();
  650. rend = 1;
  651. }
  652. void AuswahlBox::setMsMausAlphaFeldZ(
  653. int i, AlphaFeld* af) // Multistyle Maus AlphaFeld setzen
  654. {
  655. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl)
  656. {
  657. af->release();
  658. return;
  659. }
  660. if (!msMausAf) msMausAf = new RCArray<AlphaFeld>();
  661. msMausAf->set(af, i);
  662. rend = 1;
  663. }
  664. void AuswahlBox::setMsMausAlphaFeldFarbe(
  665. int i, int afF) // Multistyle Maus AlphaFeld Farbe setzen
  666. {
  667. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  668. if (!msMausAf) msMausAf = new RCArray<AlphaFeld>();
  669. if (!msMausAf->z(i)) msMausAf->set(new AlphaFeld(), i);
  670. msMausAf->z(i)->setFarbe(afF);
  671. rend = 1;
  672. }
  673. void AuswahlBox::setMsMausAlphaFeldStrength(
  674. int i, int afSt) // Multistyle Maus AlphaFeld stärke setzen
  675. {
  676. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  677. if (!msMausAf) msMausAf = new RCArray<AlphaFeld>();
  678. if (!msMausAf->z(i)) msMausAf->set(new AlphaFeld(), i);
  679. msMausAf->z(i)->setStrength(afSt);
  680. rend = 1;
  681. }
  682. void AuswahlBox::setAuswahl(int i) // Eintrag auswählen
  683. {
  684. if (i < anzahl && i != auswahl)
  685. {
  686. auswahl = i;
  687. if (eAk) eAk(eAkP, this, 0, auswahl);
  688. rend = 1;
  689. }
  690. }
  691. void AuswahlBox::ausklappen() // liste ausklappen
  692. {
  693. ausgeklappt = 1;
  694. }
  695. void AuswahlBox::einklappen() // liste einklappen
  696. {
  697. ausgeklappt = 0;
  698. }
  699. void AuswahlBox::scrollZuEintrag(int i) // liste scrollen
  700. {
  701. if (hatStyle(Style::VScroll) && vertikalScrollBar && i < anzahl)
  702. {
  703. int scrollPos = 0;
  704. if (hatStyle(Style::MultiStyled))
  705. {
  706. for (int j = 0; j < i; ++j)
  707. scrollPos += members->z(j) ? members->z(j)->getHeight() : 0;
  708. }
  709. else
  710. scrollPos += i * eintragHeight;
  711. vertikalScrollBar->scroll(scrollPos);
  712. rend = 1;
  713. }
  714. }
  715. void AuswahlBox::setMaxAuskappHeight(
  716. int maxHeight) // höhe der Liste beim ausklappen
  717. {
  718. ausklapMaxHeight = maxHeight;
  719. }
  720. void AuswahlBox::setEintragHeight(int height) // setzt die Höhe der Einträge
  721. {
  722. eintragHeight = height;
  723. }
  724. void AuswahlBox::addMsStyle(
  725. int i, __int64 abStyle) // Multistyle style hinzufügen
  726. {
  727. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  728. if (!msStyle) msStyle = new Array<__int64>();
  729. msStyle->set(msStyle->get(i) | abStyle, i);
  730. rend = 1;
  731. }
  732. void AuswahlBox::setMsStyle(
  733. int i, __int64 abStyle, bool add) // Multistyle style setzen
  734. {
  735. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  736. if (!msStyle) msStyle = new Array<__int64>();
  737. if (add)
  738. msStyle->set(msStyle->get(i) | abStyle, i);
  739. else
  740. msStyle->set(msStyle->get(i) & ~abStyle, i);
  741. rend = 1;
  742. }
  743. void AuswahlBox::setMsStyle(int i, __int64 abStyle)
  744. {
  745. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  746. if (!msStyle) msStyle = new Array<__int64>();
  747. msStyle->set(abStyle, i);
  748. rend = 1;
  749. }
  750. void AuswahlBox::removeMsStyle(
  751. int i, __int64 abStyle) // Multistyle style entfernen
  752. {
  753. if (hatStyleNicht(Style::MultiStyled) || i >= anzahl) return;
  754. if (!msStyle) msStyle = new Array<__int64>();
  755. msStyle->set(msStyle->get(i) & ~abStyle, i);
  756. rend = 1;
  757. }
  758. bool AuswahlBox::tick(double tickVal) // tick
  759. {
  760. if (ausgeklappt && ausfahren && !ausfahren->zText()->istGleich("/\\"))
  761. {
  762. ausfahren->setText("/\\");
  763. rend = 1;
  764. }
  765. else if (!ausgeklappt && ausfahren && !ausfahren->zText()->istGleich("\\/"))
  766. {
  767. ausfahren->setText("\\/");
  768. rend = 1;
  769. }
  770. if (hatStyleNicht(Style::Sichtbar) || hatStyleNicht(Style::Erlaubt))
  771. ausgeklappt = 0;
  772. rend |= ausfahren->tick(tickVal);
  773. this->tickval += tickVal * 300;
  774. int val = (int)this->tickval;
  775. if (val < 1) return ZeichnungHintergrund::tick(tickVal);
  776. this->tickval -= val;
  777. int maxHeight = rahmen ? rahmen->getRBreite() : 0;
  778. if (hatStyleNicht(Style::MultiStyled))
  779. maxHeight += anzahl * eintragHeight;
  780. else
  781. for (int i = 0; i < anzahl; ++i)
  782. maxHeight += members->z(i) ? members->z(i)->getHeight() : 0;
  783. if (maxHeight > ausklapMaxHeight)
  784. {
  785. if (hatStyle(Style::VScroll) && vertikalScrollBar)
  786. {
  787. scrollAnzeigen = 1;
  788. vertikalScrollBar->update(maxHeight, ausklapMaxHeight);
  789. }
  790. maxHeight = ausklapMaxHeight;
  791. }
  792. else
  793. scrollAnzeigen = 0;
  794. if (ausgeklappt)
  795. {
  796. if (ausklappHeight < maxHeight)
  797. {
  798. ausklappHeight += val;
  799. if (ausklappHeight > maxHeight) ausklappHeight = maxHeight;
  800. rend = 1;
  801. }
  802. }
  803. else
  804. {
  805. if (ausklappHeight > 0)
  806. {
  807. ausklappHeight -= val;
  808. if (ausklappHeight < 0) ausklappHeight = 0;
  809. rend = 1;
  810. }
  811. }
  812. for (int i = 0; i < anzahl; ++i)
  813. {
  814. if (i != auswahl)
  815. rend |= members->z(i)->tick(tickVal);
  816. else
  817. members->z(i)->tick(tickVal);
  818. }
  819. return ZeichnungHintergrund::tick(tickVal);
  820. }
  821. void AuswahlBox::doTastaturEreignis(TastaturEreignis& te) // Tastatur
  822. {
  823. if (te.verarbeitet || hatStyleNicht(Style::Fokus)
  824. || hatStyleNicht(Style::Erlaubt))
  825. return;
  826. if (te.id == TE_Release)
  827. {
  828. switch (te.virtualKey)
  829. {
  830. case T_Oben:
  831. if (auswahl > 0)
  832. --auswahl;
  833. else
  834. auswahl = anzahl - 1;
  835. if (eAk) eAk(eAkP, this, 0, auswahl);
  836. scrollZuEintrag(auswahl);
  837. rend = 1;
  838. break;
  839. case T_Unten:
  840. if (auswahl < anzahl - 1)
  841. ++auswahl;
  842. else
  843. auswahl = 0;
  844. if (eAk) eAk(eAkP, this, 0, auswahl);
  845. scrollZuEintrag(auswahl);
  846. rend = 1;
  847. break;
  848. }
  849. }
  850. if (te.verarbeitet && nTak) te.verarbeitet = nTak(ntakParam, this, te);
  851. }
  852. void AuswahlBox::render(Bild& zRObj) // zeichnet nach zRObj
  853. {
  854. if (hatStyle(Style::Sichtbar))
  855. {
  856. lockZeichnung();
  857. int br = gr.x;
  858. int hi = gr.y + ausklappHeight;
  859. if ((ausklappHeight
  860. && !zRObj.setDrawOptionsErzwingen(pos.x, pos.y, br, hi))
  861. || (!ausklappHeight && !zRObj.setDrawOptions(pos.x, pos.y, br, hi)))
  862. {
  863. unlockZeichnung();
  864. return;
  865. }
  866. int rbr = 0;
  867. if (hatStyle(Style::Rahmen) && rahmen) // Rahmen zeichnen
  868. {
  869. rahmen->setSize(br, hi);
  870. rahmen->render(zRObj);
  871. rbr = rahmen->getRBreite();
  872. }
  873. if ((ausklappHeight
  874. && !zRObj.setDrawOptionsErzwingen(
  875. rbr, rbr, br - rbr * 2, hi - rbr * 2))
  876. || (!ausklappHeight
  877. && !zRObj.setDrawOptions(rbr, rbr, br - rbr * 2, hi - rbr * 2)))
  878. {
  879. zRObj.releaseDrawOptions();
  880. unlockZeichnung();
  881. return;
  882. }
  883. if (hatStyle(Style::Hintergrund))
  884. {
  885. if (hatStyle(Style::HAlpha))
  886. zRObj.alphaRegion(0, 0, br, hi, hintergrundFarbe);
  887. else
  888. zRObj.fillRegion(0, 0, br, hi, hintergrundFarbe);
  889. if (hatStyle(Style::HBild) && hintergrundBild)
  890. {
  891. if (hatStyle(Style::HAlpha))
  892. zRObj.alphaBild(0, 0, br, hi, *hintergrundBild);
  893. else
  894. zRObj.drawBild(0, 0, br, hi, *hintergrundBild);
  895. }
  896. }
  897. if (hatStyle(Style::Buffered) && hintergrundFeld)
  898. {
  899. hintergrundFeld->setSize(br - rbr * 2, hi - rbr * 2);
  900. hintergrundFeld->render(zRObj);
  901. }
  902. if (ausfahren) // Ausklapp Knopf zeichnen
  903. {
  904. ausfahren->setSize(gr.y - rbr * 2, gr.y - rbr * 2);
  905. ausfahren->setPosition(gr.x - rbr - ausfahren->getBreite(), rbr);
  906. ausfahren->render(zRObj);
  907. }
  908. if (members) // Ausgewähtes TextFeld zeichnen
  909. {
  910. if (auswahl < 0)
  911. {
  912. auswahl = 0;
  913. if (eAk) eAk(eAkP, this, 0, auswahl);
  914. }
  915. if (auswahl >= anzahl)
  916. {
  917. auswahl = anzahl - 1;
  918. if (eAk) eAk(eAkP, this, 0, auswahl);
  919. }
  920. TextFeld* tf = auswahl >= 0 ? members->z(auswahl) : 0;
  921. if (tf)
  922. {
  923. AlphaFeld* tmpBuffer = 0;
  924. bool tmpB = 0;
  925. int tmpHFarbe = 0;
  926. bool tmpH = 0;
  927. Bild* tmpHBild = 0;
  928. bool tmpHB = 0;
  929. bool tmpHAlpha = 0;
  930. Rahmen* tmpRahmen = 0;
  931. bool tmpR = 0;
  932. if (hatStyleNicht(Style::MultiStyled) || !msStyle)
  933. {
  934. if (hatStyle(Style::AuswahlBuffer))
  935. {
  936. tmpBuffer = tf->getAlphaFeld();
  937. tf->setAlphaFeldZ(
  938. dynamic_cast<AlphaFeld*>(auswAf->getThis()));
  939. tmpB = tf->hatStyle(TextFeld::Style::Buffered);
  940. tf->setStyle(TextFeld::Style::Buffered,
  941. hatStyle(Style::AuswahlBuffer));
  942. }
  943. if (hatStyle(Style::AuswahlHintergrund))
  944. {
  945. tmpH = tf->hatStyle(TextFeld::Style::Hintergrund);
  946. tmpHFarbe = tf->getHintergrundFarbe();
  947. tf->setHintergrundFarbe(auswBgF);
  948. tf->setStyle(TextFeld::Style::Hintergrund,
  949. hatStyle(Style::Hintergrund));
  950. if (hatStyle(Style::AuswahlHBild))
  951. {
  952. tmpHBild = tf->getHintergrundBild();
  953. tf->setHintergrundBildZ(
  954. dynamic_cast<Bild*>(auswBgB->getThis()));
  955. tmpHB = tf->hatStyle(TextFeld::Style::HBild);
  956. tf->setStyle(
  957. TextFeld::Style::HBild, hatStyle(Style::HBild));
  958. }
  959. if (hatStyle(Style::AuswahlHAlpha))
  960. {
  961. tmpHAlpha = tf->hatStyle(TextFeld::Style::HAlpha);
  962. tf->setStyle(TextFeld::Style::HAlpha,
  963. hatStyle(Style::AuswahlHAlpha));
  964. }
  965. }
  966. if (hatStyle(Style::AuswahlRahmen))
  967. {
  968. tmpRahmen = tf->getRahmen();
  969. tf->setRahmenZ(
  970. dynamic_cast<Rahmen*>(auswRahmen->getThis()));
  971. tmpR = tf->hatStyle(TextFeld::Style::Rahmen);
  972. tf->setStyle(TextFeld::Style::Rahmen,
  973. hatStyle(Style::AuswahlRahmen));
  974. }
  975. }
  976. else
  977. {
  978. if (hatMsStyle(auswahl, Style::AuswahlBuffer) && msAuswAf)
  979. {
  980. tmpBuffer = tf->getAlphaFeld();
  981. tf->setAlphaFeldZ(msAuswAf->get(auswahl));
  982. tmpB = tf->hatStyle(TextFeld::Style::Buffered);
  983. tf->setStyle(TextFeld::Style::Buffered,
  984. hatMsStyle(auswahl, Style::AuswahlBuffer));
  985. }
  986. if (hatMsStyle(auswahl, Style::AuswahlHintergrund))
  987. {
  988. tmpH = tf->hatStyle(Style::Hintergrund);
  989. tf->setStyle(TextFeld::Style::Hintergrund,
  990. hatMsStyle(auswahl, Style::AuswahlHintergrund));
  991. if (msAuswBgF && msAuswBgF->hat(auswahl))
  992. {
  993. tmpHFarbe = tf->getHintergrundFarbe();
  994. tf->setHintergrundFarbe(msAuswBgF->get(auswahl));
  995. }
  996. if (hatMsStyle(auswahl, Style::AuswahlHBild)
  997. && msAuswBgB)
  998. {
  999. tmpHBild = tf->getHintergrundBild();
  1000. tf->setHintergrundBildZ(msAuswBgB->get(auswahl));
  1001. tmpHB = tf->hatStyle(TextFeld::Style::HBild);
  1002. tf->setStyle(TextFeld::Style::HBild,
  1003. hatMsStyle(auswahl, Style::HBild));
  1004. }
  1005. if (hatMsStyle(auswahl, Style::AuswahlHAlpha))
  1006. {
  1007. tmpHAlpha = tf->hatStyle(TextFeld::Style::HAlpha);
  1008. tf->setStyle(TextFeld::Style::HAlpha,
  1009. hatMsStyle(auswahl, Style::AuswahlHAlpha));
  1010. }
  1011. }
  1012. if (hatMsStyle(auswahl, Style::AuswahlRahmen)
  1013. && msAuswRahmen)
  1014. {
  1015. tmpRahmen = tf->getRahmen();
  1016. tf->setRahmenZ(msAuswRahmen->get(auswahl));
  1017. tmpR = tf->hatStyle(TextFeld::Style::Rahmen);
  1018. tf->setStyle(TextFeld::Style::Rahmen,
  1019. hatMsStyle(auswahl, Style::AuswahlRahmen));
  1020. }
  1021. }
  1022. int tmpHi = tf->getHeight();
  1023. tf->setPosition(0, 0);
  1024. tf->setSize(
  1025. gr.x - rbr * 2 - (ausfahren ? ausfahren->getBreite() : 0),
  1026. gr.y - rbr * 2);
  1027. tf->render(zRObj);
  1028. tf->setSize(tf->getBreite(), tmpHi);
  1029. if (hatStyleNicht(Style::MultiStyled) || !msStyle)
  1030. {
  1031. if (hatStyle(Style::AuswahlBuffer))
  1032. {
  1033. tf->setAlphaFeldZ(tmpBuffer);
  1034. tf->setStyle(TextFeld::Style::Buffered, tmpB);
  1035. }
  1036. if (hatStyle(Style::AuswahlHintergrund))
  1037. {
  1038. tf->setHintergrundFarbe(tmpHFarbe);
  1039. tf->setStyle(TextFeld::Style::Hintergrund, tmpH);
  1040. if (hatStyle(Style::AuswahlHBild))
  1041. {
  1042. tf->setHintergrundBildZ(tmpHBild);
  1043. tf->setStyle(TextFeld::Style::HBild, tmpHB);
  1044. }
  1045. if (hatStyle(Style::AuswahlHAlpha))
  1046. tf->setStyle(TextFeld::Style::HAlpha, tmpHAlpha);
  1047. }
  1048. if (hatStyle(Style::AuswahlRahmen))
  1049. {
  1050. tf->setRahmenZ(tmpRahmen);
  1051. tf->setStyle(TextFeld::Style::Rahmen, tmpR);
  1052. }
  1053. }
  1054. else
  1055. {
  1056. if (hatMsStyle(auswahl, Style::AuswahlBuffer) && msAuswAf)
  1057. {
  1058. tf->setAlphaFeldZ(tmpBuffer);
  1059. tf->setStyle(TextFeld::Style::Buffered, tmpB);
  1060. }
  1061. if (hatMsStyle(auswahl, Style::AuswahlHintergrund))
  1062. {
  1063. tf->setStyle(TextFeld::Style::Hintergrund, tmpH);
  1064. if (msAuswBgF && msAuswBgF->hat(auswahl))
  1065. tf->setHintergrundFarbe(tmpHFarbe);
  1066. if (hatMsStyle(auswahl, Style::AuswahlHBild)
  1067. && msAuswBgB)
  1068. {
  1069. tf->setHintergrundBildZ(tmpHBild);
  1070. tf->setStyle(TextFeld::Style::HBild, tmpHB);
  1071. }
  1072. if (hatMsStyle(auswahl, Style::AuswahlHAlpha))
  1073. tf->setStyle(TextFeld::Style::HAlpha, tmpHAlpha);
  1074. }
  1075. if (hatMsStyle(auswahl, Style::AuswahlRahmen)
  1076. && msAuswRahmen)
  1077. {
  1078. tf->setRahmenZ(tmpRahmen);
  1079. tf->setStyle(TextFeld::Style::Rahmen, tmpR);
  1080. }
  1081. }
  1082. }
  1083. }
  1084. bool vsb = hatStyle(Style::VScroll)
  1085. && vertikalScrollBar; // Scroll bar zeichnen
  1086. if (auswahl >= anzahl)
  1087. {
  1088. auswahl = 0;
  1089. if (eAk) eAk(eAkP, this, 0, auswahl);
  1090. }
  1091. if (members)
  1092. {
  1093. if (vsb && ausklappHeight)
  1094. {
  1095. br -= 15;
  1096. vertikalScrollBar->getScrollData()->anzeige
  1097. = ausklappHeight - rbr;
  1098. vertikalScrollBar->render(
  1099. br - rbr, gr.y, 15, ausklappHeight - rbr, zRObj);
  1100. }
  1101. if ((ausklappHeight
  1102. && !zRObj.setDrawOptionsErzwingen(
  1103. 0, gr.y, br - rbr, hi - rbr - gr.y))
  1104. || (!ausklappHeight
  1105. && !zRObj.setDrawOptions(
  1106. 0, gr.y, br - rbr, hi - rbr - gr.y)))
  1107. {
  1108. zRObj.releaseDrawOptions();
  1109. zRObj.releaseDrawOptions();
  1110. unlockZeichnung();
  1111. return;
  1112. }
  1113. int maxHeight = 0;
  1114. int dy = 0;
  1115. if (vsb) dy -= vertikalScrollBar->getScroll();
  1116. int mdy = hi - rbr;
  1117. anzahl = members->getEintragAnzahl();
  1118. for (int i = 0; i < anzahl; ++i)
  1119. {
  1120. TextFeld* tf = members->z(i);
  1121. if (dy >= mdy && !vsb) break;
  1122. tf->setPosition(0, dy);
  1123. tf->setSize(br - rbr * 2, tf->getHeight());
  1124. maxHeight += tf->getHeight();
  1125. bool selected = auswahl == i;
  1126. AlphaFeld* tmpBuffer = 0;
  1127. bool tmpB = 0;
  1128. int tmpHFarbe = 0;
  1129. bool tmpH = 0;
  1130. Bild* tmpHBild = 0;
  1131. bool tmpHB = 0;
  1132. bool tmpHAlpha = 0;
  1133. Rahmen* tmpRahmen = 0;
  1134. bool tmpR = 0;
  1135. if (selected)
  1136. {
  1137. if (hatStyleNicht(Style::MultiStyled) || !msStyle)
  1138. {
  1139. if (hatStyle(Style::AuswahlBuffer))
  1140. {
  1141. tmpBuffer = tf->getAlphaFeld();
  1142. tf->setAlphaFeldZ(
  1143. dynamic_cast<AlphaFeld*>(auswAf->getThis()));
  1144. tmpB = tf->hatStyle(TextFeld::Style::Buffered);
  1145. tf->setStyle(TextFeld::Style::Buffered,
  1146. hatStyle(Style::AuswahlBuffer));
  1147. }
  1148. if (hatStyle(Style::AuswahlHintergrund))
  1149. {
  1150. tmpH = tf->hatStyle(TextFeld::Style::Hintergrund);
  1151. tmpHFarbe = tf->getHintergrundFarbe();
  1152. tf->setHintergrundFarbe(auswBgF);
  1153. tf->setStyle(TextFeld::Style::Hintergrund,
  1154. hatStyle(Style::Hintergrund));
  1155. if (hatStyle(Style::AuswahlHBild))
  1156. {
  1157. tmpHBild = tf->getHintergrundBild();
  1158. tf->setHintergrundBildZ(
  1159. dynamic_cast<Bild*>(auswBgB->getThis()));
  1160. tmpHB = tf->hatStyle(TextFeld::Style::HBild);
  1161. tf->setStyle(TextFeld::Style::HBild,
  1162. hatStyle(Style::HBild));
  1163. }
  1164. if (hatStyle(Style::AuswahlHAlpha))
  1165. {
  1166. tmpHAlpha
  1167. = tf->hatStyle(TextFeld::Style::HAlpha);
  1168. tf->setStyle(TextFeld::Style::HAlpha,
  1169. hatStyle(Style::AuswahlHAlpha));
  1170. }
  1171. }
  1172. if (hatStyle(Style::AuswahlRahmen))
  1173. {
  1174. tmpRahmen = tf->getRahmen();
  1175. tf->setRahmenZ(
  1176. dynamic_cast<Rahmen*>(auswRahmen->getThis()));
  1177. tmpR = tf->hatStyle(TextFeld::Style::Rahmen);
  1178. tf->setStyle(TextFeld::Style::Rahmen,
  1179. hatStyle(Style::AuswahlRahmen));
  1180. }
  1181. }
  1182. else
  1183. {
  1184. if (hatMsStyle(i, Style::AuswahlBuffer) && msAuswAf)
  1185. {
  1186. tmpBuffer = tf->getAlphaFeld();
  1187. tf->setAlphaFeldZ(msAuswAf->get(i));
  1188. tmpB = tf->hatStyle(TextFeld::Style::Buffered);
  1189. tf->setStyle(TextFeld::Style::Buffered,
  1190. hatMsStyle(i, Style::AuswahlBuffer));
  1191. }
  1192. if (hatMsStyle(i, Style::AuswahlHintergrund))
  1193. {
  1194. tmpH = tf->hatStyle(Style::Hintergrund);
  1195. tf->setStyle(TextFeld::Style::Hintergrund,
  1196. hatMsStyle(i, Style::AuswahlHintergrund));
  1197. if (msAuswBgF && msAuswBgF->hat(i))
  1198. {
  1199. tmpHFarbe = tf->getHintergrundFarbe();
  1200. tf->setHintergrundFarbe(msAuswBgF->get(i));
  1201. }
  1202. if (hatMsStyle(i, Style::AuswahlHBild) && msAuswBgB)
  1203. {
  1204. tmpHBild = tf->getHintergrundBild();
  1205. tf->setHintergrundBildZ(msAuswBgB->get(i));
  1206. tmpHB = tf->hatStyle(TextFeld::Style::HBild);
  1207. tf->setStyle(TextFeld::Style::HBild,
  1208. hatMsStyle(i, Style::HBild));
  1209. }
  1210. if (hatMsStyle(i, Style::AuswahlHAlpha))
  1211. {
  1212. tmpHAlpha
  1213. = tf->hatStyle(TextFeld::Style::HAlpha);
  1214. tf->setStyle(TextFeld::Style::HAlpha,
  1215. hatMsStyle(i, Style::AuswahlHAlpha));
  1216. }
  1217. }
  1218. if (hatMsStyle(i, Style::AuswahlRahmen) && msAuswRahmen)
  1219. {
  1220. tmpRahmen = tf->getRahmen();
  1221. tf->setRahmenZ(msAuswRahmen->get(i));
  1222. tmpR = tf->hatStyle(TextFeld::Style::Rahmen);
  1223. tf->setStyle(TextFeld::Style::Rahmen,
  1224. hatMsStyle(i, Style::AuswahlRahmen));
  1225. }
  1226. }
  1227. }
  1228. else if (mausEintrag == i)
  1229. {
  1230. if (hatStyleNicht(Style::MultiStyled) || !msStyle)
  1231. {
  1232. if (hatStyle(Style::MausBuffer))
  1233. {
  1234. tmpBuffer = tf->getAlphaFeld();
  1235. tf->setAlphaFeldZ(
  1236. dynamic_cast<AlphaFeld*>(mausAf->getThis()));
  1237. tmpB = tf->hatStyle(TextFeld::Style::Buffered);
  1238. tf->setStyle(TextFeld::Style::Buffered,
  1239. hatStyle(Style::MausBuffer));
  1240. }
  1241. if (hatStyle(Style::MausHintergrund))
  1242. {
  1243. tmpH = tf->hatStyle(TextFeld::Style::Hintergrund);
  1244. tmpHFarbe = tf->getHintergrundFarbe();
  1245. tf->setHintergrundFarbe(mausBgF);
  1246. tf->setStyle(TextFeld::Style::Hintergrund,
  1247. hatStyle(Style::Hintergrund));
  1248. if (hatStyle(Style::MausHBild))
  1249. {
  1250. tmpHBild = tf->getHintergrundBild();
  1251. tf->setHintergrundBildZ(
  1252. dynamic_cast<Bild*>(mausBgB->getThis()));
  1253. tmpHB = tf->hatStyle(TextFeld::Style::HBild);
  1254. tf->setStyle(TextFeld::Style::HBild,
  1255. hatStyle(Style::HBild));
  1256. }
  1257. if (hatStyle(Style::MausHAlpha))
  1258. {
  1259. tmpHAlpha
  1260. = tf->hatStyle(TextFeld::Style::HAlpha);
  1261. tf->setStyle(TextFeld::Style::HAlpha,
  1262. hatStyle(Style::MausHAlpha));
  1263. }
  1264. }
  1265. if (hatStyle(Style::MausRahmen))
  1266. {
  1267. tmpRahmen = tf->getRahmen();
  1268. tf->setRahmenZ(
  1269. dynamic_cast<Rahmen*>(mausRahmen->getThis()));
  1270. tmpR = tf->hatStyle(TextFeld::Style::Rahmen);
  1271. tf->setStyle(TextFeld::Style::Rahmen,
  1272. hatStyle(Style::MausRahmen));
  1273. }
  1274. }
  1275. else
  1276. {
  1277. if (hatMsStyle(i, Style::MausBuffer) && msAuswAf)
  1278. {
  1279. tmpBuffer = tf->getAlphaFeld();
  1280. tf->setAlphaFeldZ(msMausAf->get(i));
  1281. tmpB = tf->hatStyle(TextFeld::Style::Buffered);
  1282. tf->setStyle(TextFeld::Style::Buffered,
  1283. hatMsStyle(i, Style::MausBuffer));
  1284. }
  1285. if (hatMsStyle(i, Style::MausHintergrund))
  1286. {
  1287. tmpH = tf->hatStyle(Style::Hintergrund);
  1288. tf->setStyle(TextFeld::Style::Hintergrund,
  1289. hatMsStyle(i, Style::MausHintergrund));
  1290. if (msMausBgF && msMausBgF->hat(i))
  1291. {
  1292. tmpHFarbe = tf->getHintergrundFarbe();
  1293. tf->setHintergrundFarbe(msMausBgF->get(i));
  1294. }
  1295. if (hatMsStyle(i, Style::MausHBild) && msMausBgB)
  1296. {
  1297. tmpHBild = tf->getHintergrundBild();
  1298. tf->setHintergrundBildZ(msMausBgB->get(i));
  1299. tmpHB = tf->hatStyle(TextFeld::Style::HBild);
  1300. tf->setStyle(TextFeld::Style::HBild,
  1301. hatMsStyle(i, Style::HBild));
  1302. }
  1303. if (hatMsStyle(i, Style::MausHAlpha))
  1304. {
  1305. tmpHAlpha
  1306. = tf->hatStyle(TextFeld::Style::HAlpha);
  1307. tf->setStyle(TextFeld::Style::HAlpha,
  1308. hatMsStyle(i, Style::MausHAlpha));
  1309. }
  1310. }
  1311. if (hatMsStyle(i, Style::MausRahmen) && msMausRahmen)
  1312. {
  1313. tmpRahmen = tf->getRahmen();
  1314. tf->setRahmenZ(msMausRahmen->get(i));
  1315. tmpR = tf->hatStyle(TextFeld::Style::Rahmen);
  1316. tf->setStyle(TextFeld::Style::Rahmen,
  1317. hatMsStyle(i, Style::MausRahmen));
  1318. }
  1319. }
  1320. }
  1321. tf->render(zRObj);
  1322. if (selected)
  1323. {
  1324. if (hatStyleNicht(Style::MultiStyled) || !msStyle)
  1325. {
  1326. if (hatStyle(Style::AuswahlBuffer))
  1327. {
  1328. tf->setAlphaFeldZ(tmpBuffer);
  1329. tf->setStyle(TextFeld::Style::Buffered, tmpB);
  1330. }
  1331. if (hatStyle(Style::AuswahlHintergrund))
  1332. {
  1333. tf->setHintergrundFarbe(tmpHFarbe);
  1334. tf->setStyle(TextFeld::Style::Hintergrund, tmpH);
  1335. if (hatStyle(Style::AuswahlHBild))
  1336. {
  1337. tf->setHintergrundBildZ(tmpHBild);
  1338. tf->setStyle(TextFeld::Style::HBild, tmpHB);
  1339. }
  1340. if (hatStyle(Style::AuswahlHAlpha))
  1341. tf->setStyle(
  1342. TextFeld::Style::HAlpha, tmpHAlpha);
  1343. }
  1344. if (hatStyle(Style::AuswahlRahmen))
  1345. {
  1346. tf->setRahmenZ(tmpRahmen);
  1347. tf->setStyle(TextFeld::Style::Rahmen, tmpR);
  1348. }
  1349. }
  1350. else
  1351. {
  1352. if (hatMsStyle(i, Style::AuswahlBuffer) && msAuswAf)
  1353. {
  1354. tf->setAlphaFeldZ(tmpBuffer);
  1355. tf->setStyle(TextFeld::Style::Buffered, tmpB);
  1356. }
  1357. if (hatMsStyle(i, Style::AuswahlHintergrund))
  1358. {
  1359. tf->setStyle(TextFeld::Style::Hintergrund, tmpH);
  1360. if (msAuswBgF && msAuswBgF->hat(i))
  1361. tf->setHintergrundFarbe(tmpHFarbe);
  1362. if (hatMsStyle(i, Style::AuswahlHBild) && msAuswBgB)
  1363. {
  1364. tf->setHintergrundBildZ(tmpHBild);
  1365. tf->setStyle(TextFeld::Style::HBild, tmpHB);
  1366. }
  1367. if (hatMsStyle(i, Style::AuswahlHAlpha))
  1368. tf->setStyle(
  1369. TextFeld::Style::HAlpha, tmpHAlpha);
  1370. }
  1371. if (hatMsStyle(i, Style::AuswahlRahmen) && msAuswRahmen)
  1372. {
  1373. tf->setRahmenZ(tmpRahmen);
  1374. tf->setStyle(TextFeld::Style::Rahmen, tmpR);
  1375. }
  1376. }
  1377. }
  1378. else if (mausEintrag == i)
  1379. {
  1380. if (hatStyleNicht(Style::MultiStyled) || !msStyle)
  1381. {
  1382. if (hatStyle(Style::MausBuffer))
  1383. {
  1384. tf->setAlphaFeldZ(tmpBuffer);
  1385. tf->setStyle(TextFeld::Style::Buffered, tmpB);
  1386. }
  1387. if (hatStyle(Style::MausHintergrund))
  1388. {
  1389. tf->setHintergrundFarbe(tmpHFarbe);
  1390. tf->setStyle(TextFeld::Style::Hintergrund, tmpH);
  1391. if (hatStyle(Style::MausHBild))
  1392. {
  1393. tf->setHintergrundBildZ(tmpHBild);
  1394. tf->setStyle(TextFeld::Style::HBild, tmpHB);
  1395. }
  1396. if (hatStyle(Style::MausHAlpha))
  1397. tf->setStyle(
  1398. TextFeld::Style::HAlpha, tmpHAlpha);
  1399. }
  1400. if (hatStyle(Style::MausRahmen))
  1401. {
  1402. tf->setRahmenZ(tmpRahmen);
  1403. tf->setStyle(TextFeld::Style::Rahmen, tmpR);
  1404. }
  1405. }
  1406. else
  1407. {
  1408. if (hatMsStyle(i, Style::MausBuffer) && msAuswAf)
  1409. {
  1410. tf->setAlphaFeldZ(tmpBuffer);
  1411. tf->setStyle(TextFeld::Style::Buffered, tmpB);
  1412. }
  1413. if (hatMsStyle(i, Style::MausHintergrund))
  1414. {
  1415. tf->setStyle(TextFeld::Style::Hintergrund, tmpH);
  1416. if (msAuswBgF && msAuswBgF->hat(i))
  1417. tf->setHintergrundFarbe(tmpHFarbe);
  1418. if (hatMsStyle(i, Style::MausHBild) && msAuswBgB)
  1419. {
  1420. tf->setHintergrundBildZ(tmpHBild);
  1421. tf->setStyle(TextFeld::Style::HBild, tmpHB);
  1422. }
  1423. if (hatMsStyle(i, Style::MausHAlpha))
  1424. tf->setStyle(
  1425. TextFeld::Style::HAlpha, tmpHAlpha);
  1426. }
  1427. if (hatMsStyle(i, Style::MausRahmen) && msAuswRahmen)
  1428. {
  1429. tf->setRahmenZ(tmpRahmen);
  1430. tf->setStyle(TextFeld::Style::Rahmen, tmpR);
  1431. }
  1432. }
  1433. }
  1434. dy += tf->getHeight();
  1435. }
  1436. if (vertikalScrollBar)
  1437. vertikalScrollBar->getScrollData()->max = maxHeight;
  1438. zRObj.releaseDrawOptions();
  1439. }
  1440. zRObj.releaseDrawOptions();
  1441. zRObj.releaseDrawOptions();
  1442. unlockZeichnung();
  1443. }
  1444. }
  1445. // constant
  1446. int AuswahlBox::getEintragPos(
  1447. const char* txt) const // gibt die Eintrag Position zurück
  1448. {
  1449. for (int i = 0; i < anzahl; ++i)
  1450. if (members->z(i) && members->z(i)->zText()->istGleich(txt)) return i;
  1451. return -1;
  1452. }
  1453. int AuswahlBox::getEintragPos(Text* txt) const
  1454. {
  1455. for (int i = 0; i < anzahl; ++i)
  1456. {
  1457. if (members->z(i) && members->z(i)->zText()->istGleich(txt->getText()))
  1458. {
  1459. txt->release();
  1460. return i;
  1461. }
  1462. }
  1463. txt->release();
  1464. return -1;
  1465. }
  1466. Text* AuswahlBox::getEintragText(int i) const // gibt den Eintrag Text zurück
  1467. {
  1468. if (i >= anzahl) return 0;
  1469. return members->z(i) ? members->z(i)->getText() : 0;
  1470. }
  1471. Text* AuswahlBox::zEintragText(int i) const
  1472. {
  1473. if (i >= anzahl) return 0;
  1474. return members->z(i) ? members->z(i)->zText() : 0;
  1475. }
  1476. TextFeld* AuswahlBox::getEintrag(int i) const // gibt den Eintrag zurück
  1477. {
  1478. if (i >= anzahl) return 0;
  1479. return members->get(i);
  1480. }
  1481. TextFeld* AuswahlBox::zEintrag(int i) const
  1482. {
  1483. if (i >= anzahl) return 0;
  1484. return members->z(i);
  1485. }
  1486. int AuswahlBox::getAuswahl()
  1487. const // gibt die Position des ausgewählten Eintrages zurück
  1488. {
  1489. return auswahl;
  1490. }
  1491. int AuswahlBox::getEintragAnzahl() const // gibt die Anzahl der Einträge zurück
  1492. {
  1493. return anzahl;
  1494. }
  1495. bool AuswahlBox::istAusgeklappt() const // prüft, ob die Liste ausgeklappt ist
  1496. {
  1497. return ausgeklappt;
  1498. }
  1499. int AuswahlBox::getMaxHeight() const // gibt die maximale Höhe der Liste zurück
  1500. {
  1501. if (!hatStyle(Style::MaxHeight)) return 0;
  1502. return ausklapMaxHeight;
  1503. }
  1504. int AuswahlBox::getEintragHeight() const // gibt die Höhe der Einträge zurück
  1505. {
  1506. return eintragHeight;
  1507. }
  1508. Knopf*
  1509. AuswahlBox::getAusklappKnopf() const // gibt den aus-/einklapp Knopf zurück
  1510. {
  1511. if (hatStyle(Style::MultiStyled)) return 0;
  1512. return ausfahren ? dynamic_cast<Knopf*>(ausfahren->getThis()) : 0;
  1513. }
  1514. Knopf* AuswahlBox::zAusklappKnopf() const
  1515. {
  1516. if (hatStyle(Style::MultiStyled)) return 0;
  1517. return ausfahren;
  1518. }
  1519. Rahmen* AuswahlBox::getEintragRahmen(
  1520. int i) const // gibt den Eintrag Rahmen zurück
  1521. {
  1522. if (!hatStyle(Style::MultiStyled)) return 0;
  1523. if (!members->z(i)) return 0;
  1524. return members->z(i)->getRahmen();
  1525. }
  1526. Rahmen* AuswahlBox::zEintragRahmen(int i) const
  1527. {
  1528. if (!hatStyle(Style::MultiStyled)) return 0;
  1529. if (!members->z(i)) return 0;
  1530. return members->z(i)->zRahmen();
  1531. }
  1532. int AuswahlBox::getEintragRahmenFarbe(
  1533. int i) const // gibt die Eintrag Rahmen Frabe zurück
  1534. {
  1535. if (!hatStyle(Style::MultiStyled)) return 0;
  1536. if (!members->z(i)) return 0;
  1537. return members->z(i)->getRahmenFarbe();
  1538. }
  1539. int AuswahlBox::getEintragRahmenBreite(
  1540. int i) const // gibt die Eintrag Rahmen Breite zurück
  1541. {
  1542. if (!hatStyle(Style::MultiStyled)) return 0;
  1543. if (!members->z(i)) return 0;
  1544. return members->z(i)->getRahmenBreite();
  1545. }
  1546. AlphaFeld* AuswahlBox::getEintragAlphaFeld(
  1547. int i) const // gibt das Eintrag AlphaFeld zurück
  1548. {
  1549. if (!hatStyle(Style::MultiStyled)) return 0;
  1550. if (!members->z(i)) return 0;
  1551. return members->z(i)->getAlphaFeld();
  1552. }
  1553. AlphaFeld* AuswahlBox::zEintragAlphaFeld(int i) const
  1554. {
  1555. if (!hatStyle(Style::MultiStyled)) return 0;
  1556. if (!members->z(i)) return 0;
  1557. return members->z(i)->zAlphaFeld();
  1558. }
  1559. int AuswahlBox::getEintragAlphaFeldFarbe(
  1560. int i) const // gibt die Eintrag AlphaFeld Farbe zurück
  1561. {
  1562. if (!hatStyle(Style::MultiStyled)) return 0;
  1563. if (!members->z(i)) return 0;
  1564. return members->z(i)->getAlphaFeldFarbe();
  1565. }
  1566. int AuswahlBox::getEintragAlphaFeldStrength(
  1567. int i) const // gibt die Eintrag AlphaFeld stärke zurück
  1568. {
  1569. if (!hatStyle(Style::MultiStyled)) return 0;
  1570. if (!members->z(i)) return 0;
  1571. return members->z(i)->getAlphaFeldStrength();
  1572. }
  1573. int AuswahlBox::getEintragHintergrundFarbe(
  1574. int i) const // gibt die Eintrag Hintergrund Farbe zurück
  1575. {
  1576. if (!hatStyle(Style::MultiStyled)) return 0;
  1577. if (!members->z(i)) return 0;
  1578. return members->z(i)->getHintergrundFarbe();
  1579. }
  1580. Bild* AuswahlBox::getEintragHintergrundBild(
  1581. int i) const // gibt das Eintrag Hintergrund Bild zurück
  1582. {
  1583. if (!hatStyle(Style::MultiStyled)) return 0;
  1584. if (!members->z(i)) return 0;
  1585. return members->z(i)->getHintergrundBild();
  1586. }
  1587. Bild* AuswahlBox::zEintragHintergrundBild(int i) const
  1588. {
  1589. if (!hatStyle(Style::MultiStyled)) return 0;
  1590. if (!members->z(i)) return 0;
  1591. return members->z(i)->zHintergrundBild();
  1592. }
  1593. Rahmen* AuswahlBox::getAuswRahmen() const // gibt den Auswahl Rahmen zurück
  1594. {
  1595. if (hatStyle(Style::MultiStyled)) return 0;
  1596. return auswRahmen ? dynamic_cast<Rahmen*>(auswRahmen->getThis()) : 0;
  1597. }
  1598. Rahmen* AuswahlBox::zAuswRahmen() const
  1599. {
  1600. if (hatStyle(Style::MultiStyled)) return 0;
  1601. return auswRahmen;
  1602. }
  1603. int AuswahlBox::getAuswRahmenFarbe()
  1604. const // gibt die Auswahl Rahmen Frabe zurück
  1605. {
  1606. if (hatStyle(Style::MultiStyled)) return 0;
  1607. return auswRahmen ? auswRahmen->getFarbe() : 0;
  1608. }
  1609. int AuswahlBox::getAuswRahmenBreite()
  1610. const // gibt die Auswahl Rahmen Breite zurück
  1611. {
  1612. if (hatStyle(Style::MultiStyled)) return 0;
  1613. return auswRahmen ? auswRahmen->getRBreite() : 0;
  1614. }
  1615. AlphaFeld*
  1616. AuswahlBox::getAuswAlphaFeld() const // gibt das Auswahl AlphaFeld zurück
  1617. {
  1618. if (hatStyle(Style::MultiStyled)) return 0;
  1619. return auswAf ? dynamic_cast<AlphaFeld*>(auswAf->getThis()) : 0;
  1620. }
  1621. AlphaFeld* AuswahlBox::zAuswAlphaFeld() const
  1622. {
  1623. if (hatStyle(Style::MultiStyled)) return 0;
  1624. return auswAf;
  1625. }
  1626. int AuswahlBox::getAuswAlphaFeldFarbe()
  1627. const // gibt die Auswahl AlphaFeld Farbe zurück
  1628. {
  1629. if (hatStyle(Style::MultiStyled)) return 0;
  1630. return auswAf ? auswAf->getFarbe() : 0;
  1631. }
  1632. int AuswahlBox::getAuswAlphaFeldStrength()
  1633. const // gibt die Auswahl AlphaFeld stärke zurück
  1634. {
  1635. if (hatStyle(Style::MultiStyled)) return 0;
  1636. return auswAf ? auswAf->getStrength() : 0;
  1637. }
  1638. int AuswahlBox::getAuswHintergrundFarbe()
  1639. const // gibt die Auswahl Hintergrund Farbe zurück
  1640. {
  1641. if (hatStyle(Style::MultiStyled)) return 0;
  1642. return auswBgF;
  1643. }
  1644. Bild* AuswahlBox::getAuswHintergrundBild()
  1645. const // gibt das Auswahl Hintergrund Bild zurück
  1646. {
  1647. if (hatStyle(Style::MultiStyled)) return 0;
  1648. return auswBgB ? dynamic_cast<Bild*>(auswBgB->getThis()) : 0;
  1649. }
  1650. Bild* AuswahlBox::zAuswHintergrundBild() const
  1651. {
  1652. if (hatStyle(Style::MultiStyled)) return 0;
  1653. return auswBgB;
  1654. }
  1655. Rahmen* AuswahlBox::getMsAuswRahmen(
  1656. int i) const // gibt den Multistyle Auswahl Rahmen zurück
  1657. {
  1658. if (!hatStyle(Style::MultiStyled)) return 0;
  1659. if (!msAuswRahmen) return 0;
  1660. return msAuswRahmen->z(i)
  1661. ? dynamic_cast<Rahmen*>(msAuswRahmen->z(i)->getThis())
  1662. : 0;
  1663. }
  1664. Rahmen* AuswahlBox::zMsAuswRahmen(int i) const
  1665. {
  1666. if (!hatStyle(Style::MultiStyled)) return 0;
  1667. if (!msAuswRahmen) return 0;
  1668. return msAuswRahmen->z(i);
  1669. }
  1670. int AuswahlBox::getMsAuswRahmenFarbe(
  1671. int i) const // gibt die Multistyle Auswahl Rahmen Frabe zurück
  1672. {
  1673. if (!hatStyle(Style::MultiStyled)) return 0;
  1674. if (!msAuswRahmen) return 0;
  1675. return msAuswRahmen->z(i) ? msAuswRahmen->z(i)->getFarbe() : 0;
  1676. }
  1677. int AuswahlBox::getMsAuswRahmenBreite(
  1678. int i) const // gibt die Multistyle Auswahl Rahmen Breite zurück
  1679. {
  1680. if (!hatStyle(Style::MultiStyled)) return 0;
  1681. if (!msAuswRahmen) return 0;
  1682. return msAuswRahmen->z(i) ? msAuswRahmen->z(i)->getRBreite() : 0;
  1683. }
  1684. AlphaFeld* AuswahlBox::getMsAuswAlphaFeld(
  1685. int i) const // gibt das Multistyle Auswahl AlphaFeld zurück
  1686. {
  1687. if (!hatStyle(Style::MultiStyled)) return 0;
  1688. if (!msAuswAf) return 0;
  1689. return msAuswAf->z(i) ? dynamic_cast<AlphaFeld*>(msAuswAf->z(i)->getThis())
  1690. : 0;
  1691. }
  1692. AlphaFeld* AuswahlBox::zMsAuswAlphaFeld(int i) const
  1693. {
  1694. if (!hatStyle(Style::MultiStyled)) return 0;
  1695. if (!msAuswAf) return 0;
  1696. return msAuswAf->z(i);
  1697. }
  1698. int AuswahlBox::getMsAuswAlphaFeldFarbe(
  1699. int i) const // gibt die Multistyle Auswahl AlphaFeld Farbe zurück
  1700. {
  1701. if (!hatStyle(Style::MultiStyled)) return 0;
  1702. if (!msAuswAf) return 0;
  1703. return msAuswAf->z(i) ? msAuswAf->z(i)->getFarbe() : 0;
  1704. }
  1705. int AuswahlBox::getMsAuswAlphaFeldStrength(
  1706. int i) const // gibt die Multistyle Auswahl AlphaFeld stärke zurück
  1707. {
  1708. if (!hatStyle(Style::MultiStyled)) return 0;
  1709. if (!msAuswAf) return 0;
  1710. return msAuswAf->z(i) ? msAuswAf->z(i)->getStrength() : 0;
  1711. }
  1712. int AuswahlBox::getMsAuswHintergrundFarbe(
  1713. int i) const // gibt die Multistyle Auswahl Hintergrund Farbe zurück
  1714. {
  1715. if (!hatStyle(Style::MultiStyled)) return 0;
  1716. if (!msAuswBgF || !msAuswBgF->hat(i)) return 0;
  1717. return msAuswBgF->get(i);
  1718. }
  1719. Bild* AuswahlBox::getMsAuswHintergrundBild(
  1720. int i) const // gibt das Multistyle Auswahl Hintergrund Bild zurück
  1721. {
  1722. if (!hatStyle(Style::MultiStyled)) return 0;
  1723. if (!msAuswBgB) return 0;
  1724. return msAuswBgB->get(i);
  1725. }
  1726. Bild* AuswahlBox::zMsAuswHintergrundBild(int i) const
  1727. {
  1728. if (!hatStyle(Style::MultiStyled)) return 0;
  1729. if (!msAuswBgB) return 0;
  1730. return msAuswBgB->z(i);
  1731. }
  1732. Rahmen* AuswahlBox::getMausRahmen() const // gibt den Maus Rahmen zurück
  1733. {
  1734. if (hatStyle(Style::MultiStyled)) return 0;
  1735. return mausRahmen ? dynamic_cast<Rahmen*>(mausRahmen->getThis()) : 0;
  1736. }
  1737. Rahmen* AuswahlBox::zMausRahmen() const
  1738. {
  1739. if (hatStyle(Style::MultiStyled)) return 0;
  1740. return mausRahmen;
  1741. }
  1742. int AuswahlBox::getMausRahmenFarbe() const // gibt die Maus Rahmen Frabe zurück
  1743. {
  1744. if (hatStyle(Style::MultiStyled)) return 0;
  1745. return mausRahmen ? mausRahmen->getFarbe() : 0;
  1746. }
  1747. int AuswahlBox::getMausRahmenBreite()
  1748. const // gibt die Maus Rahmen Breite zurück
  1749. {
  1750. if (hatStyle(Style::MultiStyled)) return 0;
  1751. return mausRahmen ? mausRahmen->getRBreite() : 0;
  1752. }
  1753. AlphaFeld*
  1754. AuswahlBox::getMausAlphaFeld() const // gibt das Maus AlphaFeld zurück
  1755. {
  1756. if (hatStyle(Style::MultiStyled)) return 0;
  1757. return mausAf ? dynamic_cast<AlphaFeld*>(mausAf->getThis()) : 0;
  1758. }
  1759. AlphaFeld* AuswahlBox::zMausAlphaFeld() const
  1760. {
  1761. if (hatStyle(Style::MultiStyled)) return 0;
  1762. return mausAf;
  1763. }
  1764. int AuswahlBox::getMausAlphaFeldFarbe()
  1765. const // gibt die Maus AlphaFeld Farbe zurück
  1766. {
  1767. if (hatStyle(Style::MultiStyled)) return 0;
  1768. return mausAf ? mausAf->getFarbe() : 0;
  1769. }
  1770. int AuswahlBox::getMausAlphaFeldStrength()
  1771. const // gibt die Maus AlphaFeld stärke zurück
  1772. {
  1773. if (hatStyle(Style::MultiStyled)) return 0;
  1774. return mausAf ? mausAf->getStrength() : 0;
  1775. }
  1776. int AuswahlBox::getMausHintergrundFarbe()
  1777. const // gibt die Maus Hintergrund Farbe zurück
  1778. {
  1779. if (hatStyle(Style::MultiStyled)) return 0;
  1780. return mausBgF;
  1781. }
  1782. Bild* AuswahlBox::getMausHintergrundBild()
  1783. const // gibt das Maus Hintergrund Bild zurück
  1784. {
  1785. if (hatStyle(Style::MultiStyled)) return 0;
  1786. return mausBgB ? dynamic_cast<Bild*>(mausBgB->getThis()) : 0;
  1787. }
  1788. Bild* AuswahlBox::zMausHintergrundBild() const
  1789. {
  1790. if (hatStyle(Style::MultiStyled)) return 0;
  1791. return mausBgB;
  1792. }
  1793. Rahmen* AuswahlBox::getMsMausRahmen(
  1794. int i) const // gibt den Multistyle Maus Rahmen zurück
  1795. {
  1796. if (!hatStyle(Style::MultiStyled)) return 0;
  1797. if (!msMausRahmen) return 0;
  1798. return msMausRahmen->get(i);
  1799. }
  1800. Rahmen* AuswahlBox::zMsMausRahmen(int i) const
  1801. {
  1802. if (!hatStyle(Style::MultiStyled)) return 0;
  1803. if (!msMausRahmen) return 0;
  1804. return msMausRahmen->z(i);
  1805. }
  1806. int AuswahlBox::getMsMausRahmenFarbe(
  1807. int i) const // gibt die Multistyle Maus Rahmen Frabe zurück
  1808. {
  1809. if (!hatStyle(Style::MultiStyled)) return 0;
  1810. if (!msMausRahmen) return 0;
  1811. return msMausRahmen->z(i) ? msMausRahmen->z(i)->getFarbe() : 0;
  1812. }
  1813. int AuswahlBox::getMsMausRahmenBreite(
  1814. int i) const // gibt die Multistyle Maus Rahmen Breite zurück
  1815. {
  1816. if (!hatStyle(Style::MultiStyled)) return 0;
  1817. if (!msMausRahmen) return 0;
  1818. return msMausRahmen->z(i) ? msMausRahmen->z(i)->getRBreite() : 0;
  1819. }
  1820. AlphaFeld* AuswahlBox::getMsMausAlphaFeld(
  1821. int i) const // gibt das Multistyle Maus AlphaFeld zurück
  1822. {
  1823. if (!hatStyle(Style::MultiStyled)) return 0;
  1824. if (!msMausAf) return 0;
  1825. return msMausAf->get(i);
  1826. }
  1827. AlphaFeld* AuswahlBox::zMsMausAlphaFeld(int i) const
  1828. {
  1829. if (!hatStyle(Style::MultiStyled)) return 0;
  1830. if (!msMausAf) return 0;
  1831. return msMausAf->z(i);
  1832. }
  1833. int AuswahlBox::getMsMausAlphaFeldFarbe(
  1834. int i) const // gibt die Multistyle Maus AlphaFeld Farbe zurück
  1835. {
  1836. if (!hatStyle(Style::MultiStyled)) return 0;
  1837. if (!msMausAf) return 0;
  1838. return msMausAf->z(i) ? msMausAf->z(i)->getFarbe() : 0;
  1839. }
  1840. int AuswahlBox::getMsMausAlphaFeldStrength(
  1841. int i) const // gibt die Multistyle Maus AlphaFeld stärke zurück
  1842. {
  1843. if (!hatStyle(Style::MultiStyled)) return 0;
  1844. if (!msMausAf) return 0;
  1845. return msMausAf->z(i) ? msMausAf->z(i)->getStrength() : 0;
  1846. }
  1847. int AuswahlBox::getMsMausHintergrundFarbe(
  1848. int i) const // gibt die Multistyle Maus Hintergrund Farbe zurück
  1849. {
  1850. if (!hatStyle(Style::MultiStyled)) return 0;
  1851. if (!msMausBgF || !msMausBgF->hat(i)) return 0;
  1852. return msMausBgF->get(i);
  1853. }
  1854. Bild* AuswahlBox::getMsMausHintergrundBild(
  1855. int i) const // gibt das Multistyle Maus Hintergrund Bild zurück
  1856. {
  1857. if (!hatStyle(Style::MultiStyled)) return 0;
  1858. if (!msMausBgB) return 0;
  1859. return msMausBgB->get(i);
  1860. }
  1861. Bild* AuswahlBox::zMsMausHintergrundBild(int i) const
  1862. {
  1863. if (!hatStyle(Style::MultiStyled)) return 0;
  1864. if (!msMausBgB) return 0;
  1865. return msMausBgB->z(i);
  1866. }
  1867. // Prüft, ob ein Punkt in diesem Objekt liegt
  1868. // x: die x koordinate des punktes
  1869. // y: die y koordinate des punktes
  1870. // return: 1, wenn der punkt innen ist, 0 sonst
  1871. bool AuswahlBox::istPunktInnen(int x, int y) const
  1872. {
  1873. return x >= pos.x && x < pos.x + gr.x && y >= pos.y
  1874. && y < pos.y + gr.y + ausklappHeight;
  1875. }
  1876. bool AuswahlBox::hatMsStyle(
  1877. int i, __int64 abStyle) const // prüft ob Multistyle style vorhanden
  1878. {
  1879. if ((style | Style::MultiStyled) != style || !msStyle || !msStyle->hat(i))
  1880. return 0;
  1881. return (msStyle->get(i) | abStyle) == msStyle->get(i);
  1882. }
  1883. bool AuswahlBox::hatMsStyleNicht(
  1884. int i, __int64 abStyle) const // prüft ob Multistyle style nicht vorhanden
  1885. {
  1886. if ((style | Style::MultiStyled) != style || !msStyle || !msStyle->hat(i))
  1887. return 1;
  1888. return (msStyle->get(i) | abStyle) != msStyle->get(i);
  1889. }
  1890. Zeichnung* AuswahlBox::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
  1891. {
  1892. AuswahlBox* obj = new AuswahlBox();
  1893. obj->setPosition(pos);
  1894. obj->setSize(gr);
  1895. obj->setMausEreignisParameter(makParam);
  1896. obj->setTastaturEreignisParameter(takParam);
  1897. obj->setMausEreignis(mak);
  1898. obj->setTastaturEreignis(tak);
  1899. if (toolTip) obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
  1900. obj->setStyle(style);
  1901. if (textRd)
  1902. obj->setTextRendererZ(dynamic_cast<TextRenderer*>(textRd->getThis()));
  1903. if (rahmen) obj->setRahmenZ((Rahmen*)rahmen->dublizieren());
  1904. if (ausfahren) obj->setAusklappKnopfZ((Knopf*)ausfahren->dublizieren());
  1905. obj->setHintergrundFarbe(hintergrundFarbe);
  1906. if (hintergrundBild)
  1907. obj->setHintergrundBild(
  1908. dynamic_cast<Bild*>(hintergrundBild->getThis()));
  1909. if (hintergrundFeld)
  1910. obj->setAlphaFeldZ((AlphaFeld*)hintergrundFeld->dublizieren());
  1911. if (auswRahmen) obj->setAuswRahmenZ((Rahmen*)auswRahmen->dublizieren());
  1912. obj->setAuswHintergrundFarbe(auswBgF);
  1913. if (auswBgB)
  1914. obj->setAuswHintergrundBild(dynamic_cast<Bild*>(auswBgB->getThis()));
  1915. if (auswAf) obj->setAuswAlphaFeldZ((AlphaFeld*)auswAf->dublizieren());
  1916. if (mausRahmen) obj->setMausRahmenZ((Rahmen*)mausRahmen->dublizieren());
  1917. obj->setMausHintergrundFarbe(mausBgF);
  1918. if (mausBgB)
  1919. obj->setMausHintergrundBild(dynamic_cast<Bild*>(mausBgB->getThis()));
  1920. if (mausAf) obj->setMausAlphaFeldZ((AlphaFeld*)mausAf->dublizieren());
  1921. obj->setMaxAuskappHeight(ausklapMaxHeight);
  1922. obj->setEintragHeight(eintragHeight);
  1923. for (int i = 0; i < anzahl; ++i)
  1924. {
  1925. if (members->z(i))
  1926. {
  1927. obj->addEintrag("a");
  1928. obj->setEintragZ(i, (TextFeld*)members->z(i)->dublizieren());
  1929. if (msStyle && msStyle->hat(i)) obj->setMsStyle(i, msStyle->get(i));
  1930. if (msAuswRahmen && msAuswRahmen->z(i))
  1931. obj->setMsAuswRahmenZ(
  1932. i, (Rahmen*)msAuswRahmen->z(i)->dublizieren());
  1933. if (msAuswBgF && msAuswBgF->hat(i))
  1934. obj->setMsAuswHintergrundFarbe(i, msAuswBgF->get(i));
  1935. if (msAuswBgB && msAuswBgB->z(i))
  1936. obj->setMsAuswHintergrundBild(i, msAuswBgB->get(i));
  1937. if (msAuswAf && msAuswAf->z(i))
  1938. obj->setMsAuswAlphaFeldZ(
  1939. i, (AlphaFeld*)msAuswAf->z(i)->dublizieren());
  1940. if (msMausRahmen && msMausRahmen->z(i))
  1941. obj->setMsMausRahmenZ(
  1942. i, (Rahmen*)msMausRahmen->z(i)->dublizieren());
  1943. if (msMausBgF && msMausBgF->hat(i))
  1944. obj->setMsMausHintergrundFarbe(i, msMausBgF->get(i));
  1945. if (msMausBgB && msMausBgB->z(i))
  1946. obj->setMsMausHintergrundBild(i, msMausBgB->get(i));
  1947. if (msMausAf && msMausAf->z(i))
  1948. obj->setMsMausAlphaFeldZ(
  1949. i, (AlphaFeld*)msMausAf->z(i)->dublizieren());
  1950. }
  1951. }
  1952. obj->setAlphaFeldFarbe(auswahl);
  1953. return obj;
  1954. }