From 432b705be808a3a1999a8a96167ceac5ce9dbdb7 Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 7 Apr 2013 09:38:55 +0000 Subject: [PATCH] .uppdev git-svn-id: svn://ultimatepp.org/upp/trunk@5963 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppdev/AccessKey/bak.tpp/uloha$en-us.tpp | 2921 +++++++++++++++++++++- uppdev/RichEditTest/main.cpp | 5 +- 2 files changed, 2919 insertions(+), 7 deletions(-) diff --git a/uppdev/AccessKey/bak.tpp/uloha$en-us.tpp b/uppdev/AccessKey/bak.tpp/uloha$en-us.tpp index c594fae90..1144341a0 100644 --- a/uppdev/AccessKey/bak.tpp/uloha$en-us.tpp +++ b/uppdev/AccessKey/bak.tpp/uloha$en-us.tpp @@ -1,9 +1,2918 @@ topic "Honzík má 3 krát víc náklaďáků než Pepík a o 5 víc aut než Radek. Radek má polovinu náklaďáků než Honzík a dvojnásobek aut než Pepík. Pepík má 4 náklaďáky a 2 auta."; [ $$0,0#00000000000000000000000000000000:Default] -[{_}%CS-CZ -[s0; Honzík má 3 krát víc náklaďáků než Pepík a o 5 víc -aut než Radek. Radek má polovinu náklaďáků než Honzík -a dvojnásobek aut než Pepík. Pepík má 4 náklaďáky a 2 -auta.&] +[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483370:item] +[i448;a25;kKO9;2 $$2,0#37138531426314131252341829483380:class] +[0 $$3,0#96390100711032703541132217272105:end] +[b42;2 $$4,4#13035079074754324216151401829390:normal] +[l288;2 $$5,5#27521748481378242620020725143825:desc] +[H6;0 $$6,0#05600065144404261032431302351956:begin] +[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param] +[{_}%EN-US +[s0;2%- &] +[ {{10000t/25b/25@3 [s0;%- [*@(229)4 ArrayCtrl]]}}&] +[s1;K%- &] +[s0; +@@image:2362&1443 +΁ݱ堦Ȃ͟۴̓٧ږБΩ٢ +歊ώݽԻبݳӓ΃̽ݽ +䛤؇ن䛀ȶŁ퀢٪ț؇ن䛀ȋ퀢ن؇ن +ђ䛿ަソΧ᧾ڊԉˡܟ㱫緘 +ȶίԓŊ؎نߝڨ +Ώ߶ܙ򉩰̒௓̶ +˥ΕݳÝ򟟟֦åοȨⅻ񁐩 +⁆ʯ럝Śח˶ҴڠۊօЈ +ˏśߩ媸̗䩊ԞߡՂ͔ﭜɥ +׍޺Ѡ⨃ݽݚ󑧨ݼ͠šɢ‌ +ڸ辊˿ۨА밻یȕɍ“ʅϠ疙킭 +ͺ닒咥驴ٟӺ茙킭Țͺŋɗ˥ +߭ǀŕͩدײͯ˶Çߐ中Ւө +אָΕԉӌ򞱾ݩܱŞҿĹϯԗ͌һ +ݪӿ󜯡ʴŮѦߦʁˊԜӎ +ԛ֧ӫҌ郏ՂنĶ́Ɵ뻴 +ҴӤ넰ŏۗƺҴ缮Թчௐ +ͶȳLJᶢʝϴ궰曛 +㮹ѡϼʏєǓϞח檎ԫƅ +̔Ȗ蘟结߶북ܐ˿լºÆ +ݪъ䛞؇͟Փ֝Ҝӑ؇鷔Ư؇ +ζε҆֝㯯̶ζ퀢ن䛤؇ن +䛀ȶͰнޝƋջحҦ +ʀҦʀҦ +ͫπδ轠ЙʶÙӆ̛襸 +΀ن͜ЊЁΛնŶۀېӆڑ픀郳ȶȶ䴁䛀 +ننЊ솃ЋΛŶŶۀېӆёȜ郭˶πկ +ן퓺ԝȶӴׇ֞϶Ȥ郭ۄïȶ +¶郭یĩބ聋ۀζ䴁֞şܲ +Λ٦؁ËײỪֿߴ醲 +ɧ٭НՇՕ郅ɶ󕤁 +ֈÏίץؾ콠ЙЈցүᴽݺ +辙ы׺ˊš췞Ҡܜȣȼϯŋ̉ئ +ίڧςʕߩ쎅봁֊ݰ +γťɍ՚ÔÝ­륚ͬъ +ĄӆکűǧϋØֵ⏾׻ݓҍוγß +ŦҜÎ˪Ž𵣗賤ߩ苓פ͡䷯ݪԺՀރ +򃭔ּٱōچ⵩啫ņ +ݣݺ契ܔ⃘՜Һӆڙ͞ʹѷ徿 +ߦϩހޤ郭֭㭇ަϕɩ +䠰؍ƶܧݪѺߧ၎䛲 +ɭûҩ眽ҊdžݒóϽ服 +۟˜̬߾嘰Ōݤף寧יʣ˥ՃՊ +ރɝ郭ϭɕʇֿȷɑߘ̏૔䴌׿콠Й +λ鏞æ兀˵ը +ߕȺLJ޵ߝĕݷ뿴ۆԤٕ +թט郭˶݁郭ȶˮѲͶ۬ +߹ɶӴ䛥׸طنЊ亃ېӆثٛЊ샃ЋΛŶŶէۀ +΢ېӆڑ惭ȶȎ䴁䛡ɶ䴁֞؆ރ郭͔ +އ΍Іδʀ謽Йز홽ݶއ +ьƷ؟ۖز홽ݶއь +Ʒ؟ۖπջǕ͖뷎ދޱ +ם޽޽ۮDzЉ켓ȶȶѿ뎽߄ă +ȶȶіǽ߄샬ȶȶі뎽߄샬ȶȶі돎߄샬 +ȶі뎽ߑ샬ȶі뎽߄⬄˶կ +쉳܃켓ͬͶ킰 +ꍰʹźܙߧҐ٦ݱĶՉɋғنɶ +۬ƶ墭ם珏 +ޭ̚ͷۼߝȶі뎟ģͺǗ +̈ӊ痔ܙ̛œ +˗ِ䥌ݸؚݻﷱؽӤҙŸ +١Ǘڧž߿狰Ͳʹă҅۸ʧ€݉ާՊ +֐ʘ߃ǽʇҲߚĘҚѻȶߖ뎽 +쳼艹ęӊۢرͼیԾ͕ˤ +򯯯̡Ƕ٦Ԍۜ򪔗˶쓞ͼۤßӾײ +గʹ嵺ϓӟქۤۮͶ +ρ׾ǖןϗԩӝ䵛φՔ׬ +ҵӲʶܦ߾烦ϥۊϿ봱¤ǯ +胢٦ݱۨܵ򞐟֖뗶Ԕ񐔇ޱ园ם˃Х +աҎԜǽʦ +¨ҹʟچ嫓ǧҼЁ̡ +ۮղʹ﷡Ȁۮһʹ﷡ۀۮ״ﷱ +샬ȶі뎽߄⬄ȶȶі뎽߄샬켓ȶȶ +뎽߄ăȶȶі׽ēݱݻ庺ѻ֘׻ +􅰮ߖ뎽ދޱśם홽ݶވƷ؟ +۲홽ݶވƷ؟ +۲홽ߵēݱܻηѻջ +͖뷎ދޱםۥʹ庒﷡ۀҡۮ +ʹ﷢ۀۮꍰʹ奺﷡ۀۮݲʹķۀ +ۮղʹ﷡Ȁۮһʹ﷡ۀۮ +˪Σ˿ʙ폹ͼʶ +םϩج샏ҢۮҮȂ +󊳷ćͼ۔ġ܊兛ȶі뎟 +ë٦ݱ趹㟟ƮݻԔͷ +֒骬֗䵛٦Ϗ󽥅¨ޜƕ +ϊȔҦޥթֲËȄũޱם㺺ʯ +񴽔ߍ苠¸ۜᎊ𰻞禦訽 +څۊ⊴ɺı֭Ęͳͽ֜з +Ňїǽř袢ﶙΌǾȇξѾکΑ͒ +Ӽ禬פȧ˃ھؙɰԤ +ۄם襛톓̿ӌӕɉچ̶޺Ƕ٦ +ח˶޷흧ɦȖ̼֡٨ +ֆ袕۹͙կۇݶܺ +͔ɭեӜѺǗ񥅴켓ͺܹ +ӟ̆ﵽˋ֧ϐʭםܶɟ׌앁ޟ +߳Ā޻ߺˑȎіͼᶸ +ƈ翀좯φӑגϓЗץؠݻ +Ó粯ϥנ˛ۿүŃɶ訽袥 +目ޏť֌Қɟۼљ낆爍 +쮄դͺ񱦦lj᫦ͫΡԮɨɶі +˶򧋏ͧÓʹÓʹÓꍰʹ婺ÓʹÓղʹ +ÓȶȶіԎȶζіȶіȶȶіȶȶӖȶȶі +ȶȶіȶȶіͼޱםݜÓ +͖݁퀀ʀ퀀ҵ퀀퀀퀥퀀퀀ʀ퀀 +ҵ퀀퀀퀥퀀퀀튀Іδсʀ轠Й +Ùȇӆőȶ䣴䛀ՠنٛЊ +ЋΛŶŶէۀ΢ېӆڑ惭ȶȎ䴁䛡Թن +نЊЋ޹Қ͏ʸ߭вӅϟ +ˋ⦛نݜؤղۍܿݕǓ˶ߏ +מ˜ڶ⟦Կ̲ۤ鴌Ɋ›ڊؾنʼ +ӄ۵۹ȴŰ囫ݒªۓ˪ؿ +識܂Ѫ؈Ł˗쁁Λ޶ɱϑ±ݐη驴 +á𤭤Ůރ郹𶦔Ƌѩ۱ +ʣ䍫Χʰ·ש׌Գ´٦͘сܾۼ +囚ʻί緆גԜʭ̪ë郭ζЋ¢ߚ̰ +Əщ⣻ݔϠʚ󿱽ࣳ© +挞׹Ų圭ئنʝ٦ÊԮԶ +ڔЫÀͲ틠٦ΚӋ϶ߐ䘢攡 +߸򁲱Ÿ漣׌Ժݸϙ٪襾֔δ +֪Ճ޲򻣌ě̹ɇ꽠Й͹ +ɆŗֻձҴ𻅗Փ郭ȚΟ +Ҷۈېӆڙ迚펦ٝ +ۤېڙʟߔѿʭ쓗ը͓ +Εȶ䴁䖳ѓͪų֣իÇ䟓œ +ȚȽΧЂȬʓӐތʫޤ郭֭ +淝隫榪ɘŸʫէȜ郭ܙ +׻Ȭ郭ȶېӆڑ풞߭ΛŶ҆ +ȶ䴁郭ۄΛŶŶۀېӆё郭ȶ +ȶ䴁›نݠنЙʓއІδ +сʀ轠ЙÙȇӆҵ퀀퀀퀥퀀퀀ʀ퀀ҵ퀀 +퀀퀥퀀퀀ʀ퀀ҵ퀀菈ҩІδʀ轠 +ÙŀĆőෝȶ䴁›نݠن +ЋΛŶŶۀېĆڑ郭ȶȶ䴁䛀䛒 +ننЊЋΛɁ눪ըٛɶ䴁϶ +٦ׅݲ̶룵ن٦ȅǧ +˯˴̕競ɧΧҼ֯Ւܙ҄Ԝǧ +轿˵郭ܙ҄Ԝݣ֦åĿ識ހϱӪрҥԖ +ҰʦԸؓنʽ٦Ҿﴑ‚阍‚ݦ +ރ郭ǁ屡ݝț߽ΕԦ҉Ƌת֛տ +őק͍ʽƷϤќ동ʕχڰ +۪񴎤˥ǯӯЄסȡėχ锼ܚڰ۪ +ɧ캭Ӻ茙暮ȶ֝ܛ٦Ξ +ǧҶڪȕ캎Ž׋݁ݲ¸ +Щ펓Ѽϱ轠ߊ⬕įគ +ر轠ߊى­͟Ȭ޶Ş֢ +جۤ۽ƣ̶βƌ鹾ȫݰ +ۀنƶ钔孚˷ނۀنע”Ϋ +ᶢѫ̶βμƭ٦о̼삀 +ꑘ΁迓۪قʕϴಔʶ짃ߓ +Β٥ѹ꫑ܔèԀҶȶͩ +º޵НҀȶɶڀˣ۳޷ܱě盀 +نŶѐ䛀ن٨Ńʀ +Խ +Ќ샀샀샪Ӵ +&] +[s0;*@3%- &] +[s2;:ArrayCtrl`:`:class:%- [@(0.0.255)3 class][3 _][*3 ArrayCtrl][3 _:_][@(0.0.255)3 public][3 _][*@3;3 C +trl]&] +[s2; &] +[s0; [* +@@image:1843&731 +ώĎОހፀ񈀹ܐ¤Ȑʲݢ歐ň +ˮʫݳ۽ߡ섂󝰏ĥ퐗™ +Ӛ񔠛鷾ʬߝݾ΀諒ےˏ· +ɴЮ߶М⎩җݭϹ뭝ǯ +׳膱ۮй߼ЅכʴŞ˕ݖ +ӽݸɮࣦ΄ٯ臗呹ݩǐ +ز׹وɀح̗בӽ +לΫ痻̜Ɛæ벼تԬɿă +ߗՑ螦ٴʈĕ󺪡򏷱뻿 +ί̹˿򯽼󈄢ʨΤ +訄Ǚ׽֠퟉߇ۏş޻مƵϗΨ +ЉۃĆ狶μΉԯɕ苾ʉܿ +ۭеݼǓȡշޥdž߻ӌ +爻㫪ҟ㗟ݔυ޽ϞˬņΣܾʼ +йѹݗijۦ˒콜ϭ陆 +޸貞àʾچ֧ŜҺրפ嘺 +˺׸ЕȪˠݣ§Еӄɨ +՜ɛܝ怺Ջκ݉逺Π݉逺Ĝ瘟ֆÆ +ЕǓì̤ڛꦍ݉ɛɋᖦҿݭǝ郺ᢎ +꧵ٜɋᖦҿݫҥֈԭ٘ȝў +Ӑ蒝Јܸܙט㌳ЅߧɏЪϸǓӠ̤혌㻀 +ʨ٘ȝܱ輡רĜ瘅ԡċ֏Ǚᢐꇮȩ +٘ĽǙܣᮃîЕǓɇ頫 +怺ԟüΤͩʄױ݉Љ򈎳ЯעĂˠ뉬—ј +ړ褅衪Ծ㻥ߧ·Ԣҝӆ +ԖڈǼԢڀ䘰᢯ĭ檕чۘ鸞֞ϕڈǩ +ǢꏝȗےܲژȡыҞЅ‡̮ܻ褅񊓵 +á틵ȗ褧衪怆ݐҌ˘̭ԟ훩 +Īލç䵐Әŏ銗ٲ¤ĭĪՅ첌 +Ȇڲע…Ă³ńµ²ខ怺 +Ľ՚Ղ➔͚Ъ؀Ҁ݉郺ᢎ¾꧵ +ݦū振޹郺ᢎĺĴݙ鮙ꊺǓì̤؛Ѥ +ΰ穀вԖǗԐǓӠä̤蔏ȗЀϷΰ +Ĝ瘅ԡއŠ꯵ԭ٘ȝڱҒ򲣄Ǚ +ܠ޲ǝ򲦌Ĝ瘅ԡžѽ褅ΰѐʡ +郺ᢎ꧵ѽ褅͚ԞĽκ݉ +˸펷ӽƄń璪ӭĨǙ溒溒م +՘䎕ދ֞ӕȰ޴踅ڡխ͵یˉߕɼۙژݸ +ы͞ɕјȐ롆ЕȌދڱ踅խݮlj +ܣɛɋĠ㔦Փ˸ÙȰҡދ踋ճՁѪ +ɋģ㔦Ê턺燄 +]&] +[s0;* &] +[s0; [* ArrayCtrl] implements basic grid functionality. It is typically +used for display and editation of arrays of values or (heterogeneous) +records. The records correspond to rows in the array, the individual +fields within each record can be either bound to columns or to +any generic [* Ctrl]`'s, thus supporting basic master`-detail functionality +with practically no additional cost.&] [s0; &] -[s0; Kolik aut a náklaďáků mají dohromady?] \ No newline at end of file +[s0; The standard derived classes extend various aspects of the ArrayCtrl +functionality. [* SqlArray] adds the nuts and bolts needed for +editing SQL`-based tables, whereas [* PopupTable] couples the ArrayCtrl +functionality with the drop`-down mechanism very similar to the +one used in popup menus. This opens the door for implementing +drop`-down controls like [* DropList] (aka [/ combo box]) or [* DropChoice] +(usually used together with a control of the [* EditField ]or [* DataPusher] +family to support coupling native data editation with drop`-down +selection, widely used for history or commonly used predefined +values. The [* ArrayPair] is, as its name implies, a pair of [* ArrayCtrl]`'s +with arrow buttons between them allowing to visually select subsets +of a certain set by moving its elements between the two lists.&] +[s0; &] +[s0; [*+117 The array data organization: indices and columns]&] +[s0; &] +[s0; There is a great deal of genericity supported by the ArrayCtrl +with respect both to its source data and its visual presentation. +Conceptually, the source array data is a matrix of [* Value]`'s. +There is a series of methods for accessing this source data, +the basic ones being [* Set] and [* Get]. The rows are addressed +by integer indices (zero based), the columns can be addressed +either by integer indices as well, or alternatively any source +column can be assigned an [* Id] identifier and addressed by it. +This is especially helpful in SQL`-based tables, where the table +column names can be used for the [* Id]`'s. A pair of methods, +[* GetPos] and [* GetId], can be used to translate these two column +addressing modes. In the code terminology, the columns in the +source data matrix are called [/ indices] whereas the visual (output) +columns are called simply [/ columns].&] +[s0; &] +[s0; The visual ArrayCtrl structure can be entirely independent of +the source data strucrure (although it`'s seldom helpful to make +the mapping completely arbitrary). Basically, each column can +have an arbitrary number of indices defining its source data. +Of course, the most common case is one index per column. This +is also simplest to address, because the column indices are equal +to the source data indices. However, many other combinations +are possible, each of which can be handy in certain situations:&] +[s0; &] +[s0;i150;O0; Index without a column: the most common of the `"special`" +cases is used mainly for row id`'s or other internally important +data without visual representation. The same behaviour can be +obtained by making a column invisible.&] +[s0;i150;O0; Column without an index (a [/ rownum column]): this less +common case can be used to display external data (not stored +in the table). &] +[s0;i150;O0; Multiple columns sharing the same index: this can be +used to display various aspects of a complex data object or to +display the same source data in multiple ways (e.g., a temperature +reading in Celsius and Fahrenheit degrees).&] +[s0;i150;O0; Column with multiple indices: can be used to display +information gathered from multiple source data columns. This +is used for instance in IconDes in TheIDE to display image identifiers +together with their sizes in the list. This is the most complicated +case because you have to implement a specific [* Display] for such +a multi`-index column.&] +[s0; &] +[s0; [* Note:] in the current U`+`+ version, the implementation of index`-less +columns (arrays with external data not stored in the source matrix) +is rather awkward. It is planned to enhance this feature in the +future by adding support for access to external data via a data +accessor interface object. &] +[s0; &] +[s0; [*+117 ArrayCtrl GUI: selection, editation, and local menu]&] +[s0; &] +[s0; Array rows can be selected using the mouse or keyboard. ArrayCtrl`'s +support both single`-selection (plain cursor) and multiselection +model. Of course, row selection can be controlled via the programmatic +array interface as well. The selection and cursor always spans +entire rows, it is not possible (without substantical patchwork) +to select only certain columns or individual cells.&] +[s0; &] +[s0; The ArrayCtrl rows can be inserted, edited and deleted either +programmatically, or via common GUI elements (mouse and keyboard +selection, local menu). It is possible to alter the standard +ArrayCtrl local menu using the [* WhenBar] callback.&] +[s0; &] +[s0; [* Note:] it is worth noting that the standard editation keys ([* Insert] +`= row insertion, [* Ctrl`+Enter] `= editation and [* Ctrl`+Delete] +`= deletion) are not hardcoded in the ArrayCtrl`'s [* Key] method, +they are mere hotkeys for the relevant local menu items. When +you change the ArrayCtrl`'s local menu, the editation hotkeys +change accordingly.&] +[s0; &] +[s0; A special but rather important case of array editation is [/ sorting]: +there is no specific standard GUI for that. If you aren`'t content +with programmatic sorting (e.g. after opening a dialog or after +loading the array data), you have to implement some GUI for that +as well. In certain cases, it is cool to use the [* HeaderCtrl] +[* WhenAction] method to allow sorting the array by clicking on +the header columns; alternatively you can add a sort function +to the array local menu or possibly somewhere else (like a standalone +button in the dialog).&] +[s0; &] +[s0; [* Insertion tricks: before, after, and the secrets of the AppendLine]&] +[s0; &] +[s0; In todays text editors, when you type a new letter, it is trivial +to see where in the text will the new letter go. This is so because +the caret is always positioned between a pair of successive letters +and thus is well defines the insertion spot. Additionally, the +caret can be placed in front of the first letter or after the +last letter, which naturally allows typing some text at the very +beginning or end.&] +[s0; &] +[s0; When inserting new rows into the array controls, things are +a bit more tricky. This is so because, unlike in the text editor, +the cursor is not placed [/ between] two successive rows, but [/ over] +a certain row. This is of course necessary to make row editing +possible (note that in the aforementioned text editor analogy, +a single letter is an atomic object whereas in the array it is +a potentially complex structure consisting of many columns and +data items). However, when it comes to row insertion, it has +two main troubles as its implication:&] +[s0; &] +[s0;i150;O9; [* 1.]-|It is necessary to decide somehow whether the new +row will go [/ above] or [/ below] the cursor row.&] +[s0;i150;O9; [* 2.]-|In an array with [/ n] rows, there are [/ n`+1] possible +locations for a new row (before the row #0, #1 ... #([/ n`-1]) +and after the last row), but only [/ n] distinct cursor locations.&] +[s0; &] +[s0; Over the years, during the development of U`+`+, we experimented +with multiple ways to overcome these logical problems. As a result +of this, the ArrayCtrl supports a few methods allowing to fine`-tune +the row insertion mechanism. It is also worth noting that there +are cases, like in the case of SQL`-based tables, where the row +ordering is arbitrary or implicit and the exact `'location`' +of a new row doesn`'t make any sense. In such cases, it is possible +to replace array [/ insertion] function with the [/ append] function +emphasizing the fact that the visual row order is unimportant +and that insertion means merely adding a new record to the record +set.&] +[s0; &] +[s0; For arrays in which the order is important, there are two ways +to solve the [/ n`+1] row positions dilemma:&] +[s0; &] +[s0;i150;O9; [* 1.]-|Replacing the Insert function with a pair of functions +for inserting a new row [/ before] / [/ after] the current row.&] +[s0;i150;O9; [* 2.]-|Visually extending the array by adding a pseudo`-row +with no real data at its end; this creates the [/ n`+1]`-th cursor +position necessary to denote all the available row insertion +locations.&] +[s0; &] +[s0; In the first case, it is also possible to select which of the +insertion functions (before / after) takes precedence (which +of the two actions should be bound to the standard [* Insert] hotkey). +This corresponds to the [* BeforeAfterInserting] and [* AfterBeforeInserting] +methods. The second case is called the [* AppendLine] and is activated +by setting the property with the same name.&] +[s0; &] +[s0; To make all this even more interesting, a special mechanism +called [* InsertAppend] is available to make array filling as easy +as possible. When activated and the user appends a new row at +the table end, after pressing [* Enter] (to commit the inserted +row) another row is automatically added after it and opened for +editing. This mechanism is turned on by default, but it can be +disable by setting the [* NoInsertAppend] property to true.&] +[s3; &] +[s0; &] +[s0;%- &] +[ {{10000t/25b/25@3 [s0;%- [*@(229)4 Categorized method summary]]}}&] +[s4; The following table summarizes ArrayCtrl methods according to +the aspect of functionality they support together with a very +brief description. For more thorough documentation of the individual +methods see below.&] +[s0; &] +[ {{2337:7663-1 [s0; [* Initialization and configuration]] +:: [s0;%- ] +:: [s0; Reset] +:: [s0; clears column `& index definition and restores all ArrayCtrl +default properties] +:: [s0; IsEdit] +:: [s0; true `= array state automaton is currently in row editing mode] +:: [s0; IsInsert] +:: [s0; true `= array state automaton is currently in row insertion +mode] +:: [s0; SetLineCy] +:: [s0; sets array row height (global or individual for a single row)] +:: [s0; GetLineCy] +:: [s0; returns logical array row height (value set by preceding SetLineCy)] +:: [s0; GetLineY] +:: [s0; returns [/ y] position of given row (relative to table beginning)] +:: [s0; `[No`]AppendLine] +:: [s0; `[do not`] display an additional pseudo`-row used for row insertion] +:: [s0; IsAppendLine] +:: [s0; returns actual value of the [* AppendLine] property] +:: [s0; ShowAppendLine] +:: [s0; scrolls the table view to display the appending line] +:: [s0; `[No`]Inserting] +:: [s0; `[do not`] allow inserting new rows] +:: [s0; IsInserting] +:: [s0; returns actual value of the [* Inserting] property] +:: [s0; BeforeAfterInserting] +:: [s0; allow inserting rows before / after current row (default `= +before)] +:: [s0; AfterBeforeInserting] +:: [s0; allow inserting rows before / after current row (default `= +after)] +:: [s0; NoInsertAppend] +:: [s0; do not autoinsert another row after committing last row insertion] +:: [s0; IsEditing] +:: [s0; true `= (at least one column of the) ArrayCtrl supports editing] +:: [s0; `[No`]Duplicating] +:: [s0; `[do not`] allow row duplication] +:: [s0; IsDuplicating] +:: [s0; returns actual value of the [* Duplicating] property] +:: [s0; Appending] +:: [s0; allow appending new row at the table end] +:: [s0; IsAppending] +:: [s0; returns actual state of the [* Appending] property] +:: [s0; AutoAppending] +:: [s0; allow appending new row at the table end, Enter appends another +one] +:: [s0; IsAutoAppending] +:: [s0; returns actual state of [* AutoAppending] property] +:: [s0; `[No`]Removing] +:: [s0; `[do not`] allow table row removing] +:: [s0; IsRemoving] +:: [s0; returns actual state of the [* Removing] property] +:: [s0; `[No`]AskRemove] +:: [s0; `[do not`] prompt user to confirm row removal] +:: [s0; IsAskRemove] +:: [s0; returns actual state of the [* AskRemove] property] +:: [s0; Moving] +:: [s0; allow row swapping (moving a row before / after neighbouring +row)] +:: [s0; IsMoving] +:: [s0; returns actual state of the [* Moving] property] +:: [s0; `[No`]Header] +:: [s0; `[do not`] display table header] +:: [s0; `[No`]Track] +:: [s0; `[do not`] animate tracking table column widths] +:: [s0; `[No`]VertGrid] +:: [s0; `[do not`] display column breaks] +:: [s0; `[No`]HorzGrid] +:: [s0; `[do not`] display row breaks] +:: [s0; `[No`]Grid] +:: [s0; `[do not`] display both grids (VertGrid `+ HorzGrid)] +:: [s0; GridColor] +:: [s0; set grid line color] +:: [s0; EvenRowColor] +:: [s0; background color for even rows] +:: [s0; OddRowColor] +:: [s0; background color for odd rows] +:: [s0; RowFormat] +:: [s0; formats menu items substituting given word for the term `'row`'] +:: [s0; RowName] +:: [s0; sets the context`-relevant word to substitute for `'row`' in +the local menu texts] +:: [s0; NoCursor] +:: [s0; do not highlight cursor row] +:: [s0; `[No`]MouseMoveCursor] +:: [s0; automatically move cursor as the mouse moves (used e.g. in PopupTable)] +:: [s0; `[No`]AutoHideSb] +:: [s0; `[do not`] display scroll bar only when necessary] +:: [s0; MultiSelect] +:: [s0; enable selecting multiple rows at the same time] +:: [s0; ColumnWidths] +:: [s0; sets logical column widths using a formatted string, e.g. `"1 +5 10 10 5 1`"]}}&] +[s0; &] +[ {{2337:7663-1 [s0; [* Array index `& column structure management]] +:: [s0;%- ] +:: [s0; IndexInfo] +:: [s0; returns the [* IdInfo] structure describing an index (see below)] +:: [s0; AddIndex] +:: [s0; adds a new index to the source data matrix] +:: [s0; GetIndexCount] +:: [s0; returns number of index columns (columns in the source data +matrix)] +:: [s0; GetId] +:: [s0; returns identifier of a given index (given by its integral index)] +:: [s0; GetPos] +:: [s0; returns integral index of source matrix column ([/ index]) identified +by an [* Id]] +:: [s0; SetId] +:: [s0; sets the [* Id] identifier for a given index (column of the source +matrix)] +:: [s0; AddKey] +:: [s0; sets up the first index to act as primary key (often used for +SQL tables)] +:: [s0; GetKeyId] +:: [s0; returns primary key identifier (equal to [* GetId(0)])] +:: [s0; AddColumn] +:: [s0; adds a column`-index pair to the table (one data column, one +output column)] +:: [s0; AddColumnAt] +:: [s0; adds a column bound to a given index] +:: [s0; AddRowNumColumn] +:: [s0; adds a column without an index (used for external data)] +:: [s0; GetColumnCount] +:: [s0; returns number of (visual) columns in the table] +:: [s0; FindColumnWithPos] +:: [s0; locates table column according to given index number] +:: [s0; FindColumnWithId] +:: [s0; locates table column according to index identifier] +:: [s0; ColumnAt] +:: [s0; returns the [* ArrayCtrl`::Column] structure describing given column] +:: [s0; HeaderTab] +:: [s0; returns the [* HeaderCtrl`::Column] structure for the given column] +:: [s0; HeaderObject] +:: [s0; returns a reference to the [* HeaderCtrl] object for this table] +:: [s0; SerializeHeader] +:: [s0; serialize header layout information (column widths etc.)] +:: [s0; AddCtrl] +:: [s0; adds an outer control`-index pair to the table (one data column, +one outer Ctrl)] +:: [s0; AddCtrlAt] +:: [s0; adds an outer control bound to a given index] +:: [s0; AddRowNumCtrl] +:: [s0; adds an outer control without an index `- used ([/ seldom]) for +external data] +:: [s0; SetDisplay] +:: [s0; sets display for a given table column or cell] +:: [s0; GetDisplay] +:: [s0; returns column / cell display] +:: [s0; SetCtrl] +:: [s0; sets a [* Ctrl] object for custom editation of a given cell] +:: [s0; GetTotalCy] +:: [s0; returns total row height] +:: [s0; GetLineAt] +:: [s0; locate table row when given an [/ y] position (relative to table +top)] +:: [s0; GetClickColumn] +:: [s0; returns column number of last clicked column (Null if clicked +outside existing rows)] +:: [s0; GetClickRow] +:: [s0; returns row number of last clicked row (Null if clicked outside +existing rows)] +:: [s0; GetClickPos] +:: [s0; returns Point(GetClickColumn(), GetClickRow())]}}&] +[s0; &] +[ {{2337:7663-1 [s0; [* Data setting `& retrieval]] +:: [s0;%- ] +:: [s0; SetCount] +:: [s0; sets number of rows in the array] +:: [s0; SetVirtualCount] +:: [s0; sets number of rows in the array with external data] +:: [s0; GetCount] +:: [s0; returns number of rows] +:: [s0; Clear] +:: [s0; clears array data, identical to [* SetCount(0)]] +:: [s0; Shrink] +:: [s0; shrinks source data matrix to the minimum necessary size] +:: [s0; Get] +:: [s0; returns given Value element of the source data matrix] +:: [s0; GetOriginal] +:: [s0; returns given element of source data matrix before editation] +:: [s0; Set] +:: [s0; sets given element of the source data matrix] +:: [s0; GetKey] +:: [s0; returns given primary key (column #0 in the data matrix)] +:: [s0; GetOriginalKey] +:: [s0; returns `'old`' value of primary key before editation] +:: [s0; GetColumn] +:: [s0; returns value of a given output column (according to its index +mapping)] +:: [s0; GetConvertedColumn] +:: [s0; returns value of a given output column after applying its [* Convert]] +:: [s0; ReadRow] +:: [s0; returns a row of the source data matrix] +:: [s0; Add] +:: [s0; adds a new row at the end of table] +:: [s0; Insert] +:: [s0; inserts a new row into the table] +:: [s0; Remove] +:: [s0; removes a given table row] +:: [s0; SwapUp] +:: [s0; exchanges a table row with the preceding row] +:: [s0; SwapDown] +:: [s0; exchanges a table row with the next row] +:: [s0; Sort] +:: [s0; sorts table rows using a given predicate] +:: [s0; ClearCache] +:: [s0; clears data conversion cache] +:: [s0; InvalidateCache] +:: [s0; invalidates given table row in the conversion cache]}}&] +[s0; &] +[ {{2337:7663-1 [s0; [* Cursor `& selection management]] +:: [s0;%- ] +:: [s0; GetSelectCount] +:: [s0; returns number of currently selected rows] +:: [s0; IsSelection] +:: [s0; checks whether any rows are selected (identical to [* GetSelectCount() +> 0])] +:: [s0; Select] +:: [s0; selects / unselects given row or a series of rows] +:: [s0; IsSelected] +:: [s0; checks whether given row is selected] +:: [s0; ClearSelection] +:: [s0; clears the current selection] +:: [s0; SetCursor] +:: [s0; moves array cursor to a new row] +:: [s0; KillCursor] +:: [s0; removes the cursor away from the table] +:: [s0; CancelCursor] +:: [s0; cancels editation of current row] +:: [s0; IsCursor] +:: [s0; checks whether cursor is in the table (identical to [* GetCursor() +>`= 0])] +:: [s0; GetCursor] +:: [s0; returns current cursor row, `-1 when none] +:: [s0; GoBegin] +:: [s0; moves the cursor to the first table row] +:: [s0; GoEnd] +:: [s0; moves the cursor to the last table row] +:: [s0; GetCursorSc] +:: [s0; returns the location of the cursor row within the table view +area] +:: [s0; ScCursor] +:: [s0; scrolls the table to move the cursor row to given location within +the table view] +:: [s0; CenterCursor] +:: [s0; scrolls the table to move cursor into the middle of the current +view] +:: [s0; ScrollInto] +:: [s0; scrolls the table by minimum amount necessary to make given +row visible] +:: [s0; ScrollIntoCursor] +:: [s0; scrolls the table by minimum amount necessary to make cursor +row visible] +:: [s0; GetScroll] +:: [s0; returns current table scrollbar location] +:: [s0; ScrollTo] +:: [s0; sets table scrollbar location] +:: [s0; Find] +:: [s0; locates table row containing a given element] +:: [s0; FindSetCursor] +:: [s0; moves the cursor to table row containing a given element]}}&] +[s0; &] +[s0; &] +[s0; &] +[ {{2337:7663-1 [s0; [* GUI elements]] +:: [s0;%- ] +:: [s0; StdBar] +:: [s0; the default array local menu] +:: [s0; IsModified] +:: [s0; checks modification state of given array cell] +:: [s0; StartEdit] +:: [s0; open current array row for editing] +:: [s0; GetEditColumn] +:: [s0; returns the column being currently edited] +:: [s0; DoEdit] +:: [s0; corresponds to the local menu `'Edit`' function] +:: [s0; DoInsert] +:: [s0; corresponds to the local menu `'Insert`' function] +:: [s0; DoInsertBefore] +:: [s0; corresponds to the local menu `'Insert before`' function] +:: [s0; DoInsertAfter] +:: [s0; corresponds to the local menu `'Insert after`' function] +:: [s0; DoAppend] +:: [s0; corresponds to the local menu `'Append`' function] +:: [s0; DoRemove] +:: [s0; corresponds to the local menu `'Remove`' function] +:: [s0; DoDuplicate] +:: [s0; corresponds to the local menu `'Duplicate`' function] +:: [s0; DoSelectAll] +:: [s0; selects the entire array] +:: [s0; AcceptEnter] +:: [s0; commits the currently edited row and possibly begins insertion +of another row]}}&] +[s0; &] +[ {{2337:7663-1 [s0; [* Notification callbacks]] +:: [s0;%- ] +:: [s0; WhenLeftClick] +:: [s0; left mouse click within the array] +:: [s0; WhenLeftDouble] +:: [s0; left mouse doubleclick within the array] +:: [s0; WhenSel] +:: [s0; called when cursor or selection status of widget changes] +:: [s0; WhenCursor] +:: [s0; called whenever the cursor location changes [/ (deprecated, use +WhenSel)]] +:: [s0; WhenKillCursor] +:: [s0; called when the cursor moves away from the table [/ (deprecated, +use WhenSel)]] +:: [s0; WhenSelection] +:: [s0; called whenever current selection changes [/ (deprecated, use +WhenSel)]] +:: [s0; WhenEnterRow] +:: [s0; called whenever the cursor moves to a new row [/ (deprecated, +use WhenSel)]] +:: [s0; WhenUpdateRow] +:: [s0; called after updating a row] +:: [s0; WhenAcceptRow] +:: [s0; additional row validation callback] +:: [s0; WhenStartEdit] +:: [s0; called after initiating row editation] +:: [s0; WhenAcceptEdit] +:: [s0; called after accepting changes to a given row] +:: [s0; WhenArrayAction] +:: [s0; called whenever array source data changes (after insert / delete +/ edit)] +:: [s0; WhenBar] +:: [s0; can be used to supply custom local menu for the array] +:: [s0; WhenCtrlsAction] +:: [s0; called by [* WhenAction] callbacks of internally created controls]}}&] +[s3; &] +[s0; &] +[s0; &] +[s0;%- &] +[ {{10000t/25b/25@3 [s0;%- [*@(229)4 Detailed method description]]}}&] +[s0; &] +[s0; [* Initialization and configuration]&] +[s3; &] +[s0; &] +[s1;:ArrayCtrl`:`:Reset`(`):%- [@(0.0.255) void]_[* Reset]()&] +[s5; Clears table rows and resets all array properties to their default +values.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ShowAppendLine`(`):%- [@(0.0.255) void]_[* ShowAppendLine]()&] +[s5; Show an additional pseudo`-row at the table end. When clicked, +a new row is appended to the array.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsEdit`(`)const:%- [@(0.0.255) bool]_[* IsEdit]()_[@(0.0.255) const]&] +[s5; Checks whether the array is currently being edited.&] +[s7; [*/ Return value]-|[* true] `= a row is currently open for editing, +[* false] `= array is in normal browsing mode&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsInsert`(`)const:%- [@(0.0.255) bool]_[* IsInsert]()_[@(0.0.255) const]&] +[s5; Checks whether a new row is currently being inserted.&] +[s7; [*/ Return value]-|[* true] `= newly inserted row is currently being +edited, [* false] when not&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetLineCy`(int`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* SetLineCy]( +[@(0.0.255) int]_[*@3 cy])&] +[s5; Sets the (default) array row height. For certain rows, this +can be overriden by the two`-parameter version of this method.&] +[s7; [%-*C@3 cy]-|row height in pixels&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetLineCy`(int`,int`):%- [@(0.0.255) void]_[* SetLineCy]([@(0.0.255) int]_ +[*@3 i], [@(0.0.255) int]_[*@3 cy])&] +[s5; Sets row height for a given row. This overrides the default +value set by the one`-parameter version of this method.&] +[s7; [%-*C@3 i]-|row index (zero based)&] +[s7; [%-*C@3 cy]-|row height in pixels, [* Null] `= use default row height&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetLineCy`(`)const:%- [@(0.0.255) int]_[* GetLineCy]()_[@(0.0.255) const]&] +[s5; Returns default array row height.&] +[s7; [*/ Return value]-|row height in pixels&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetLineY`(int`)const:%- [@(0.0.255) int]_[* GetLineY]([@(0.0.255) int]_[*@3 i +])_[@(0.0.255) const]&] +[s5; Returns [/ y] position of given array row (the pixel distance +between the top of first array row and [/ i]`-th row, i.e. sum +of heights of all rows above this row).&] +[s7; [%-*C@3 i]-|row index (zero based)&] +[s7; [*/ Return value]-|Vertical position of row top in pixels (relative +to array beginning)&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetLineCy`(int`)const:%- [@(0.0.255) int]_[* GetLineCy]([@(0.0.255) int]_ +[*@3 i])_[@(0.0.255) const]&] +[s5; Returns the height of a given row (either the row`-specific +row height, or, when Null, the default row height).&] +[s7; [%-*C@3 i]-|row index (zero based)&] +[s7; [*/ Return value]-|row height in pixels&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AppendLine`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* AppendLi +ne]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; The AppendLine property controls whether the array displays +an additional `'append`' row after its last (real) row. &] +[s7; [%-*C@3 b]-|[* true] `= display appending row, [* false] `= hide it&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoAppendLine`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoAppendLi +ne]()&] +[s5; Hide the appending line (identical to [* AppendLine(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsAppendLine`(`)const:%- [@(0.0.255) bool]_[* IsAppendLine]()_[@(0.0.255) c +onst]&] +[s5; Returns current state of the [* AppendLine] property.&] +[s7; [*/ Return value]-|[* true] `= display appending pseudo`-row at the +end of the array&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Inserting`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Inserting +]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enable / disable inserting new rows in the array (no matter +which insertion mechanism is selected).&] +[s7; [%-*C@3 b]-|[* true] `= enable insertion, [* false] `= disable it&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoInserting`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoInserting +]()&] +[s5; Disables row insertion (identical to [* Inserting(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsInserting`(`)const:%- [@(0.0.255) bool]_[* IsInserting]()_[@(0.0.255) c +onst]&] +[s5; Returns current state of the [* Inserting] property.&] +[s7; [*/ Return value]-|[* true] `= row insertion is enabled, [* false] +when not&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Appending`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Appending +]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enable / disable adding new rows at the table end.&] +[s7; [%-*C@3 b]-|[* true] `= enable row appending, [* false] `= disable +it&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsAppending`(`)const:%- [@(0.0.255) bool]_[* IsAppending]()_[@(0.0.255) c +onst]&] +[s5; Returns current state of the [* Appending] property.&] +[s7; [*/ Return value]-|[* true] `= appending rows is enabled, [* false] +when not.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AutoAppending`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* AutoA +ppending]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Same as [* Appending] but Enter pressed when editing a new row +accepts it and adds another one at the table end.&] +[s7; [%-*C@3 b]-|[* true ]to enable the mode&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsAutoAppending`(`)const:%- [@(0.0.255) bool]_[* IsAutoAppending]()_[@(0.0.255) c +onst]&] +[s5; Returns current state of [* AutoAppending] property.&] +[s7; [*/ Return value]-|[* true] `= [* AutoAppending ]is active&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:BeforeAfterInserting`(int`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_ +[* BeforeAfterInserting]([@(0.0.255) int]_[*@3 q]_`=_[@3 1])&] +[s5; Activate before / after row insertion mechanism ([* Insert] hotkey +`= before).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AfterBeforeInserting`(int`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_ +[* AfterBeforeInserting]([@(0.0.255) int]_[*@3 q]_`=_[@3 2])&] +[s5; Activate before / after row insertion mechanism ([* Insert] hotkey +`= after)&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Duplicating`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Duplica +ting]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enable / disable row duplication. Note that this property only +controls whether the `'Duplicate`' item should be present in +the array local menu. Of course, nothing can prevent you from +supporting duplication in some other way, or from calling the +[* DoDuplicate] method as you see fit.&] +[s7; [%-*C@3 b]-|[* true] `= enable duplication, [* false] `= disable it&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoDuplicating`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoDuplica +ting]()&] +[s5; Disable row duplication (identical to [* Duplicating(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsDuplicating`(`)const:%- [@(0.0.255) bool]_[* IsDuplicating]()_[@(0.0.255) c +onst]&] +[s5; Returns the state of the [* Duplicating] property.&] +[s7; [*/ Return value]-|[* true] `= local menu offers row duplication, +[* false] when not&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoInsertAppend`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoIn +sertAppend]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enables / disables the auto`-append mechanism (see above section +on inserting rows).&] +[s7; [%-*C@3 b]-|[* true] `= disable InsertAppend mechanism, [* false] `= +enable it (the default)&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsEditing`(`)const:%- [@(0.0.255) bool]_[* IsEditing]()_[@(0.0.255) const +]&] +[s5; Checks whether at least one array column supports editing (whether +it is possible to [/ open] a row for editation).&] +[s7; [*/ Return value]-|[* true] `= row editing is possible, [* false] when +not&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Removing`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Removing]( +[@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enable / disable deleting rows from the table.&] +[s7; [%-*C@3 b]-|[* true] `= enable deletion, [* false] `= disable it&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoRemoving`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoRemoving]( +)&] +[s5; Disable deleting table rows (identical to [* Removing(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsRemoving`(`)const:%- [@(0.0.255) bool]_[* IsRemoving]()_[@(0.0.255) con +st]&] +[s5; Returns current state of the [* Removing] property.&] +[s7; [*/ Return value]-|[* true] `= row deletion is enabled, [* false ]when +not&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AskRemove`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* AskRemove +]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Sets whether the user must manually confirm array row deletion. +When set to [* true], every time a row is to be deleted, a confirmation +dialog pops up. When set to [* false], rows are deleted automatically +without any further confirmation.&] +[s7; [%-*C@3 b]-|[* true] `= prompt user to confirm row deletion, [* false] +`= delete rows instantly&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoAskRemove`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoAskRemove +]()&] +[s5; Disables user confirmation of row deletion (equivalent to [* AskRemove(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsAskRemove`(`)const:%- [@(0.0.255) bool]_[* IsAskRemove]()_[@(0.0.255) c +onst]&] +[s5; Returns current state of the [* AskRemove] property.&] +[s7; [*/ Return value]-|[* true] `= user confirmation is needed to delete +rows, [* false] `= rows are deleted immediately&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Moving`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Moving]([@(0.0.255) b +ool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enable / disable row swapping. When set to [* true], it is possible +to move an array row up and down by swapping it with the previous +/ next row. This can be used to reorder array rows in a visually +straightforward manner.&] +[s7; [%-*C@3 b]-|[* true] `= offer row moving in the local menu, [* false] +`= don`'t&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsMoving`(`)const:%- [@(0.0.255) bool]_[* IsMoving]()_[@(0.0.255) const]&] +[s5; Returns current state of the [* Moving] property.&] +[s7; [*/ Return value]-|[* true] `= local menu supports row swapping, +[* false] `= it doesn`'t&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Header`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Header]([@(0.0.255) b +ool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Show / hide the [*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us^ HeaderCtrl] +object for this table.&] +[s7; [%-*C@3 b]-|[* true] `= show table header, [* false] `= hide it&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoHeader`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoHeader]()&] +[s5; Hide table header (equivalent to [* Header(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Track`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Track]([@(0.0.255) b +ool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Animate array column resizing. This is equivalent to setting +the [*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Track`(bool`)^ T +rack] property in the array HeaderCtrl.&] +[s7; [%-*C@3 b]-|[* true] `= repaint the array repeatedly while dragging +column widths, [* false] `= regenerate everything only after drag +`& drop is finished.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoTrack`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoTrack]()&] +[s5; Do not animate array column resizing (equivalent to [* Track(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:VertGrid`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* VertGrid]( +[@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Show / hide vertical array grid lines (separating array columns).&] +[s7; [%-*C@3 b]-|[* true] `= show vertical grid lines, [* false] `= hide +them&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoVertGrid`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoVertGrid]( +)&] +[s5; Hide vertical grid lines (equivalent to [* VertGrid(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HorzGrid`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* HorzGrid]( +[@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Show / hide horizontal grid lines (separating array rows).&] +[s7; [%-*C@3 b]-|[* true] `= show horizontal grid lines, [* false] `= hide +them&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoHorzGrid`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoHorzGrid]( +)&] +[s5; Hide horizontal grid lines (equivalent to [* HorzGrid(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Grid`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Grid]([@(0.0.255) b +ool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Show / hide both horizontal and vertical grid lines (equivalent +to [* HorzGrid(b).VertGrid(b)]).&] +[s7; [%-*C@3 b]-|[* true] `= show grid line matrix, [* false] `= hide all +grid lines&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoGrid`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoGrid]()&] +[s5; Hide horizontal and vertical grid lines (equivalent to [* Grid(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GridColor`(Color`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* GridColo +r]([_^Color^ Color]_[*@3 c])&] +[s5; Sets the color for grid lines.&] +[s7; [%-*C@3 c]-|new grid line color&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:EvenRowColor`(Color`,Color`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_ +[* EvenRowColor]([_^Color^ Color]_[*@3 paper]_`=_Blend(SColorMark, +SColorPaper, [@3 220]), [_^Color^ Color]_[*@3 ink]_`=_SColorText)&] +[s5; Sets the paper and ink (background and foreground) color for +even array rows. In certain cases setting a different background +color for odd and even rows helps to simplify visual orientation +in the arrays (especially when the array has many columns).&] +[s5; [* Note:] the even / odd row terminology refers to the natural +array row numbering, so first array row is [/ odd] and the second +is [/ even]. This is in contrast to the zero`-baesd integral row +indexing, where the first array row has index 0.&] +[s7; [%-*C@3 paper]-|background color to use for second, fourth, sixth +etc. array row&] +[s7; [%-*C@3 ink]-|foreground color for even rows&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:OddRowColor`(Color`,Color`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_ +[* OddRowColor]([_^Color^ Color]_[*@3 paper]_`=_SColorInfo, [_^Color^ Color]_[*@3 ink]_`=_S +ColorText)&] +[s5; Sets the paper and ink (background and foreground) color for +odd array rows.&] +[s7; [%-*C@3 paper]-|background color to use for first, third, fifth +etc. array row&] +[s7; [%-*C@3 ink]-|foreground color for odd rows&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoCursor`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoCursor]( +[@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Turns on / off highlighting cursor row.&] +[s7; [%-*C@3 b]-|[* true] `= do not highlight cursor row, [* false] `= default +behaviour (cursor row is shown in inverse colors)&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:MouseMoveCursor`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Mou +seMoveCursor]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enables / disables automatical cursor row switching as the mouse +cursor moves over the array rows.&] +[s7; [%-*C@3 b]-|[* true] `= automatically switch cursor row, [* false] +`= only upon clicks and keyboard navigation&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoMouseMoveCursor`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoMou +seMoveCursor]()&] +[s5; Disable automatical cursor row switching (equivalent to [* MouseMoveCursor(false)]) +.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AutoHideSb`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* AutoHide +Sb]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; When set to [* true], the vertical scrollbar at the right array +edge is displayed only when the total row height exceeds the +array view height. When set to [* false], the scrollbar is shown +all the time.&] +[s7; [%-*C@3 b]-|[* true] `= show / hide the scrollbar as necessary, [* false] +`= display it unconditionally&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoAutoHideSb`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoAutoHide +Sb]()&] +[s5; Display vertical scrollbar all the time (equivalent to [* AutoHideSb(false)]).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HideSb`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* HideSb]([@(0.0.255) b +ool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Hides vertical scrollbar (even if it would be needed).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AutoHideHorzSb`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Auto +HideHorzSb]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Makes horizontal scroll bar (active if HeaderCtrl is in absolute +mode only) to autohide. Default is on.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoAutoHideHorzSb`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoAuto +HideHorzSb]()&] +[s5; Same as AutoHideHorzSb(false).&] +[s3;%- &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HideHorzSb`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* HideHorz +Sb]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Unconditionally hides horizontal scrollbar (active if HeaderCtrl +is in absolute mode only).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:MultiSelect`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* MultiSe +lect]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Enable / disable multiple row selection. &] +[s7; [%-*C@3 b]-|[* true] `= allow selecting multiple rows at the same +time, [* false] `= only one row at a time&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsMultiSelect`(`)const:%- [@(0.0.255) bool]_[* IsMultiSelect]()_[@(0.0.255) c +onst]&] +[s5; Returns true if ArrayCtrl is in multiselect mode.&] +[s3;%- &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoBackground`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoBack +ground]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Sets the widget into transparent mode `- background is not painted +and Transparent is activated `- a result, anything painted behind +the widget is visible, allowing client code to provide any background +it needs.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:PopUpEx`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* PopUpEx]([@(0.0.255) b +ool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Activates showing small popup windows with cell content when +mouse is over and cell is to big to fit current dimensions. Default +is activated.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoPopUpEx`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoPopUpEx]()&] +[s5; Same as PopUpEx(false).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoFocusSetCursor`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoFocu +sSetCursor]()&] +[s5; Normally, when ArrayCtrl gets a focus and no cursor is set (and +cursor is allowed and there is at least one line), ArrayCtrl +a sets the cursor to the first line. This modifier deactivates +this feature.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:MovingHeader`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Moving +Header]([@(0.0.255) bool]_[*@3 b])&] +[s5; Activates dragging columns in header. Default is active.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoMovingHeader`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoMoving +Header]()&] +[s5; Same as MovingHeader(false).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnSortFindKey`(bool`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* C +olumnSortFindKey]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&] +[s5; Before ColumnSort orders the ArrayCtrl, the key of current row +(with cursor) is stored and after sorting, it is restored.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AllSorting`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* AllSorting]( +)&] +[s5; If set, Sorting() is invoked for all columns (added either before +or after this modifier is called).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnSortSecondary`(const ArrayCtrl`:`:Order`&`):%- [_^ArrayCtrl^ Ar +rayCtrl][@(0.0.255) `&]_[* ColumnSortSecondary]([@(0.0.255) const]_[_^ArrayCtrl`:`:Order^ O +rder][@(0.0.255) `&]_[*@3 order])&] +[s5; Sets secondary sorting predicate for column sorts (see ColumnSort, +Sorting) `- if two cells are equal when performing sort by column, +they are ordered by this predicate.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoColumnSortSecondary`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* N +oColumnSortSecondary]()&] +[s5; Same as ColumnSortSecondary(false).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnWidths`(const char`*`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_ +[* ColumnWidths]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 s])&] +[s5; Initializes column widths based on a text string containing +blank`-separated decimal numbers, e.g. `"1 4 6 4 1`".&] +[s7; [%-*C@3 s]-|control string defining column widths&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:CursorOverride`(const Image`&`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `& +]_[* CursorOverride]([@(0.0.255) const]_[_^Image^ Image][@(0.0.255) `&]_[*@3 arrow])&] +[s5; Overrides mouse cursor to [%-*@3 arrow]. Setting Null ends override.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:NoCursorOverride`(`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* NoCurs +orOverride]()&] +[s5; Same as CursorOverride(Null).&] +[s3;%- &] +[s6;%- &] +[s1;:ArrayCtrl`:`:RowFormat`(const char`*`):%- [_^String^ String]_[* RowFormat]([@(0.0.255) c +onst]_[@(0.0.255) char]_`*[*@3 s])&] +[s5; Formats a text by substituting [* %s] with the array`-specific +term for `'row`' (as set by the [* RowName] property). This is +used for array local menu items.&] +[s7; [%-*C@3 s]-|[* Format]`-like string to substitute.&] +[s7; [*/ Return value]-|&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:RowName`(const char`*`):%- [_^ArrayCtrl^ ArrayCtrl][@(0.0.255) `&]_[* Row +Name]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 s])&] +[s5; Sets the array`-specific term for `'row`'. This can be used +to customize the local menu terminology according to the logical +content of the array. For instance, when you have an array with +the list of employees, you can call [* RowName(`"employee`")] and +the menu items will then read [/ `'Insert new employee`', `'Delete +employee`'] etc.&] +[s7; [%-*C@3 s]-|the term to substitute for `'array row`' in menu items&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s0;* &] +[s0; [* Column structure programming]&] +[s3; &] +[s0;%- &] +[s1;:ArrayCtrl`:`:IndexInfo`(int`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `&]_[* Ind +exInfo]([@(0.0.255) int]_[*@3 ii])&] +[s5; Returns a reference to the [* IdInfo] structure describing a given +array index (column in the source data matrix).&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the array index&] +[s7; [*/ Return value]-|IdInfo reference for the given index&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IndexInfo`(const Id`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `& +]_[* IndexInfo]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])&] +[s5; Returns a reference to the [* IdInfo] structure describing a given +array index.&] +[s7; [%-*C@3 id]-|the [* Id] index identifier&] +[s7; [*/ Return value]-|IdInfo reference for the given index&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddIndex`(const Id`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `& +]_[* AddIndex]([@(0.0.255) const] [_^Id^ Id]`&_[*@3 id])&] +[s5; Adds a new index to the array and assign it a given [* Id] identifier.&] +[s7; [%-*C@3 id]-|new index identifier&] +[s7; [*/ Return value]-|A reference to the [* IdInfo ]structure describing +the newly added index. The reference can be used to set additional +index properties.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddIndex`(`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `&]_[* AddInde +x]()&] +[s5; Adds a new index (without an identifier) to the array.&] +[s7; [*/ Return value]-|A reference to the [* IdInfo] structure describing +the newly added index.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetIndexCount`(`)const:%- [@(0.0.255) int]_[* GetIndexCount]()_[@(0.0.255) c +onst]&] +[s5; Returns number of indices in the array.&] +[s7; [*/ Return value]-|index count&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetId`(int`)const:%- [_^Id^ Id]_[* GetId]([@(0.0.255) int]_[*@3 ii])_[@(0.0.255) c +onst]&] +[s5; Returns the identifier of a given index (addresses by its zero`-based +ordinal number).&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the queried index&] +[s7; [*/ Return value]-|index identifier or [* Null] if the index has +no identifier&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetPos`(const Id`&`)const:%- [@(0.0.255) int]_[* GetPos]([@(0.0.255) cons +t ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) const]&] +[s5; Returns the zero`-based positional number of the array index +with a given identifier.&] +[s7; [%-*C@3 id]-|array index identifier&] +[s7; [*/ Return value]-|zero`-based index number, `-1 when not found&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetId`(int`,const Id`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `& +]_[* SetId]([@(0.0.255) int]_[*@3 ii], [@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])&] +[s5; Sets the identifier for a given array index. This can be used +to set or modify the identifier for a previously added index.&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the index to set the +identifier for&] +[s7; [%-*C@3 id]-|new index identifier ([* Null] when none)&] +[s7; [*/ Return value]-|A reference to the [* IdInfo] descriptive structure +for the [/ ii]`-th index. The reference can be used to set additional +properties of the altered index.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddKey`(const Id`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `&]_ +[* AddKey]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])&] +[s5; Adds a [/ primary key] index to the table. The [/ primary key] is +just another name for the first index (index with ordinal number +0). This is just a handy convention often used for SQL`-based +tables. [* AddKey] must be called only once after array initialization +or [* Reset] and before calling any other functions adding indices +(like [* AddIndex], [* AddColumn] or [* AddCtrl]). When [* GetIndexCount() +> 0 ]before the call to this function, this method fails with +an [* ASSERT].&] +[s7; [%-*C@3 id]-|primary key identifier&] +[s7; [*/ Return value]-|A reference to the descriptive [* IdInfo] structure +for the primary key index.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddKey`(`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `&]_[* AddKey]() +&] +[s5; Adds a primary key index without an identifier to the table. +This is equivalent to [* AddKey(Null)].&] +[s7; [*/ Return value]-|A reference to the [* IdInfo] structure describing +the primary key index.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetKeyId`(`)const:%- [_^Id^ Id]_[* GetKeyId]()_[@(0.0.255) const]&] +[s5; Returns primary key identifier for this table. This is equivalent +to calling [* GetId(0)].&] +[s7; [*/ Return value]-|primary key index identifier&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddColumn`(const char`*`,int`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* AddColumn]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text]_`=_NULL, +[@(0.0.255) int]_[*@3 w]_`=_[@3 0])&] +[s5; Add a new column`-index pair to the table. The function adds +a (source) index and an (output) column and sets the index as +the data source for the column. This is the most common method +for adding columns to the array.&] +[s7; [%-*C@3 text]-|column name (displayed in the array header)&] +[s7; [%-*C@3 w]-|logical relative column width&] +[s7; [*/ Return value]-|A reference to the [* Column] structure describing +the newly added column. This can be used to set additional properties +for the newly added column and the corresponding header tab.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddColumn`(const Id`&`,const char`*`,int`):%- [_^ArrayCtrl`:`:Column^ C +olumn][@(0.0.255) `&]_[* AddColumn]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id], +[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], [@(0.0.255) int]_[*@3 w]_`=_[@3 0])&] +[s5; Adds a new column`-index pair to the table. This is equivalent +to the above two`-parameter version but, in addition, the method +sets the [* Id] identifier for the newly created index.&] +[s7; [%-*C@3 id]-|new index identifier&] +[s7; [%-*C@3 text]-|column name (displayed in the header)&] +[s7; [%-*C@3 w]-|logical relative column width&] +[s7; [*/ Return value]-|A reference to the [* Column] structure describing +the newly added array column.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddColumnAt`(int`,const char`*`,int`):%- [_^ArrayCtrl`:`:Column^ Colu +mn][@(0.0.255) `&]_[* AddColumnAt]([@(0.0.255) int]_[*@3 ii], [@(0.0.255) const]_[@(0.0.255) c +har]_`*[*@3 text], [@(0.0.255) int]_[*@3 w]_`=_[@3 0])&] +[s5; Adds a new column to the table and binds it to a given source +data index.&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the index to use as +source for this column&] +[s7; [%-*C@3 text]-|column name (displayed in the header)&] +[s7; [%-*C@3 w]-|logical relative column width&] +[s7; [*/ Return value]-|A reference to the [* Column] structure describing +the newly added array column.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddColumnAt`(const Id`&`,const char`*`,int`):%- [_^ArrayCtrl`:`:Column^ C +olumn][@(0.0.255) `&]_[* AddColumnAt]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id], +[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], [@(0.0.255) int]_[*@3 w]_`=_[@3 0])&] +[s5; Adds a new column to the table and binds it to a given source +data index.&] +[s7; [%-*C@3 id]-|identifier of the index to use as source for the newly +added column&] +[s7; [%-*C@3 text]-|column name (displayed in the header)&] +[s7; [%-*C@3 w]-|logical relative column width&] +[s7; [*/ Return value]-|A reference to the [* Column] structure describing +the newly added array column.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddRowNumColumn`(const char`*`,int`):%- [_^ArrayCtrl`:`:Column^ Colum +n][@(0.0.255) `&]_[* AddRowNumColumn]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) int]_[*@3 w]_`=_[@3 0])&] +[s5; Adds a new column to the table. The newly added column has no +source index, it is assumed to have an external data source. +Instead of the source data [* Value] object, the current zero`-based +row number is passed to the column`'s [* Convert] / [* Display]. +This allows the host application to decode somehow the external +data based on the row number. In the current U`+`+ version, the +[/ RowNum columns] cannot be edited (using the standard array inline +editation mechanism).&] +[s7; [%-*C@3 text]-|column name (displayed in the header)&] +[s7; [%-*C@3 w]-|logical relative column width&] +[s7; [*/ Return value]-|A reference to the [* Column] structure describing +the newly added array column.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddCtrl`(Ctrl`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `&]_[* Ad +dCtrl]([_^Ctrl^ Ctrl][@(0.0.255) `&]_[*@3 ctrl])&] +[s5; Adds a new index`-control pair to the table; the index keeps +the source data and the external control is used to edit it. +The ArrayCtrl handles data transfer between the source data matrix +and the external control. The method returns a reference the +[* IdInfo] descriptive structure for the newly added index.&] +[s5; [* Note:] it is good to keep in mind that there are a few differences +between the ordinary array cell editors and the freestanding +edit controls. In contrast with the cell editors, which appear +only when the row is opened for editing, the freestanding controls +are present all the time. For instance, the ArrayCtrl automatically +disables the controls when the cursor moves away from the table +(using [* KillCursor]) and re`-enables them after it comes back. +This is important e.g. if you want to implement an additional +logic enabling some of the controls only depending on the circumstances; +in such case, you have to use one of the notification callbacks +(like [* WhenEnterRow]) to force your additional behaviour on +the controls.&] +[s7; [%-*C@3 ctrl]-|control to attach to the given index&] +[s7; [*/ Return value]-|a reference to the IdInfo structure describing +the newly added index&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddCtrl`(const Id`&`,Ctrl`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `& +]_[* AddCtrl]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id], [_^Ctrl^ Ctrl][@(0.0.255) `&]_[*@3 ctrl +])&] +[s5; Adds a new index`-control pair to the table. This is identical +to the above version with the only difference that the newly +added index is assigned an [* Id] identifier at the same time.&] +[s7; [%-*C@3 id]-|the identifier to assign to the newly created index&] +[s7; [%-*C@3 ctrl]-|freestanding control used to edit the given index&] +[s7; [*/ Return value]-|a reference to the IdInfo structure describing +the newly added index&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddCtrlAt`(int`,Ctrl`&`):%- [@(0.0.255) void]_[* AddCtrlAt]([@(0.0.255) i +nt]_[*@3 ii], [_^Ctrl^ Ctrl][@(0.0.255) `&]_[*@3 ctrl])&] +[s5; Adds a new control to the table and binds it to the index with +given ordinal number. You can use this method to create the binding +between the control and an arbitrary source index.&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the index to bind to +this control&] +[s7; [%-*C@3 ctrl]-|freestanding control used to edit the [/ ii]`-th data +index&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddCtrlAt`(const Id`&`,Ctrl`&`):%- [@(0.0.255) void]_[* AddCtrlAt]([@(0.0.255) c +onst ][_^Id^ Id]`&_[*@3 id], [_^Ctrl^ Ctrl][@(0.0.255) `&]_[*@3 ctrl])&] +[s5; Adds a new control to the table and binds it to the index with +given identifier.&] +[s7; [%-*C@3 id]-|identifier of the index to bind to this control&] +[s7; [%-*C@3 ctrl]-|freestanding control used to edit the index with +identifier [/ id]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AddRowNumCtrl`(Ctrl`&`):%- [@(0.0.255) void]_[* AddRowNumCtrl]([_^Ctrl^ C +trl][@(0.0.255) `&]_[*@3 ctrl])&] +[s5; Adds a new freestanding control to the table. The control is +not bound to any source data index. During cursor movement in +the array, array uses the control`'s [* SetData] method to set +it to the current row number. The control must be ready for that +and it can use the row number value to decode some externally +located data for display. In the current U`+`+ version, such +controls cannot be used for editation (there is currently no +clean way to store the edited data back to its external storage).&] +[s7; [%-*C@3 ctrl]-|[/ RowNum]`-based freestanding editor control&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetColumnCount`(`)const:%- [@(0.0.255) int]_[* GetColumnCount]()_[@(0.0.255) c +onst]&] +[s5; Returns the current number of (output) columns in the array.&] +[s7; [*/ Return value]-|number of columns&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:FindColumnWithPos`(int`)const:%- [@(0.0.255) int]_[* FindColumnWithPos]( +[@(0.0.255) int]_[*@3 pos])_[@(0.0.255) const]&] +[s5; Returns the zero`-based index of a column based on its source +data index.&] +[s7; [%-*C@3 pos]-|ordinal number of the source index&] +[s7; [*/ Return value]-|ordinal number of the column having the given +index as its source, `-1 when not found&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:FindColumnWithId`(const Id`&`)const:%- [@(0.0.255) int]_[* FindColumnWi +thId]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) const]&] +[s5; Returns the zero`-based index of a column based on its source +data index.&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [*/ Return value]-|ordinal number of the column having the given +index as its source, `-1 when not found&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnAt`(int`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_[* Colu +mnAt]([@(0.0.255) int]_[*@3 i])&] +[s5; Returns the [* Column] structure describing a given column.&] +[s7; [%-*C@3 i]-|zero`-based column index&] +[s7; [*/ Return value]-|a reference to the [* Column] structure describing +the given column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnAt`(const Id`&`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* ColumnAt]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])&] +[s5; Returns the [* Column] structure describing a given column.&] +[s7; [%-*C@3 i]-|zero`-based column index&] +[s7; [*/ Return value]-|a constant reference to the [* Column] structure +describing the given column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnAt`(int`)const:%- [@(0.0.255) const]_[_^ArrayCtrl`:`:Column^ Colu +mn][@(0.0.255) `&]_[* ColumnAt]([@(0.0.255) int]_[*@3 i])_[@(0.0.255) const]&] +[s5; Returns the [* Column] structure describing a column with given +source index. This is merely the const version of the above method; +it can be used to query properties for the column.&] +[s7; [%-*C@3 id]-|identifier of the index used as source for the column&] +[s7; [*/ Return value]-|a reference to the [* Column] structure describing +the given column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnAt`(const Id`&`)const:%- [@(0.0.255) const]_[_^ArrayCtrl`:`:Column^ C +olumn][@(0.0.255) `&]_[* ColumnAt]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) cons +t]&] +[s5; Returns a constant reference to the [* Column] structure describing +a column with given source index. This is the constant version +of the above method; it can be used to query properties for the +column.&] +[s7; [%-*C@3 id]-|identifier of the index used as source for the column&] +[s7; [*/ Return value]-|a constant reference to the [* Column] structure +describing the given column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HeaderTab`(int`):%- [_^HeaderCtrl`:`:Column^ HeaderCtrl`::Column][@(0.0.255) `& +]_[* HeaderTab]([@(0.0.255) int]_[*@3 i])&] +[s5; Returns the [*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Column`:`:Min`(int`)^ H +eaderCtrl`::Column] descriptive structure for the given column. +The correspondence between the array columns and the header tabs +is 1:1, so that the indices of both are always the same ([* array.GetColumnCount() +`=`= array.HeaderObject().GetCount()] holds all the time).&] +[s7; [%-*C@3 i]-|zero`-based column index&] +[s7; [*/ Return value]-|a reference to the [* HeaderCtrl`::Column] structure. +This can be used to set additional properties of the header column +(e.g. column width constraints, font and icon for the column +title etc.)&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HeaderTab`(int`)const:%- [@(0.0.255) const]_[_^HeaderCtrl`:`:Column^ He +aderCtrl`::Column][@(0.0.255) `&]_[* HeaderTab]([@(0.0.255) int]_[*@3 i])_[@(0.0.255) const]&] +[s5; Returns a constant reference to the [* HeaderCtrl`::Column] structure +for the given column.&] +[s7; [%-*C@3 i]-|zero`-based column index&] +[s7; [*/ Return value]-|a reference to the [* HeaderCtrl`::Column] structure. +This can be used to set additional properties of the header column +(e.g. column width constraints, font and icon for the column +title etc.)&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HeaderTab`(const Id`&`):%- [_^HeaderCtrl`:`:Column^ HeaderCtrl`::Colum +n][@(0.0.255) `&]_[* HeaderTab]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])&] +[s5; Returns the [* HeaderCtrl`::Column] descriptive structure for the +column bound to a given source index.&] +[s7; [%-*C@3 id]-|identifier of the index used as source for the column&] +[s7; [*/ Return value]-|a reference to the [* HeaderCtrl`::Column] structure&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HeaderTab`(const Id`&`)const:%- [@(0.0.255) const]_[_^HeaderCtrl`:`:Column^ H +eaderCtrl`::Column][@(0.0.255) `&]_[* HeaderTab]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) c +onst]&] +[s5; Returns a constant reference to the [* HeaderCtrl`::Column] descriptive +structure for the column bound to a given source index.&] +[s7; [%-*C@3 id]-|identifier of the index used as source for the column&] +[s7; [*/ Return value]-|a constant reference to the [* HeaderCtrl`::Column] +structure&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HeaderObject`(`)const:%- [@(0.0.255) const]_[_^HeaderCtrl^ HeaderCtrl][@(0.0.255) `& +]_[* HeaderObject]()_[@(0.0.255) const]&] +[s5; Returns a non`-constant reference to the [* HeaderCtrl] object +for this table. The reference can be further used to alter properties +of the table header (tab visibility, header visual mode and so +on).&] +[s7; [*/ Return value]-|A non`-constant reference to the table HeaderCtrl +object.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:HeaderObject`(`):%- [_^HeaderCtrl^ HeaderCtrl][@(0.0.255) `&]_[* HeaderOb +ject]()&] +[s5; This is just the constant version of the above method; when +called on a constant [* ArrayCtrl] reference, it returns a constant +reference to its underlying HeaderCtrl object which can be then +used to query additional header information.&] +[s7; [*/ Return value]-|A constant reference to the table HeaderCtrl +object.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SerializeHeader`(Stream`&`):%- [@(0.0.255) void]_[* SerializeHeader]([_^Stream^ S +tream][@(0.0.255) `&]_[*@3 s])&] +[s5; Serializes all information pertaining to the array header (mainly +the user`-set column widths). This is equivalent to calling [* HeaderObject().Seria +lize(s)]. The main purpose of this function is to allow storing +header configuration to be restored upon opening the dialog or +the application for the next time. This function is now deprecated +in favor of SerializeSettings.&] +[s7; [%-*C@3 s]-|the [*^topic`:`/`/Core`/src`/Stream`$en`-us^ Stream] +object to serialize the header to/from&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SerializeSettings`(Stream`&`):%- [@(0.0.255) void]_[* SerializeSettings +]([_^Stream^ Stream][@(0.0.255) `&]_[*@3 s])&] +[s5; Serializes all information pertaining to the array header (mainly +the user`-set column widths) and the setting of sort column. +The main purpose of this function is to allow storing configuration +to be restored upon opening the dialog or the application for +the next time.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetDisplay`(int`,int`,const Display`&`):%- [@(0.0.255) void]_[* SetDisp +lay]([@(0.0.255) int]_[*@3 i], [@(0.0.255) int]_[*@3 col], [@(0.0.255) const]_[_^Display^ Dis +play][@(0.0.255) `&]_[*@3 d])&] +[s5; Sets the [* Display] object for a given array cell.&] +[s5;* &] +[s5; [* Note:] the ownership to the Display object is not transferred +by this call. The ArrayCtrl stores a mere pointer to it and it +is the responsibility of the programmer to keep the Display object +alive as long as necessary (until the array is shut down or the +cell display changed via another call to SetDisplay). In fact, +most Display`-based objects don`'t support data copying at all. +In any case, copying Displays is not a very good practice and +is very prone to slicing (as most actual Displays are actually +derived classes with additional data members).&] +[s5; &] +[s5; In many cases it would be relatively safe to assume that the +Display is not used unless the array is actually painted (e.g., +when the control is not bound to a parent or when its view has +zero size), but it is not a very wise practice and it can fail +in very weird ways under special circumstances (like making screenshots +or graphical exports from the array control).&] +[s5; &] +[s7; [%-*C@3 i]-|zero`-based row index&] +[s7; [%-*C@3 j]-|zero`-based column index&] +[s7; [%-*C@3 d]-|display to use&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetDisplay`(int`,int`):%- [@(0.0.255) const]_[_^Display^ Display][@(0.0.255) `& +]_[* GetDisplay]([@(0.0.255) int]_[*@3 row], [@(0.0.255) int]_[*@3 col])&] +[s5; Returns a reference to the Display object for the given array +cell.&] +[s7; [%-*C@3 row]-|zero`-based row index&] +[s7; [%-*C@3 col]-|zero`-based column index&] +[s7; [*/ Return value]-|a reference to the Display object.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetDisplay`(int`):%- [@(0.0.255) const]_[_^Display^ Display][@(0.0.255) `& +]_[* GetDisplay]([@(0.0.255) int]_[*@3 col])&] +[s5; Returns a reference to the Display object for the given array +column.&] +[s7; [%-*C@3 col]-|zero`-based column index&] +[s7; [*/ Return value]-|constant reference to the column Display&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetCtrl`(int`,int`,Ctrl`&`,bool`):%- [@(0.0.255) void]_[* SetCtrl]([@(0.0.255) i +nt]_[*@3 i], [@(0.0.255) int]_[*@3 col], [_^Ctrl^ Ctrl][@(0.0.255) `&]_[*@3 ctrl], +[@(0.0.255) bool]_[*@3 value]_`=_[@(0.0.255) true])&] +[s5; Sets an external control to use as the editor for a single array +cell. Naturally, the same Ctrl object cannot be used as the editor +for multiple array cells. If the position of Ctrl is equivalent +to `'SetRect(0, 0, 0, 0)`', which is the default value, Ctrl +is resized to fit the ArrayCtrl cell accurately, otherwise the +position represents the position within the cell. If [%-*@3 value] +is true, then the Ctrl represents the value of the cell, otherwise +it is independent of it.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetTotalCy`(`)const:%- [@(0.0.255) int]_[* GetTotalCy]()_[@(0.0.255) cons +t]&] +[s5; Returns total height of the array (sum of the individual line +heights for all array rows)&] +[s7; [*/ Return value]-|array height in pixels&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetLineAt`(int`)const:%- [@(0.0.255) int]_[* GetLineAt]([@(0.0.255) int]_ +[*@3 y])_[@(0.0.255) const]&] +[s5; Locates the array row according to given [/ y] coordinate (such +array row [/ r] for which [* GetLineY(r) <`= y `&`& GetLineY(r) `+ +GetLineCy(r) > y]).&] +[s7; [%-*C@3 y]-|vertical pixel coordinate to locate&] +[s7; [*/ Return value]-|zero`-based row number or `-1 when not found&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetClickColumn`(`)const:%- [@(0.0.255) int]_[* GetClickColumn]()_[@(0.0.255) c +onst]&] +[s5; Returns column index of the last clicked column in the array. +If the click happens past the last row of array, returns Null.&] +[s7; [*/ Return value]-|zero`-based index of the relevant column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetClickRow`(`)const:%- [@(0.0.255) int]_[* GetClickRow]()_[@(0.0.255) co +nst]&] +[s5; Returns column index of the last clicked row in the array. If +the click happens past the last row of array, returns Null.&] +[s7; [*/ Return value]-|zero`-based index of the relevant column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetClickPos`(`)const:%- [_^Point^ Point]_[* GetClickPos]()_[@(0.0.255) co +nst]&] +[s7; [*/ Return value]-|[* Point(GetClickColumn(), GetClickRow())].&] +[s3; &] +[s0;* &] +[s0; [* Data setting and retrieval]&] +[s3; &] +[s0;%- &] +[s1;:ArrayCtrl`:`:SetCount`(int`):%- [@(0.0.255) void]_[* SetCount]([@(0.0.255) int]_[*@3 c]) +&] +[s5; Sets the number of rows in the array. This extends or trims +the source matrix as necessary. When using the Ctrl`-based individual +cell editors, as a side`-effect of this call some controls can +be constructed or destroyed.&] +[s7; [%-*C@3 c]-|new row count&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetVirtualCount`(int`):%- [@(0.0.255) void]_[* SetVirtualCount]([@(0.0.255) i +nt]_[*@3 c])&] +[s5; Sets the number of rows in an array with external data. This +makes sense only when all the [/ Column`'s] and [/ Ctrl`'s] of the +array are [/ rownum]`-based. The function doesn`'t physically allocate +any source data matrix space, it just makes the array `'think`' +it has [/ c] rows (this is of course necessary for the Paint routine, +for cursor / selection management and so on).&] +[s5; [* Note:] in the current implementation, selection flags for the +individual rows are kept in the row objects. Therefore it is +not very wise to use multiselection for arrays with external +data, because as soon as the last row is selected, all row storage +structures are allocated as a side effect to keep the selection +flags.&] +[s7; [%-*C@3 c]-|new `'virtual`' number of rows&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetCount`(`)const:%- [@(0.0.255) int]_[* GetCount]()_[@(0.0.255) const]&] +[s5; Returns the number of rows in the array. In fact, this returns +the maximum of the number of `'real`' source matrix rows (as +set by the SetCount / Add / Insert methods) and the `'virtual`' +row count (as se by SetVirtualCount). By checking the implementation +of this method, you can easily find that, simply,&] +[s5; &] +[s5; [C int ArrayCtrl`::GetCount() const `{]&] +[s5; [C -|-|return max(virtualcount, array.GetCount());]&] +[s5; [C `}]&] +[s5; &] +[s7; [*/ Return value]-|Number of rows in the array.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Clear`(`):%- [@(0.0.255) void]_[* Clear]()&] +[s5; Clears the array source data matrix and sets the virtual row +count to 0.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Shrink`(`):%- [@(0.0.255) void]_[* Shrink]()&] +[s5; Shrinks the source data array, i.e. reallocates the data to +the minimum required memory space.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Get`(int`,int`)const:%- [_^Value^ Value]_[* Get]([@(0.0.255) int]_[*@3 i], +[@(0.0.255) int]_[*@3 ii])_[@(0.0.255) const]&] +[s5; Returns the value at a given location in the source data matrix.&] +[s7; [%-*C@3 i]-|zero`-based row number&] +[s7; [%-*C@3 ii]-|zero`-based index ordinal number&] +[s7; [*/ Return value]-|value at the given location in the source data +matrix&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Get`(int`,const Id`&`)const:%- [_^Value^ Value]_[* Get]([@(0.0.255) int]_ +[*@3 i], [@(0.0.255) const ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) const]&] +[s5; Returns the value at a given location in the source data matrix. +In this version, the source indices are addressed by their identifiers.&] +[s7; [%-*C@3 i]-|zero`-based row number&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [*/ Return value]-|value at the given location in the source data +matrix&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Get`(int`)const:%- [_^Value^ Value]_[* Get]([@(0.0.255) int]_[*@3 ii])_[@(0.0.255) c +onst]&] +[s5; Returns the value of a given source index at the currently active +cursor row. This is equivalent to [* Get(GetCursor(), ii)]. When +the row is currently being edited, the function returns the `'new`' +value (the current value of the respective editor control, i.e. +potentially edited).&] +[s5; [* Note:] when the cursor row is not set (when [* !IsCursor()]), +the function fails with an [* ASSERT].&] +[s7; [%-*C@3 ii]-|zero`-based index ordinal number&] +[s7; [*/ Return value]-|value at a given location in the cursor row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Get`(const Id`&`)const:%- [_^Value^ Value]_[* Get]([@(0.0.255) const +][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) const]&] +[s5; Returns the value of a given source index at the currently active +cursor row. This is equivalent to [* Get(GetCursor(), id)].&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [*/ Return value]-|value at the given location in the cursor row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetOriginal`(int`)const:%- [_^Value^ Value]_[* GetOriginal]([@(0.0.255) i +nt]_[*@3 ii])_[@(0.0.255) const]&] +[s5; Returns the `'original`' value of a given source index at the +currently active cursor row. When the row is open for editing, +this function returns the `'old`' value before any editation +took place.&] +[s7; [%-*C@3 ii]-|zero`-based index ordinal number&] +[s7; [*/ Return value]-|value at the given location in the cursor row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetOriginal`(const Id`&`)const:%- [_^Value^ Value]_[* GetOriginal]([@(0.0.255) c +onst ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) const]&] +[s5; Returns the `'original`' value (i.e., without any editing changed +applied) of a given source index at the currently active cursor +row.&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [*/ Return value]-|value at the given location in the cursor row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetKey`(`)const:%- [_^Value^ Value]_[* GetKey]()_[@(0.0.255) const]&] +[s5; Returns the value of the current row`'s primary key. This is +equivalent to [* Get(0)].&] +[s7; [*/ Return value]-|value at the index #0 in the cursor row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetOriginalKey`(`)const:%- [_^Value^ Value]_[* GetOriginalKey]()_[@(0.0.255) c +onst]&] +[s5; Returns the original value of the current row`'s primary key. +During editation, the function returns the value at the time +of opening the row for editing, i.e. without any editing changes +applied. This is equivalent to [* GetOriginal(0)].&] +[s7; [*/ Return value]-|value at the index #0 in the cursor row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Set`(int`,int`,const Value`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) i +nt]_[*@3 i], [@(0.0.255) int]_[*@3 ii], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v +])&] +[s5; Sets the value at a given location in the source data matrix.&] +[s7; [%-*C@3 i]-|zero`-based row number&] +[s7; [%-*C@3 ii]-|zero`-based index ordinal number&] +[s7; [%-*C@3 v]-|value to set to the given cell&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Set`(int`,const Id`&`,const Value`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) i +nt]_[*@3 i], [@(0.0.255) const ][_^Id^ Id]`&_[*@3 id], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `& +]_[*@3 v])&] +[s5; Sets the value at a given location in the source data matrix. +&] +[s7; [%-*C@3 i]-|zero`-based row number&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [%-*C@3 v]-|value to set to the given cell&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Set`(int`,const Value`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 i +i], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v])&] +[s5; Modifies the value at a given location in the cursor row. When +the row is open for editing, the function immediately changes +the value in the appropriate editor control.&] +[s7; [%-*C@3 ii]-|zero`-based index ordinal number&] +[s7; [%-*C@3 v]-|value to set&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Set`(const Id`&`,const Value`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) c +onst ][_^Id^ Id]`&_[*@3 id], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v])&] +[s5; Modifies the value at a given location in the cursor row. This +overloaded version uses the [* Id] identifier to address the relevant +index.&] +[s7; [%-*C@3 id]-|index identifier&] +[s7; [%-*C@3 v]-|value to set&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetColumn`(int`,int`)const:%- [_^Value^ Value]_[* GetColumn]([@(0.0.255) i +nt]_[*@3 row], [@(0.0.255) int]_[*@3 col])_[@(0.0.255) const]&] +[s5; Returns the value of a given column. This depends on the column`-index +mapping established when adding columns to the table. When the +column is a [/ rownum] type (it is bound to no source indices), +the function just returns the [/ row] parameter. For columns with +a single source index, the function returns the value of the +mapped source index. For columns with multiple source indices, +the function returns a [* ValueArray ]containing the values of +its source indices.&] +[s7; [%-*C@3 row]-|zero`-based row index&] +[s7; [%-*C@3 col]-|zero`-based column index&] +[s7; [*/ Return value]-|value of the given column&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetConvertedColumn`(int`,int`):%- [_^Value^ Value]_[* GetConvertedColum +n]([@(0.0.255) int]_[*@3 row], [@(0.0.255) int]_[*@3 col])&] +[s5; Returns the value of a given column after application of its +[* Convert]. For performance reasons, the values obtained by calls +to the [* Convert`::Format] methods are cached internally within +the ArrayCtrl object. You can manipulate the conversion cache +using the methods [*^topic`:`/`/CtrlLib`/src`/ArrayCtrl`$en`-us`#`:`:ArrayCtrl`:`:ClearCache`(`)^ C +learCache] and[* ][*^topic`:`/`/CtrlLib`/src`/ArrayCtrl`$en`-us`#`:`:ArrayCtrl`:`:InvalidateCache`(int`)^ I +nvalidateCache].&] +[s7; [%-*C@3 row]-|zero`-based row index&] +[s7; [%-*C@3 col]-|zero`-based column index&] +[s7; [*/ Return value]-|the converted cell value&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ReadRow`(int`)const:%- [_^Vector^ Vector]<[_^Value^ Value]>_[* ReadRow]([@(0.0.255) i +nt]_[*@3 i])_[@(0.0.255) const]&] +[s5; Returns a [* Vector] containing the values of all source indices +in the given row. Invariantly, the [* GetCount()] of the returned +array is equal to the [* GetIndexCount()] of the source ArrayCtrl.&] +[s7; [%-*C@3 i]-|zero`-based row index&] +[s7; [*/ Return value]-|an array of all source values in the given row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Set`(int`,const Vector``&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) i +nt]_[*@3 i], [@(0.0.255) const]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 v])&] +[s5; Modified a given row by setting all source index values to values +passed in the parameter [/ v].&] +[s7; [%-*C@3 i]-|zero`-based row index&] +[s7; [%-*C@3 v]-|an array of values to set to the source data matrix +row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Add`(`):%- [@(0.0.255) void]_[* Add]()&] +[s5; Adds an empty row to the source data matrix.&] +[s5; [* Note:] the [* InsertValue] property of the [* IdInfo] structure +defines a method to generate / retrieve default values for newly +inserted rows. However, these values are only used during the +GUI`-based [* DoInsert] method and do not apply to the [* Add] method. +If you need to set the newly added source matrix row to some +non`-null defaults, you have to modify the relevant cells manually.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Add`(const Vector``&`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) c +onst]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 v])&] +[s5; Adds a new row at the end of the source data matrix. The [*^topic`:`/`/Core`/src`/Vector`$en`-us^ V +ector] parameter contains the values to be used to initialize +the new row of the matrix.&] +[s7; [%-*C@3 v]-|new matrix row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Add`(const Value`&`[`,const Value`&`]`.`.`.`):%- [@(0.0.255) void]_[* A +dd]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_`[, [@(0.0.255) const]_[_^Value^ Val +ue][@(0.0.255) `&]_`]...)&] +[s5; Adds a new row at the bottom of the source data matrix. This +is in fact a series of functions (generated automatically using +the [* Expand] macro) which takes an arbitrary number of arguments. +Its arguments are used to initialize the source indices in the +newly added row.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Insert`(int`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) int]_[*@3 i])&] +[s5; Inserts a new row into the source array. All indices are initialized +to [* Null] values. The [* InsertValue] property doesn`'t apply; +if you need to set the newly created row to some non`-trivial +values, you have to do so manually.&] +[s7; [%-*C@3 i]-|zero`-based position of the newly created row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Insert`(int`,const Vector``&`):%- [@(0.0.255) void]_[* Insert]( +[@(0.0.255) int]_[*@3 i], [@(0.0.255) const]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 v])&] +[s5; Inserts a new row into the array at a given position. The second +parameter, [/ v], is used to initialize the source indices of the +newly created row.&] +[s7; [%-*C@3 i]-|zero`-based row index&] +[s7; [%-*C@3 v]-|a vector of values used to initialize the source indices +of the given row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Remove`(int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 i])&] +[s5; Removes the given source data row.&] +[s5; [* Note:] the [* AskRemove] property of the [* ArrayCtrl] object tells +whether a confirmation dialog should pop up every time the user +wants to remove a row. However, this method applies only to the +GUI`-based row removal; the [* Remove] method always removes the +requested row unconditionally without popping up any confirmation +dialog.&] +[s7; [%-*C@3 i]-|zero`-based index of the row to remove&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SwapUp`(`):%- [@(0.0.255) void]_[* SwapUp]()&] +[s5; Exchanges the cursor row with the preceding row, effectively +moving it up.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SwapDown`(`):%- [@(0.0.255) void]_[* SwapDown]()&] +[s5; Exchanges the cursor row with following row, effectively moving +it down.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Sort`(const ArrayCtrl`:`:Order`&`):%- [@(0.0.255) void]_[* Sort]([@(0.0.255) c +onst]_[_^ArrayCtrl`:`:Order^ ArrayCtrl`::Order][@(0.0.255) `&]_[*@3 order])&] +[s5; Sorts the array rows according to a given ordering predicate. +The [* ArrayCtrl`::Order] object defines the ordering predicate; +its [* operator ()] should return [* true] whenever its first parameter +(a vector containing the values of all source indices in a row) +is less than its second parameter.&] +[s7; [%-*C@3 order]-|&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Sort`(int`,int`,const ArrayCtrl`:`:Order`&`):%- [@(0.0.255) void]_[* So +rt]([@(0.0.255) int]_[*@3 from], [@(0.0.255) int]_[*@3 count], [@(0.0.255) const]_[_^ArrayCtrl`:`:Order^ A +rrayCtrl`::Order][@(0.0.255) `&]_[*@3 order])&] +[s5; Sorts a portion of the array using a given ordering predicate.&] +[s7; [%-*C@3 from]-|zero`-based index of the first row to sort&] +[s7; [%-*C@3 count]-|number of rows to be sorted&] +[s7; [%-*C@3 order]-|the ordering predicate object. The object should +be derived from [* ArrayCtrl`::Order] and should override the [* operator +()] method. This method should return [* true ]whenever its first +parameter (a vector containing all source index values for a +certain row) is less than its second parameter.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Sort`(int`(`*`)`(const Vector``&v1`,const Vector``&v2`)`):%- [@(0.0.255) v +oid]_[* Sort]([@(0.0.255) int]_(`*[*@3 compare])([@(0.0.255) const]_Vector`&_v1, +[@(0.0.255) const]_Vector`&_v2))&] +[s5; Sorts the array rows according to the order defined by the specified +ordering predicate [/ compare]. This is supposed to be a global +function returning [* true] whenever its first parameter ([/ v1], +an array consisting of all source indices within a row) is less +than the second parameter [/ v2] (according to the desired ordering).&] +[s7; [%-*C@3 compare]-|the ordering predicate; _the function is supposed +to return [* true] whenever its first parameter ([/ v1]) is less +than the second parameter ([/ v2]) according to the desired ordering.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Sort`(int`,int`(`*`)`(const Value`&v1`,const Value`&v2`)`):%- [@(0.0.255) v +oid]_[* Sort]([@(0.0.255) int]_[*@3 ii], [@(0.0.255) int]_(`*[*@3 compare])([@(0.0.255) const +]_Value[@(0.0.255) `&]_v1, [@(0.0.255) const]_Value[@(0.0.255) `&]_v2)_`=_StdValueCompa +re)&] +[s5; Sorts the array rows according to the given ordering predicate +for the source index with a given ordinal number. When not explicitly +specified, the [* StdValueCompare] function is used as the default +comparison predicate.&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the source index used +for sorting&] +[s7; [%-*C@3 compare]-|the sorting predicate function: the function is +supposed to return [* true] whenever its first parameter ([/ v1]) +is less than the second parameter ([/ v2]) according to the desired +ordering.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Sort`(const Id`&`,int`(`*`)`(const Value`&v1`,const Value`&v2`)`):%- [@(0.0.255) v +oid]_[* Sort]([@(0.0.255) const ][_^Id^ Id]`&_[*@3 id], [@(0.0.255) int]_(`*[*@3 compare])([@(0.0.255) c +onst]_Value[@(0.0.255) `&]_v1, [@(0.0.255) const]_Value[@(0.0.255) `&]_v2)_`=_StdValueC +ompare)&] +[s5; Sorts the array rows according to the given ordering predicate +for the source index with a given identifier. When not explicitly +specified, the [* StdValueCompare] function is used as the default +comparison predicate.&] +[s7; [%-*C@3 id]-|identifier of the source index used for sorting&] +[s7; [%-*C@3 compare]-|the sorting predicate function: the function is +supposed to return [* true] whenever its first parameter ([/ v1]) +is less than the second parameter ([/ v2]) according to the desired +ordering .&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Sort`(`):%- [@(0.0.255) void]_[* Sort]()&] +[s5; Sorts the array according to the default ordering predicate +for the first source index. This is equivalent to calling [* Sort(0)].&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ColumnSort`(int`,const ValueOrder`&`):%- [@(0.0.255) void]_[* ColumnSor +t]([@(0.0.255) int]_[*@3 column], [@(0.0.255) const]_[_^ValueOrder^ ValueOrder][@(0.0.255) `& +]_[*@3 order])&] +[s5; Sorts by the column. Note that this is different from Sort, +because the final converted value of column is used (which can +even be combination of more indexes).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetSortColumn`(int`,bool`):%- [@(0.0.255) void]_[* SetSortColumn]([@(0.0.255) i +nt]_[*@3 ii], [@(0.0.255) bool]_[*@3 descending]_`=_[@(0.0.255) false])&] +[s5; Sets the `"sorting`" column and calls DoColumnSort. This setting +is used by DoColumnSort.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ToggleSortColumn`(int`):%- [@(0.0.255) void]_[* ToggleSortColumn]([@(0.0.255) i +nt]_[*@3 ii])&] +[s5; Similar to SetSortColumn, but if the column is already set, +descending flag is inverted; otherwise descending flag is set +to false (indicating ascending sort).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoColumnSort`(`):%- [@(0.0.255) void]_[* DoColumnSort]()&] +[s5; Sorts the array by sorting column and indicates it by setting +an image in the header.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ClearCache`(`):%- [@(0.0.255) void]_[* ClearCache]()&] +[s5; Invalidates the whole [/ convert cache]. The convert cache keeps +the results of the [* Convert`::Format] method applied to individual +array data cells for performance reasons. Whenever you call the +[* ClearCache] method, all cache entries are marked as obsolete +and the [* Convert]`'s [* Format] method will be called as soon as +the converted value of a table cell is required (usually during +the next [* Paint]).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:InvalidateCache`(int`):%- [@(0.0.255) void]_[* InvalidateCache]([@(0.0.255) i +nt]_[*@3 i])&] +[s5; Invalidates a given row in the [/ convert cache]. For performance +reasons, the results of the [* Convert`::Format] method applied +to the individual data cells are kept in a cache. This function +marks a given row of the cache as obsolete; this means the next +time the converted values are to be used (usually within the +[* Paint] routine or when setting up the row editor controls), +the [* Convert] objects are used again to generate the actualized +output values.&] +[s7; [*C@3 i]-|zero`-based row index&] +[s3; &] +[s0; &] +[s0; [* Cursor and selection management]&] +[s3; &] +[s0; &] +[s1;:ArrayCtrl`:`:ScrollUp`(`):%- [@(0.0.255) void]_[* ScrollUp]()&] +[s1;:ArrayCtrl`:`:ScrollDown`(`):%- [@(0.0.255) void]_[* ScrollDown]()&] +[s1;:ArrayCtrl`:`:ScrollPageUp`(`):%- [@(0.0.255) void]_[* ScrollPageUp]()&] +[s1;:ArrayCtrl`:`:ScrollPageDown`(`):%- [@(0.0.255) void]_[* ScrollPageDown]()&] +[s1;:ArrayCtrl`:`:ScrollEnd`(`):%- [@(0.0.255) void]_[* ScrollEnd]()&] +[s1;:ArrayCtrl`:`:ScrollBegin`(`):%- [@(0.0.255) void]_[* ScrollBegin]()&] +[s5; Scrolls the content of ArrayCtrl.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetSelectCount`(`)const:%- [@(0.0.255) int]_[* GetSelectCount]()_[@(0.0.255) c +onst]&] +[s5; Returns the number of selected row within the table.&] +[s7; [*/ Return value]-|number of selected records (in the range [/ `[0 +.. GetCount()`]])&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsSelection`(`)const:%- [@(0.0.255) bool]_[* IsSelection]()_[@(0.0.255) c +onst]&] +[s5; Checks whether any rows are selected. Equivalent to [* GetSelectCount() +> 0].&] +[s7; [*/ Return value]-|[* true] `= there is at least one selected row, +[* false] `= there is none.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Select`(int`,bool`):%- [@(0.0.255) void]_[* Select]([@(0.0.255) int]_[*@3 i +], [@(0.0.255) bool]_[*@3 sel]_`=_[@(0.0.255) true])&] +[s5; Selects / unselects a given row.&] +[s7; [%-*C@3 i]-|zero`-based row index&] +[s7; [%-*C@3 sel]-|[* true] `= add row to the current selection, [* false] +`= remove row from selection&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Select`(int`,int`,bool`):%- [@(0.0.255) void]_[* Select]([@(0.0.255) int]_ +[*@3 i], [@(0.0.255) int]_[*@3 count], [@(0.0.255) bool]_[*@3 sel]_`=_[@(0.0.255) true])&] +[s5; Selects / unselects a given row range.&] +[s7; [%-*C@3 i]-|zero`-based index of the first row to select / unselect&] +[s7; [%-*C@3 count]-|number of rows to select / unselect&] +[s7; [%-*C@3 sel]-|[* true] `= select the rows, [* false] `= unselect the +rows&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsSelected`(int`)const:%- [@(0.0.255) bool]_[* IsSelected]([@(0.0.255) in +t]_[*@3 i])_[@(0.0.255) const]&] +[s5; Checks whether a given row is selected. For tables without the +multiselection option, this is equal to the check [* GetCursor() +`=`= i].&] +[s7; [%-*C@3 i]-|zero`-based row index to check for selection&] +[s7; [*/ Return value]-|[* true] `= row is selected, [* false] `= not selected&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsSel`(int`)const:%- [@(0.0.255) bool]_[* IsSel]([@(0.0.255) int]_[*@3 i])_ +[@(0.0.255) const]&] +[s5; If there is selection in the widget, returns true if [%-*@3 i] +is selected, otherwise returns true if cursor is at [%-*@3 i].&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ClearSelection`(`):%- [@(0.0.255) void]_[* ClearSelection]()&] +[s5; Clears the current selection (unselects all selected rows).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsCursor`(`)const:%- [@(0.0.255) bool]_[* IsCursor]()_[@(0.0.255) const]&] +[s5; Checks whether the cursor is within the table. This is equivalent +to [* GetCursor()_>`=_0].&] +[s7; [*/ Return value]-|&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetCursor`(int`):%- [@(0.0.255) bool]_[* SetCursor]([@(0.0.255) int]_[*@3 i +])&] +[s5; Sets the current cursor row. When an array row is open for editing, +the function first commits the edited row, then moved the cursor +to the new row. When the edited row cannot be commited, the function +returns [* false] and doesn`'t change the cursor location.&] +[s7; [%-*C@3 i]-|zero`-based row index&] +[s7; [*/ Return value]-|[* true] `= cursor has been moved, [* false ]when +not (when committing the previously edited row failed)&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:KillCursor`(`):%- [@(0.0.255) bool]_[* KillCursor]()&] +[s5; Moves the cursor away from the array. When an array row is open +for editing, the function first commits the edited row, then +moved the cursor away from the array. When the edited row cannot +be commited, the function returns [* false] and doesn`'t change +the cursor location.&] +[s7; [*/ Return value]-|[* true] `= cursor has been moved away from the +array, [* false] when not (when committing the previously edited +row failed)&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:CancelCursor`(`):%- [@(0.0.255) void]_[* CancelCursor]()&] +[s5; Cancels editation of the row being currently edited. All changes +made in the individual column editors are rejected.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetCursor`(`)const:%- [@(0.0.255) int]_[* GetCursor]()_[@(0.0.255) const]&] +[s5; Returns the current cursor row, `-1 when none.&] +[s7; [*/ Return value]-|zero`-based cursor row index, `-1 `= cursor +is not in the array&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GoBegin`(`):%- [@(0.0.255) void]_[* GoBegin]()&] +[s5; Moves the cursor to the first row in the array (equivalent to +[* SetCursor(0)]).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GoEnd`(`):%- [@(0.0.255) void]_[* GoEnd]()&] +[s5; Moves the cursor to the last array row (equivalent to [* SetCursor(GetCount() +`- 1)]).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetCursorSc`(`)const:%- [@(0.0.255) int]_[* GetCursorSc]()_[@(0.0.255) co +nst]&] +[s5; Returns the visual vertical position of the cursor row relative +to the current view. This method, in combination with [* ScCursor], +can be used to reposition the cursor row while maintaining the +same visual position of the row within the array view.&] +[s7; [*/ Return value]-|an integer describing the vertical position +of the cursor row relative to the array view&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ScCursor`(int`):%- [@(0.0.255) void]_[* ScCursor]([@(0.0.255) int]_[*@3 a]) +&] +[s5; Modifies the scrollbar position so that the current cursor row +appears at a given vertical position relative to the array view. +By doing the following sequence of operations: [* GetCursorSc], +then reposition the cursor row, then [* ScCursor], you can achieve +cursor relocation while maintaining its visual location within +the array view.&] +[s7; [%-*C@3 a]-|an integer describing the vertical position of the +cursor row (typically a number returned by a previous call to +[* GetCursorSc])&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:CenterCursor`(`):%- [@(0.0.255) void]_[* CenterCursor]()&] +[s5; Modifies the scrollbar position so that the current cursor row +appears in the middle of the array view.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ScrollInto`(int`):%- [@(0.0.255) void]_[* ScrollInto]([@(0.0.255) int]_[*@3 l +ine])&] +[s5; Moves the scrollbar by the least possible amount in order to +make the given array row visible. When the given array row is +already visible, the function does nothing.&] +[s7; [%-*C@3 line]-|zero`-based row index of the array row to make visible&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ScrollIntoCursor`(`):%- [@(0.0.255) void]_[* ScrollIntoCursor]()&] +[s5; Moves the scrollbar by the least possible amount in order to +make the cursor row visible. This is equivalent to [* ScrollInto(GetCursor())].&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetCursor`(`)const:%- [@(0.0.255) int]_[* GetCursor]()_[@(0.0.255) const]&] +[s5; Returns the current vertical scrollbar position.&] +[s7; [*/ Return value]-|Pixel position of the vertical scrollbar. Position +0 is at the very top (the top row of the array is fully visible).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:ScrollTo`(int`):%- [@(0.0.255) void]_[* ScrollTo]([@(0.0.255) int]_[*@3 sc]) +&] +[s5; Moves the vertical array scrollbar to a given position.&] +[s7; [%-*C@3 sc]-|Pixel position of the scrollbar. The visible portion +of the array can be obtained conceptually by taking the stack +of array rows with its top aligned at the top of the view and +moving it [/ sc] pixels upwards.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Find`(const Value`&`,int`,int`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) c +onst]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v], [@(0.0.255) int]_[*@3 ii]_`=_[@3 0], +[@(0.0.255) int]_[*@3 from]_`=_[@3 0])_[@(0.0.255) const]&] +[s5; [%-*C@3 v]-|value to look for in the given source index&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the source index to +search&] +[s7; [%-*C@3 from]-|zero`-based row index to start the search from&] +[s7; [*/ Return value]-|zero`-based number of the matched row, `-1 when +none&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Find`(const Value`&`,const Id`&`,int`)const:%- [@(0.0.255) int]_[* Find +]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const +][_^Id^ Id]`&_[*@3 id], [@(0.0.255) int]_[*@3 from]_`=_[@3 0])_[@(0.0.255) const]&] +[s5; Locates the row (using linear search beginning at the row [/ from]) +in which the source index value identified by [/ id] equals [/ val]. +If such a row is found, the function returns its zero`-based +index. When not matched, the function returns `-1.&] +[s7; [%-*C@3 v]-|value to look for in the given source index&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [%-*C@3 from]-|zero`-based row index to start the search from&] +[s7; [*/ Return value]-|zero`-based number of the matched row, `-1 when +none&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:FindSetCursor`(const Value`&`,int`,int`):%- [@(0.0.255) bool]_[* FindSe +tCursor]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 val], +[@(0.0.255) int]_[*@3 ii]_`=_[@3 0], [@(0.0.255) int]_[*@3 from]_`=_[@3 0])&] +[s5; Locates the row (using linear search beginning at the row [/ from]) +in which the source index value identified by its ordinal number +[/ ii] equals [/ val]. If such a row is found, the [* SetCursor] is +called automatically to move the cursor to such a row.&] +[s7; [%-*C@3 val]-|value to look for in the given source index&] +[s7; [%-*C@3 ii]-|zero`-based ordinal number of the source index to +search&] +[s7; [%-*C@3 from]-|zero`-based row index to start the search from&] +[s7; [*/ Return value]-|zero`-based number of the matched row, `-1 when +none&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:FindSetCursor`(const Value`&`,const Id`&`,int`):%- [@(0.0.255) bool]_ +[* FindSetCursor]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 val], +[@(0.0.255) const ][_^Id^ Id]`&_[*@3 id], [@(0.0.255) int]_[*@3 from]_`=_[@3 0])&] +[s5; Locates the row (using linear search beginning at the row [/ from]) +in which the source index value identified by [/ id] equals [/ val]. +If such a row is found, the [* SetCursor] is called automatically +to move the cursor to such a row.&] +[s7; [%-*C@3 val]-|value to look for in the given source index&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [%-*C@3 from]-|zero`-based row index to start the search from&] +[s7; [*/ Return value]-|[* true] `= the desired row was found (and the +cursor set), [* false] when not&] +[s3; &] +[s0;* &] +[s0; [* User interface elements]&] +[s3; &] +[s0; &] +[s1;:ArrayCtrl`:`:StdBar`(Bar`&`):%- [@(0.0.255) void]_[* StdBar]([_^Bar^ Bar][@(0.0.255) `&]_ +[*@3 menu])&] +[s5; The default array local menu. The default local menu consists +of the standard editation actions (inserting / appending / duplicating +a row, editing a row, removing a row, moving a row, select all +rows) filtered by the array properties enabling / disabling the +various GUI elements (item insertion / deletion etc.). &] +[s7; [*C@3 menu]-|the [* Bar] object representing the menu being generated&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsModified`(int`)const:%- [@(0.0.255) bool]_[* IsModified]([@(0.0.255) in +t]_[*@3 ii])_[@(0.0.255) const]&] +[s5; Checks a source index in the currently edited row for changes.&] +[s7; [%-*C@3 ii]-|zero`-based row index&] +[s7; [*/ Return value]-|[* true] `= the index has been modified, [* false] +`= the index is in its original state&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IsModified`(const Id`&`)const:%- [@(0.0.255) bool]_[* IsModified]([@(0.0.255) c +onst ][_^Id^ Id]`&_[*@3 id])_[@(0.0.255) const]&] +[s5; Checks a source index in the currently edited array row for +changes.&] +[s7; [%-*C@3 id]-|source index identifier&] +[s7; [*/ Return value]-|[* true] `= the source index has been modified, +[* false ]when not&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:StartEdit`(int`):%- [@(0.0.255) bool]_[* StartEdit]([@(0.0.255) int]_[*@3 d +]_`=_[@3 0])&] +[s5; Opens the current cursor row for editing and sets focus to the +[/ d]`-th column.&] +[s7; [%-*C@3 d]-|zero`-based column index&] +[s7; [*/ Return value]-|[* true] `= editation successfully initiated, +[* false] when not (when the array is in [* ReadOnly] mode or it +has no editable columns)&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:GetEditColumn`(`)const:%- [@(0.0.255) int]_[* GetEditColumn]()_[@(0.0.255) c +onst]&] +[s5; Returns the column being currently edited.&] +[s7; [*/ Return value]-|zero`-based index of the column being edited, +`-1 `= none&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoEdit`(`):%- [@(0.0.255) void]_[* DoEdit]()&] +[s5; Opens the current cursor row for editing.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoInsert`(int`):%- [@(0.0.255) void]_[* DoInsert]([@(0.0.255) int]_[*@3 cur +sor])&] +[s5; Begins the GUI insertion of a new row at a given location.&] +[s7; [%-*C@3 cursor]-|zero`-based location of the new row&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoInsertBefore`(`):%- [@(0.0.255) void]_[* DoInsertBefore]()&] +[s5; Begins the GUI insertion of a new row above the current row.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoInsertAfter`(`):%- [@(0.0.255) void]_[* DoInsertAfter]()&] +[s5; Begins the GUI insertion of a new row below the current row.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoAppend`(`):%- [@(0.0.255) void]_[* DoAppend]()&] +[s5; Begins the GUI insertion of a new row at the end of the array.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoRemove`(`):%- [@(0.0.255) virtual] [@(0.0.255) bool]_[* DoRemove]()&] +[s5; Performs the GUI`-based removal of the current cursor row. When +the [* AskRemove] property is set to [* true] and the user cancels +the confirmation dialog, the function returns [* false] and the +current row is not removed.&] +[s7; [*/ Return value]-|[* true] `= row has been removed successfully, +[* false] `= user has canceled the row removal&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoDuplicate`(`):%- [@(0.0.255) void]_[* DoDuplicate]()&] +[s5; Duplicates the current row and opens it for editing.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:DoSelectAll`(`):%- [@(0.0.255) void]_[* DoSelectAll]()&] +[s5; Marks all array row as selected.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AcceptEnter`(`):%- [@(0.0.255) bool]_[* AcceptEnter]()&] +[s5; Performs all necessary GUI actions equivalent to when the user +presses the [* Enter] key. The row being currently edited is committed +and, in the case it was a newly appended line and the [* NoInsertAppend] +property is not set, an additional row is added to the array +and opened for editation.&] +[s7; [*/ Return value]-|[* true] `= the current row has been successfully +committed, [* false] when not&] +[s3; &] +[s0; &] +[s0; &] +[s0; [* Content export]&] +[s0;* &] +[s3;%- &] +[s1;:ArrayCtrl`:`:AsText`(String`(`*`)`(const Value`&`)`,bool`,const char`*`,const char`*`,const char`*`,const char`*`)const:%- [_^String^ S +tring]_[* AsText]([_^String^ String]_(`*[*@3 format])([@(0.0.255) const]_Value[@(0.0.255) `& +]), [@(0.0.255) bool]_[*@3 sel]_`=_[@(0.0.255) false], [@(0.0.255) const]_[@(0.0.255) char]_ +`*[*@3 tab]_`=_`"`\t`", [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 row]_`=_`"`\r`\n`", +[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 hdrtab]_`=_`"`\t`", [@(0.0.255) const]_[@(0.0.255) c +har]_`*[*@3 hdrrow]_`=_`"`\r`\n`")_[@(0.0.255) const]&] +[s5; Generic function for conversion of ArrayCtrl content to text. +The content visible on screen is exported (means, it exports +columns defined using AddColumn, not indicies). Cells are converted +to output format using [%-*@3 format] function. If [%-*@3 sel] is +true, only rows with IsSel true are exported. [%-*@3 tab] represents +a separator text between cells in a row, [%-*@3 row] separator +of rows. [%-*@3 hdrtab] is separator of header cells (those are +texts of ArrayCtrl header) `- if NULL, no header is exported. +[%-*@3 hdrrow].is separator of header and data rows.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:SetClipboard`(bool`,bool`)const:%- [@(0.0.255) void]_[* SetClipboard]([@(0.0.255) b +ool]_[*@3 sel]_`=_[@(0.0.255) false], [@(0.0.255) bool]_[*@3 hdr]_`=_[@(0.0.255) true])_[@(0.0.255) c +onst]&] +[s5; Puts ArrayCtrl content to clipboard in text format, `"`\t`" +and `"`\r`\n`" as separators. If [%-*@3 sel] is true, only rows +with IsSel true are exported, [%-*@3 hdr] controls whether header +is exported.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AsQtf`(bool`,bool`):%- [_^String^ String]_[* AsQtf]([@(0.0.255) bool]_[*@3 s +el]_`=_[@(0.0.255) false], [@(0.0.255) bool]_[*@3 hdr]_`=_[@(0.0.255) true])&] +[s5; Returns ArrayCtrl content in QTF format. If [%-*@3 sel] is true, +only rows with IsSel true are exported, [%-*@3 hdr] controls whether +header is exported.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:AsCsv`(bool`,int`,bool`):%- [_^String^ String]_[* AsCsv]([@(0.0.255) bool +]_[*@3 sel]_`=_[@(0.0.255) false], [@(0.0.255) int]_[*@3 sep]_`=_`';`', +[@(0.0.255) bool]_[*@3 hdr]_`=_[@(0.0.255) true])&] +[s5; Returns ArrayCtrl content in csv format, using [%-*@3 sep] as +separator. If [%-*@3 sel] is true, only rows with IsSel true are +exported, [%-*@3 hdr] controls whether header is exported.&] +[s0; &] +[s0; &] +[s0; [* Notification callbacks]&] +[s3; &] +[s0; &] +[s1;:ArrayCtrl`:`:WhenLeftClick:%- [_^Callback^ Callback]_[* WhenLeftClick]&] +[s5; This callback is called whenever the user clicks an array cell.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenLeftDouble:%- [_^Callback^ Callback]_[* WhenLeftDouble]&] +[s5; This callback is called whenever the user doubleclicks an array +cell.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenBar:%- [_^Callback1^ Callback1]_[* WhenBar]&] +[s5; This callback is called whenever the local array menu has to +be regenerated. By setting this callback to a different function +/ method you can supply a custom local menu for the array. The +[* Bar`&] argument is a reference to the menu to be generated.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenEnterRow:%- [_^Callback^ Callback]_[* WhenEnterRow]&] +[s5; This callback is called every time the cursor location changes +to a different row of the array.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenAcceptRow:%- [_^Gate^ Gate]_[* WhenAcceptRow]&] +[s5; This gate is called every time an array row (open for editing) +needs to be validated. When the gate returns [* false], the validation +process is assumed to have failed, when it returns [* true], it +is assumed to have succeeded. You can use this callback to add +your own validation algorithms relevant to the array context +within your application.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenUpdateRow:%- [_^Callback^ Callback]_[* WhenUpdateRow]&] +[s5; This callback is called whenever an array row has been updated. +You can use this callback e.g. to project the changes to a database +or generally to an external data source.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenKillCursor:%- [_^Callback^ Callback]_[* WhenKillCursor]&] +[s5; This callback is called whenever the cursor is moved away from +the table.&] +[s5; [* Note:] internally, when moving the cursor (e.g. by calling the +[* SetCursor ]method), after committing the previous row the cursor +is removed from the table using [* KillCursor] and placed to the +new location afterwards. Therefore every time the cursor is moved, +the [* WhenKillCursor] callback is called as a by`-product.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenCursor:%- [_^Callback^ Callback]_[* WhenCursor]&] +[s5; This callback is called every time the cursor row number changes +(either when the cursor is removed from the table, or when it +has been moved to a different row).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenArrayAction:%- [_^Callback^ Callback]_[* WhenArrayAction]&] +[s5; This callback is called every time the source array data changes +(typically after accepting changes to a certain row or after +deleting a row).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenStartEdit:%- [_^Callback^ Callback]_[* WhenStartEdit]&] +[s5; This callback is called whenever the array row editation process +is initiated. It can be used e.g. to set up some additional properties +of the column editor objects, to fill in drop`-down lists pertaining +to certain column editors etc.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenAcceptEdit:%- [_^Callback^ Callback]_[* WhenAcceptEdit]&] +[s5; This callback is called whenever the currently edited line has +been committed.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenSelection:%- [_^Callback^ Callback]_[* WhenSelection]&] +[s5; This callback is called whenever the current array selection +changes. This includes changes to the cursor location as the +cursor is automatically considered part of the selection.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:WhenCtrlsAction:%- [_^Callback^ Callback]_[* WhenCtrlsAction]&] +[s5; This callback is called whenever some of the editor controls +constructed automatically via the column editation [/ factory] +calls its [* WhenAction] method. It can be used to watch out for +changes in the cell editors and react to specific situations +accordingly.&] +[s3; &] +[s0; &] +[s0; &] +[s0;%- &] +[ {{10000t/25b/25@3 [s0;%- [*@(229)4 ArrayCtrl`::IdInfo]]}}&] +[s3; &] +[s2;:ArrayCtrl`:`:IdInfo`:`:struct:%- [@(0.0.255)3 struct][3 _][*3 IdInfo]&] +[s4; The [* IdInfo] structure contains properties of all source array +indices. It can be used to set additional properties pertaining +to source array data.&] +[s3; &] +[s0;%- &] +[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] +[s3;%- &] +[s1;:ArrayCtrl`:`:IdInfo`:`:InsertValue`(const Value`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdI +nfo][@(0.0.255) `&]_[* InsertValue]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v +])&] +[s5; The method sets up the default source index value for newly +created rows. This is used only when the row insertion is GUI`-based +(like using the [* DoInsert] method for instance). When a row is +added to the array programmatically (e.g. using [* Add] or [* Insert]), +these default values are not used.&] +[s7; [%-*C@3 v]-|default source index value&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IdInfo`:`:InsertValue`(ValueGen`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo +][@(0.0.255) `&]_[* InsertValue]([_^ValueGen^ ValueGen][@(0.0.255) `&]_[*@3 g])&] +[s5; The method sets up a factory for generating default index values +for newly created rows. This is used only when the row insertion +is GUI`-based (like using the [* DoInsert] method for instance). +When a row is added to the array programmatically (e.g. using +[* Add] or [* Insert]), the [* InserValue] property is not consulted.&] +[s7; [%-*C@3 g]-|a reference to the value generation factory. The ownership +to the factory is not passed by this call; the caller must insure +the existence of the factory object throughout the array duration.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IdInfo`:`:Accel`(int`(`*`)`(int`)`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo +][@(0.0.255) `&]_[* Accel]([@(0.0.255) int]_(`*[*@3 filter])([@(0.0.255) int]))&] +[s5; This method sets up the source index accelerator function. The +accelerator is used to quickly locate rows using the keyboard +key presses.&] +[s7; [%-*C@3 filter]-|a [* CharFilter ]function for keypress filtering&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IdInfo`:`:Accel`(`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo][@(0.0.255) `&]_[* A +ccel]()&] +[s5; This method sets up keyboard acceleration for the given source +index. The `'trivial`' [/ CharConvert] is used for character translation.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:IdInfo`:`:GetInsertValue`(`):%- [_^Value^ Value]_[* GetInsertValue]()&] +[s5; Uses the [* InsertValue] property to generate a new source index +value (either using a fixed default value or the value creation +factory).&] +[s7; [*/ Return value]-|the generated value to be used as the default +for the newly inserted row.&] +[s3; &] +[s0; &] +[s0; &] +[s0;%- &] +[ {{10000t/25b/25@3 [s0;%- [*@(229)4 ArrayCtrl`::Column]]}}&] +[s3; &] +[s2;:ArrayCtrl`:`:Column`:`:class:%- [@(0.0.255)3 class][3 _][*3 Column][3 _:_][@(0.0.255)3 priv +ate][3 _][*@3;3 FormatConvert]&] +[s5; &] +[s0;%- [%%/ Derived from][%% ]FormatConvert&] +[s0; &] +[s0;%- The [* ArrayCtrl`::Column] structure describes an output array +column. Its methods can be used to set or query its properties, +some of which are also settable via ArrayCtrl methods.&] +[s3;%- &] +[s0;%- &] +[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] +[s3;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Add`(int`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_ +[* Add]([@(0.0.255) int]_[*@3 `_pos])&] +[s5; Adds another source data index to the list of source indices +used as the data for the given output column.&] +[s7; [%-*C@3 `_pos]-|zero`-based ordinal number of the source index&] +[s7; [*/ Return value]-|[* `*this].&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Add`(const Id`&`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* Add](const [_^Id^ Id]`&_[*@3 id])&] +[s5; Adds another source data index to the list of source indices +used as the data for the given output column.&] +[s7; [%-*C@3 id]-|the [* Id] identifier of the source index&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:AddIndex`(const Id`&`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* AddIndex]([@(0.0.255) const]_[_^Id^ Id][@(0.0.255) `&]_[*@3 id])&] +[s5; Adds another source index to the array and adds it to the list +of source indices bound to this output column. The newly created +index is assigned the given identifier.&] +[s7; [%-*C@3 id]-|the identifier for the newly created index&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:AddIndex`(`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* AddIndex]()&] +[s5; Adds another source index to the array and adds it to the list +of source indices bound to this output column.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:SetConvert`(const Convert`&`):%- [_^ArrayCtrl`:`:Column^ Co +lumn][@(0.0.255) `&]_[* SetConvert]([@(0.0.255) const]_[_^Convert^ Convert][@(0.0.255) `&]_ +[*@3 c])&] +[s5; Sets the [* Convert] object for the given column. This object +is used to convert the source values (obtained from the source +data matrix) to the values displayable and/or editable by the +respective column display / editor object.&] +[s5; [* Note:] the ownership of the [* Convert] object is not transferred +by this function. The array merely stores a pointer to the Convert +object. It is up to the host application to keep the Convert +object alive as long as necessary (until the ArrayCtrl object +is destroyed or all references to the Convert object obliterated +by new calls to the [* SetConvert] method). In any case, most Convert`-based +object do not support copying at all; moreover, as the Convert`-based +objects are mostly derived from the basic class, their copying +is normally prone to slicing.&] +[s7; [%-*C@3 c]-|a constant reference to the Convert object to use for +the given column&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:SetFormat`(const char`*`):%- [@(0.0.255) virtual] +[_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_[* SetFormat]([@(0.0.255) const]_[@(0.0.255) c +har]_`*[*@3 fmt])&] +[s5; Sets the format string to use for the default value formatting. +When no Convert object is set for the column, the source value +is normally passed to the [* NFormat] function where the [/ fmt] +argument defines the desired formatting pattern.&] +[s7; [%-*C@3 fmt]-|a [* NFormat]`-compatible formatting pattern&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:SetDisplay`(const Display`&`):%- [_^ArrayCtrl`:`:Column^ Co +lumn][@(0.0.255) `&]_[* SetDisplay]([@(0.0.255) const]_[_^Display^ Display][@(0.0.255) `&]_ +[*@3 d])&] +[s5; Sets the default Display to use for this column. The column +Display can be overridden for certain array cells by calls to +the [*^topic`:`/`/CtrlLib`/src`/ArrayCtrl`$en`-us`#`:`:ArrayCtrl`:`:SetDisplay`(int`,int`,const Display`&`)^ A +rrayCtrl`::SetDisplay] method.&] +[s5; [* Note:] the ownership to the Display object is not transferred +by this function. The array merely stores a pointer to the Display; +it is up to the host application to keep the Display object alive +as long as necessary.&] +[s7; [%-*C@3 d]-|a reference to the Display object&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Edit`(Ctrl`&`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* Edit]([_^Ctrl^ Ctrl][@(0.0.255) `&]_[*@3 e])&] +[s5; Sets up the Ctrl`-based object to use for inline array column +editing.&] +[s7; [%-*C@3 e]-|a reference to the editor control object&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Ctrls`(Callback1``&`>`):%- [_^ArrayCtrl`:`:Column^ C +olumn][@(0.0.255) `&]_[* Ctrls]([_^Callback1^ Callback1]<[_^One^ One]<[_^Ctrl^ Ctrl]>`&>_[*@3 f +actory])&] +[s5; The methods sets up a factory which the ArrayCtrl uses as necessary +to create new Ctrl`'s for editing a given column. The argument +of this function is a callback, which, upon execution, should +allocate (normally using the [* new] operator) the desired editor +object and set it to its argument. If the position of Ctrl is +equivalent to `'SetRect(0, 0, 0, 0)`', which is the default value, +Ctrl is resized to fit the ArrayCtrl cell accurately, otherwise +the position represents the position within the cell.&] +[s7; [%-*C@3 factory]-|callback used for new control creation&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Ctrls`(void`(`*`)`(One``&`)`):%- [_^ArrayCtrl`:`:Column^ C +olumn][@(0.0.255) `&]_[* Ctrls]([@(0.0.255) void]_(`*[*@3 factory])(One`&))&] +[s5; This method sets up a factory which the ArrayCtrl uses as necessary +to create new Ctrl`'s for editing a given column. The argument, +a global function, is supposed to allocate a new editor control +(normally using the [* new] operator) and set it to its argument. +If the position of Ctrl is equivalent to `'SetRect(0, 0, 0, 0)`', +which is the default value, Ctrl is resized to fit the ArrayCtrl +cell accurately, otherwise the position represents the position +within the cell. If the position of Ctrl is equivalent to `'SetRect(0, +0, 0, 0)`', which is the default value, Ctrl is resized to fit +the ArrayCtrl cell accurately, otherwise the position represents +the position within the cell.&] +[s7; [%-*C@3 factory]-|a global function used for editor control creation&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Ctrls`(`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]> +_[_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_[* Ctrls]()&] +[s5; This member template sets up a default factory for creating +editor controls of a given type. Every time the ArrayCtrl needs +to create a new editor control, an object of the type [* T] is +created automatically (using the [* new] operator). If the position +of Ctrl is equivalent to `'SetRect(0, 0, 0, 0)`', which is the +default value, Ctrl is resized to fit the ArrayCtrl cell accurately, +otherwise the position represents the position within the cell.&] +[s7; [*C@4 T]-|the desired object editor type &] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:InsertValue`(const Value`&`):%- [_^ArrayCtrl`:`:Column^ Col +umn][@(0.0.255) `&]_[* InsertValue]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v +])&] +[s5; Instructs the ArrayCtrl object to initialize this column in +newly created rows to the given value [/ v]. (This applies only +to GUI`-based row insertion using methods like [* DoInsert] etc., +the low`-level, programmer`-controlled row insertion methods +like [* Add] or [* Insert] always initialize the source data matrix +with [* Null]`'s).&] +[s7; [%-*C@3 v]-|the value to use as the default for newly inserted +rows&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:InsertValue`(ValueGen`&`):%- [_^ArrayCtrl`:`:Column^ Column +][@(0.0.255) `&]_[* InsertValue]([_^ValueGen^ ValueGen][@(0.0.255) `&]_[*@3 g])&] +[s5; Programs the ArrayCtrl object to use the given [* ValueGen] factory +for default value generation for newly created rows. This can +be used e.g. to generate unique UUID`'s or primary keys using +an Oracle SEQUENCE object for a primary key column.&] +[s7; [%-*C@3 g]-|a reference to the ValueGen object used for default +value generation&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:NoClickEdit`(`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* NoClickEdit]()&] +[s5; Disables entering the editation mode when clicking the respective +column.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Cache`(`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_[* C +ache]()&] +[s5; Enables using the cache to store the converted values of this +column. By default, converted value caching is turned off to +make cell value conversion entirely dynamic; however, very often +it is advisable to enable using the cache, especially when the +conversion is relatively slow (for instance, when the conversion +queries a database connection to convert the value).&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Accel`(int`(`*`)`(int`)`):%- [_^ArrayCtrl`:`:Column^ Column +][@(0.0.255) `&]_[* Accel]([@(0.0.255) int]_(`*[*@3 filter])([@(0.0.255) int]))&] +[s5; Sets up the accelerator for the given column. A given filtering +function is used to convert keystrokes before acceleration.&] +[s7; [%-*C@3 filter]-|a [* CharConvert]`-style function to use for keystroke +conversion&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Accel`(`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_[* A +ccel]()&] +[s5; Sets up the accelerator for the given column. No keystroke conversion +is performed.&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Margin`(int`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* Margin]([@(0.0.255) int]_[*@3 m])&] +[s5; Sets up the margin width for the given column. This is equivalent +to calling the [*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Column`:`:SetMargin`(int`)^ S +etMargin] method of the underlying [* HeaderTab].&] +[s7; [%-*C@3 m]-|&] +[s7; [*/ Return value]-|[* `*this]&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:Sorting`(const ValueOrder`&`):%- [_^ArrayCtrl`:`:Column^ Co +lumn][@(0.0.255) `&]_[* Sorting]([@(0.0.255) const]_[_^ValueOrder^ ValueOrder][@(0.0.255) `& +]_[*@3 o])&] +[s1;:ArrayCtrl`:`:Column`:`:Sorting`(int`(`*`)`(const Value`&a`,const Value`&b`)`):%- [_^ArrayCtrl`:`:Column^ C +olumn][@(0.0.255) `&]_[* Sorting]([@(0.0.255) int]_(`*[*@3 c])([@(0.0.255) const]_Value[@(0.0.255) `& +]_a, [@(0.0.255) const]_Value[@(0.0.255) `&]_b))&] +[s1;:ArrayCtrl`:`:Column`:`:Sorting`(`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `&]_ +[* Sorting]()&] +[s5; Activates sorting of ArrayCtrl column by clicking on its header +tab. Parameterless version uses default Value ordering using +StdValueCompare.&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:SortDefault`(`):%- [_^ArrayCtrl`:`:Column^ Column][@(0.0.255) `& +]_[* SortDefault]()&] +[s5; Sets this column to be initial sorting column (calls SetSortColumn +of ArrayCtrl).&] +[s3; &] +[s6;%- &] +[s1;:ArrayCtrl`:`:Column`:`:HeaderTab`(`):%- [_^HeaderCtrl`:`:Column^ HeaderCtrl`::Colum +n][@(0.0.255) `&]_[* HeaderTab]()&] +[s5; Returns the [* HeaderCtrl`::Column] object describing the given +column. This object can be used to set up additional column properties +(like column width constraints or the [*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Column`:`:Callback WhenAction^ W +henAction] callback).&] +[s3; &] +[s0; &] +[s0; &] +[s0;%- &] +[ {{10000t/25b/25@3 [s0;%- [*@(229)4 ArrayCtrl`::Order]]}}&] +[s3; &] +[s2;:ArrayCtrl`:`:Order`:`:struct:%- [@(0.0.255)3 struct][3 _][*3 Order]&] +[s4; The [* Order] object is used for array row sorting. The overloaded +[* operator ()] acts as the sorting predicate, which is consulted +within the sorting method to determine which of a given pair +of row is `'less`' according to the desired sorting.&] +[s3;%- &] +[s0;%- &] +[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] +[s3;%- &] +[s1;:ArrayCtrl`:`:Order`:`:operator`(`)`(const Vector``&`,const Vector``&`)const:%- [@(0.0.255) v +irtual] [@(0.0.255) bool]_[* operator()]([@(0.0.255) const]_[_^Vector^ Vector]<[_^Value^ Va +lue]>`&_[*@3 row1], [@(0.0.255) const]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 row2])_[@(0.0.255) c +onst]_`=_[@3 0]&] +[s5; The sorting predicate. This method should return [* true] when +its first argument ([/ row1]) is less than the second argument +([/ row2]) according to the desired ordering.&] +[s7; [%-*C@3 row1]-|an array of source data index values for the first +of the rows to compare&] +[s7; [%-*C@3 row2]-|an array of source data index values for the other +row to compare&] +[s7; [*/ Return value]-|[* true] `= row1 < row2, [* false] `= row1 >`= row2&] +[s3; &] +[s0;%CS-CZ ]] \ No newline at end of file diff --git a/uppdev/RichEditTest/main.cpp b/uppdev/RichEditTest/main.cpp index 144180eac..91a5fff88 100644 --- a/uppdev/RichEditTest/main.cpp +++ b/uppdev/RichEditTest/main.cpp @@ -47,7 +47,7 @@ GUI_APP_MAIN e.SetPosInfo(f); // e.Pick(ParseQTF(AsQTF(CreateImageObject(CtrlImg::exclamation)) + " hahahaha")); MyApp w; - w.ToolWindow(); +// w.ToolWindow(); w.SetRect(0, 0, 700, 500); w.Sizeable().Zoomable(); w.Add(e.SizePos()); @@ -61,5 +61,8 @@ GUI_APP_MAIN SaveFile(FileName(), x); f = e.GetPosInfo(); StoreToFile(f, ConfigFile("pos")); + + SaveFile(GetHomeDirFile("test.rtf"), EncodeRTF(e.Get())); + LOG("Exit"); }