Table.cpp 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671
  1. #include "Table.h"
  2. #include "AlphaField.h"
  3. #include "Image.h"
  4. #include "MouseEvent.h"
  5. #include "Border.h"
  6. #include "Scroll.h"
  7. #include "KeyboardEvent.h"
  8. #include "Text.h"
  9. #include "ToolTip.h"
  10. using namespace Framework;
  11. // Contents of the ObjTabelle class from Table.h
  12. // Constructor
  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. // Destructor
  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) // processes mouse events
  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. // non-constant
  269. void ObjTabelle::addSpalte(const char* name) // add column
  270. {
  271. addSpalte(spaltenAnzahl, name);
  272. }
  273. void ObjTabelle::addSpalte(Text* name)
  274. {
  275. addSpalte(spaltenAnzahl, name);
  276. }
  277. void ObjTabelle::addSpalte(int sNum, const char* name) // insert column at sNum
  278. {
  279. if (sNum > spaltenAnzahl) return;
  280. lockZeichnung();
  281. members->add(new RCArray<Zeichnung>(), sNum);
  282. spaltenNamen->add(new Text(name), sNum);
  283. spaltenBreite->add(100, sNum);
  284. minSpaltenBreite->add(0, sNum);
  285. maxSpaltenBreite->add(300, sNum);
  286. msaRam->add(new RCArray<Rahmen>(), sNum);
  287. msaAf->add(new RCArray<AlphaFeld>(), sNum);
  288. styles->add(new Array<__int64>(), sNum);
  289. for (int i = 0; i < zeilenAnzahl; i++)
  290. {
  291. members->z(sNum)->add(0);
  292. msaRam->z(sNum)->add(0);
  293. msaAf->z(sNum)->add(0);
  294. styles->z(sNum)->add(0);
  295. }
  296. ++spaltenAnzahl;
  297. rend = 1;
  298. unlockZeichnung();
  299. }
  300. void ObjTabelle::addSpalte(int sNum, Text* name)
  301. {
  302. addSpalte(sNum, name->getText());
  303. name->release();
  304. }
  305. void ObjTabelle::addZeile(const char* name) // add row
  306. {
  307. addZeile(zeilenAnzahl, name);
  308. }
  309. void ObjTabelle::addZeile(Text* name)
  310. {
  311. addZeile(zeilenAnzahl, name);
  312. }
  313. void ObjTabelle::addZeile(int zNum, const char* name) // insert row at zNum
  314. {
  315. if (zNum > zeilenAnzahl) return;
  316. lockZeichnung();
  317. zeilenNamen->add(new Text(name), zNum);
  318. zeilenHeight->add(20, zNum);
  319. minZeilenHeight->add(0, zNum);
  320. maxZeilenHeight->add(100, zNum);
  321. for (int i = 0; i < spaltenAnzahl; ++i)
  322. {
  323. if (members->z(i)) members->z(i)->add(0, zNum);
  324. if (msaRam->z(i)) msaRam->z(i)->add(0, zNum);
  325. if (msaAf->z(i)) msaAf->z(i)->add(0, zNum);
  326. if (styles->z(i)) styles->z(i)->add(0, zNum);
  327. }
  328. ++zeilenAnzahl;
  329. rend = 1;
  330. unlockZeichnung();
  331. }
  332. void ObjTabelle::addZeile(int zNum, Text* name)
  333. {
  334. addZeile(zNum, name->getText());
  335. name->release();
  336. }
  337. void ObjTabelle::removeSpalte(int sNum) // delete column
  338. {
  339. if (sNum >= spaltenAnzahl) return;
  340. lockZeichnung();
  341. members->remove(sNum);
  342. spaltenNamen->remove(sNum);
  343. spaltenBreite->remove(sNum);
  344. minSpaltenBreite->remove(sNum);
  345. maxSpaltenBreite->remove(sNum);
  346. if (msaRam->z(sNum)) msaRam->z(sNum)->release();
  347. msaRam->remove(sNum);
  348. if (msaAf->z(sNum)) msaAf->z(sNum)->release();
  349. msaAf->remove(sNum);
  350. styles->remove(sNum);
  351. --spaltenAnzahl;
  352. rend = 1;
  353. unlockZeichnung();
  354. }
  355. void ObjTabelle::removeSpalte(const char* name)
  356. {
  357. removeSpalte(getSpaltenNummer(name));
  358. }
  359. void ObjTabelle::removeSpalte(Text* name)
  360. {
  361. removeSpalte(getSpaltenNummer(name));
  362. }
  363. void ObjTabelle::removeZeile(int zNum) // delete row
  364. {
  365. if (zNum >= zeilenAnzahl) return;
  366. lockZeichnung();
  367. zeilenNamen->remove(zNum);
  368. zeilenHeight->remove(zNum);
  369. minZeilenHeight->remove(zNum);
  370. maxZeilenHeight->remove(zNum);
  371. for (int i = 0; i < spaltenAnzahl; ++i)
  372. {
  373. if (members->z(i)) members->z(i)->remove(zNum);
  374. if (msaRam->z(i)) msaRam->z(i)->remove(zNum);
  375. if (msaAf->z(i)) msaAf->z(i)->remove(zNum);
  376. if (styles->z(i)) styles->z(i)->remove(zNum);
  377. }
  378. --zeilenAnzahl;
  379. rend = 1;
  380. unlockZeichnung();
  381. }
  382. void ObjTabelle::removeZeile(const char* name)
  383. {
  384. removeZeile(getZeilenNummer(name));
  385. }
  386. void ObjTabelle::removeZeile(Text* name)
  387. {
  388. removeZeile(getZeilenNummer(name));
  389. }
  390. void ObjTabelle::setSpaltePosition(
  391. const char* name, int pos) // sets the position of a column
  392. {
  393. setSpaltePosition(getSpaltenNummer(name), pos);
  394. }
  395. void ObjTabelle::setSpaltePosition(Text* name, int pos)
  396. {
  397. setSpaltePosition(getSpaltenNummer(name), pos);
  398. }
  399. void ObjTabelle::setSpaltePosition(int sNum, int pos)
  400. {
  401. if (sNum >= spaltenAnzahl || pos >= spaltenAnzahl || sNum == pos) return;
  402. int delPos = sNum;
  403. int insertPos = pos;
  404. if (pos < sNum)
  405. ++delPos;
  406. else
  407. ++insertPos;
  408. lockZeichnung();
  409. members->add(members->get(sNum), insertPos);
  410. members->remove(delPos);
  411. spaltenNamen->add(spaltenNamen->get(sNum), insertPos);
  412. spaltenNamen->remove(delPos);
  413. spaltenBreite->add(
  414. spaltenBreite->hat(sNum) ? spaltenBreite->get(sNum) : 0, insertPos);
  415. spaltenBreite->remove(delPos);
  416. minSpaltenBreite->add(
  417. minSpaltenBreite->hat(sNum) ? minSpaltenBreite->get(sNum) : 0,
  418. insertPos);
  419. minSpaltenBreite->remove(delPos);
  420. msaRam->add(msaRam->z(sNum), insertPos);
  421. msaRam->remove(delPos);
  422. msaAf->add(msaAf->z(sNum), insertPos);
  423. msaAf->remove(delPos);
  424. styles->add(styles->get(sNum), insertPos);
  425. styles->remove(delPos);
  426. rend = 1;
  427. unlockZeichnung();
  428. }
  429. void ObjTabelle::setZeilePosition(
  430. const char* name, int pos) // sets the row position
  431. {
  432. setZeilePosition(getZeilenNummer(name), pos);
  433. }
  434. void ObjTabelle::setZeilePosition(Text* name, int pos)
  435. {
  436. setZeilePosition(getZeilenNummer(name), pos);
  437. }
  438. void ObjTabelle::setZeilePosition(int zNum, int pos)
  439. {
  440. if (zNum >= zeilenAnzahl || pos >= zeilenAnzahl || pos == zNum) return;
  441. int delPos = zNum;
  442. int insertPos = pos;
  443. if (pos < zNum)
  444. ++delPos;
  445. else
  446. ++insertPos;
  447. lockZeichnung();
  448. zeilenNamen->add(zeilenNamen->get(zNum), insertPos);
  449. zeilenNamen->remove(delPos);
  450. zeilenHeight->add(
  451. zeilenHeight->hat(zNum) ? zeilenHeight->get(zNum) : 0, insertPos);
  452. zeilenHeight->remove(delPos);
  453. minZeilenHeight->add(
  454. minZeilenHeight->hat(zNum) ? minZeilenHeight->get(zNum) : 0, insertPos);
  455. minZeilenHeight->remove(delPos);
  456. maxZeilenHeight->add(
  457. maxZeilenHeight->hat(zNum) ? maxZeilenHeight->get(zNum) : 0, insertPos);
  458. maxZeilenHeight->remove(delPos);
  459. for (int i = 0; i < spaltenAnzahl; ++i)
  460. {
  461. if (members->z(i))
  462. {
  463. members->z(i)->add(
  464. members->z(i)->hat(zNum) ? members->z(i)->get(zNum) : 0,
  465. insertPos);
  466. members->z(i)->remove(delPos);
  467. }
  468. if (msaRam->z(i))
  469. {
  470. msaRam->z(i)->add(
  471. msaRam->z(i)->z(zNum) ? msaRam->z(i)->get(zNum) : 0, insertPos);
  472. msaRam->z(i)->remove(delPos);
  473. }
  474. if (msaAf->z(i))
  475. {
  476. msaAf->z(i)->add(
  477. msaAf->z(i)->z(zNum) ? msaAf->z(i)->get(zNum) : 0, insertPos);
  478. msaAf->z(i)->remove(delPos);
  479. }
  480. if (styles->z(i))
  481. {
  482. styles->z(i)->add(
  483. styles->z(i)->hat(zNum) ? styles->z(i)->get(zNum) : 0,
  484. insertPos);
  485. styles->z(i)->remove(delPos);
  486. }
  487. }
  488. rend = 1;
  489. unlockZeichnung();
  490. }
  491. void ObjTabelle::setZeichnungZ(
  492. int sNum, int zNum, Zeichnung* obj) // sets a drawing
  493. {
  494. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  495. lockZeichnung();
  496. if (!members->z(sNum)) members->set(new RCArray<Zeichnung>(), sNum);
  497. while (members->z(sNum)->getEintragAnzahl() <= zNum)
  498. members->z(sNum)->add(0);
  499. members->z(sNum)->set(obj, zNum);
  500. if (spaltenBreite->hat(sNum))
  501. {
  502. obj->setWidth(spaltenBreite->get(sNum));
  503. }
  504. if (zeilenHeight->hat(zNum))
  505. {
  506. obj->setHeight(zeilenHeight->get(zNum));
  507. }
  508. rend = 1;
  509. unlockZeichnung();
  510. }
  511. void ObjTabelle::setZeichnungZ(
  512. const char* spaltenName, const char* zeilenName, Zeichnung* zZeichnung)
  513. {
  514. setZeichnungZ(
  515. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), zZeichnung);
  516. }
  517. void ObjTabelle::setZeichnungZ(
  518. Text* spaltenName, Text* zeilenName, Zeichnung* zZeichnung)
  519. {
  520. setZeichnungZ(
  521. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), zZeichnung);
  522. }
  523. void ObjTabelle::setSpaltenBreite(int sNum, int br) // sets the column width
  524. {
  525. if (sNum >= spaltenAnzahl) return;
  526. lockZeichnung();
  527. spaltenBreite->set(br, sNum);
  528. rend = 1;
  529. unlockZeichnung();
  530. }
  531. void ObjTabelle::setSpaltenBreite(const char* name, int br)
  532. {
  533. setSpaltenBreite(getSpaltenNummer(name), br);
  534. }
  535. void ObjTabelle::setSpaltenBreite(Text* name, int br)
  536. {
  537. setSpaltenBreite(getSpaltenNummer(name), br);
  538. }
  539. void ObjTabelle::setZeilenHeight(int zNum, int hi) // sets the row height
  540. {
  541. if (zNum >= zeilenAnzahl) return;
  542. lockZeichnung();
  543. zeilenHeight->set(hi, zNum);
  544. rend = 1;
  545. unlockZeichnung();
  546. }
  547. void ObjTabelle::setZeilenHeight(const char* name, int hi)
  548. {
  549. setZeilenHeight(getZeilenNummer(name), hi);
  550. }
  551. void ObjTabelle::setZeilenHeight(Text* name, int hi)
  552. {
  553. setZeilenHeight(getZeilenNummer(name), hi);
  554. }
  555. void ObjTabelle::setMinSpaltenBreite(
  556. int sNum, int minBr) // sets the minimum column width
  557. {
  558. if (sNum >= spaltenAnzahl) return;
  559. lockZeichnung();
  560. minSpaltenBreite->set(minBr, sNum);
  561. rend = 1;
  562. unlockZeichnung();
  563. }
  564. void ObjTabelle::setMinSpaltenBreite(const char* name, int minBr)
  565. {
  566. setMinSpaltenBreite(getSpaltenNummer(name), minBr);
  567. }
  568. void ObjTabelle::setMinSpaltenBreite(Text* name, int minBr)
  569. {
  570. setMinSpaltenBreite(getSpaltenNummer(name), minBr);
  571. }
  572. void ObjTabelle::setMaxSpaltenBreite(
  573. int sNum, int maxBr) // sets the maximum column width
  574. {
  575. if (sNum >= spaltenAnzahl) return;
  576. lockZeichnung();
  577. maxSpaltenBreite->set(maxBr, sNum);
  578. rend = 1;
  579. unlockZeichnung();
  580. }
  581. void ObjTabelle::setMaxSpaltenBreite(const char* name, int maxBr)
  582. {
  583. setMaxSpaltenBreite(getSpaltenNummer(name), maxBr);
  584. }
  585. void ObjTabelle::setMaxSpaltenBreite(Text* name, int maxBr)
  586. {
  587. setMaxSpaltenBreite(getSpaltenNummer(name), maxBr);
  588. }
  589. void ObjTabelle::setMinZeilenHeight(
  590. int zNum, int minHi) // sets the minimum row height
  591. {
  592. if (zNum >= zeilenAnzahl) return;
  593. lockZeichnung();
  594. minZeilenHeight->set(minHi, zNum);
  595. rend = 1;
  596. unlockZeichnung();
  597. }
  598. void ObjTabelle::setMinZeilenHeight(const char* name, int minHi)
  599. {
  600. setMinZeilenHeight(getZeilenNummer(name), minHi);
  601. }
  602. void ObjTabelle::setMinZeilenHeight(Text* name, int minHi)
  603. {
  604. setMinZeilenHeight(getZeilenNummer(name), minHi);
  605. }
  606. void ObjTabelle::setMaxZeilenHeight(
  607. int zNum, int maxHi) // sets the maximum row height
  608. {
  609. if (zNum >= zeilenAnzahl) return;
  610. lockZeichnung();
  611. maxZeilenHeight->set(maxHi, zNum);
  612. rend = 1;
  613. unlockZeichnung();
  614. }
  615. void ObjTabelle::setMaxZeilenHeight(const char* name, int maxHi)
  616. {
  617. setMaxZeilenHeight(getZeilenHeight(name), maxHi);
  618. }
  619. void ObjTabelle::setMaxZeilenHeight(Text* name, int maxHi)
  620. {
  621. setMaxZeilenHeight(getZeilenHeight(name), maxHi);
  622. }
  623. void ObjTabelle::setAuswahl(
  624. int sNum, int zNum) // selects the corresponding field
  625. {
  626. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  627. lockZeichnung();
  628. selected.x = sNum;
  629. selected.y = zNum;
  630. rend = 1;
  631. unlockZeichnung();
  632. }
  633. void ObjTabelle::setAuswahl(const char* spaltenName, const char* zeilenName)
  634. {
  635. setAuswahl(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  636. }
  637. void ObjTabelle::setAuswahl(Text* spaltenName, Text* zeilenName)
  638. {
  639. setAuswahl(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  640. }
  641. void ObjTabelle::setRasterFarbe(int f) // sets the grid color
  642. {
  643. rasterFarbe = f;
  644. rend = 1;
  645. }
  646. void ObjTabelle::setRasterBreite(int br) // sets the width of the grid
  647. {
  648. rasterBreite = br;
  649. rend = 1;
  650. }
  651. void ObjTabelle::setARahmenZ(Rahmen* ram) // sets the selection border
  652. {
  653. if (aRam) aRam->release();
  654. aRam = ram;
  655. rend = 1;
  656. }
  657. void ObjTabelle::setARFarbe(int f) // sets the selection border color
  658. {
  659. if (!aRam) aRam = new LRahmen();
  660. aRam->setFarbe(f);
  661. rend = 1;
  662. }
  663. void ObjTabelle::setARBreite(int br) // sets the selection border width
  664. {
  665. if (!aRam) aRam = new LRahmen();
  666. aRam->setRamenBreite(br);
  667. rend = 1;
  668. }
  669. void ObjTabelle::setAAlphaFeldZ(AlphaFeld* af) // sets the selection AlphaFeld
  670. {
  671. if (aAf) aAf->release();
  672. aAf = af;
  673. rend = 1;
  674. }
  675. void ObjTabelle::setAAfFarbe(int f) // sets the color of the selection AlphaFeld
  676. {
  677. if (!aAf) aAf = new AlphaFeld();
  678. aAf->setFarbe(f);
  679. rend = 1;
  680. }
  681. void ObjTabelle::setAAfStrength(
  682. int st) // sets the strength of the selection AlphaFeld
  683. {
  684. if (!aAf) aAf = new AlphaFeld();
  685. aAf->setStrength(st);
  686. rend = 1;
  687. }
  688. void ObjTabelle::setARahmenZ(
  689. int sNum, int zNum, Rahmen* ram) // sets the selection border
  690. {
  691. if (msaRam->z(sNum)) msaRam->z(sNum)->set(ram, zNum);
  692. rend = 1;
  693. }
  694. void ObjTabelle::setARahmenZ(
  695. const char* spaltenName, const char* zeilenName, Rahmen* ram)
  696. {
  697. setARahmenZ(
  698. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), ram);
  699. }
  700. void ObjTabelle::setARahmenZ(Text* spaltenName, Text* zeilenName, Rahmen* ram)
  701. {
  702. setARahmenZ(
  703. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), ram);
  704. }
  705. void ObjTabelle::setARFarbe(
  706. int sNum, int zNum, int f) // sets the selection border color
  707. {
  708. if (msaRam->z(sNum))
  709. {
  710. Rahmen* tmp = msaRam->z(sNum)->z(zNum);
  711. if (!tmp)
  712. {
  713. tmp = new LRahmen();
  714. msaRam->z(sNum)->set(tmp, zNum);
  715. }
  716. tmp->setFarbe(f);
  717. rend = 1;
  718. }
  719. }
  720. void ObjTabelle::setARFarbe(
  721. const char* spaltenName, const char* zeilenName, int f)
  722. {
  723. setARFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  724. }
  725. void ObjTabelle::setARFarbe(Text* spaltenName, Text* zeilenName, int f)
  726. {
  727. setARFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  728. }
  729. void ObjTabelle::setARBreite(
  730. int sNum, int zNum, int br) // sets the selection border width
  731. {
  732. if (msaRam->z(sNum))
  733. {
  734. Rahmen* tmp = msaRam->z(sNum)->z(zNum);
  735. if (!tmp)
  736. {
  737. tmp = new LRahmen();
  738. msaRam->z(sNum)->set(tmp, zNum);
  739. }
  740. tmp->setRamenBreite(br);
  741. rend = 1;
  742. }
  743. }
  744. void ObjTabelle::setARBreite(
  745. const char* spaltenName, const char* zeilenName, int br)
  746. {
  747. setARBreite(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), br);
  748. }
  749. void ObjTabelle::setARBreite(Text* spaltenName, Text* zeilenName, int br)
  750. {
  751. setARBreite(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), br);
  752. }
  753. void ObjTabelle::setAAlphaFeldZ(
  754. int sNum, int zNum, AlphaFeld* af) // sets the selection AlphaFeld
  755. {
  756. if (msaAf->z(sNum)) msaAf->z(sNum)->set(af, zNum);
  757. rend = 1;
  758. }
  759. void ObjTabelle::setAAlphaFeldZ(
  760. const char* spaltenName, const char* zeilenName, AlphaFeld* af)
  761. {
  762. setAAlphaFeldZ(
  763. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), af);
  764. }
  765. void ObjTabelle::setAAlphaFeldZ(
  766. Text* spaltenName, Text* zeilenName, AlphaFeld* af)
  767. {
  768. setAAlphaFeldZ(
  769. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), af);
  770. }
  771. void ObjTabelle::setAAfFarbe(
  772. int sNum, int zNum, int f) // sets the color of the selection AlphaFeld
  773. {
  774. if (msaAf->z(sNum))
  775. {
  776. AlphaFeld* tmp = msaAf->z(sNum)->z(zNum);
  777. if (!tmp)
  778. {
  779. tmp = new AlphaFeld();
  780. msaAf->z(sNum)->set(tmp, zNum);
  781. }
  782. tmp->setFarbe(f);
  783. rend = 1;
  784. }
  785. }
  786. void ObjTabelle::setAAfFarbe(
  787. const char* spaltenName, const char* zeilenName, int f)
  788. {
  789. setAAfFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  790. }
  791. void ObjTabelle::setAAfFarbe(Text* spaltenName, Text* zeilenName, int f)
  792. {
  793. setAAfFarbe(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), f);
  794. }
  795. void ObjTabelle::setAAfStrength(
  796. int sNum, int zNum, int st) // sets the strength of the selection AlphaFeld
  797. {
  798. if (msaAf->z(sNum))
  799. {
  800. AlphaFeld* tmp = msaAf->z(sNum)->z(zNum);
  801. if (!tmp)
  802. {
  803. tmp = new AlphaFeld();
  804. msaAf->z(sNum)->set(tmp, zNum);
  805. }
  806. tmp->setStrength(st);
  807. rend = 1;
  808. }
  809. }
  810. void ObjTabelle::setAAfStrength(
  811. const char* spaltenName, const char* zeilenName, int st)
  812. {
  813. setAAfStrength(
  814. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), st);
  815. }
  816. void ObjTabelle::setAAfStrength(Text* spaltenName, Text* zeilenName, int st)
  817. {
  818. setAAfStrength(
  819. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), st);
  820. }
  821. void ObjTabelle::addMsStyle(
  822. int sNum, int zNum, __int64 style) // sets the style when Multistyled
  823. {
  824. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  825. if (styles->z(sNum))
  826. styles->z(sNum)->set(
  827. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  828. | style,
  829. zNum);
  830. rend = 1;
  831. }
  832. void ObjTabelle::addMsStyle(
  833. const char* spaltenName, const char* zeilenName, __int64 style)
  834. {
  835. addMsStyle(
  836. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  837. }
  838. void ObjTabelle::addMsStyle(Text* spaltenName, Text* zeilenName, __int64 style)
  839. {
  840. addMsStyle(
  841. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  842. }
  843. void ObjTabelle::setMsStyle(int sNum, int zNum, __int64 style)
  844. {
  845. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  846. if (styles->z(sNum)) styles->z(sNum)->set(style, zNum);
  847. rend = 1;
  848. }
  849. void ObjTabelle::setMsStyle(
  850. const char* spaltenName, const char* zeilenName, __int64 style)
  851. {
  852. setMsStyle(
  853. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  854. }
  855. void ObjTabelle::setMsStyle(Text* spaltenName, Text* zeilenName, __int64 style)
  856. {
  857. setMsStyle(
  858. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  859. }
  860. void ObjTabelle::setMsStyle(int sNum, int zNum, __int64 style, bool add_remove)
  861. {
  862. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  863. if (styles->z(sNum))
  864. {
  865. if (add_remove)
  866. styles->z(sNum)->set(
  867. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  868. | style,
  869. zNum);
  870. else
  871. styles->z(sNum)->set(
  872. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  873. & (~style),
  874. zNum);
  875. rend = 1;
  876. }
  877. }
  878. void ObjTabelle::setMsStyle(const char* spaltenName,
  879. const char* zeilenName,
  880. __int64 style,
  881. bool add_remove)
  882. {
  883. setMsStyle(getSpaltenNummer(spaltenName),
  884. getZeilenNummer(zeilenName),
  885. style,
  886. add_remove);
  887. }
  888. void ObjTabelle::setMsStyle(
  889. Text* spaltenName, Text* zeilenName, __int64 style, bool add_remove)
  890. {
  891. setMsStyle(getSpaltenNummer(spaltenName),
  892. getZeilenNummer(zeilenName),
  893. style,
  894. add_remove);
  895. }
  896. void ObjTabelle::removeMsStyle(int sNum, int zNum, __int64 style)
  897. {
  898. if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
  899. if (styles->z(sNum))
  900. styles->z(sNum)->set(
  901. (styles->z(sNum)->hat(zNum) ? styles->z(sNum)->get(zNum) : 0)
  902. & (~style),
  903. zNum);
  904. rend = 1;
  905. }
  906. void ObjTabelle::removeMsStyle(
  907. const char* spaltenName, const char* zeilenName, __int64 style)
  908. {
  909. removeMsStyle(
  910. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  911. }
  912. void ObjTabelle::removeMsStyle(
  913. Text* spaltenName, Text* zeilenName, __int64 style)
  914. {
  915. removeMsStyle(
  916. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  917. }
  918. bool ObjTabelle::tick(double tickVal) // tick Message
  919. {
  920. lockZeichnung();
  921. for (int i = 0; i < zeilenAnzahl; ++i)
  922. {
  923. for (int j = 0; j < spaltenAnzahl; ++j)
  924. {
  925. Zeichnung* obj = zZeichnung(j, i);
  926. if (obj) rend |= obj->tick(tickVal);
  927. }
  928. }
  929. unlockZeichnung();
  930. return ZeichnungHintergrund::tick(tickVal);
  931. }
  932. void ObjTabelle::doTastaturEreignis(TastaturEreignis& te)
  933. {
  934. bool ntakc = !te.verarbeitet;
  935. if (hatStyleNicht(Style::Fokus) || hatStyleNicht(Style::Erlaubt)
  936. || hatStyleNicht(Style::Sichtbar))
  937. return;
  938. if (tak && (te.verarbeitet || tak(takParam, this, te)))
  939. {
  940. lockZeichnung();
  941. if (zZeichnung(selected.x, selected.y))
  942. {
  943. zZeichnung(selected.x, selected.y)->doTastaturEreignis(te);
  944. if (!te.verarbeitet && te.id == TE_Press)
  945. {
  946. if (te.virtualKey == T_Oben)
  947. {
  948. --(selected.y);
  949. rend = 1;
  950. }
  951. if (te.virtualKey == T_Unten)
  952. {
  953. ++(selected.y);
  954. rend = 1;
  955. }
  956. if (te.virtualKey == T_Links)
  957. {
  958. --(selected.x);
  959. rend = 1;
  960. }
  961. if (te.virtualKey == T_Rechts)
  962. {
  963. ++(selected.x);
  964. rend = 1;
  965. }
  966. }
  967. }
  968. unlockZeichnung();
  969. }
  970. te.verarbeitet = 1;
  971. if (ntakc && te.verarbeitet && nTak)
  972. te.verarbeitet = nTak(ntakParam, this, te);
  973. }
  974. void ObjTabelle::render(Bild& zRObj) // renders the table into zRObj
  975. {
  976. if (hatStyleNicht(Style::Sichtbar)) return;
  977. ZeichnungHintergrund::render(zRObj);
  978. lockZeichnung();
  979. if (!zRObj.setDrawOptions(innenPosition, innenSize))
  980. {
  981. unlockZeichnung();
  982. return;
  983. }
  984. int xPos = 0;
  985. if (horizontalScrollBar && hatStyle(Style::HScroll))
  986. xPos -= horizontalScrollBar->getScroll();
  987. for (int s = 0; s < spaltenAnzahl; ++s)
  988. {
  989. int sBr = spaltenBreite->hat(s) ? spaltenBreite->get(s) : 0;
  990. int yPos = 0;
  991. if (vertikalScrollBar && hatStyle(Style::VScroll))
  992. yPos -= vertikalScrollBar->getScroll();
  993. RCArray<Zeichnung>* tmp_zZeichnungs = members->z(s);
  994. if (!tmp_zZeichnungs) continue;
  995. for (int z = 0; z < zeilenAnzahl && tmp_zZeichnungs; ++z)
  996. {
  997. int zHi = zeilenHeight->hat(z) ? zeilenHeight->get(z) : 0;
  998. if (hatStyle(Style::Raster)) yPos += rasterBreite;
  999. yPos += zHi;
  1000. if (z == zeilenAnzahl - 1 && vertikalScrollBar
  1001. && hatStyle(Style::VScroll))
  1002. vertikalScrollBar->getScrollData()->max
  1003. = yPos + vertikalScrollBar->getScroll();
  1004. }
  1005. for (int z = zeilenAnzahl - 1; z >= 0 && tmp_zZeichnungs; z--)
  1006. {
  1007. int zHi = zeilenHeight->hat(z) ? zeilenHeight->get(z) : 0;
  1008. yPos -= zHi;
  1009. if (hatStyle(Style::Raster))
  1010. {
  1011. yPos -= rasterBreite;
  1012. for (int i = 0; i < rasterBreite; i++)
  1013. zRObj.drawLinieHAlpha(
  1014. xPos, yPos + zHi + i, sBr, rasterFarbe);
  1015. }
  1016. Zeichnung* obj
  1017. = tmp_zZeichnungs->hat(z) ? tmp_zZeichnungs->z(z) : 0;
  1018. if (obj)
  1019. {
  1020. obj->setPosition(xPos, yPos);
  1021. obj->setSize(sBr, zHi);
  1022. obj->render(zRObj);
  1023. if (selected.x == s && selected.y == z)
  1024. {
  1025. Rahmen* tmp_aRam = aRam;
  1026. AlphaFeld* tmp_aAf = aAf;
  1027. bool aRamB = hatStyle(Style::AuswahlRahmen) && tmp_aRam;
  1028. bool aAfB = hatStyle(Style::AuswahlBuffer) && tmp_aAf;
  1029. if (hatStyle(Style::AuswahlMultistyled))
  1030. {
  1031. tmp_aRam = getARahmen(s, z);
  1032. tmp_aAf = getAAlphaFeld(s, z);
  1033. aRamB = hatMsStyle(s, z, Style::AuswahlRahmen)
  1034. && tmp_aRam;
  1035. aAfB
  1036. = hatMsStyle(s, z, Style::AuswahlBuffer) && tmp_aAf;
  1037. }
  1038. int aRbr = 0;
  1039. if (aRamB)
  1040. {
  1041. tmp_aRam->setPosition(xPos, yPos);
  1042. tmp_aRam->setSize(sBr, zHi);
  1043. tmp_aRam->render(zRObj);
  1044. aRbr = tmp_aRam->getRBreite();
  1045. }
  1046. if (aAfB)
  1047. {
  1048. tmp_aAf->setPosition(aRbr + xPos, aRbr + yPos);
  1049. tmp_aAf->setSize(sBr - aRbr * 2, zHi - aRbr * 2);
  1050. tmp_aAf->render(zRObj);
  1051. }
  1052. }
  1053. }
  1054. }
  1055. if (hatStyle(Style::Raster))
  1056. {
  1057. for (int i = 0; i < rasterBreite; i++)
  1058. zRObj.drawLinieVAlpha(
  1059. xPos + sBr + i, 0, innenSize.y, rasterFarbe);
  1060. xPos += rasterBreite;
  1061. }
  1062. xPos += sBr;
  1063. }
  1064. if (horizontalScrollBar && hatStyle(Style::HScroll))
  1065. horizontalScrollBar->getScrollData()->max
  1066. = xPos + horizontalScrollBar->getScroll();
  1067. zRObj.releaseDrawOptions();
  1068. unlockZeichnung();
  1069. }
  1070. // constant
  1071. int ObjTabelle::getSpaltenAnzahl() const // returns the number of columns
  1072. {
  1073. return spaltenAnzahl;
  1074. }
  1075. int ObjTabelle::getZeilenAnzahl() const // returns the number of rows
  1076. {
  1077. return zeilenAnzahl;
  1078. }
  1079. int ObjTabelle::getSpaltenNummer(
  1080. const char* name) const // returns the index of the column with the name
  1081. {
  1082. for (int i = 0; i < spaltenAnzahl; ++i)
  1083. {
  1084. if (spaltenNamen->z(i)->istGleich(name)) return i;
  1085. }
  1086. return -1;
  1087. }
  1088. int ObjTabelle::getSpaltenNummer(Text* name) const
  1089. {
  1090. int ret = getSpaltenNummer(name->getText());
  1091. name->release();
  1092. return ret;
  1093. }
  1094. Text* ObjTabelle::getSpaltenName(
  1095. int num) const // returns the name of the column with index num
  1096. {
  1097. return spaltenNamen->get(num);
  1098. }
  1099. Text* ObjTabelle::zSpaltenName(int num) const
  1100. {
  1101. return spaltenNamen->z(num);
  1102. }
  1103. int ObjTabelle::getZeilenNummer(
  1104. const char* name) const // returns the index of the row with the name
  1105. {
  1106. for (int i = 0; i < zeilenAnzahl; ++i)
  1107. {
  1108. if (zeilenNamen->z(i)->istGleich(name)) return i;
  1109. }
  1110. return -1;
  1111. }
  1112. int ObjTabelle::getZeilenNummer(Text* name) const
  1113. {
  1114. int ret = getZeilenNummer(name->getText());
  1115. name->release();
  1116. return ret;
  1117. }
  1118. Text* ObjTabelle::getZeilenName(
  1119. int num) const // returns the name of the row with index num
  1120. {
  1121. return zeilenNamen->get(num);
  1122. }
  1123. Text* ObjTabelle::zZeilenName(int num) const
  1124. {
  1125. return zeilenNamen->z(num);
  1126. }
  1127. Punkt ObjTabelle::getZeichnungPosition(
  1128. Zeichnung* zObj) const // returns the position of a drawing
  1129. {
  1130. for (int x = 0; x < spaltenAnzahl; ++x)
  1131. {
  1132. for (int y = 0; y < zeilenAnzahl; ++y)
  1133. {
  1134. if (zZeichnung(x, y) == zObj) return Punkt(x, y);
  1135. }
  1136. }
  1137. return Punkt(-1, -1);
  1138. }
  1139. Zeichnung* ObjTabelle::zZeichnung(
  1140. int sNum, int zNum) const // returns the drawing at the position
  1141. {
  1142. if (sNum < 0 || zNum < 0 || sNum >= spaltenAnzahl || zNum >= zeilenAnzahl)
  1143. return 0;
  1144. if (!members->z(sNum)) return 0;
  1145. RCArray<Zeichnung>* tmp = members->z(sNum);
  1146. if (!tmp->hat(zNum)) return 0;
  1147. return tmp ? tmp->z(zNum) : 0;
  1148. }
  1149. Zeichnung* ObjTabelle::zZeichnung(
  1150. const char* spaltenName, const char* zeilenName) const
  1151. {
  1152. return zZeichnung(
  1153. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1154. }
  1155. Zeichnung* ObjTabelle::zZeichnung(Text* spaltenName, Text* zeilenName) const
  1156. {
  1157. return zZeichnung(
  1158. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1159. }
  1160. Zeichnung* ObjTabelle::getZeichnung(
  1161. int sNum, int zNum) const // returns the drawing at the position
  1162. {
  1163. if (!members->z(sNum)) return 0;
  1164. RCArray<Zeichnung>* tmp = members->z(sNum);
  1165. if (!tmp->hat(zNum)) return 0;
  1166. return tmp ? tmp->get(zNum) : 0;
  1167. }
  1168. Zeichnung* ObjTabelle::getZeichnung(
  1169. const char* spaltenName, const char* zeilenName) const
  1170. {
  1171. return getZeichnung(
  1172. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1173. }
  1174. Zeichnung* ObjTabelle::getZeichnung(Text* spaltenName, Text* zeilenName) const
  1175. {
  1176. return getZeichnung(
  1177. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1178. }
  1179. int ObjTabelle::getSpaltenBreite(
  1180. int num) const // returns the width of the column
  1181. {
  1182. return spaltenBreite->get(num);
  1183. }
  1184. int ObjTabelle::getSpaltenBreite(const char* name) const
  1185. {
  1186. return getSpaltenBreite(getSpaltenNummer(name));
  1187. }
  1188. int ObjTabelle::getSpaltenBreite(Text* name) const
  1189. {
  1190. return getSpaltenBreite(getSpaltenNummer(name));
  1191. }
  1192. int ObjTabelle::getZeilenHeight(int num) const // returns the height of the row
  1193. {
  1194. return zeilenHeight->get(num);
  1195. }
  1196. int ObjTabelle::getZeilenHeight(const char* name) const
  1197. {
  1198. return getZeilenHeight(getZeilenNummer(name));
  1199. }
  1200. int ObjTabelle::getZeilenHeight(Text* name) const
  1201. {
  1202. return getZeilenHeight(getZeilenNummer(name));
  1203. }
  1204. int ObjTabelle::getMinSpaltenBreite(
  1205. int num) const // returns the minimum column width
  1206. {
  1207. return minSpaltenBreite->get(num);
  1208. }
  1209. int ObjTabelle::getMinSpaltenBreite(const char* name) const
  1210. {
  1211. return getMinSpaltenBreite(getSpaltenNummer(name));
  1212. }
  1213. int ObjTabelle::getMinSpaltenBreite(Text* name) const
  1214. {
  1215. return getMinSpaltenBreite(getSpaltenNummer(name));
  1216. }
  1217. int ObjTabelle::getMaxSpaltenBreite(
  1218. int num) const // returns the maximum column width
  1219. {
  1220. return maxSpaltenBreite->get(num);
  1221. }
  1222. int ObjTabelle::getMaxSpaltenBreite(const char* name) const
  1223. {
  1224. return getMaxSpaltenBreite(getSpaltenNummer(name));
  1225. }
  1226. int ObjTabelle::getMaxSpaltenBreite(Text* name) const
  1227. {
  1228. return getMaxSpaltenBreite(getSpaltenNummer(name));
  1229. }
  1230. int ObjTabelle::getMinZeilenHeight(
  1231. int num) const // returns the minimum row height
  1232. {
  1233. return minZeilenHeight->get(num);
  1234. }
  1235. int ObjTabelle::getMinZeilenHeight(const char* name) const
  1236. {
  1237. return getMinZeilenHeight(getZeilenNummer(name));
  1238. }
  1239. int ObjTabelle::getMinZeilenHeight(Text* name) const
  1240. {
  1241. return getMinZeilenHeight(getZeilenNummer(name));
  1242. }
  1243. int ObjTabelle::getMaxZeilenHeight(
  1244. int num) const // returns the maximum row height
  1245. {
  1246. return maxZeilenHeight->get(num);
  1247. }
  1248. int ObjTabelle::getMaxZeilenHeight(const char* name) const
  1249. {
  1250. return getMaxZeilenHeight(getZeilenNummer(name));
  1251. }
  1252. int ObjTabelle::getMaxZeilenHeight(Text* name) const
  1253. {
  1254. return getMaxZeilenHeight(getZeilenNummer(name));
  1255. }
  1256. double ObjTabelle::getMausSpalte(
  1257. int mx) const // determines the column under the mouse
  1258. {
  1259. if (mx >= gr.x) return -1;
  1260. int hsBeg = (horizontalScrollBar && hatStyle(Style::HScroll))
  1261. ? horizontalScrollBar->getScroll()
  1262. : 0;
  1263. mx += hsBeg;
  1264. if (mx < 0) return -1;
  1265. int xx = rahmen ? rahmen->getRBreite() : 0;
  1266. for (int i = 0; i < spaltenAnzahl; ++i)
  1267. {
  1268. xx += spaltenBreite->get(i);
  1269. if (mx < xx - 5) return i;
  1270. if (mx < xx + 5) return i + 0.5;
  1271. xx += rasterBreite;
  1272. }
  1273. return -1;
  1274. }
  1275. Text* ObjTabelle::getMausSpaltenName(int mx) const
  1276. {
  1277. double tmp = getMausSpalte(mx);
  1278. if (tmp != (int)tmp) return 0;
  1279. return getSpaltenName((int)tmp);
  1280. }
  1281. Text* ObjTabelle::zMausSpaltenName(int mx) const
  1282. {
  1283. double tmp = getMausSpalte(mx);
  1284. if (tmp != (int)tmp) return 0;
  1285. return zSpaltenName((int)tmp);
  1286. }
  1287. double ObjTabelle::getMausZeile(
  1288. int my) const // calculates the row under the mouse
  1289. {
  1290. if (my >= gr.y) return -1;
  1291. if (my < 0) return -1;
  1292. int vsBeg = vertikalScrollBar && hatStyle(Style::VScroll)
  1293. ? vertikalScrollBar->getScroll()
  1294. : 0;
  1295. my += vsBeg;
  1296. int yy = rahmen ? rahmen->getRBreite() : 0;
  1297. for (int i = 0; i < zeilenAnzahl; ++i)
  1298. {
  1299. yy += zeilenHeight->get(i);
  1300. if (my < yy - 5) return i;
  1301. if (my < yy + 5) return i + 0.5;
  1302. yy += rasterBreite;
  1303. }
  1304. return -1;
  1305. }
  1306. Text* ObjTabelle::getMausZeilenName(int my) const
  1307. {
  1308. double tmp = getMausZeile(my);
  1309. if (tmp != (int)tmp) return 0;
  1310. return getZeilenName((int)tmp);
  1311. }
  1312. Text* ObjTabelle::zMausZeilenName(int my) const
  1313. {
  1314. double tmp = getMausZeile(my);
  1315. if (tmp != (int)tmp) return 0;
  1316. return zZeilenName((int)tmp);
  1317. }
  1318. const Punkt&
  1319. ObjTabelle::getAuswahlPosition() const // returns the selection position
  1320. {
  1321. return selected;
  1322. }
  1323. int ObjTabelle::getRasterFarbe() const // returns the color of the grid
  1324. {
  1325. return rasterFarbe;
  1326. }
  1327. int ObjTabelle::getRasterBreite() const // returns the width of the grid
  1328. {
  1329. return rasterBreite;
  1330. }
  1331. Rahmen* ObjTabelle::getARahmen() const // returns the selection border
  1332. {
  1333. return aRam ? dynamic_cast<Rahmen*>(aRam->getThis()) : 0;
  1334. }
  1335. Rahmen* ObjTabelle::zARahmen() const
  1336. {
  1337. return aRam;
  1338. }
  1339. AlphaFeld* ObjTabelle::getAAlphaFeld() const // returns the selection AlphaFeld
  1340. {
  1341. return aAf ? dynamic_cast<AlphaFeld*>(aAf->getThis()) : 0;
  1342. }
  1343. AlphaFeld* ObjTabelle::zAAlphaFeld() const
  1344. {
  1345. return aAf;
  1346. }
  1347. Rahmen* ObjTabelle::getARahmen(
  1348. int sNum, int zNum) const // returns the selection border
  1349. {
  1350. RCArray<Rahmen>* tmp = msaRam->z(sNum);
  1351. return tmp ? tmp->get(zNum) : 0;
  1352. }
  1353. Rahmen* ObjTabelle::zARahmen(int sNum, int zNum) const
  1354. {
  1355. RCArray<Rahmen>* tmp = msaRam->z(sNum);
  1356. return tmp ? tmp->z(zNum) : 0;
  1357. }
  1358. AlphaFeld* ObjTabelle::getAAlphaFeld(
  1359. int sNum, int zNum) const // returns the selection AlphaFeld
  1360. {
  1361. RCArray<AlphaFeld>* tmp = msaAf->z(sNum);
  1362. return tmp ? tmp->get(zNum) : 0;
  1363. }
  1364. AlphaFeld* ObjTabelle::zAAlphaFeld(int sNum, int zNum) const
  1365. {
  1366. return msaAf->z(sNum) ? msaAf->z(sNum)->z(zNum) : 0;
  1367. }
  1368. Rahmen* ObjTabelle::getARahmen(const char* spaltenName,
  1369. const char* zeilenName) const // returns the selection border
  1370. {
  1371. return getARahmen(
  1372. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1373. }
  1374. Rahmen* ObjTabelle::zARahmen(
  1375. const char* spaltenName, const char* zeilenName) const
  1376. {
  1377. return zARahmen(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1378. }
  1379. AlphaFeld* ObjTabelle::getAAlphaFeld(const char* spaltenName,
  1380. const char* zeilenName) const // returns the selection AlphaFeld
  1381. {
  1382. return getAAlphaFeld(
  1383. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1384. }
  1385. AlphaFeld* ObjTabelle::zAAlphaFeld(
  1386. const char* spaltenName, const char* zeilenName) const
  1387. {
  1388. return zAAlphaFeld(
  1389. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1390. }
  1391. Rahmen* ObjTabelle::getARahmen(
  1392. Text* spaltenName, Text* zeilenName) const // returns the selection border
  1393. {
  1394. return getARahmen(
  1395. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1396. }
  1397. Rahmen* ObjTabelle::zARahmen(Text* spaltenName, Text* zeilenName) const
  1398. {
  1399. return zARahmen(getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1400. }
  1401. AlphaFeld* ObjTabelle::getAAlphaFeld(Text* spaltenName,
  1402. Text* zeilenName) const // returns the selection AlphaFeld
  1403. {
  1404. return getAAlphaFeld(
  1405. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1406. }
  1407. AlphaFeld* ObjTabelle::zAAlphaFeld(Text* spaltenName, Text* zeilenName) const
  1408. {
  1409. return zAAlphaFeld(
  1410. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName));
  1411. }
  1412. bool ObjTabelle::hatMsStyle(
  1413. int sNum, int zNum, __int64 style) const // checks if style is present
  1414. {
  1415. __int64 s = styles->z(sNum) && styles->z(sNum)->hat(zNum)
  1416. ? styles->z(sNum)->get(zNum)
  1417. : 0;
  1418. return (s | style) == s;
  1419. }
  1420. bool ObjTabelle::hatMsStyleNicht(int sNum,
  1421. int zNum,
  1422. __int64 style) const // checks if style is not present
  1423. {
  1424. __int64 s = styles->z(sNum) && styles->z(sNum)->hat(zNum)
  1425. ? styles->z(sNum)->get(zNum)
  1426. : 0;
  1427. return (s | style) != s;
  1428. }
  1429. bool ObjTabelle::hatMsStyle(const char* spaltenName,
  1430. const char* zeilenName,
  1431. __int64 style) const // checks if style is present
  1432. {
  1433. return hatMsStyle(
  1434. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1435. }
  1436. bool ObjTabelle::hatMsStyleNicht(const char* spaltenName,
  1437. const char* zeilenName,
  1438. __int64 style) const // checks if style is not present
  1439. {
  1440. return hatMsStyleNicht(
  1441. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1442. }
  1443. bool ObjTabelle::hatMsStyle(Text* spaltenName,
  1444. Text* zeilenName,
  1445. __int64 style) const // checks if style is present
  1446. {
  1447. return hatMsStyle(
  1448. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1449. }
  1450. bool ObjTabelle::hatMsStyleNicht(Text* spaltenName,
  1451. Text* zeilenName,
  1452. __int64 style) const // checks if style is not present
  1453. {
  1454. return hatMsStyleNicht(
  1455. getSpaltenNummer(spaltenName), getZeilenNummer(zeilenName), style);
  1456. }
  1457. Zeichnung* ObjTabelle::dublizieren() const // Creates a copy of the table
  1458. {
  1459. ObjTabelle* obj = new ObjTabelle();
  1460. obj->setPosition(pos);
  1461. obj->setSize(gr);
  1462. obj->setMausEreignisParameter(makParam);
  1463. obj->setTastaturEreignisParameter(takParam);
  1464. obj->setMausEreignis(mak);
  1465. obj->setTastaturEreignis(tak);
  1466. if (toolTip) obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
  1467. obj->setStyle(style);
  1468. if (rahmen) obj->setRahmenZ((Rahmen*)rahmen->dublizieren());
  1469. obj->setHintergrundFarbe(hintergrundFarbe);
  1470. if (hintergrundBild)
  1471. obj->setHintergrundBild(
  1472. dynamic_cast<Bild*>(hintergrundBild->getThis()));
  1473. if (hintergrundFeld)
  1474. obj->setAlphaFeldZ((AlphaFeld*)hintergrundFeld->dublizieren());
  1475. obj->setRasterFarbe(rasterFarbe);
  1476. obj->setRasterBreite(rasterBreite);
  1477. if (aRam) obj->setARahmenZ((Rahmen*)aRam->dublizieren());
  1478. if (aAf) obj->setAAlphaFeldZ((AlphaFeld*)aAf->dublizieren());
  1479. for (int s = 0; s < spaltenAnzahl; ++s)
  1480. {
  1481. obj->addSpalte(spaltenNamen->get(s));
  1482. if (spaltenBreite->hat(s))
  1483. obj->setSpaltenBreite(s, spaltenBreite->get(s));
  1484. if (minSpaltenBreite->hat(s))
  1485. obj->setMinSpaltenBreite(s, minSpaltenBreite->get(s));
  1486. if (maxSpaltenBreite->hat(s))
  1487. obj->setMaxSpaltenBreite(s, maxSpaltenBreite->get(s));
  1488. for (int z = 0; z < zeilenAnzahl; ++z)
  1489. {
  1490. if (!s)
  1491. {
  1492. obj->addZeile(zeilenNamen->get(z));
  1493. if (zeilenHeight->hat(z))
  1494. obj->setZeilenHeight(z, zeilenHeight->get(z));
  1495. if (minZeilenHeight->hat(z))
  1496. obj->setMinZeilenHeight(z, minZeilenHeight->get(z));
  1497. if (maxZeilenHeight->hat(z))
  1498. obj->setMaxZeilenHeight(z, maxZeilenHeight->get(z));
  1499. }
  1500. if (members->z(s) && members->z(s)->hat(z))
  1501. obj->setZeichnungZ(s, z, members->z(s)->get(z));
  1502. if (styles->z(s) && styles->z(s)->hat(z))
  1503. obj->setMsStyle(s, z, styles->z(s)->get(z));
  1504. if (msaRam->z(s) && msaRam->z(s)->z(z))
  1505. obj->setARahmenZ(
  1506. s, z, (Rahmen*)msaRam->z(s)->z(z)->dublizieren());
  1507. if (msaAf->z(s) && msaAf->z(s)->z(z))
  1508. obj->setAAlphaFeldZ(
  1509. s, z, (AlphaFeld*)msaAf->z(s)->z(z)->dublizieren());
  1510. }
  1511. }
  1512. obj->setAuswahl(selected.x, selected.y);
  1513. return obj;
  1514. }