Tabelle.cpp 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673
  1. #include "Tabelle.h"
  2. #include "AlphaFeld.h"
  3. #include "Bild.h"
  4. #include "MausEreignis.h"
  5. #include "Rahmen.h"
  6. #include "Scroll.h"
  7. #include "TastaturEreignis.h"
  8. #include "Text.h"
  9. #include "ToolTip.h"
  10. using namespace Framework;
  11. // Inhalt der ObjTabelle Klasse aus Tabelle.h
  12. // Konstruktor
  13. ObjTabelle::ObjTabelle()
  14. : ZeichnungHintergrund(),
  15. members(new RCArray<RCArray<Zeichnung>>()),
  16. spaltenNamen(new RCArray<Text>()),
  17. zeilenNamen(new RCArray<Text>()),
  18. spaltenBreite(new Array<int>()),
  19. zeilenHeight(new Array<int>()),
  20. minSpaltenBreite(new Array<int>()),
  21. maxSpaltenBreite(new Array<int>()),
  22. minZeilenHeight(new Array<int>()),
  23. maxZeilenHeight(new Array<int>()),
  24. spaltenAnzahl(0),
  25. zeilenAnzahl(0),
  26. klickSpalte(-1),
  27. klickZeile(-1),
  28. mSpalte(-1),
  29. mZeile(-1),
  30. mx(0),
  31. my(0),
  32. selected(-1, -1),
  33. rasterFarbe(0xFF000000),
  34. rasterBreite(1),
  35. aRam(0),
  36. aAf(0),
  37. msaRam(new RCArray<RCArray<Rahmen>>()),
  38. msaAf(new RCArray<RCArray<AlphaFeld>>()),
  39. styles(new RCArray<Array<__int64>>())
  40. {
  41. style = Style::MEIgnoreInside | Style::MEIgnoreParentInside
  42. | Style::MEIgnoreSichtbar | Style::MEIgnoreVerarbeitet;
  43. }
  44. // Destruktor
  45. ObjTabelle::~ObjTabelle()
  46. {
  47. if (members) members->release();
  48. if (spaltenNamen) spaltenNamen->release();
  49. if (zeilenNamen) zeilenNamen->release();
  50. if (spaltenBreite) spaltenBreite->release();
  51. if (zeilenHeight) zeilenHeight->release();
  52. if (minSpaltenBreite) minSpaltenBreite->release();
  53. if (maxSpaltenBreite) maxSpaltenBreite->release();
  54. if (minZeilenHeight) minZeilenHeight->release();
  55. if (maxZeilenHeight) maxZeilenHeight->release();
  56. if (aRam) aRam->release();
  57. if (aAf) aAf->release();
  58. if (msaRam) msaRam->release();
  59. if (msaAf) msaAf->release();
  60. if (styles) styles->release();
  61. }
  62. void ObjTabelle::doMausEreignis(
  63. MausEreignis& me, bool userRet) // verarbeitet Nachrichten
  64. {
  65. if (!hatStyle(Style::Sichtbar) || !me.insideParent || me.verarbeitet
  66. || me.mx < 0 || me.my < 0 || me.mx >= gr.x || me.my >= gr.y || !userRet)
  67. {
  68. if (me.id == ME_PLinks)
  69. {
  70. klickSpalte = -1;
  71. klickZeile = -1;
  72. }
  73. bool verarbeitet = me.verarbeitet;
  74. me.verarbeitet |= hatStyleNicht(Style::Sichtbar);
  75. bool insideParent = me.insideParent;
  76. me.insideParent = 0;
  77. int rbr = 0;
  78. if (hatStyle(Style::Rahmen) && rahmen) rbr = rahmen->getRBreite();
  79. me.mx -= rbr;
  80. me.my -= rbr;
  81. if (hatStyle(Style::VScroll) && vertikalScrollBar)
  82. me.my += vertikalScrollBar->getScroll();
  83. if (hatStyle(Style::HScroll) && horizontalScrollBar)
  84. me.mx += horizontalScrollBar->getScroll();
  85. if (me.id != ME_Betritt && me.id != ME_Leaves)
  86. {
  87. for (int i = 0; i < zeilenAnzahl; ++i)
  88. {
  89. for (int j = 0; j < spaltenAnzahl; ++j)
  90. {
  91. Zeichnung* obj = zZeichnung(j, i);
  92. if (obj) obj->doPublicMausEreignis(me);
  93. }
  94. }
  95. }
  96. me.mx += rbr;
  97. me.my += rbr;
  98. if (hatStyle(Style::VScroll) && vertikalScrollBar)
  99. me.my -= vertikalScrollBar->getScroll();
  100. if (hatStyle(Style::HScroll) && horizontalScrollBar)
  101. me.mx -= horizontalScrollBar->getScroll();
  102. me.insideParent = insideParent;
  103. if (hatStyleNicht(Style::Sichtbar)) me.verarbeitet = verarbeitet;
  104. return;
  105. }
  106. int tmx = me.mx;
  107. int tmy = me.my;
  108. bool aufScroll = 0;
  109. if (vertikalScrollBar && hatStyle(Style::VScroll)
  110. && me.mx > pos.x + gr.x - 15)
  111. aufScroll = 1;
  112. if (horizontalScrollBar && hatStyle(Style::HScroll)
  113. && me.my > pos.y + gr.y - 15)
  114. aufScroll = 1;
  115. me.mx -= ((horizontalScrollBar && hatStyle(Style::HScroll))
  116. ? horizontalScrollBar->getScroll()
  117. : 0);
  118. me.my -= ((vertikalScrollBar && hatStyle(Style::VScroll))
  119. ? vertikalScrollBar->getScroll()
  120. : 0);
  121. lockZeichnung();
  122. if (!me.verarbeitet && !aufScroll)
  123. {
  124. double ox
  125. = getMausSpalte(me.mx
  126. + ((horizontalScrollBar && hatStyle(Style::HScroll))
  127. ? horizontalScrollBar->getScroll()
  128. : 0));
  129. double oy
  130. = getMausZeile(me.my
  131. + ((vertikalScrollBar && hatStyle(Style::VScroll))
  132. ? vertikalScrollBar->getScroll()
  133. : 0));
  134. if (me.id == ME_RLinks)
  135. {
  136. klickSpalte = -1;
  137. klickZeile = -1;
  138. mSpalte = -1, mZeile = -1;
  139. }
  140. if ((hatStyle(Style::SpaltenBreiteChangeable)
  141. || hatStyle(Style::ZeilenHeightChangeable))
  142. && klickSpalte < 0 && klickZeile < 0)
  143. {
  144. if (hatStyle(Style::SpaltenBreiteChangeable))
  145. {
  146. if (me.id == ME_PLinks && ox != (int)ox)
  147. {
  148. mSpalte = ox;
  149. mx = me.mx;
  150. rend = 1;
  151. }
  152. if (mSpalte > -1)
  153. {
  154. int br = getSpaltenBreite((int)mSpalte) + (me.mx - mx);
  155. if (hatStyle(Style::SpaltenBreiteMax)
  156. && br > getMaxSpaltenBreite((int)mSpalte))
  157. br = getMaxSpaltenBreite((int)mSpalte);
  158. if (hatStyle(Style::SpaltenBreiteMin)
  159. && br < getMinSpaltenBreite((int)mSpalte))
  160. br = getMinSpaltenBreite((int)mSpalte);
  161. setSpaltenBreite((int)mSpalte, br);
  162. mx = me.mx;
  163. rend = 1;
  164. }
  165. }
  166. if (hatStyle(Style::ZeilenHeightChangeable))
  167. {
  168. if (me.id == ME_PLinks && oy != (int)oy)
  169. {
  170. mZeile = oy;
  171. my = me.my;
  172. rend = 1;
  173. }
  174. if (mZeile > -1)
  175. {
  176. int hi = getZeilenHeight((int)mZeile) + (me.my - my);
  177. if (hatStyle(Style::ZeilenHeightMax)
  178. && hi > getMaxZeilenHeight((int)mZeile))
  179. hi = getMaxZeilenHeight((int)mZeile);
  180. if (hatStyle(Style::ZeilenHeightMin)
  181. && hi < getMinZeilenHeight((int)mZeile))
  182. hi = getMinZeilenHeight((int)mZeile);
  183. setZeilenHeight((int)mZeile, hi);
  184. my = me.my;
  185. rend = 1;
  186. }
  187. }
  188. }
  189. if (hatStyle(Style::SpaltenBeweglich) && ox == (int)ox && mSpalte == -1
  190. && mZeile == -1)
  191. {
  192. if (klickSpalte >= 0 && klickSpalte < spaltenAnzahl
  193. && klickSpalte != ox && !oy && ox >= 0)
  194. {
  195. setSpaltePosition(klickSpalte, (int)ox);
  196. klickSpalte = (int)ox;
  197. rend = 1;
  198. }
  199. if (me.id == ME_PLinks)
  200. {
  201. if (!oy && klickSpalte < 0)
  202. {
  203. klickSpalte = (int)ox;
  204. rend = 1;
  205. }
  206. }
  207. }
  208. if (hatStyle(Style::ZeilenBeweglich) && oy == (int)oy && mSpalte == -1
  209. && mZeile == -1)
  210. {
  211. if (klickZeile >= 0 && klickZeile < zeilenAnzahl && klickZeile != oy
  212. && !ox && oy >= 0)
  213. {
  214. setZeilePosition(klickZeile, (int)oy);
  215. klickZeile = (int)oy;
  216. rend = 1;
  217. }
  218. if (me.id == ME_PLinks)
  219. {
  220. if (!ox && klickZeile < 0)
  221. {
  222. klickZeile = (int)oy;
  223. rend = 1;
  224. }
  225. }
  226. }
  227. }
  228. me.mx += (horizontalScrollBar && hatStyle(Style::HScroll))
  229. ? horizontalScrollBar->getScroll()
  230. : 0;
  231. me.my += (vertikalScrollBar && hatStyle(Style::VScroll))
  232. ? vertikalScrollBar->getScroll()
  233. : 0;
  234. bool vs = hatStyle(Style::VScroll) && vertikalScrollBar;
  235. bool hs = hatStyle(Style::HScroll) && horizontalScrollBar;
  236. int rbr = rahmen ? rahmen->getRBreite() : 0;
  237. if (vs)
  238. {
  239. if (hs)
  240. horizontalScrollBar->doMausMessage(
  241. rbr, gr.y - 15 - rbr, gr.x - 15 - rbr * 2, 15, me);
  242. vertikalScrollBar->doMausMessage(
  243. gr.x - 15 - rbr, rbr, 15, gr.y - rbr * 2, me);
  244. }
  245. else if (hs)
  246. horizontalScrollBar->doMausMessage(
  247. rbr, gr.y - 15 - rbr, gr.x - rbr * 2, 15, me);
  248. if (aufScroll) me.verarbeitet = 1;
  249. if (me.id != ME_Betritt && me.id != ME_Leaves)
  250. {
  251. for (int i = 0; i < zeilenAnzahl; ++i)
  252. {
  253. for (int j = 0; j < spaltenAnzahl; ++j)
  254. {
  255. bool b = me.verarbeitet;
  256. Zeichnung* obj = zZeichnung(j, i);
  257. if (obj) obj->doPublicMausEreignis(me);
  258. if (!b && me.verarbeitet && me.id == ME_PLinks)
  259. selected = Punkt(j, i);
  260. }
  261. }
  262. }
  263. unlockZeichnung();
  264. me.verarbeitet = 1;
  265. me.mx = tmx;
  266. me.my = tmy;
  267. }
  268. // nicht constant
  269. void ObjTabelle::addSpalte(const char* name) // Spalte hinzufügen
  270. {
  271. addSpalte(spaltenAnzahl, name);
  272. }
  273. void ObjTabelle::addSpalte(Text* name)
  274. {
  275. addSpalte(spaltenAnzahl, name);
  276. }
  277. void ObjTabelle::addSpalte(
  278. int sNum, const char* name) // Spalte bei sNum einfügen
  279. {
  280. if (sNum > spaltenAnzahl) return;
  281. lockZeichnung();
  282. members->add(new RCArray<Zeichnung>(), sNum);
  283. spaltenNamen->add(new Text(name), sNum);
  284. spaltenBreite->add(100, sNum);
  285. minSpaltenBreite->add(0, sNum);
  286. maxSpaltenBreite->add(300, sNum);
  287. msaRam->add(new RCArray<Rahmen>(), sNum);
  288. msaAf->add(new RCArray<AlphaFeld>(), sNum);
  289. styles->add(new Array<__int64>(), sNum);
  290. for (int i = 0; i < zeilenAnzahl; i++)
  291. {
  292. members->z(sNum)->add(0);
  293. msaRam->z(sNum)->add(0);
  294. msaAf->z(sNum)->add(0);
  295. styles->z(sNum)->add(0);
  296. }
  297. ++spaltenAnzahl;
  298. rend = 1;
  299. unlockZeichnung();
  300. }
  301. void ObjTabelle::addSpalte(int sNum, Text* name)
  302. {
  303. addSpalte(sNum, name->getText());
  304. name->release();
  305. }
  306. void ObjTabelle::addZeile(const char* name) // Zeile Hinzufügen
  307. {
  308. addZeile(zeilenAnzahl, name);
  309. }
  310. void ObjTabelle::addZeile(Text* name)
  311. {
  312. addZeile(zeilenAnzahl, name);
  313. }
  314. void ObjTabelle::addZeile(int zNum, const char* name) // Zeile bei zNum einfügen
  315. {
  316. if (zNum > zeilenAnzahl) return;
  317. lockZeichnung();
  318. zeilenNamen->add(new Text(name), zNum);
  319. zeilenHeight->add(20, zNum);
  320. minZeilenHeight->add(0, zNum);
  321. maxZeilenHeight->add(100, zNum);
  322. for (int i = 0; i < spaltenAnzahl; ++i)
  323. {
  324. if (members->z(i)) members->z(i)->add(0, zNum);
  325. if (msaRam->z(i)) msaRam->z(i)->add(0, zNum);
  326. if (msaAf->z(i)) msaAf->z(i)->add(0, zNum);
  327. if (styles->z(i)) styles->z(i)->add(0, zNum);
  328. }
  329. ++zeilenAnzahl;
  330. rend = 1;
  331. unlockZeichnung();
  332. }
  333. void ObjTabelle::addZeile(int zNum, Text* name)
  334. {
  335. addZeile(zNum, name->getText());
  336. name->release();
  337. }
  338. void ObjTabelle::removeSpalte(int sNum) // Spalte löschen
  339. {
  340. if (sNum >= spaltenAnzahl) return;
  341. lockZeichnung();
  342. members->remove(sNum);
  343. spaltenNamen->remove(sNum);
  344. spaltenBreite->remove(sNum);
  345. minSpaltenBreite->remove(sNum);
  346. maxSpaltenBreite->remove(sNum);
  347. if (msaRam->z(sNum)) msaRam->z(sNum)->release();
  348. msaRam->remove(sNum);
  349. if (msaAf->z(sNum)) msaAf->z(sNum)->release();
  350. msaAf->remove(sNum);
  351. styles->remove(sNum);
  352. --spaltenAnzahl;
  353. rend = 1;
  354. unlockZeichnung();
  355. }
  356. void ObjTabelle::removeSpalte(const char* name)
  357. {
  358. removeSpalte(getSpaltenNummer(name));
  359. }
  360. void ObjTabelle::removeSpalte(Text* name)
  361. {
  362. removeSpalte(getSpaltenNummer(name));
  363. }
  364. void ObjTabelle::removeZeile(int zNum) // Zeile löschen
  365. {
  366. if (zNum >= zeilenAnzahl) return;
  367. lockZeichnung();
  368. zeilenNamen->remove(zNum);
  369. zeilenHeight->remove(zNum);
  370. minZeilenHeight->remove(zNum);
  371. maxZeilenHeight->remove(zNum);
  372. for (int i = 0; i < spaltenAnzahl; ++i)
  373. {
  374. if (members->z(i)) members->z(i)->remove(zNum);
  375. if (msaRam->z(i)) msaRam->z(i)->remove(zNum);
  376. if (msaAf->z(i)) msaAf->z(i)->remove(zNum);
  377. if (styles->z(i)) styles->z(i)->remove(zNum);
  378. }
  379. --zeilenAnzahl;
  380. rend = 1;
  381. unlockZeichnung();
  382. }
  383. void ObjTabelle::removeZeile(const char* name)
  384. {
  385. removeZeile(getZeilenNummer(name));
  386. }
  387. void ObjTabelle::removeZeile(Text* name)
  388. {
  389. removeZeile(getZeilenNummer(name));
  390. }
  391. void ObjTabelle::setSpaltePosition(
  392. const char* name, int pos) // setzt die Position einer Spalte
  393. {
  394. setSpaltePosition(getSpaltenNummer(name), pos);
  395. }
  396. void ObjTabelle::setSpaltePosition(Text* name, int pos)
  397. {
  398. setSpaltePosition(getSpaltenNummer(name), pos);
  399. }
  400. void ObjTabelle::setSpaltePosition(int sNum, int pos)
  401. {
  402. if (sNum >= spaltenAnzahl || pos >= spaltenAnzahl || sNum == pos) return;
  403. int delPos = sNum;
  404. int insertPos = pos;
  405. if (pos < sNum)
  406. ++delPos;
  407. else
  408. ++insertPos;
  409. lockZeichnung();
  410. members->add(members->get(sNum), insertPos);
  411. members->remove(delPos);
  412. spaltenNamen->add(spaltenNamen->get(sNum), insertPos);
  413. spaltenNamen->remove(delPos);
  414. spaltenBreite->add(
  415. spaltenBreite->hat(sNum) ? spaltenBreite->get(sNum) : 0, insertPos);
  416. spaltenBreite->remove(delPos);
  417. minSpaltenBreite->add(
  418. minSpaltenBreite->hat(sNum) ? minSpaltenBreite->get(sNum) : 0,
  419. insertPos);
  420. minSpaltenBreite->remove(delPos);
  421. msaRam->add(msaRam->z(sNum), insertPos);
  422. msaRam->remove(delPos);
  423. msaAf->add(msaAf->z(sNum), insertPos);
  424. msaAf->remove(delPos);
  425. styles->add(styles->get(sNum), insertPos);
  426. styles->remove(delPos);
  427. rend = 1;
  428. unlockZeichnung();
  429. }
  430. void ObjTabelle::setZeilePosition(
  431. const char* name, int pos) // setzt die Zeilen Position
  432. {
  433. setZeilePosition(getZeilenNummer(name), pos);
  434. }
  435. void ObjTabelle::setZeilePosition(Text* name, int pos)
  436. {
  437. setZeilePosition(getZeilenNummer(name), pos);
  438. }
  439. void ObjTabelle::setZeilePosition(int zNum, int pos)
  440. {
  441. if (zNum >= zeilenAnzahl || pos >= zeilenAnzahl || pos == zNum) return;
  442. int delPos = zNum;
  443. int insertPos = pos;
  444. if (pos < zNum)
  445. ++delPos;
  446. else
  447. ++insertPos;
  448. lockZeichnung();
  449. zeilenNamen->add(zeilenNamen->get(zNum), insertPos);
  450. zeilenNamen->remove(delPos);
  451. zeilenHeight->add(
  452. zeilenHeight->hat(zNum) ? zeilenHeight->get(zNum) : 0, insertPos);
  453. zeilenHeight->remove(delPos);
  454. minZeilenHeight->add(
  455. minZeilenHeight->hat(zNum) ? minZeilenHeight->get(zNum) : 0, insertPos);
  456. minZeilenHeight->remove(delPos);
  457. maxZeilenHeight->add(
  458. maxZeilenHeight->hat(zNum) ? maxZeilenHeight->get(zNum) : 0, insertPos);
  459. maxZeilenHeight->remove(delPos);
  460. for (int i = 0; i < spaltenAnzahl; ++i)
  461. {
  462. if (members->z(i))
  463. {
  464. members->z(i)->add(
  465. members->z(i)->hat(zNum) ? members->z(i)->get(zNum) : 0,
  466. insertPos);
  467. members->z(i)->remove(delPos);
  468. }
  469. if (msaRam->z(i))
  470. {
  471. msaRam->z(i)->add(
  472. msaRam->z(i)->z(zNum) ? msaRam->z(i)->get(zNum) : 0, insertPos);
  473. msaRam->z(i)->remove(delPos);
  474. }
  475. if (msaAf->z(i))
  476. {
  477. msaAf->z(i)->add(
  478. msaAf->z(i)->z(zNum) ? msaAf->z(i)->get(zNum) : 0, insertPos);
  479. msaAf->z(i)->remove(delPos);
  480. }
  481. if (styles->z(i))
  482. {
  483. styles->z(i)->add(
  484. styles->z(i)->hat(zNum) ? styles->z(i)->get(zNum) : 0,
  485. insertPos);
  486. styles->z(i)->remove(delPos);
  487. }
  488. }
  489. rend = 1;
  490. unlockZeichnung();
  491. }
  492. void ObjTabelle::setZeichnungZ(
  493. int sNum, int zNum, Zeichnung* obj) // setzt ein Zeichnung
  494. {
  495. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  496. lockZeichnung();
  497. if (!members->z(sNum)) members->set(new RCArray<Zeichnung>(), sNum);
  498. while (members->z(sNum)->getEintragAnzahl() <= zNum)
  499. members->z(sNum)->add(0);
  500. members->z(sNum)->set(obj, zNum);
  501. if (spaltenBreite->hat(sNum))
  502. {
  503. obj->setWidth(spaltenBreite->get(sNum));
  504. }
  505. if (zeilenHeight->hat(zNum))
  506. {
  507. obj->setHeight(zeilenHeight->get(zNum));
  508. }
  509. rend = 1;
  510. unlockZeichnung();
  511. }
  512. void ObjTabelle::setZeichnungZ(
  513. const char* spaltenName, const char* zeilenName, Zeichnung* zZeichnung)
  514. {
  515. setZeichnungZ(
  516. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), zZeichnung);
  517. }
  518. void ObjTabelle::setZeichnungZ(
  519. Text* spaltenName, Text* zeilenName, Zeichnung* zZeichnung)
  520. {
  521. setZeichnungZ(
  522. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), zZeichnung);
  523. }
  524. void ObjTabelle::setSpaltenBreite(int sNum, int br) // setzt die Spaltenbreite
  525. {
  526. if (sNum >= spaltenAnzahl) return;
  527. lockZeichnung();
  528. spaltenBreite->set(br, sNum);
  529. rend = 1;
  530. unlockZeichnung();
  531. }
  532. void ObjTabelle::setSpaltenBreite(const char* name, int br)
  533. {
  534. setSpaltenBreite(getSpaltenNummer(name), br);
  535. }
  536. void ObjTabelle::setSpaltenBreite(Text* name, int br)
  537. {
  538. setSpaltenBreite(getSpaltenNummer(name), br);
  539. }
  540. void ObjTabelle::setZeilenHeight(int zNum, int hi) // setzt die Zeilenhöhe
  541. {
  542. if (zNum >= zeilenAnzahl) return;
  543. lockZeichnung();
  544. zeilenHeight->set(hi, zNum);
  545. rend = 1;
  546. unlockZeichnung();
  547. }
  548. void ObjTabelle::setZeilenHeight(const char* name, int hi)
  549. {
  550. setZeilenHeight(getZeilenNummer(name), hi);
  551. }
  552. void ObjTabelle::setZeilenHeight(Text* name, int hi)
  553. {
  554. setZeilenHeight(getZeilenNummer(name), hi);
  555. }
  556. void ObjTabelle::setMinSpaltenBreite(
  557. int sNum, int minBr) // setzt die mindest Spaltenbreite
  558. {
  559. if (sNum >= spaltenAnzahl) return;
  560. lockZeichnung();
  561. minSpaltenBreite->set(minBr, sNum);
  562. rend = 1;
  563. unlockZeichnung();
  564. }
  565. void ObjTabelle::setMinSpaltenBreite(const char* name, int minBr)
  566. {
  567. setMinSpaltenBreite(getSpaltenNummer(name), minBr);
  568. }
  569. void ObjTabelle::setMinSpaltenBreite(Text* name, int minBr)
  570. {
  571. setMinSpaltenBreite(getSpaltenNummer(name), minBr);
  572. }
  573. void ObjTabelle::setMaxSpaltenBreite(
  574. int sNum, int maxBr) // setzt die maximale Spaltenbreite
  575. {
  576. if (sNum >= spaltenAnzahl) return;
  577. lockZeichnung();
  578. maxSpaltenBreite->set(maxBr, sNum);
  579. rend = 1;
  580. unlockZeichnung();
  581. }
  582. void ObjTabelle::setMaxSpaltenBreite(const char* name, int maxBr)
  583. {
  584. setMaxSpaltenBreite(getSpaltenNummer(name), maxBr);
  585. }
  586. void ObjTabelle::setMaxSpaltenBreite(Text* name, int maxBr)
  587. {
  588. setMaxSpaltenBreite(getSpaltenNummer(name), maxBr);
  589. }
  590. void ObjTabelle::setMinZeilenHeight(
  591. int zNum, int minHi) // setzt die mindest Zeilenhöhe
  592. {
  593. if (zNum >= zeilenAnzahl) return;
  594. lockZeichnung();
  595. minZeilenHeight->set(minHi, zNum);
  596. rend = 1;
  597. unlockZeichnung();
  598. }
  599. void ObjTabelle::setMinZeilenHeight(const char* name, int minHi)
  600. {
  601. setMinZeilenHeight(getZeilenNummer(name), minHi);
  602. }
  603. void ObjTabelle::setMinZeilenHeight(Text* name, int minHi)
  604. {
  605. setMinZeilenHeight(getZeilenNummer(name), minHi);
  606. }
  607. void ObjTabelle::setMaxZeilenHeight(
  608. int zNum, int maxHi) // setzt die maximale Zeilenhöhe
  609. {
  610. if (zNum >= zeilenAnzahl) return;
  611. lockZeichnung();
  612. maxZeilenHeight->set(maxHi, zNum);
  613. rend = 1;
  614. unlockZeichnung();
  615. }
  616. void ObjTabelle::setMaxZeilenHeight(const char* name, int maxHi)
  617. {
  618. setMaxZeilenHeight(getZeilenHeight(name), maxHi);
  619. }
  620. void ObjTabelle::setMaxZeilenHeight(Text* name, int maxHi)
  621. {
  622. setMaxZeilenHeight(getZeilenHeight(name), maxHi);
  623. }
  624. void ObjTabelle::setAuswahl(
  625. int sNum, int zNum) // wählt das entsprechnde Feld aus
  626. {
  627. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  628. lockZeichnung();
  629. selected.x = sNum;
  630. selected.y = zNum;
  631. rend = 1;
  632. unlockZeichnung();
  633. }
  634. void ObjTabelle::setAuswahl(const char* spaltenName, const char* zeilenName)
  635. {
  636. setAuswahl(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  637. }
  638. void ObjTabelle::setAuswahl(Text* spaltenName, Text* zeilenName)
  639. {
  640. setAuswahl(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  641. }
  642. void ObjTabelle::setRasterFarbe(int f) // settzt die Farbe des Rasters
  643. {
  644. rasterFarbe = f;
  645. rend = 1;
  646. }
  647. void ObjTabelle::setRasterBreite(int br) // setzt die Breite des Rasters
  648. {
  649. rasterBreite = br;
  650. rend = 1;
  651. }
  652. void ObjTabelle::setARahmenZ(Rahmen* ram) // setzt den auswahl Rahmen
  653. {
  654. if (aRam) aRam->release();
  655. aRam = ram;
  656. rend = 1;
  657. }
  658. void ObjTabelle::setARFarbe(int f) // setzt die auswahl Rahmen Farbe
  659. {
  660. if (!aRam) aRam = new LRahmen();
  661. aRam->setFarbe(f);
  662. rend = 1;
  663. }
  664. void ObjTabelle::setARBreite(int br) // setzt die auswahl Rahmen Breite
  665. {
  666. if (!aRam) aRam = new LRahmen();
  667. aRam->setRamenBreite(br);
  668. rend = 1;
  669. }
  670. void ObjTabelle::setAAlphaFeldZ(AlphaFeld* af) // setzt das auswahl AlphaFeld
  671. {
  672. if (aAf) aAf->release();
  673. aAf = af;
  674. rend = 1;
  675. }
  676. void ObjTabelle::setAAfFarbe(int f) // setzt die Farbe des auswahl AlphaFeldes
  677. {
  678. if (!aAf) aAf = new AlphaFeld();
  679. aAf->setFarbe(f);
  680. rend = 1;
  681. }
  682. void ObjTabelle::setAAfStrength(
  683. int st) // setzt die Stärke des auswahl AlphaFeldes
  684. {
  685. if (!aAf) aAf = new AlphaFeld();
  686. aAf->setStrength(st);
  687. rend = 1;
  688. }
  689. void ObjTabelle::setARahmenZ(
  690. int sNum, int zNum, Rahmen* ram) // setzt den auswahl Rahmen
  691. {
  692. if (msaRam->z(sNum)) msaRam->z(sNum)->set(ram, zNum);
  693. rend = 1;
  694. }
  695. void ObjTabelle::setARahmenZ(
  696. const char* spaltenName, const char* zeilenName, Rahmen* ram)
  697. {
  698. setARahmenZ(
  699. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), ram);
  700. }
  701. void ObjTabelle::setARahmenZ(Text* spaltenName, Text* zeilenName, Rahmen* ram)
  702. {
  703. setARahmenZ(
  704. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), ram);
  705. }
  706. void ObjTabelle::setARFarbe(
  707. int sNum, int zNum, int f) // setzt die auswahl Rahmen Farbe
  708. {
  709. if (msaRam->z(sNum))
  710. {
  711. Rahmen* tmp = msaRam->z(sNum)->z(zNum);
  712. if (!tmp)
  713. {
  714. tmp = new LRahmen();
  715. msaRam->z(sNum)->set(tmp, zNum);
  716. }
  717. tmp->setFarbe(f);
  718. rend = 1;
  719. }
  720. }
  721. void ObjTabelle::setARFarbe(
  722. const char* spaltenName, const char* zeilenName, int f)
  723. {
  724. setARFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  725. }
  726. void ObjTabelle::setARFarbe(Text* spaltenName, Text* zeilenName, int f)
  727. {
  728. setARFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  729. }
  730. void ObjTabelle::setARBreite(
  731. int sNum, int zNum, int br) // setzt die auswahl Rahmen Breite
  732. {
  733. if (msaRam->z(sNum))
  734. {
  735. Rahmen* tmp = msaRam->z(sNum)->z(zNum);
  736. if (!tmp)
  737. {
  738. tmp = new LRahmen();
  739. msaRam->z(sNum)->set(tmp, zNum);
  740. }
  741. tmp->setRamenBreite(br);
  742. rend = 1;
  743. }
  744. }
  745. void ObjTabelle::setARBreite(
  746. const char* spaltenName, const char* zeilenName, int br)
  747. {
  748. setARBreite(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), br);
  749. }
  750. void ObjTabelle::setARBreite(Text* spaltenName, Text* zeilenName, int br)
  751. {
  752. setARBreite(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), br);
  753. }
  754. void ObjTabelle::setAAlphaFeldZ(
  755. int sNum, int zNum, AlphaFeld* af) // setzt das auswahl AlphaFeld
  756. {
  757. if (msaAf->z(sNum)) msaAf->z(sNum)->set(af, zNum);
  758. rend = 1;
  759. }
  760. void ObjTabelle::setAAlphaFeldZ(
  761. const char* spaltenName, const char* zeilenName, AlphaFeld* af)
  762. {
  763. setAAlphaFeldZ(
  764. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), af);
  765. }
  766. void ObjTabelle::setAAlphaFeldZ(
  767. Text* spaltenName, Text* zeilenName, AlphaFeld* af)
  768. {
  769. setAAlphaFeldZ(
  770. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), af);
  771. }
  772. void ObjTabelle::setAAfFarbe(
  773. int sNum, int zNum, int f) // setzt die Farbe des auswahl AlphaFeldes
  774. {
  775. if (msaAf->z(sNum))
  776. {
  777. AlphaFeld* tmp = msaAf->z(sNum)->z(zNum);
  778. if (!tmp)
  779. {
  780. tmp = new AlphaFeld();
  781. msaAf->z(sNum)->set(tmp, zNum);
  782. }
  783. tmp->setFarbe(f);
  784. rend = 1;
  785. }
  786. }
  787. void ObjTabelle::setAAfFarbe(
  788. const char* spaltenName, const char* zeilenName, int f)
  789. {
  790. setAAfFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  791. }
  792. void ObjTabelle::setAAfFarbe(Text* spaltenName, Text* zeilenName, int f)
  793. {
  794. setAAfFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  795. }
  796. void ObjTabelle::setAAfStrength(
  797. int sNum, int zNum, int st) // setzt die Stärke des auswahl AlphaFeldes
  798. {
  799. if (msaAf->z(sNum))
  800. {
  801. AlphaFeld* tmp = msaAf->z(sNum)->z(zNum);
  802. if (!tmp)
  803. {
  804. tmp = new AlphaFeld();
  805. msaAf->z(sNum)->set(tmp, zNum);
  806. }
  807. tmp->setStrength(st);
  808. rend = 1;
  809. }
  810. }
  811. void ObjTabelle::setAAfStrength(
  812. const char* spaltenName, const char* zeilenName, int st)
  813. {
  814. setAAfStrength(
  815. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), st);
  816. }
  817. void ObjTabelle::setAAfStrength(Text* spaltenName, Text* zeilenName, int st)
  818. {
  819. setAAfStrength(
  820. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), st);
  821. }
  822. void ObjTabelle::addMsStyle(
  823. int sNum, int zNum, __int64 style) // setzt den Style wenn Multistyled
  824. {
  825. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  826. if (styles->z(sNum))
  827. styles->z(sNum)->set(
  828. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  829. | style,
  830. zNum);
  831. rend = 1;
  832. }
  833. void ObjTabelle::addMsStyle(
  834. const char* spaltenName, const char* zeilenName, __int64 style)
  835. {
  836. addMsStyle(
  837. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  838. }
  839. void ObjTabelle::addMsStyle(Text* spaltenName, Text* zeilenName, __int64 style)
  840. {
  841. addMsStyle(
  842. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  843. }
  844. void ObjTabelle::setMsStyle(int sNum, int zNum, __int64 style)
  845. {
  846. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  847. if (styles->z(sNum)) styles->z(sNum)->set(style, zNum);
  848. rend = 1;
  849. }
  850. void ObjTabelle::setMsStyle(
  851. const char* spaltenName, const char* zeilenName, __int64 style)
  852. {
  853. setMsStyle(
  854. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  855. }
  856. void ObjTabelle::setMsStyle(Text* spaltenName, Text* zeilenName, __int64 style)
  857. {
  858. setMsStyle(
  859. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  860. }
  861. void ObjTabelle::setMsStyle(int sNum, int zNum, __int64 style, bool add_remove)
  862. {
  863. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  864. if (styles->z(sNum))
  865. {
  866. if (add_remove)
  867. styles->z(sNum)->set(
  868. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  869. | style,
  870. zNum);
  871. else
  872. styles->z(sNum)->set(
  873. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  874. & (~style),
  875. zNum);
  876. rend = 1;
  877. }
  878. }
  879. void ObjTabelle::setMsStyle(const char* spaltenName,
  880. const char* zeilenName,
  881. __int64 style,
  882. bool add_remove)
  883. {
  884. setMsStyle(getSpaltenNummer(spaltenName),
  885. getZeilenNummer(zeilenName),
  886. style,
  887. add_remove);
  888. }
  889. void ObjTabelle::setMsStyle(
  890. Text* spaltenName, Text* zeilenName, __int64 style, bool add_remove)
  891. {
  892. setMsStyle(getSpaltenNummer(spaltenName),
  893. getZeilenNummer(zeilenName),
  894. style,
  895. add_remove);
  896. }
  897. void ObjTabelle::removeMsStyle(int sNum, int zNum, __int64 style)
  898. {
  899. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  900. if (styles->z(sNum))
  901. styles->z(sNum)->set(
  902. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  903. & (~style),
  904. zNum);
  905. rend = 1;
  906. }
  907. void ObjTabelle::removeMsStyle(
  908. const char* spaltenName, const char* zeilenName, __int64 style)
  909. {
  910. removeMsStyle(
  911. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  912. }
  913. void ObjTabelle::removeMsStyle(
  914. Text* spaltenName, Text* zeilenName, __int64 style)
  915. {
  916. removeMsStyle(
  917. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  918. }
  919. bool ObjTabelle::tick(double tickVal) // tick Message
  920. {
  921. lockZeichnung();
  922. for (int i = 0; i < zeilenAnzahl; ++i)
  923. {
  924. for (int j = 0; j < spaltenAnzahl; ++j)
  925. {
  926. Zeichnung* obj = zZeichnung(j, i);
  927. if (obj) rend |= obj->tick(tickVal);
  928. }
  929. }
  930. unlockZeichnung();
  931. return ZeichnungHintergrund::tick(tickVal);
  932. }
  933. void ObjTabelle::doTastaturEreignis(TastaturEreignis& te)
  934. {
  935. bool ntakc = !te.verarbeitet;
  936. if (hatStyleNicht(Style::Fokus) || hatStyleNicht(Style::Erlaubt)
  937. || hatStyleNicht(Style::Sichtbar))
  938. return;
  939. if (tak && (te.verarbeitet || tak(takParam, this, te)))
  940. {
  941. lockZeichnung();
  942. if (zZeichnung(selected.x, selected.y))
  943. {
  944. zZeichnung(selected.x, selected.y)->doTastaturEreignis(te);
  945. if (!te.verarbeitet && te.id == TE_Press)
  946. {
  947. if (te.virtualKey == T_Oben)
  948. {
  949. --(selected.y);
  950. rend = 1;
  951. }
  952. if (te.virtualKey == T_Unten)
  953. {
  954. ++(selected.y);
  955. rend = 1;
  956. }
  957. if (te.virtualKey == T_Links)
  958. {
  959. --(selected.x);
  960. rend = 1;
  961. }
  962. if (te.virtualKey == T_Rechts)
  963. {
  964. ++(selected.x);
  965. rend = 1;
  966. }
  967. }
  968. }
  969. unlockZeichnung();
  970. }
  971. te.verarbeitet = 1;
  972. if (ntakc && te.verarbeitet && nTak)
  973. te.verarbeitet = nTak(ntakParam, this, te);
  974. }
  975. void ObjTabelle::render(Bild& zRObj) // zeichnet nach zRObj
  976. {
  977. if (hatStyleNicht(Style::Sichtbar)) return;
  978. ZeichnungHintergrund::render(zRObj);
  979. lockZeichnung();
  980. if (!zRObj.setDrawOptions(innenPosition, innenSize))
  981. {
  982. unlockZeichnung();
  983. return;
  984. }
  985. int xPos = 0;
  986. if (horizontalScrollBar && hatStyle(Style::HScroll))
  987. xPos -= horizontalScrollBar->getScroll();
  988. for (int s = 0; s < spaltenAnzahl; ++s)
  989. {
  990. int sBr = spaltenBreite->hat(s) ? spaltenBreite->get(s) : 0;
  991. int yPos = 0;
  992. if (vertikalScrollBar && hatStyle(Style::VScroll))
  993. yPos -= vertikalScrollBar->getScroll();
  994. RCArray<Zeichnung>* tmp_zZeichnungs = members->z(s);
  995. if (!tmp_zZeichnungs) continue;
  996. for (int z = 0; z < zeilenAnzahl && tmp_zZeichnungs; ++z)
  997. {
  998. int zHi = zeilenHeight->hat(z) ? zeilenHeight->get(z) : 0;
  999. if (hatStyle(Style::Raster)) yPos += rasterBreite;
  1000. yPos += zHi;
  1001. if (z == zeilenAnzahl - 1 && vertikalScrollBar
  1002. && hatStyle(Style::VScroll))
  1003. vertikalScrollBar->getScrollData()->max
  1004. = yPos + vertikalScrollBar->getScroll();
  1005. }
  1006. for (int z = zeilenAnzahl - 1; z >= 0 && tmp_zZeichnungs; z--)
  1007. {
  1008. int zHi = zeilenHeight->hat(z) ? zeilenHeight->get(z) : 0;
  1009. yPos -= zHi;
  1010. if (hatStyle(Style::Raster))
  1011. {
  1012. yPos -= rasterBreite;
  1013. for (int i = 0; i < rasterBreite; i++)
  1014. zRObj.drawLinieHAlpha(
  1015. xPos, yPos + zHi + i, sBr, rasterFarbe);
  1016. }
  1017. Zeichnung* obj
  1018. = tmp_zZeichnungs->hat(z) ? tmp_zZeichnungs->z(z) : 0;
  1019. if (obj)
  1020. {
  1021. obj->setPosition(xPos, yPos);
  1022. obj->setSize(sBr, zHi);
  1023. obj->render(zRObj);
  1024. if (selected.x == s && selected.y == z)
  1025. {
  1026. Rahmen* tmp_aRam = aRam;
  1027. AlphaFeld* tmp_aAf = aAf;
  1028. bool aRamB = hatStyle(Style::AuswahlRahmen) && tmp_aRam;
  1029. bool aAfB = hatStyle(Style::AuswahlBuffer) && tmp_aAf;
  1030. if (hatStyle(Style::AuswahlMultistyled))
  1031. {
  1032. tmp_aRam = getARahmen(s, z);
  1033. tmp_aAf = getAAlphaFeld(s, z);
  1034. aRamB = hatMsStyle(s, z, Style::AuswahlRahmen)
  1035. && tmp_aRam;
  1036. aAfB
  1037. = hatMsStyle(s, z, Style::AuswahlBuffer) && tmp_aAf;
  1038. }
  1039. int aRbr = 0;
  1040. if (aRamB)
  1041. {
  1042. tmp_aRam->setPosition(xPos, yPos);
  1043. tmp_aRam->setSize(sBr, zHi);
  1044. tmp_aRam->render(zRObj);
  1045. aRbr = tmp_aRam->getRBreite();
  1046. }
  1047. if (aAfB)
  1048. {
  1049. tmp_aAf->setPosition(aRbr + xPos, aRbr + yPos);
  1050. tmp_aAf->setSize(sBr - aRbr * 2, zHi - aRbr * 2);
  1051. tmp_aAf->render(zRObj);
  1052. }
  1053. }
  1054. }
  1055. }
  1056. if (hatStyle(Style::Raster))
  1057. {
  1058. for (int i = 0; i < rasterBreite; i++)
  1059. zRObj.drawLinieVAlpha(
  1060. xPos + sBr + i, 0, innenSize.y, rasterFarbe);
  1061. xPos += rasterBreite;
  1062. }
  1063. xPos += sBr;
  1064. }
  1065. if (horizontalScrollBar && hatStyle(Style::HScroll))
  1066. horizontalScrollBar->getScrollData()->max
  1067. = xPos + horizontalScrollBar->getScroll();
  1068. zRObj.releaseDrawOptions();
  1069. unlockZeichnung();
  1070. }
  1071. // constant
  1072. int ObjTabelle::getSpaltenAnzahl() const // gibt die Anzahl der Spalten zurück
  1073. {
  1074. return spaltenAnzahl;
  1075. }
  1076. int ObjTabelle::getZeilenAnzahl() const // gibt die Anzahl der Zeilen zurück
  1077. {
  1078. return zeilenAnzahl;
  1079. }
  1080. int ObjTabelle::getSpaltenNummer(const char* name)
  1081. const // gibt die Nummer der Spalte mit dem Namen name zurück
  1082. {
  1083. for (int i = 0; i < spaltenAnzahl; ++i)
  1084. {
  1085. if (spaltenNamen->z(i)->istGleich(name)) return i;
  1086. }
  1087. return -1;
  1088. }
  1089. int ObjTabelle::getSpaltenNummer(Text* name) const
  1090. {
  1091. int ret = getSpaltenNummer(name->getText());
  1092. name->release();
  1093. return ret;
  1094. }
  1095. Text* ObjTabelle::getSpaltenName(
  1096. int num) const // gibt den Namen der Spalte mit Nummer num zurück
  1097. {
  1098. return spaltenNamen->get(num);
  1099. }
  1100. Text* ObjTabelle::zSpaltenName(int num) const
  1101. {
  1102. return spaltenNamen->z(num);
  1103. }
  1104. int ObjTabelle::getZeilenNummer(const char* name)
  1105. const // gibt die Nummer der Zeile mit dem Namen name zurück
  1106. {
  1107. for (int i = 0; i < zeilenAnzahl; ++i)
  1108. {
  1109. if (zeilenNamen->z(i)->istGleich(name)) return i;
  1110. }
  1111. return -1;
  1112. }
  1113. int ObjTabelle::getZeilenNummer(Text* name) const
  1114. {
  1115. int ret = getZeilenNummer(name->getText());
  1116. name->release();
  1117. return ret;
  1118. }
  1119. Text* ObjTabelle::getZeilenName(
  1120. int num) const // gibt den Namen der Zeile mit Nummer num zurück
  1121. {
  1122. return zeilenNamen->get(num);
  1123. }
  1124. Text* ObjTabelle::zZeilenName(int num) const
  1125. {
  1126. return zeilenNamen->z(num);
  1127. }
  1128. Punkt ObjTabelle::getZeichnungPosition(
  1129. Zeichnung* zObj) const // gibt die Position eines Zeichnungs zurück
  1130. {
  1131. for (int x = 0; x < spaltenAnzahl; ++x)
  1132. {
  1133. for (int y = 0; y < zeilenAnzahl; ++y)
  1134. {
  1135. if (zZeichnung(x, y) == zObj) return Punkt(x, y);
  1136. }
  1137. }
  1138. return Punkt(-1, -1);
  1139. }
  1140. Zeichnung* ObjTabelle::zZeichnung(
  1141. int sNum, int zNum) const // gibt das Zeichnung auf der Position zurück
  1142. {
  1143. if (sNum < 0 || zNum < 0 || sNum >= spaltenAnzahl || zNum >= zeilenAnzahl)
  1144. return 0;
  1145. if (!members->z(sNum)) return 0;
  1146. RCArray<Zeichnung>* tmp = members->z(sNum);
  1147. if (!tmp->hat(zNum)) return 0;
  1148. return tmp ? tmp->z(zNum) : 0;
  1149. }
  1150. Zeichnung* ObjTabelle::zZeichnung(
  1151. const char* spaltenName, const char* zeilenName) const
  1152. {
  1153. return zZeichnung(
  1154. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1155. }
  1156. Zeichnung* ObjTabelle::zZeichnung(Text* spaltenName, Text* zeilenName) const
  1157. {
  1158. return zZeichnung(
  1159. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1160. }
  1161. Zeichnung* ObjTabelle::getZeichnung(
  1162. int sNum, int zNum) const // gibt das Zeichnung auf der Position zurück
  1163. {
  1164. if (!members->z(sNum)) return 0;
  1165. RCArray<Zeichnung>* tmp = members->z(sNum);
  1166. if (!tmp->hat(zNum)) return 0;
  1167. return tmp ? tmp->get(zNum) : 0;
  1168. }
  1169. Zeichnung* ObjTabelle::getZeichnung(
  1170. const char* spaltenName, const char* zeilenName) const
  1171. {
  1172. return getZeichnung(
  1173. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1174. }
  1175. Zeichnung* ObjTabelle::getZeichnung(Text* spaltenName, Text* zeilenName) const
  1176. {
  1177. return getZeichnung(
  1178. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1179. }
  1180. int ObjTabelle::getSpaltenBreite(
  1181. int num) const // gibt die Breite der Spalte zurück
  1182. {
  1183. return spaltenBreite->get(num);
  1184. }
  1185. int ObjTabelle::getSpaltenBreite(const char* name) const
  1186. {
  1187. return getSpaltenBreite(getSpaltenNummer(name));
  1188. }
  1189. int ObjTabelle::getSpaltenBreite(Text* name) const
  1190. {
  1191. return getSpaltenBreite(getSpaltenNummer(name));
  1192. }
  1193. int ObjTabelle::getZeilenHeight(int num) const // gibt die Höhe der Zeile zurück
  1194. {
  1195. return zeilenHeight->get(num);
  1196. }
  1197. int ObjTabelle::getZeilenHeight(const char* name) const
  1198. {
  1199. return getZeilenHeight(getZeilenNummer(name));
  1200. }
  1201. int ObjTabelle::getZeilenHeight(Text* name) const
  1202. {
  1203. return getZeilenHeight(getZeilenNummer(name));
  1204. }
  1205. int ObjTabelle::getMinSpaltenBreite(
  1206. int num) const // gibt die minimale Spaltengröße zurück
  1207. {
  1208. return minSpaltenBreite->get(num);
  1209. }
  1210. int ObjTabelle::getMinSpaltenBreite(const char* name) const
  1211. {
  1212. return getMinSpaltenBreite(getSpaltenNummer(name));
  1213. }
  1214. int ObjTabelle::getMinSpaltenBreite(Text* name) const
  1215. {
  1216. return getMinSpaltenBreite(getSpaltenNummer(name));
  1217. }
  1218. int ObjTabelle::getMaxSpaltenBreite(
  1219. int num) const // gibt die maximale Spaltengröße zurück
  1220. {
  1221. return maxSpaltenBreite->get(num);
  1222. }
  1223. int ObjTabelle::getMaxSpaltenBreite(const char* name) const
  1224. {
  1225. return getMaxSpaltenBreite(getSpaltenNummer(name));
  1226. }
  1227. int ObjTabelle::getMaxSpaltenBreite(Text* name) const
  1228. {
  1229. return getMaxSpaltenBreite(getSpaltenNummer(name));
  1230. }
  1231. int ObjTabelle::getMinZeilenHeight(
  1232. int num) const // gibt die minimale Zeilenhöhe zurück
  1233. {
  1234. return minZeilenHeight->get(num);
  1235. }
  1236. int ObjTabelle::getMinZeilenHeight(const char* name) const
  1237. {
  1238. return getMinZeilenHeight(getZeilenNummer(name));
  1239. }
  1240. int ObjTabelle::getMinZeilenHeight(Text* name) const
  1241. {
  1242. return getMinZeilenHeight(getZeilenNummer(name));
  1243. }
  1244. int ObjTabelle::getMaxZeilenHeight(
  1245. int num) const // gibt die maximale Zeilenhöhe zurück
  1246. {
  1247. return maxZeilenHeight->get(num);
  1248. }
  1249. int ObjTabelle::getMaxZeilenHeight(const char* name) const
  1250. {
  1251. return getMaxZeilenHeight(getZeilenNummer(name));
  1252. }
  1253. int ObjTabelle::getMaxZeilenHeight(Text* name) const
  1254. {
  1255. return getMaxZeilenHeight(getZeilenNummer(name));
  1256. }
  1257. double ObjTabelle::getMausSpalte(
  1258. int mx) const // ermittelt die Spalte unter der Maus
  1259. {
  1260. if (mx >= gr.x) return -1;
  1261. int hsBeg = (horizontalScrollBar && hatStyle(Style::HScroll))
  1262. ? horizontalScrollBar->getScroll()
  1263. : 0;
  1264. mx += hsBeg;
  1265. if (mx < 0) return -1;
  1266. int xx = rahmen ? rahmen->getRBreite() : 0;
  1267. for (int i = 0; i < spaltenAnzahl; ++i)
  1268. {
  1269. xx += spaltenBreite->get(i);
  1270. if (mx < xx - 5) return i;
  1271. if (mx < xx + 5) return i + 0.5;
  1272. xx += rasterBreite;
  1273. }
  1274. return -1;
  1275. }
  1276. Text* ObjTabelle::getMausSpaltenName(int mx) const
  1277. {
  1278. double tmp = getMausSpalte(mx);
  1279. if (tmp != (int)tmp) return 0;
  1280. return getSpaltenName((int)tmp);
  1281. }
  1282. Text* ObjTabelle::zMausSpaltenName(int mx) const
  1283. {
  1284. double tmp = getMausSpalte(mx);
  1285. if (tmp != (int)tmp) return 0;
  1286. return zSpaltenName((int)tmp);
  1287. }
  1288. double ObjTabelle::getMausZeile(
  1289. int my) const // ermittelt die Zeile unter der Maus
  1290. {
  1291. if (my >= gr.y) return -1;
  1292. if (my < 0) return -1;
  1293. int vsBeg = vertikalScrollBar && hatStyle(Style::VScroll)
  1294. ? vertikalScrollBar->getScroll()
  1295. : 0;
  1296. my += vsBeg;
  1297. int yy = rahmen ? rahmen->getRBreite() : 0;
  1298. for (int i = 0; i < zeilenAnzahl; ++i)
  1299. {
  1300. yy += zeilenHeight->get(i);
  1301. if (my < yy - 5) return i;
  1302. if (my < yy + 5) return i + 0.5;
  1303. yy += rasterBreite;
  1304. }
  1305. return -1;
  1306. }
  1307. Text* ObjTabelle::getMausZeilenName(int my) const
  1308. {
  1309. double tmp = getMausZeile(my);
  1310. if (tmp != (int)tmp) return 0;
  1311. return getZeilenName((int)tmp);
  1312. }
  1313. Text* ObjTabelle::zMausZeilenName(int my) const
  1314. {
  1315. double tmp = getMausZeile(my);
  1316. if (tmp != (int)tmp) return 0;
  1317. return zZeilenName((int)tmp);
  1318. }
  1319. const Punkt&
  1320. ObjTabelle::getAuswahlPosition() const // gibt die Auswahl Position zurück
  1321. {
  1322. return selected;
  1323. }
  1324. int ObjTabelle::getRasterFarbe() const // gibt die Farbe des Rasters zurück
  1325. {
  1326. return rasterFarbe;
  1327. }
  1328. int ObjTabelle::getRasterBreite() const // gibt die Breite des Rasters zurück
  1329. {
  1330. return rasterBreite;
  1331. }
  1332. Rahmen* ObjTabelle::getARahmen() const // gibt den auswahl Rahmen zurück
  1333. {
  1334. return aRam ? dynamic_cast<Rahmen*>(aRam->getThis()) : 0;
  1335. }
  1336. Rahmen* ObjTabelle::zARahmen() const
  1337. {
  1338. return aRam;
  1339. }
  1340. AlphaFeld*
  1341. ObjTabelle::getAAlphaFeld() const // gibt das auswahl AlphaFeld zurück
  1342. {
  1343. return aAf ? dynamic_cast<AlphaFeld*>(aAf->getThis()) : 0;
  1344. }
  1345. AlphaFeld* ObjTabelle::zAAlphaFeld() const
  1346. {
  1347. return aAf;
  1348. }
  1349. Rahmen* ObjTabelle::getARahmen(
  1350. int sNum, int zNum) const // gibt den auswahl Rahmen zurück
  1351. {
  1352. RCArray<Rahmen>* tmp = msaRam->z(sNum);
  1353. return tmp ? tmp->get(zNum) : 0;
  1354. }
  1355. Rahmen* ObjTabelle::zARahmen(int sNum, int zNum) const
  1356. {
  1357. RCArray<Rahmen>* tmp = msaRam->z(sNum);
  1358. return tmp ? tmp->z(zNum) : 0;
  1359. }
  1360. AlphaFeld* ObjTabelle::getAAlphaFeld(
  1361. int sNum, int zNum) const // gibt das auswahl AlphaFeld zurück
  1362. {
  1363. RCArray<AlphaFeld>* tmp = msaAf->z(sNum);
  1364. return tmp ? tmp->get(zNum) : 0;
  1365. }
  1366. AlphaFeld* ObjTabelle::zAAlphaFeld(int sNum, int zNum) const
  1367. {
  1368. return msaAf->z(sNum) ? msaAf->z(sNum)->z(zNum) : 0;
  1369. }
  1370. Rahmen* ObjTabelle::getARahmen(const char* spaltenName,
  1371. const char* zeilenName) const // gibt den auswahl Rahmen zurück
  1372. {
  1373. return getARahmen(
  1374. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1375. }
  1376. Rahmen* ObjTabelle::zARahmen(
  1377. const char* spaltenName, const char* zeilenName) const
  1378. {
  1379. return zARahmen(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1380. }
  1381. AlphaFeld* ObjTabelle::getAAlphaFeld(const char* spaltenName,
  1382. const char* zeilenName) const // gibt das auswahl AlphaFeld zurück
  1383. {
  1384. return getAAlphaFeld(
  1385. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1386. }
  1387. AlphaFeld* ObjTabelle::zAAlphaFeld(
  1388. const char* spaltenName, const char* zeilenName) const
  1389. {
  1390. return zAAlphaFeld(
  1391. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1392. }
  1393. Rahmen* ObjTabelle::getARahmen(
  1394. Text* spaltenName, Text* zeilenName) const // gibt den auswahl Rahmen zurück
  1395. {
  1396. return getARahmen(
  1397. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1398. }
  1399. Rahmen* ObjTabelle::zARahmen(Text* spaltenName, Text* zeilenName) const
  1400. {
  1401. return zARahmen(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1402. }
  1403. AlphaFeld* ObjTabelle::getAAlphaFeld(Text* spaltenName,
  1404. Text* zeilenName) const // gibt das auswahl AlphaFeld zurück
  1405. {
  1406. return getAAlphaFeld(
  1407. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1408. }
  1409. AlphaFeld* ObjTabelle::zAAlphaFeld(Text* spaltenName, Text* zeilenName) const
  1410. {
  1411. return zAAlphaFeld(
  1412. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1413. }
  1414. bool ObjTabelle::hatMsStyle(
  1415. int sNum, int zNum, __int64 style) const // prüft, ob style vorhanden ist
  1416. {
  1417. __int64 s = styles->z(sNum) && styles->z(sNum)->hat(zNum)
  1418. ? styles->z(sNum)->get(zNum)
  1419. : 0;
  1420. return (s | style) == s;
  1421. }
  1422. bool ObjTabelle::hatMsStyleNicht(int sNum,
  1423. int zNum,
  1424. __int64 style) const // prüft, ob style nicht vorhanden ist
  1425. {
  1426. __int64 s = styles->z(sNum) && styles->z(sNum)->hat(zNum)
  1427. ? styles->z(sNum)->get(zNum)
  1428. : 0;
  1429. return (s | style) != s;
  1430. }
  1431. bool ObjTabelle::hatMsStyle(const char* spaltenName,
  1432. const char* zeilenName,
  1433. __int64 style) const // prüft, ob style vorhanden ist
  1434. {
  1435. return hatMsStyle(
  1436. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1437. }
  1438. bool ObjTabelle::hatMsStyleNicht(const char* spaltenName,
  1439. const char* zeilenName,
  1440. __int64 style) const // prüft, ob style nicht vorhanden ist
  1441. {
  1442. return hatMsStyleNicht(
  1443. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1444. }
  1445. bool ObjTabelle::hatMsStyle(Text* spaltenName,
  1446. Text* zeilenName,
  1447. __int64 style) const // prüft, ob style vorhanden ist
  1448. {
  1449. return hatMsStyle(
  1450. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1451. }
  1452. bool ObjTabelle::hatMsStyleNicht(Text* spaltenName,
  1453. Text* zeilenName,
  1454. __int64 style) const // prüft, ob style nicht vorhanden ist
  1455. {
  1456. return hatMsStyleNicht(
  1457. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1458. }
  1459. Zeichnung* ObjTabelle::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
  1460. {
  1461. ObjTabelle* obj = new ObjTabelle();
  1462. obj->setPosition(pos);
  1463. obj->setSize(gr);
  1464. obj->setMausEreignisParameter(makParam);
  1465. obj->setTastaturEreignisParameter(takParam);
  1466. obj->setMausEreignis(mak);
  1467. obj->setTastaturEreignis(tak);
  1468. if (toolTip) obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
  1469. obj->setStyle(style);
  1470. if (rahmen) obj->setRahmenZ((Rahmen*)rahmen->dublizieren());
  1471. obj->setHintergrundFarbe(hintergrundFarbe);
  1472. if (hintergrundBild)
  1473. obj->setHintergrundBild(
  1474. dynamic_cast<Bild*>(hintergrundBild->getThis()));
  1475. if (hintergrundFeld)
  1476. obj->setAlphaFeldZ((AlphaFeld*)hintergrundFeld->dublizieren());
  1477. obj->setRasterFarbe(rasterFarbe);
  1478. obj->setRasterBreite(rasterBreite);
  1479. if (aRam) obj->setARahmenZ((Rahmen*)aRam->dublizieren());
  1480. if (aAf) obj->setAAlphaFeldZ((AlphaFeld*)aAf->dublizieren());
  1481. for (int s = 0; s < spaltenAnzahl; ++s)
  1482. {
  1483. obj->addSpalte(spaltenNamen->get(s));
  1484. if (spaltenBreite->hat(s))
  1485. obj->setSpaltenBreite(s, spaltenBreite->get(s));
  1486. if (minSpaltenBreite->hat(s))
  1487. obj->setMinSpaltenBreite(s, minSpaltenBreite->get(s));
  1488. if (maxSpaltenBreite->hat(s))
  1489. obj->setMaxSpaltenBreite(s, maxSpaltenBreite->get(s));
  1490. for (int z = 0; z < zeilenAnzahl; ++z)
  1491. {
  1492. if (!s)
  1493. {
  1494. obj->addZeile(zeilenNamen->get(z));
  1495. if (zeilenHeight->hat(z))
  1496. obj->setZeilenHeight(z, zeilenHeight->get(z));
  1497. if (minZeilenHeight->hat(z))
  1498. obj->setMinZeilenHeight(z, minZeilenHeight->get(z));
  1499. if (maxZeilenHeight->hat(z))
  1500. obj->setMaxZeilenHeight(z, maxZeilenHeight->get(z));
  1501. }
  1502. if (members->z(s) && members->z(s)->hat(z))
  1503. obj->setZeichnungZ(s, z, members->z(s)->get(z));
  1504. if (styles->z(s) && styles->z(s)->hat(z))
  1505. obj->setMsStyle(s, z, styles->z(s)->get(z));
  1506. if (msaRam->z(s) && msaRam->z(s)->z(z))
  1507. obj->setARahmenZ(
  1508. s, z, (Rahmen*)msaRam->z(s)->z(z)->dublizieren());
  1509. if (msaAf->z(s) && msaAf->z(s)->z(z))
  1510. obj->setAAlphaFeldZ(
  1511. s, z, (AlphaFeld*)msaAf->z(s)->z(z)->dublizieren());
  1512. }
  1513. }
  1514. obj->setAuswahl(selected.x, selected.y);
  1515. return obj;
  1516. }