1[ $$0,0#00000000000000000000000000000000:Default] 2[{_} 3[s0;2 &] 4[ {{10000t/25b/25@3 [s0; [*@(229)4 ArrayCtrl]]}}&] 5[s0;i448;a25;kO9;2 &] 6[s0; &] 7[s0;*@3 &] 8[s0;i448;a25;kKO9;:ArrayCtrl`:`:class: [@(0.0.255) class]_[* ArrayCtrl]_:_[@(0.0.255) public 9]_[*@3 Ctrl]&] 10[s0;i448;a25;kKO9;2 &] 11[s0;* &] 12[s0;* &] 13[s0; [* ArrayCtrl] implements basic grid functionality. It is typically 14used for display and editing of arrays of values or (heterogeneous) 15records. The records correspond to rows in the array, the individual 16fields within each record can be either bound to columns or to 17any generic [* Ctrl]`'s, thus supporting basic master`-detail functionality 18with practically no additional cost.&] 19[s0; &] 20[s0; The standard derived classes extend various aspects of the ArrayCtrl 21functionality. [* SqlArray] adds the nuts and bolts needed for 22editing SQL`-based tables, whereas [* PopupTable] couples the ArrayCtrl 23functionality with the drop`-down mechanism very similar to the 24one used in popup menus. This opens the door for implementing 25drop`-down controls like [* DropList] (aka [/ combo box]) or [* DropChoice] 26(usually used together with a control of the [* EditField ]or [* DataPusher] 27family to support coupling native data editing with drop`-down 28selection, widely used for history or commonly used predefined 29values. The [* ArrayPair] is, as its name implies, a pair of [* ArrayCtrl]`'s 30with arrow buttons between them allowing to visually select subsets 31of a certain set by moving its elements between the two lists.&] 32[s0; &] 33[s0; [*+117 The array data organization: indices and columns]&] 34[s0; &] 35[s0; There is a great deal of genericity supported by the ArrayCtrl 36with respect both to its source data and its visual presentation. 37Conceptually, the source array data is a matrix of [* Value]`'s. 38There is a series of methods for accessing this source data, 39the basic ones being [* Set] and [* Get]. The rows are addressed 40by integer indices (zero based), the columns can be addressed 41either by integer indices as well, or alternatively any source 42column can be assigned an [* Id] identifier and addressed by it. 43This is especially helpful in SQL`-based tables, where the table 44column names can be used for the [* Id]`'s. A pair of methods, 45[* GetPos] and [* GetId], can be used to translate these two column 46addressing modes. In the code terminology, the columns in the 47source data matrix are called [/ indices] whereas the visual (output) 48columns are called simply [/ columns].&] 49[s0; &] 50[s0; The visual ArrayCtrl structure can be entirely independent of 51the source data structure (although it`'s seldom helpful to make 52the mapping completely arbitrary). Basically, each column can 53have an arbitrary number of indices defining its source data. 54Of course, the most common case is one index per column. This 55is also simplest to address, because the column indices are equal 56to the source data indices. However, many other combinations 57are possible, each of which can be handy in certain situations:&] 58[s0; &] 59[s0;i150;O0; Index without a column: the most common of the `"special`" 60cases is used mainly for row id`'s or other internally important 61data without visual representation. The same behaviour can be 62obtained by making a column invisible.&] 63[s0;i150;O0; Column without an index (a [/ rownum column]): this less 64common case can be used to display external data (not stored 65in the table). &] 66[s0;i150;O0; Multiple columns sharing the same index: this can be 67used to display various aspects of a complex data object or to 68display the same source data in multiple ways (e.g., a temperature 69reading in Celsius and Fahrenheit degrees).&] 70[s0;i150;O0; Column with multiple indices: can be used to display 71information gathered from multiple source data columns. This 72is used for instance in IconDes in TheIDE to display image identifiers 73together with their sizes in the list. This is the most complicated 74case because you have to implement a specific [* Display] for such 75a multi`-index column.&] 76[s0; &] 77[s0; [* Note:] in the current U`+`+ version, the implementation of index`-less 78columns (arrays with external data not stored in the source matrix) 79is rather awkward. It is planned to enhance this feature in the 80future by adding support for access to external data via a data 81accessor interface object. &] 82[s0; &] 83[s0; [*+117 ArrayCtrl GUI: selection, editing, and local menu]&] 84[s0; &] 85[s0; Array rows can be selected using the mouse or keyboard. ArrayCtrl`'s 86support both single`-selection (plain cursor) and multiselection 87model. Of course, row selection can be controlled via the programmatic 88array interface as well. The selection and cursor always spans 89entire rows, it is not possible (without substantial patchwork) 90to select only certain columns or individual cells.&] 91[s0; &] 92[s0; The ArrayCtrl rows can be inserted, edited and deleted either 93programmatically, or via common GUI elements (mouse and keyboard 94selection, local menu). It is possible to alter the standard 95ArrayCtrl local menu using the [* WhenBar] callback.&] 96[s0; &] 97[s0; [* Note:] it is worth noting that the standard editing keys ([* Insert] 98`= row insertion, [* Ctrl`+Enter] `= editing and [* Ctrl`+Delete] 99`= deletion) are not hardcoded in the ArrayCtrl`'s [* Key] method, 100they are mere hotkeys for the relevant local menu items. When 101you change the ArrayCtrl`'s local menu, the editing hotkeys change 102accordingly.&] 103[s0; &] 104[s0; A special but rather important case of array editing is [/ sorting]: 105there is no specific standard GUI for that. If you aren`'t content 106with programmatic sorting (e.g. after opening a dialog or after 107loading the array data), you have to implement some GUI for that 108as well. In certain cases, it is cool to use the [* HeaderCtrl] 109[* WhenAction] method to allow sorting the array by clicking on 110the header columns; alternatively you can add a sort function 111to the array local menu or possibly somewhere else (like a standalone 112button in the dialog).&] 113[s0; &] 114[s0; [* Insertion tricks: before, after, and the secrets of the AppendLine]&] 115[s0; &] 116[s0; In todays text editors, when you type a new letter, it is trivial 117to see where in the text will the new letter go. This is so because 118the caret is always positioned between a pair of successive letters 119and thus is well defines the insertion spot. Additionally, the 120caret can be placed in front of the first letter or after the 121last letter, which naturally allows typing some text at the very 122beginning or end.&] 123[s0; &] 124[s0; When inserting new rows into the array controls, things are 125a bit more tricky. This is so because, unlike in the text editor, 126the cursor is not placed [/ between] two successive rows, but [/ over] 127a certain row. This is of course necessary to make row editing 128possible (note that in the aforementioned text editor analogy, 129a single letter is an atomic object whereas in the array it is 130a potentially complex structure consisting of many columns and 131data items). However, when it comes to row insertion, it has 132two main troubles as its implication:&] 133[s0; &] 134[s0;i150;O9; [* 1.]-|It is necessary to decide somehow whether the new 135row will go [/ above] or [/ below] the cursor row.&] 136[s0;i150;O9; [* 2.]-|In an array with [/ n] rows, there are [/ n`+1] possible 137locations for a new row (before the row #0, #1 ... #([/ n`-1]) 138and after the last row), but only [/ n] distinct cursor locations.&] 139[s0; &] 140[s0; Over the years, during the development of U`+`+, we experimented 141with multiple ways to overcome these logical problems. As a result 142of this, the ArrayCtrl supports a few methods allowing to fine`-tune 143the row insertion mechanism. It is also worth noting that there 144are cases, like in the case of SQL`-based tables, where the row 145ordering is arbitrary or implicit and the exact `'location`' 146of a new row doesn`'t make any sense. In such cases, it is possible 147to replace array [/ insertion] function with the [/ append] function 148emphasizing the fact that the visual row order is unimportant 149and that insertion means merely adding a new record to the record 150set.&] 151[s0; &] 152[s0; For arrays in which the order is important, there are two ways 153to solve the [/ n`+1] row positions dilemma:&] 154[s0; &] 155[s0;i150;O9; [* 1.]-|Replacing the Insert function with a pair of functions 156for inserting a new row [/ before] / [/ after] the current row.&] 157[s0;i150;O9; [* 2.]-|Visually extending the array by adding a pseudo`-row 158with no real data at its end; this creates the [/ n`+1]`-th cursor 159position necessary to denote all the available row insertion 160locations.&] 161[s0; &] 162[s0; In the first case, it is also possible to select which of the 163insertion functions (before / after) takes precedence (which 164of the two actions should be bound to the standard [* Insert] hotkey). 165This corresponds to the [* BeforeAfterInserting] and [* AfterBeforeInserting] 166methods. The second case is called the [* AppendLine] and is activated 167by setting the property with the same name.&] 168[s0; &] 169[s0; To make all this even more interesting, a special mechanism 170called [* InsertAppend] is available to make array filling as easy 171as possible. When activated and the user appends a new row at 172the table end, after pressing [* Enter] (to commit the inserted 173row) another row is automatically added after it and opened for 174editing. This mechanism is turned on by default, but it can be 175disable by setting the [* NoInsertAppend] property to true.&] 176[s0;0 &] 177[s0; &] 178[s0; &] 179[ {{10000t/25b/25@3 [s0; [*@(229)4 Categorized method summary]]}}&] 180[s0;b42; [2 The following table summarizes ArrayCtrl methods according 181to the aspect of functionality they support together with a very 182brief description. For more thorough documentation of the individual 183methods see below.]&] 184[s0; &] 185[ {{2337:7663-1 [s0; [* Initialization and configuration]] 186:: [s0; ] 187:: [s0; Reset] 188:: [s0; clears column `& index definition and restores all ArrayCtrl 189default properties] 190:: [s0; IsEdit] 191:: [s0; true `= array state automaton is currently in row editing mode] 192:: [s0; IsInsert] 193:: [s0; true `= array state automaton is currently in row insertion 194mode] 195:: [s0; SetLineCy] 196:: [s0; sets array row height (global or individual for a single row)] 197:: [s0; GetLineCy] 198:: [s0; returns logical array row height (value set by preceding SetLineCy)] 199:: [s0; GetLineY] 200:: [s0; returns [/ y] position of given row (relative to table beginning)] 201:: [s0; `[No`]AppendLine] 202:: [s0; `[do not`] display an additional pseudo`-row used for row insertion] 203:: [s0; IsAppendLine] 204:: [s0; returns actual value of the [* AppendLine] property] 205:: [s0; ShowAppendLine] 206:: [s0; scrolls the table view to display the appending line] 207:: [s0; `[No`]Inserting] 208:: [s0; `[do not`] allow inserting new rows] 209:: [s0; IsInserting] 210:: [s0; returns actual value of the [* Inserting] property] 211:: [s0; BeforeAfterInserting] 212:: [s0; allow inserting rows before / after current row (default `= 213before)] 214:: [s0; AfterBeforeInserting] 215:: [s0; allow inserting rows before / after current row (default `= 216after)] 217:: [s0; NoInsertAppend] 218:: [s0; do not autoinsert another row after committing last row insertion] 219:: [s0; IsEditing] 220:: [s0; true `= (at least one column of the) ArrayCtrl supports editing] 221:: [s0; `[No`]Duplicating] 222:: [s0; `[do not`] allow row duplication] 223:: [s0; IsDuplicating] 224:: [s0; returns actual value of the [* Duplicating] property] 225:: [s0; Appending] 226:: [s0; allow appending new row at the table end] 227:: [s0; IsAppending] 228:: [s0; returns actual state of the [* Appending] property] 229:: [s0; AutoAppending] 230:: [s0; allow appending new row at the table end, Enter appends another 231one] 232:: [s0; IsAutoAppending] 233:: [s0; returns actual state of [* AutoAppending] property] 234:: [s0; `[No`]Removing] 235:: [s0; `[do not`] allow table row removing] 236:: [s0; IsRemoving] 237:: [s0; returns actual state of the [* Removing] property] 238:: [s0; `[No`]AskRemove] 239:: [s0; `[do not`] prompt user to confirm row removal] 240:: [s0; IsAskRemove] 241:: [s0; returns actual state of the [* AskRemove] property] 242:: [s0; Moving] 243:: [s0; allow row swapping (moving a row before / after neighbouring 244row)] 245:: [s0; IsMoving] 246:: [s0; returns actual state of the [* Moving] property] 247:: [s0; `[No`]Header] 248:: [s0; `[do not`] display table header] 249:: [s0; `[No`]Track] 250:: [s0; `[do not`] animate tracking table column widths] 251:: [s0; `[No`]VertGrid] 252:: [s0; `[do not`] display column breaks] 253:: [s0; `[No`]HorzGrid] 254:: [s0; `[do not`] display row breaks] 255:: [s0; `[No`]Grid] 256:: [s0; `[do not`] display both grids (VertGrid `+ HorzGrid)] 257:: [s0; GridColor] 258:: [s0; set grid line color] 259:: [s0; EvenRowColor] 260:: [s0; background color for even rows] 261:: [s0; OddRowColor] 262:: [s0; background color for odd rows] 263:: [s0; RowFormat] 264:: [s0; formats menu items substituting given word for the term `'row`'] 265:: [s0; RowName] 266:: [s0; sets the context`-relevant word to substitute for `'row`' in 267the local menu texts] 268:: [s0; NoCursor] 269:: [s0; do not highlight cursor row] 270:: [s0; `[No`]MouseMoveCursor] 271:: [s0; automatically move cursor as the mouse moves (used e.g. in PopupTable)] 272:: [s0; `[No`]AutoHideSb] 273:: [s0; `[do not`] display scroll bar only when necessary] 274:: [s0; MultiSelect] 275:: [s0; enable selecting multiple rows at the same time] 276:: [s0; ColumnWidths] 277:: [s0; sets logical column widths using a formatted string, e.g. `"1 2785 10 10 5 1`"]}}&] 279[s0; &] 280[ {{2337:7663-1 [s0; [* Array index `& column structure management]] 281:: [s0; ] 282:: [s0; IndexInfo] 283:: [s0; returns the [* IdInfo] structure describing an index (see below)] 284:: [s0; AddIndex] 285:: [s0; adds a new index to the source data matrix] 286:: [s0; GetIndexCount] 287:: [s0; returns number of index columns (columns in the source data 288matrix)] 289:: [s0; GetId] 290:: [s0; returns identifier of a given index (given by its integral index)] 291:: [s0; GetPos] 292:: [s0; returns integral index of source matrix column ([/ index]) identified 293by an [* Id]] 294:: [s0; SetId] 295:: [s0; sets the [* Id] identifier for a given index (column of the source 296matrix)] 297:: [s0; AddKey] 298:: [s0; sets up the first index to act as primary key (often used for 299SQL tables)] 300:: [s0; GetKeyId] 301:: [s0; returns primary key identifier (equal to [* GetId(0)])] 302:: [s0; AddColumn] 303:: [s0; adds a column`-index pair to the table (one data column, one 304output column)] 305:: [s0; AddColumnAt] 306:: [s0; adds a column bound to a given index] 307:: [s0; AddRowNumColumn] 308:: [s0; adds a column without an index (used for external data)] 309:: [s0; GetColumnCount] 310:: [s0; returns number of (visual) columns in the table] 311:: [s0; FindColumnWithPos] 312:: [s0; locates table column according to given index number] 313:: [s0; FindColumnWithId] 314:: [s0; locates table column according to index identifier] 315:: [s0; ColumnAt] 316:: [s0; returns the [* ArrayCtrl`::Column] structure describing given column] 317:: [s0; HeaderTab] 318:: [s0; returns the [* HeaderCtrl`::Column] structure for the given column] 319:: [s0; HeaderObject] 320:: [s0; returns a reference to the [* HeaderCtrl] object for this table] 321:: [s0; SerializeHeader] 322:: [s0; serialize header layout information (column widths etc.)] 323:: [s0; AddCtrl] 324:: [s0; adds an outer control`-index pair to the table (one data column, 325one outer Ctrl)] 326:: [s0; AddCtrlAt] 327:: [s0; adds an outer control bound to a given index] 328:: [s0; AddRowNumCtrl] 329:: [s0; adds an outer control without an index `- used ([/ seldom]) for 330external data] 331:: [s0; SetDisplay] 332:: [s0; sets display for a given table column or cell] 333:: [s0; GetDisplay] 334:: [s0; returns column / cell display] 335:: [s0; SetCtrl] 336:: [s0; sets a [* Ctrl] object for custom editing of a given cell] 337:: [s0; GetTotalCy] 338:: [s0; returns total row height] 339:: [s0; GetLineAt] 340:: [s0; locate table row when given an [/ y] position (relative to table 341top)] 342:: [s0; GetClickColumn] 343:: [s0; returns column number of last clicked column (Null if clicked 344outside existing rows)] 345:: [s0; GetClickRow] 346:: [s0; returns row number of last clicked row (Null if clicked outside 347existing rows)] 348:: [s0; GetClickPos] 349:: [s0; returns Point(GetClickColumn(), GetClickRow())]}}&] 350[s0; &] 351[ {{2337:7663-1 [s0; [* Data setting `& retrieval]] 352:: [s0; ] 353:: [s0; SetCount] 354:: [s0; sets number of rows in the array] 355:: [s0; SetVirtualCount] 356:: [s0; sets number of rows in the array with external data] 357:: [s0; GetCount] 358:: [s0; returns number of rows] 359:: [s0; Clear] 360:: [s0; clears array data, identical to [* SetCount(0)]] 361:: [s0; Shrink] 362:: [s0; shrinks source data matrix to the minimum necessary size] 363:: [s0; Get] 364:: [s0; returns given Value element of the source data matrix] 365:: [s0; GetOriginal] 366:: [s0; returns given element of source data matrix before editing] 367:: [s0; Set] 368:: [s0; sets given element of the source data matrix] 369:: [s0; GetKey] 370:: [s0; returns given primary key (column #0 in the data matrix)] 371:: [s0; GetOriginalKey] 372:: [s0; returns `'old`' value of primary key before editing] 373:: [s0; GetColumn] 374:: [s0; returns value of a given output column (according to its index 375mapping)] 376:: [s0; GetConvertedColumn] 377:: [s0; returns value of a given output column after applying its [* Convert]] 378:: [s0; ReadRow] 379:: [s0; returns a row of the source data matrix] 380:: [s0; Add] 381:: [s0; adds a new row at the end of table] 382:: [s0; Insert] 383:: [s0; inserts a new row into the table] 384:: [s0; Remove] 385:: [s0; removes a given table row] 386:: [s0; SwapUp] 387:: [s0; exchanges a table row with the preceding row] 388:: [s0; SwapDown] 389:: [s0; exchanges a table row with the next row] 390:: [s0; Sort] 391:: [s0; sorts table rows using a given predicate] 392:: [s0; ClearCache] 393:: [s0; clears data conversion cache] 394:: [s0; InvalidateCache] 395:: [s0; invalidates given table row in the conversion cache]}}&] 396[s0; &] 397[ {{2337:7663-1 [s0; [* Cursor `& selection management]] 398:: [s0; ] 399:: [s0; GetSelectCount] 400:: [s0; returns number of currently selected rows] 401:: [s0; IsSelection] 402:: [s0; checks whether any rows are selected (identical to [* GetSelectCount() 403> 0])] 404:: [s0; Select] 405:: [s0; selects / unselects given row or a series of rows] 406:: [s0; IsSelected] 407:: [s0; checks whether given row is selected] 408:: [s0; ClearSelection] 409:: [s0; clears the current selection] 410:: [s0; SetCursor] 411:: [s0; moves array cursor to a new row] 412:: [s0; KillCursor] 413:: [s0; removes the cursor away from the table] 414:: [s0; CancelCursor] 415:: [s0; cancels editing of current row] 416:: [s0; IsCursor] 417:: [s0; checks whether cursor is in the table (identical to [* GetCursor() 418>`= 0])] 419:: [s0; GetCursor] 420:: [s0; returns current cursor row, `-1 when none] 421:: [s0; GoBegin] 422:: [s0; moves the cursor to the first table row] 423:: [s0; GoEnd] 424:: [s0; moves the cursor to the last table row] 425:: [s0; GetCursorSc] 426:: [s0; returns the location of the cursor row within the table view 427area] 428:: [s0; ScCursor] 429:: [s0; scrolls the table to move the cursor row to given location within 430the table view] 431:: [s0; CenterCursor] 432:: [s0; scrolls the table to move cursor into the middle of the current 433view] 434:: [s0; ScrollInto] 435:: [s0; scrolls the table by minimum amount necessary to make given 436row visible] 437:: [s0; ScrollIntoCursor] 438:: [s0; scrolls the table by minimum amount necessary to make cursor 439row visible] 440:: [s0; GetScroll] 441:: [s0; returns current table scrollbar location] 442:: [s0; ScrollTo] 443:: [s0; sets table scrollbar location] 444:: [s0; Find] 445:: [s0; locates table row containing a given element] 446:: [s0; FindSetCursor] 447:: [s0; moves the cursor to table row containing a given element]}}&] 448[s0; &] 449[s0; &] 450[s0; &] 451[ {{2337:7663-1 [s0; [* GUI elements]] 452:: [s0; ] 453:: [s0; StdBar] 454:: [s0; the default array local menu] 455:: [s0; IsModified] 456:: [s0; checks modification state of given array cell] 457:: [s0; StartEdit] 458:: [s0; open current array row for editing] 459:: [s0; GetEditColumn] 460:: [s0; returns the column being currently edited] 461:: [s0; DoEdit] 462:: [s0; corresponds to the local menu `'Edit`' function] 463:: [s0; DoInsert] 464:: [s0; corresponds to the local menu `'Insert`' function] 465:: [s0; DoInsertBefore] 466:: [s0; corresponds to the local menu `'Insert before`' function] 467:: [s0; DoInsertAfter] 468:: [s0; corresponds to the local menu `'Insert after`' function] 469:: [s0; DoAppend] 470:: [s0; corresponds to the local menu `'Append`' function] 471:: [s0; DoRemove] 472:: [s0; corresponds to the local menu `'Remove`' function] 473:: [s0; DoDuplicate] 474:: [s0; corresponds to the local menu `'Duplicate`' function] 475:: [s0; DoSelectAll] 476:: [s0; selects the entire array] 477:: [s0; AcceptEnter] 478:: [s0; commits the currently edited row and possibly begins insertion 479of another row]}}&] 480[s0; &] 481[ {{2337:7663-1 [s0; [* Notification callbacks]] 482:: [s0; ] 483:: [s0; WhenLeftClick] 484:: [s0; left mouse click within the array] 485:: [s0; WhenLeftDouble] 486:: [s0; left mouse doubleclick within the array] 487:: [s0; WhenSel] 488:: [s0; called when cursor or selection status of widget changes] 489:: [s0; WhenCursor] 490:: [s0; called whenever the cursor location changes [/ (deprecated, use 491WhenSel)]] 492:: [s0; WhenKillCursor] 493:: [s0; called when the cursor moves away from the table [/ (deprecated, 494use WhenSel)]] 495:: [s0; WhenSelection] 496:: [s0; called whenever current selection changes [/ (deprecated, use 497WhenSel)]] 498:: [s0; WhenEnterRow] 499:: [s0; called whenever the cursor moves to a new row [/ (deprecated, 500use WhenSel)]] 501:: [s0; WhenUpdateRow] 502:: [s0; called after updating a row] 503:: [s0; WhenAcceptRow] 504:: [s0; additional row validation callback] 505:: [s0; WhenStartEdit] 506:: [s0; called after initiating row editing] 507:: [s0; WhenAcceptEdit] 508:: [s0; called after accepting changes to a given row] 509:: [s0; WhenArrayAction] 510:: [s0; called whenever array source data changes (after insert / delete 511/ edit)] 512:: [s0; WhenBar] 513:: [s0; can be used to supply custom local menu for the array] 514:: [s0; WhenCtrlsAction] 515:: [s0; called by [* WhenAction] callbacks of internally created controls]}}&] 516[s0;0 &] 517[s0; &] 518[s0; &] 519[s0; &] 520[ {{10000t/25b/25@3 [s0; [*@(229)4 Detailed method description]]}}&] 521[s0; &] 522[s0; [* Initialization and configuration]&] 523[s0;0 &] 524[s0; &] 525[s0;i448;a25;kKO9;:ArrayCtrl`:`:Reset`(`): [@(0.0.255)2 void][2 _][*2 Reset][2 ()]&] 526[s0;l288; [2 Clears table rows and resets all array properties to their 527default values.]&] 528[s0;0 &] 529[s0;H6;0 &] 530[s0;i448;a25;kKO9;:ArrayCtrl`:`:ShowAppendLine`(`): [@(0.0.255)2 void][2 _][*2 ShowAppendLi 531ne][2 ()]&] 532[s0;l288; [2 Show an additional pseudo`-row at the table end. When 533clicked, a new row is appended to the array.]&] 534[s0;0 &] 535[s0;H6;0 &] 536[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsEdit`(`)const: [@(0.0.255)2 bool][2 _][*2 IsEdit][2 ()_][@(0.0.255)2 c 537onst]&] 538[s0;l288; [2 Checks whether the array is currently being edited.]&] 539[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= a 540row is currently open for editing, ][*2 false][2 `= array is in 541normal browsing mode]&] 542[s0;0 &] 543[s0;H6;0 &] 544[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsInsert`(`)const: [@(0.0.255)2 bool][2 _][*2 IsInsert][2 ()_ 545][@(0.0.255)2 const]&] 546[s0;l288; [2 Checks whether a new row is currently being inserted.]&] 547[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= newly 548inserted row is currently being edited, ][*2 false][2 when not]&] 549[s0;0 &] 550[s0;H6;0 &] 551[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetLineCy`(int`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 552][2 _][*2 SetLineCy][2 (][@(0.0.255)2 int][2 _][*@3;2 cy][2 )]&] 553[s0;l288; [2 Sets the (default) array row height. For certain rows, 554this can be overriden by the two`-parameter version of this method.]&] 555[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 cy][2 -|row height in pixels]&] 556[s0;0 &] 557[s0;H6;0 &] 558[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetLineCy`(int`,int`): [@(0.0.255)2 void][2 _][*2 SetLineCy 559][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 int][2 _][*@3;2 cy][2 )]&] 560[s0;l288; [2 Sets row height for a given row. This overrides the default 561value set by the one`-parameter version of this method.]&] 562[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|row index (zero based)]&] 563[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 cy][2 -|row height in pixels, 564][*2 Null][2 `= use default row height]&] 565[s0;0 &] 566[s0;H6;0 &] 567[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetLineCy`(`)const: [@(0.0.255)2 int][2 _][*2 GetLineCy][2 () 568_][@(0.0.255)2 const]&] 569[s0;l288; [2 Returns default array row height.]&] 570[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|row height in pixels]&] 571[s0;0 &] 572[s0;H6;0 &] 573[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetLineY`(int`)const: [@(0.0.255)2 int][2 _][*2 GetLineY][2 ( 574][@(0.0.255)2 int][2 _][*@3;2 i][2 )_][@(0.0.255)2 const]&] 575[s0;l288; [2 Returns ][/2 y][2 position of given array row (the pixel 576distance between the top of first array row and ][/2 i][2 `-th row, 577i.e. sum of heights of all rows above this row).]&] 578[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|row index (zero based)]&] 579[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|Vertical position 580of row top in pixels (relative to array beginning)]&] 581[s0;0 &] 582[s0;H6;0 &] 583[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetLineCy`(int`)const: [@(0.0.255)2 int][2 _][*2 GetLineCy][2 ( 584][@(0.0.255)2 int][2 _][*@3;2 i][2 )_][@(0.0.255)2 const]&] 585[s0;l288; [2 Returns the height of a given row (either the row`-specific 586row height, or, when Null, the default row height).]&] 587[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|row index (zero based)]&] 588[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|row height in pixels]&] 589[s0;0 &] 590[s0;H6;0 &] 591[s0;i448;a25;kKO9;:ArrayCtrl`:`:AppendLine`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 592][2 _][*2 AppendLine][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 593[s0;l288; [2 The AppendLine property controls whether the array displays 594an additional `'append`' row after its last (real) row. ]&] 595[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= display appending 596row, ][*2 false][2 `= hide it]&] 597[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 598[s0;0 &] 599[s0;H6;0 &] 600[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoAppendLine`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 601][2 _][*2 NoAppendLine][2 ()]&] 602[s0;l288; [2 Hide the appending line (identical to ][*2 AppendLine(false)][2 ).]&] 603[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 604[s0;0 &] 605[s0;H6;0 &] 606[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsAppendLine`(`)const: [@(0.0.255)2 bool][2 _][*2 IsAppendL 607ine][2 ()_][@(0.0.255)2 const]&] 608[s0;l288; [2 Returns current state of the ][*2 AppendLine][2 property.]&] 609[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= display 610appending pseudo`-row at the end of the array]&] 611[s0;0 &] 612[s0;H6;0 &] 613[s0;i448;a25;kKO9;:ArrayCtrl`:`:Inserting`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 614][2 _][*2 Inserting][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 615[s0;l288; [2 Enable / disable inserting new rows in the array (no matter 616which insertion mechanism is selected).]&] 617[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= enable insertion, 618][*2 false][2 `= disable it]&] 619[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 620[s0;0 &] 621[s0;H6;0 &] 622[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoInserting`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 623][2 _][*2 NoInserting][2 ()]&] 624[s0;l288; [2 Disables row insertion (identical to ][*2 Inserting(false)][2 ).]&] 625[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 626[s0;0 &] 627[s0;H6;0 &] 628[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsInserting`(`)const: [@(0.0.255)2 bool][2 _][*2 IsInsertin 629g][2 ()_][@(0.0.255)2 const]&] 630[s0;l288; [2 Returns current state of the ][*2 Inserting][2 property.]&] 631[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= row 632insertion is enabled, ][*2 false][2 when not]&] 633[s0;0 &] 634[s0;H6;0 &] 635[s0;i448;a25;kKO9;:ArrayCtrl`:`:Appending`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 636][2 _][*2 Appending][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 637[s0;l288; [2 Enable / disable adding new rows at the table end.]&] 638[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= enable row 639appending, ][*2 false][2 `= disable it]&] 640[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 641[s0;0 &] 642[s0;H6;0 &] 643[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsAppending`(`)const: [@(0.0.255)2 bool][2 _][*2 IsAppendin 644g][2 ()_][@(0.0.255)2 const]&] 645[s0;l288; [2 Returns current state of the ][*2 Appending][2 property.]&] 646[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= appending 647rows is enabled, ][*2 false][2 when not.]&] 648[s0;0 &] 649[s0;H6;0 &] 650[s0;i448;a25;kKO9;:ArrayCtrl`:`:AutoAppending`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 651][2 _][*2 AutoAppending][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 652[s0;l288; [2 Same as ][*2 Appending][2 but Enter pressed when editing 653a new row accepts it and adds another one at the table end.]&] 654[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true ][2 to enable the 655mode]&] 656[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 657[s0;0 &] 658[s0;H6;0 &] 659[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsAutoAppending`(`)const: [@(0.0.255)2 bool][2 _][*2 IsAuto 660Appending][2 ()_][@(0.0.255)2 const]&] 661[s0;l288; [2 Returns current state of ][*2 AutoAppending][2 property.]&] 662[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= ][*2 AutoAppending 663][2 is active]&] 664[s0;0 &] 665[s0;H6;0 &] 666[s0;i448;a25;kKO9;:ArrayCtrl`:`:BeforeAfterInserting`(int`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 667][2 _][*2 BeforeAfterInserting][2 (][@(0.0.255)2 int][2 _][*@3;2 q][2 _`=_][@3;2 1][2 )]&] 668[s0;l288; [2 Activate before / after row insertion mechanism (][*2 Insert][2 669hotkey `= before).]&] 670[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 671[s0;0 &] 672[s0;H6;0 &] 673[s0;i448;a25;kKO9;:ArrayCtrl`:`:AfterBeforeInserting`(int`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 674][2 _][*2 AfterBeforeInserting][2 (][@(0.0.255)2 int][2 _][*@3;2 q][2 _`=_][@3;2 2][2 )]&] 675[s0;l288; [2 Activate before / after row insertion mechanism (][*2 Insert][2 676hotkey `= after)]&] 677[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 678[s0;0 &] 679[s0;H6;0 &] 680[s0;i448;a25;kKO9;:ArrayCtrl`:`:Duplicating`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 681][2 _][*2 Duplicating][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 682[s0;l288; [2 Enable / disable row duplication. Note that this property 683only controls whether the `'Duplicate`' item should be present 684in the array local menu. Of course, nothing can prevent you from 685supporting duplication in some other way, or from calling the 686][*2 DoDuplicate][2 method as you see fit.]&] 687[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= enable duplication, 688][*2 false][2 `= disable it]&] 689[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 690[s0;0 &] 691[s0;H6;0 &] 692[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoDuplicating`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 693][2 _][*2 NoDuplicating][2 ()]&] 694[s0;l288; [2 Disable row duplication (identical to ][*2 Duplicating(false)][2 ).]&] 695[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 696[s0;0 &] 697[s0;H6;0 &] 698[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsDuplicating`(`)const: [@(0.0.255)2 bool][2 _][*2 IsDuplic 699ating][2 ()_][@(0.0.255)2 const]&] 700[s0;l288; [2 Returns the state of the ][*2 Duplicating][2 property.]&] 701[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= local 702menu offers row duplication, ][*2 false][2 when not]&] 703[s0;0 &] 704[s0;H6;0 &] 705[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoInsertAppend`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 706][2 _][*2 NoInsertAppend][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 707[s0;l288; [2 Enables / disables the auto`-append mechanism (see above 708section on inserting rows).]&] 709[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= disable InsertAppend 710mechanism, ][*2 false][2 `= enable it (the default)]&] 711[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 712[s0;0 &] 713[s0;H6;0 &] 714[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsEditing`(`)const: [@(0.0.255)2 bool][2 _][*2 IsEditing][2 ( 715)_][@(0.0.255)2 const]&] 716[s0;l288; [2 Checks whether at least one array column supports editing 717(whether it is possible to ][/2 open][2 a row for editing).]&] 718[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= row 719editing is possible, ][*2 false][2 when not]&] 720[s0;0 &] 721[s0;H6;0 &] 722[s0;i448;a25;kKO9;:ArrayCtrl`:`:Removing`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 723][2 _][*2 Removing][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 724[s0;l288; [2 Enable / disable deleting rows from the table.]&] 725[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= enable deletion, 726][*2 false][2 `= disable it]&] 727[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 728[s0;0 &] 729[s0;H6;0 &] 730[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoRemoving`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 731][*2 NoRemoving][2 ()]&] 732[s0;l288; [2 Disable deleting table rows (identical to ][*2 Removing(false)][2 ).]&] 733[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 734[s0;0 &] 735[s0;H6;0 &] 736[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsRemoving`(`)const: [@(0.0.255)2 bool][2 _][*2 IsRemoving][2 ( 737)_][@(0.0.255)2 const]&] 738[s0;l288; [2 Returns current state of the ][*2 Removing][2 property.]&] 739[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= row 740deletion is enabled, ][*2 false ][2 when not]&] 741[s0;0 &] 742[s0;H6;0 &] 743[s0;i448;a25;kKO9;:ArrayCtrl`:`:AskRemove`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 744][2 _][*2 AskRemove][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 745[s0;l288; [2 Sets whether the user must manually confirm array row 746deletion. When set to ][*2 true][2 , every time a row is to be deleted, 747a confirmation dialog pops up. When set to ][*2 false][2 , rows are 748deleted automatically without any further confirmation.]&] 749[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= prompt user 750to confirm row deletion, ][*2 false][2 `= delete rows instantly]&] 751[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 752[s0;0 &] 753[s0;H6;0 &] 754[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoAskRemove`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 755][2 _][*2 NoAskRemove][2 ()]&] 756[s0;l288; [2 Disables user confirmation of row deletion (equivalent 757to ][*2 AskRemove(false)][2 ).]&] 758[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 759[s0;0 &] 760[s0;H6;0 &] 761[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsAskRemove`(`)const: [@(0.0.255)2 bool][2 _][*2 IsAskRemov 762e][2 ()_][@(0.0.255)2 const]&] 763[s0;l288; [2 Returns current state of the ][*2 AskRemove][2 property.]&] 764[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= user 765confirmation is needed to delete rows, ][*2 false][2 `= rows are 766deleted immediately]&] 767[s0;0 &] 768[s0;H6;0 &] 769[s0;i448;a25;kKO9;:ArrayCtrl`:`:Moving`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 770][*2 Moving][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 771[s0;l288; [2 Enable / disable row swapping. When set to ][*2 true][2 , 772it is possible to move an array row up and down by swapping it 773with the previous / next row. This can be used to reorder array 774rows in a visually straightforward manner.]&] 775[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= offer row 776moving in the local menu, ][*2 false][2 `= don`'t]&] 777[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 778[s0;0 &] 779[s0;H6;0 &] 780[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsMoving`(`)const: [@(0.0.255)2 bool][2 _][*2 IsMoving][2 ()_ 781][@(0.0.255)2 const]&] 782[s0;l288; [2 Returns current state of the ][*2 Moving][2 property.]&] 783[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= local 784menu supports row swapping, ][*2 false][2 `= it doesn`'t]&] 785[s0;0 &] 786[s0;H6;0 &] 787[s0;i448;a25;kKO9;:ArrayCtrl`:`:Header`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 788][*2 Header][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 789[s0;l288; [2 Show / hide the ][*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us^2 HeaderCtrl 790][2 object for this table.]&] 791[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= show table 792header, ][*2 false][2 `= hide it]&] 793[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 794[s0;0 &] 795[s0;H6;0 &] 796[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoHeader`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 797][*2 NoHeader][2 ()]&] 798[s0;l288; [2 Hide table header (equivalent to ][*2 Header(false)][2 ).]&] 799[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 800[s0;0 &] 801[s0;H6;0 &] 802[s0;i448;a25;kKO9;:ArrayCtrl`:`:Track`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 803][*2 Track][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 804[s0;l288; [2 Animate array column resizing. This is equivalent to setting 805the ][*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Track`(bool`)^2 T 806rack][2 property in the array HeaderCtrl.]&] 807[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= repaint the 808array repeatedly while dragging column widths, ][*2 false][2 `= 809regenerate everything only after drag `& drop is finished.]&] 810[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 811[s0;0 &] 812[s0;H6;0 &] 813[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoTrack`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _][*2 N 814oTrack][2 ()]&] 815[s0;l288; [2 Do not animate array column resizing (equivalent to ][*2 Track(false)][2 ).]&] 816[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 817[s0;0 &] 818[s0;H6;0 &] 819[s0;i448;a25;kKO9;:ArrayCtrl`:`:VertGrid`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 820][2 _][*2 VertGrid][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 821[s0;l288; [2 Show / hide vertical array grid lines (separating array 822columns).]&] 823[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= show vertical 824grid lines, ][*2 false][2 `= hide them]&] 825[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 826[s0;0 &] 827[s0;H6;0 &] 828[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoVertGrid`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 829][*2 NoVertGrid][2 ()]&] 830[s0;l288; [2 Hide vertical grid lines (equivalent to ][*2 VertGrid(false)][2 ).]&] 831[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 832[s0;0 &] 833[s0;H6;0 &] 834[s0;i448;a25;kKO9;:ArrayCtrl`:`:HorzGrid`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 835][2 _][*2 HorzGrid][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 836[s0;l288; [2 Show / hide horizontal grid lines (separating array rows).]&] 837[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= show horizontal 838grid lines, ][*2 false][2 `= hide them]&] 839[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 840[s0;0 &] 841[s0;H6;0 &] 842[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoHorzGrid`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 843][*2 NoHorzGrid][2 ()]&] 844[s0;l288; [2 Hide horizontal grid lines (equivalent to ][*2 HorzGrid(false)][2 ).]&] 845[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 846[s0;0 &] 847[s0;H6;0 &] 848[s0;i448;a25;kKO9;:ArrayCtrl`:`:Grid`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 849][*2 Grid][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 850[s0;l288; [2 Show / hide both horizontal and vertical grid lines (equivalent 851to ][*2 HorzGrid(b).VertGrid(b)][2 ).]&] 852[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= show grid 853line matrix, ][*2 false][2 `= hide all grid lines]&] 854[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 855[s0;0 &] 856[s0;H6;0 &] 857[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoGrid`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _][*2 N 858oGrid][2 ()]&] 859[s0;l288; [2 Hide horizontal and vertical grid lines (equivalent to 860][*2 Grid(false)][2 ).]&] 861[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 862[s0;0 &] 863[s0;H6;0 &] 864[s0;i448;a25;kKO9;:ArrayCtrl`:`:GridColor`(Color`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 865][2 _][*2 GridColor][2 (][_^Color^2 Color][2 _][*@3;2 c][2 )]&] 866[s0;l288; [2 Sets the color for grid lines.]&] 867[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 c][2 -|new grid line color]&] 868[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 869[s0;0 &] 870[s0;H6;0 &] 871[s0;i448;a25;kKO9;:ArrayCtrl`:`:EvenRowColor`(Color`,Color`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 872][2 _][*2 EvenRowColor][2 (][_^Color^2 Color][2 _][*@3;2 paper][2 _`=_Blend(SColorMark, 873SColorPaper, ][@3;2 220][2 ), ][_^Color^2 Color][2 _][*@3;2 ink][2 _`=_SColorText)]&] 874[s0;l288; [2 Sets the paper and ink (background and foreground) color 875for even array rows. In certain cases setting a different background 876color for odd and even rows helps to simplify visual orientation 877in the arrays (especially when the array has many columns).]&] 878[s0;l288; [*2 Note:][2 the even / odd row terminology refers to the natural 879array row numbering, so first array row is ][/2 odd][2 and the second 880is ][/2 even][2 . This is in contrast to the zero`-baesd integral 881row indexing, where the first array row has index 0.]&] 882[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 paper][2 -|background color to 883use for second, fourth, sixth etc. array row]&] 884[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ink][2 -|foreground color for 885even rows]&] 886[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 887[s0;0 &] 888[s0;H6;0 &] 889[s0;i448;a25;kKO9;:ArrayCtrl`:`:OddRowColor`(Color`,Color`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 890][2 _][*2 OddRowColor][2 (][_^Color^2 Color][2 _][*@3;2 paper][2 _`=_SColorInfo, 891][_^Color^2 Color][2 _][*@3;2 ink][2 _`=_SColorText)]&] 892[s0;l288; [2 Sets the paper and ink (background and foreground) color 893for odd array rows.]&] 894[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 paper][2 -|background color to 895use for first, third, fifth etc. array row]&] 896[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ink][2 -|foreground color for 897odd rows]&] 898[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 899[s0;0 &] 900[s0;H6;0 &] 901[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoCursor`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 902][2 _][*2 NoCursor][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 903[s0;l288; [2 Turns on / off highlighting cursor row.]&] 904[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= do not highlight 905cursor row, ][*2 false][2 `= default behaviour (cursor row is shown 906in inverse colors)]&] 907[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 908[s0;0 &] 909[s0;H6;0 &] 910[s0;i448;a25;kKO9;:ArrayCtrl`:`:MouseMoveCursor`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 911][2 _][*2 MouseMoveCursor][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 912[s0;l288; [2 Enables / disables automatical cursor row switching as 913the mouse cursor moves over the array rows.]&] 914[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= automatically 915switch cursor row, ][*2 false][2 `= only upon clicks and keyboard 916navigation]&] 917[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 918[s0;0 &] 919[s0;H6;0 &] 920[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoMouseMoveCursor`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 921][2 _][*2 NoMouseMoveCursor][2 ()]&] 922[s0;l288; [2 Disable automatical cursor row switching (equivalent to 923][*2 MouseMoveCursor(false)][2 ).]&] 924[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 925[s0;0 &] 926[s0;H6;0 &] 927[s0;i448;a25;kKO9;:ArrayCtrl`:`:AutoHideSb`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 928][2 _][*2 AutoHideSb][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 929[s0;l288; [2 When set to ][*2 true][2 , the vertical scrollbar at the right 930array edge is displayed only when the total row height exceeds 931the array view height. When set to ][*2 false][2 , the scrollbar 932is shown all the time.]&] 933[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= show / hide 934the scrollbar as necessary, ][*2 false][2 `= display it unconditionally]&] 935[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 936[s0;0 &] 937[s0;H6;0 &] 938[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoAutoHideSb`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 939][2 _][*2 NoAutoHideSb][2 ()]&] 940[s0;l288; [2 Display vertical scrollbar all the time (equivalent to 941][*2 AutoHideSb(false)][2 ).]&] 942[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 943[s0;0 &] 944[s0;H6;0 &] 945[s0;i448;a25;kKO9;:ArrayCtrl`:`:HideSb`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 946][*2 HideSb][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 947[s0;l288; [2 Hides vertical scrollbar (even if it would be needed).]&] 948[s0;0 &] 949[s0;H6;0 &] 950[s0;i448;a25;kKO9;:ArrayCtrl`:`:AutoHideHorzSb`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 951][2 _][*2 AutoHideHorzSb][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 952[s0;l288; [2 Makes horizontal scroll bar (active if HeaderCtrl is in 953absolute mode only) to autohide. Default is on.]&] 954[s0;0 &] 955[s0;H6;0 &] 956[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoAutoHideHorzSb`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 957][2 _][*2 NoAutoHideHorzSb][2 ()]&] 958[s0;l288; [2 Same as AutoHideHorzSb(false).]&] 959[s0;0 &] 960[s0;H6;0 &] 961[s0;i448;a25;kKO9;:ArrayCtrl`:`:HideHorzSb`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 962][2 _][*2 HideHorzSb][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 963[s0;l288; [2 Unconditionally hides horizontal scrollbar (active if 964HeaderCtrl is in absolute mode only).]&] 965[s0;0 &] 966[s0;H6;0 &] 967[s0;i448;a25;kKO9;:ArrayCtrl`:`:MultiSelect`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 968][2 _][*2 MultiSelect][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 969[s0;l288; [2 Enable / disable multiple row selection. ]&] 970[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 b][2 -|][*2 true][2 `= allow selecting 971multiple rows at the same time, ][*2 false][2 `= only one row at 972a time]&] 973[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 974[s0;0 &] 975[s0;H6;0 &] 976[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsMultiSelect`(`)const: [@(0.0.255)2 bool][2 _][*2 IsMultiS 977elect][2 ()_][@(0.0.255)2 const]&] 978[s0;l288; [2 Returns true if ArrayCtrl is in multiselect mode.]&] 979[s0;0 &] 980[s0;H6;0 &] 981[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoBackground`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 982][2 _][*2 NoBackground][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 983[s0;l288; [2 Sets the widget into transparent mode `- background is 984not painted and Transparent is activated `- a result, anything 985painted behind the widget is visible, allowing client code to 986provide any background it needs.]&] 987[s0;0 &] 988[s0;H6;0 &] 989[s0;i448;a25;kKO9;:ArrayCtrl`:`:PopUpEx`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 990][2 _][*2 PopUpEx][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 991[s0;l288; [2 Activates showing small popup windows with cell content 992when mouse is over and cell is to big to fit current dimensions. 993Default is activated.]&] 994[s0;0 &] 995[s0;H6;0 &] 996[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoPopUpEx`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 997][*2 NoPopUpEx][2 ()]&] 998[s0;l288; [2 Same as PopUpEx(false).]&] 999[s0;0 &] 1000[s0;H6;0 &] 1001[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoFocusSetCursor`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1002][2 _][*2 NoFocusSetCursor][2 ()]&] 1003[s0;l288; [2 Normally, when ArrayCtrl gets a focus and no cursor is 1004set (and cursor is allowed and there is at least one line), ArrayCtrl 1005a sets the cursor to the first line. This modifier deactivates 1006this feature.]&] 1007[s0;0 &] 1008[s0;H6;0 &] 1009[s0;i448;a25;kKO9;:ArrayCtrl`:`:MovingHeader`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1010][2 _][*2 MovingHeader][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 )]&] 1011[s0;l288; [2 Activates dragging columns in header. Default is active.]&] 1012[s0;0 &] 1013[s0;H6;0 &] 1014[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoMovingHeader`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1015][2 _][*2 NoMovingHeader][2 ()]&] 1016[s0;l288; [2 Same as MovingHeader(false).]&] 1017[s0;0 &] 1018[s0;H6;0 &] 1019[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnSortFindKey`(bool`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1020][2 _][*2 ColumnSortFindKey][2 (][@(0.0.255)2 bool][2 _][*@3;2 b][2 _`=_][@(0.0.255)2 true][2 )]&] 1021[s0;l288; [2 Before ColumnSort orders the ArrayCtrl, the key of current 1022row (with cursor) is stored and after sorting, it is restored.]&] 1023[s0;0 &] 1024[s0;H6;0 &] 1025[s0;i448;a25;kKO9;:ArrayCtrl`:`:AllSorting`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `&][2 _ 1026][*2 AllSorting][2 ()]&] 1027[s0;l288; [2 If set, Sorting() is invoked for all columns (added either 1028before or after this modifier is called).]&] 1029[s0;0 &] 1030[s0;H6;0 &] 1031[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnSortSecondary`(const ArrayCtrl`:`:Order`&`): [_^ArrayCtrl^2 A 1032rrayCtrl][@(0.0.255)2 `&][2 _][*2 ColumnSortSecondary][2 (][@(0.0.255)2 const][2 _][_^ArrayCtrl`:`:Order^2 O 1033rder][@(0.0.255)2 `&][2 _][*@3;2 order][2 )]&] 1034[s0;l288; [2 Sets secondary sorting predicate for column sorts (see 1035ColumnSort, Sorting) `- if two cells are equal when performing 1036sort by column, they are ordered by this predicate.]&] 1037[s0;0 &] 1038[s0;H6;0 &] 1039[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoColumnSortSecondary`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1040][2 _][*2 NoColumnSortSecondary][2 ()]&] 1041[s0;l288; [2 Same as ColumnSortSecondary(false).]&] 1042[s0;0 &] 1043[s0;H6;0 &] 1044[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnWidths`(const char`*`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1045][2 _][*2 ColumnWidths][2 (][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 s][2 )]&] 1046[s0;l288; [2 Initializes column widths based on a text string containing 1047blank`-separated decimal numbers, e.g. `"1 4 6 4 1`".]&] 1048[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 s][2 -|control string defining 1049column widths]&] 1050[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 1051[s0;0 &] 1052[s0;H6;0 &] 1053[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetColumnWidths`(`): [_^String^2 String][2 _][*2 GetColumnW 1054idths][2 ()]&] 1055[s0;l288; [2 Returns current column widths in format compatible with 1056ColumnWidths.]&] 1057[s0;0 &] 1058[s0;H6;0 &] 1059[s0;i448;a25;kKO9;:ArrayCtrl`:`:CursorOverride`(const Image`&`): [_^ArrayCtrl^2 ArrayCt 1060rl][@(0.0.255)2 `&][2 _][*2 CursorOverride][2 (][@(0.0.255)2 const][2 _][_^Image^2 Image][@(0.0.255)2 `& 1061][2 _][*@3;2 arrow][2 )]&] 1062[s0;l288; [2 Overrides mouse cursor to ][*@3;2 arrow][2 . Setting Null 1063ends override.]&] 1064[s0;0 &] 1065[s0;H6;0 &] 1066[s0;i448;a25;kKO9;:ArrayCtrl`:`:NoCursorOverride`(`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1067][2 _][*2 NoCursorOverride][2 ()]&] 1068[s0;l288; [2 Same as CursorOverride(Null).]&] 1069[s0;0 &] 1070[s0;H6;0 &] 1071[s0;i448;a25;kKO9;:ArrayCtrl`:`:RowFormat`(const char`*`): [_^String^2 String][2 _][*2 RowF 1072ormat][2 (][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 s][2 )]&] 1073[s0;l288; [2 Formats a text by substituting ][*2 %s][2 with the array`-specific 1074term for `'row`' (as set by the ][*2 RowName][2 property). This 1075is used for array local menu items.]&] 1076[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 s][2 -|][*2 Format][2 `-like string 1077to substitute.]&] 1078[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|]&] 1079[s0;0 &] 1080[s0;H6;0 &] 1081[s0;i448;a25;kKO9;:ArrayCtrl`:`:RowName`(const char`*`): [_^ArrayCtrl^2 ArrayCtrl][@(0.0.255)2 `& 1082][2 _][*2 RowName][2 (][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 s][2 )]&] 1083[s0;l288; [2 Sets the array`-specific term for `'row`'. This can be 1084used to customize the local menu terminology according to the 1085logical content of the array. For instance, when you have an 1086array with the list of employees, you can call ][*2 RowName(`"employee`")][2 1087and the menu items will then read ][/2 `'Insert new employee`', 1088`'Delete employee`'][2 etc.]&] 1089[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 s][2 -|the term to substitute 1090for `'array row`' in menu items]&] 1091[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 1092[s0;0 &] 1093[s0;* &] 1094[s0; [* Column structure programming]&] 1095[s0;0 &] 1096[s0; &] 1097[s0;i448;a25;kKO9;:ArrayCtrl`:`:IndexInfo`(int`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo][@(0.0.255)2 `& 1098][2 _][*2 IndexInfo][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 )]&] 1099[s0;l288; [2 Returns a reference to the ][*2 IdInfo][2 structure describing 1100a given array index (column in the source data matrix).]&] 1101[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 1102of the array index]&] 1103[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|IdInfo reference 1104for the given index]&] 1105[s0;0 &] 1106[s0;H6;0 &] 1107[s0;i448;a25;kKO9;:ArrayCtrl`:`:IndexInfo`(const Id`&`): [_^ArrayCtrl`:`:IdInfo^2 IdInf 1108o][@(0.0.255)2 `&][2 _][*2 IndexInfo][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 1109[s0;l288; [2 Returns a reference to the ][*2 IdInfo][2 structure describing 1110a given array index.]&] 1111[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|the ][*2 Id][2 index identifier]&] 1112[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|IdInfo reference 1113for the given index]&] 1114[s0;0 &] 1115[s0;H6;0 &] 1116[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddIndex`(const Id`&`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo 1117][@(0.0.255)2 `&][2 _][*2 AddIndex][2 (][@(0.0.255)2 const][2 ][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 1118[s0;l288; [2 Adds a new index to the array and assign it a given ][*2 Id][2 1119identifier.]&] 1120[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|new index identifier]&] 1121[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1122the ][*2 IdInfo ][2 structure describing the newly added index. The 1123reference can be used to set additional index properties.]&] 1124[s0;0 &] 1125[s0;H6;0 &] 1126[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddIndex`(`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo][@(0.0.255)2 `& 1127][2 _][*2 AddIndex][2 ()]&] 1128[s0;l288; [2 Adds a new index (without an identifier) to the array.]&] 1129[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1130the ][*2 IdInfo][2 structure describing the newly added index.]&] 1131[s0;0 &] 1132[s0;H6;0 &] 1133[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetIndexCount`(`)const: [@(0.0.255)2 int][2 _][*2 GetIndexC 1134ount][2 ()_][@(0.0.255)2 const]&] 1135[s0;l288; [2 Returns number of indices in the array.]&] 1136[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|index count]&] 1137[s0;0 &] 1138[s0;H6;0 &] 1139[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetId`(int`)const: [_^Id^2 Id][2 _][*2 GetId][2 (][@(0.0.255)2 i 1140nt][2 _][*@3;2 ii][2 )_][@(0.0.255)2 const]&] 1141[s0;l288; [2 Returns the identifier of a given index (addresses by 1142its zero`-based ordinal number).]&] 1143[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 1144of the queried index]&] 1145[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|index identifier 1146or ][*2 Null][2 if the index has no identifier]&] 1147[s0;0 &] 1148[s0;H6;0 &] 1149[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetPos`(const Id`&`)const: [@(0.0.255)2 int][2 _][*2 GetPos 1150][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 const]&] 1151[s0;l288; [2 Returns the zero`-based positional number of the array 1152index with a given identifier.]&] 1153[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|array index identifier]&] 1154[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based index 1155number, `-1 when not found]&] 1156[s0;0 &] 1157[s0;H6;0 &] 1158[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetId`(int`,const Id`&`): [_^ArrayCtrl`:`:IdInfo^2 IdIn 1159fo][@(0.0.255)2 `&][2 _][*2 SetId][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 , ][@(0.0.255)2 const 1160][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 1161[s0;l288; [2 Sets the identifier for a given array index. This can 1162be used to set or modify the identifier for a previously added 1163index.]&] 1164[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 1165of the index to set the identifier for]&] 1166[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|new index identifier (][*2 Null][2 1167when none)]&] 1168[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1169the ][*2 IdInfo][2 descriptive structure for the ][/2 ii][2 `-th index. 1170The reference can be used to set additional properties of the 1171altered index.]&] 1172[s0;0 &] 1173[s0;H6;0 &] 1174[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddKey`(const Id`&`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo][@(0.0.255)2 `& 1175][2 _][*2 AddKey][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 1176[s0;l288; [2 Adds a ][/2 primary key][2 index to the table. The ][/2 primary 1177key][2 is just another name for the first index (index with ordinal 1178number 0). This is just a handy convention often used for SQL`-based 1179tables. ][*2 AddKey][2 must be called only once after array initialization 1180or ][*2 Reset][2 and before calling any other functions adding indices 1181(like ][*2 AddIndex][2 , ][*2 AddColumn][2 or ][*2 AddCtrl][2 ). When ][*2 GetIndexCount() 1182> 0 ][2 before the call to this function, this method fails with 1183an ][*2 ASSERT][2 .]&] 1184[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|primary key identifier]&] 1185[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1186the descriptive ][*2 IdInfo][2 structure for the primary key index.]&] 1187[s0;0 &] 1188[s0;H6;0 &] 1189[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddKey`(`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo][@(0.0.255)2 `& 1190][2 _][*2 AddKey][2 ()]&] 1191[s0;l288; [2 Adds a primary key index without an identifier to the 1192table. This is equivalent to ][*2 AddKey(Null)][2 .]&] 1193[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1194the ][*2 IdInfo][2 structure describing the primary key index.]&] 1195[s0;0 &] 1196[s0;H6;0 &] 1197[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetKeyId`(`)const: [_^Id^2 Id][2 _][*2 GetKeyId][2 ()_][@(0.0.255)2 c 1198onst]&] 1199[s0;l288; [2 Returns primary key identifier for this table. This is 1200equivalent to calling ][*2 GetId(0)][2 .]&] 1201[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|primary key index 1202identifier]&] 1203[s0;0 &] 1204[s0;H6;0 &] 1205[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddColumn`(const char`*`,int`): [_^ArrayCtrl`:`:Column^2 C 1206olumn][@(0.0.255)2 `&][2 _][*2 AddColumn][2 (][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 t 1207ext][2 _`=_NULL, ][@(0.0.255)2 int][2 _][*@3;2 w][2 _`=_][@3;2 0][2 )]&] 1208[s0;l288; [2 Add a new column`-index pair to the table. The function 1209adds a (source) index and an (output) column and sets the index 1210as the data source for the column. This is the most common method 1211for adding columns to the array.]&] 1212[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 text][2 -|column name (displayed 1213in the array header)]&] 1214[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 w][2 -|logical relative column 1215width]&] 1216[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1217the ][*2 Column][2 structure describing the newly added column. 1218This can be used to set additional properties for the newly added 1219column and the corresponding header tab.]&] 1220[s0;0 &] 1221[s0;H6;0 &] 1222[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddColumn`(const Id`&`,const char`*`,int`): [_^ArrayCtrl`:`:Column^2 C 1223olumn][@(0.0.255)2 `&][2 _][*2 AddColumn][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , 1224][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 text][2 , ][@(0.0.255)2 int][2 _][*@3;2 w][2 _ 1225`=_][@3;2 0][2 )]&] 1226[s0;l288; [2 Adds a new column`-index pair to the table. This is equivalent 1227to the above two`-parameter version but, in addition, the method 1228sets the ][*2 Id][2 identifier for the newly created index.]&] 1229[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|new index identifier]&] 1230[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 text][2 -|column name (displayed 1231in the header)]&] 1232[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 w][2 -|logical relative column 1233width]&] 1234[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1235the ][*2 Column][2 structure describing the newly added array column.]&] 1236[s0;0 &] 1237[s0;H6;0 &] 1238[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddColumnAt`(int`,const char`*`,int`): [_^ArrayCtrl`:`:Column^2 C 1239olumn][@(0.0.255)2 `&][2 _][*2 AddColumnAt][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 , 1240][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 text][2 , ][@(0.0.255)2 int][2 _][*@3;2 w][2 _ 1241`=_][@3;2 0][2 )]&] 1242[s0;l288; [2 Adds a new column to the table and binds it to a given 1243source data index.]&] 1244[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 1245of the index to use as source for this column]&] 1246[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 text][2 -|column name (displayed 1247in the header)]&] 1248[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 w][2 -|logical relative column 1249width]&] 1250[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1251the ][*2 Column][2 structure describing the newly added array column.]&] 1252[s0;0 &] 1253[s0;H6;0 &] 1254[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddColumnAt`(const Id`&`,const char`*`,int`): [_^ArrayCtrl`:`:Column^2 C 1255olumn][@(0.0.255)2 `&][2 _][*2 AddColumnAt][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , 1256 ][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 text][2 , ][@(0.0.255)2 int][2 _][*@3;2 w 1257][2 _`=_][@3;2 0][2 )]&] 1258[s0;l288; [2 Adds a new column to the table and binds it to a given 1259source data index.]&] 1260[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the index 1261to use as source for the newly added column]&] 1262[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 text][2 -|column name (displayed 1263in the header)]&] 1264[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 w][2 -|logical relative column 1265width]&] 1266[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1267the ][*2 Column][2 structure describing the newly added array column.]&] 1268[s0;0 &] 1269[s0;H6;0 &] 1270[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddRowNumColumn`(const char`*`,int`): [_^ArrayCtrl`:`:Column^2 C 1271olumn][@(0.0.255)2 `&][2 _][*2 AddRowNumColumn][2 (][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _ 1272`*][*@3;2 text][2 , ][@(0.0.255)2 int][2 _][*@3;2 w][2 _`=_][@3;2 0][2 )]&] 1273[s0;l288; [2 Adds a new column to the table. The newly added column 1274has no source index, it is assumed to have an external data source. 1275Instead of the source data ][*2 Value][2 object, the current zero`-based 1276row number is passed to the column`'s ][*2 Convert][2 / ][*2 Display][2 . 1277This allows the host application to decode somehow the external 1278data based on the row number. In the current U`+`+ version, the 1279][/2 RowNum columns][2 cannot be edited (using the standard array 1280inline editing mechanism).]&] 1281[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 text][2 -|column name (displayed 1282in the header)]&] 1283[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 w][2 -|logical relative column 1284width]&] 1285[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A reference to 1286the ][*2 Column][2 structure describing the newly added array column.]&] 1287[s0;0 &] 1288[s0;H6;0 &] 1289[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddCtrl`(Ctrl`&`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo][@(0.0.255)2 `& 1290][2 _][*2 AddCtrl][2 (][_^Ctrl^2 Ctrl][@(0.0.255)2 `&][2 _][*@3;2 ctrl][2 )]&] 1291[s0;l288; [2 Adds a new index`-control pair to the table; the index 1292keeps the source data and the external control is used to edit 1293it. The ArrayCtrl handles data transfer between the source data 1294matrix and the external control. The method returns a reference 1295the ][*2 IdInfo][2 descriptive structure for the newly added index.]&] 1296[s0;l288; [*2 Note:][2 it is good to keep in mind that there are a few 1297differences between the ordinary array cell editors and the freestanding 1298edit controls. In contrast with the cell editors, which appear 1299only when the row is opened for editing, the freestanding controls 1300are present all the time. For instance, the ArrayCtrl automatically 1301disables the controls when the cursor moves away from the table 1302(using ][*2 KillCursor][2 ) and re`-enables them after it comes back. 1303This is important e.g. if you want to implement an additional 1304logic enabling some of the controls only depending on the circumstances; 1305in such case, you have to use one of the notification callbacks 1306(like ][*2 WhenEnterRow][2 ) to force your additional behaviour 1307on the controls.]&] 1308[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ctrl][2 -|control to attach to 1309the given index]&] 1310[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1311the IdInfo structure describing the newly added index]&] 1312[s0;0 &] 1313[s0;H6;0 &] 1314[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddCtrl`(const Id`&`,Ctrl`&`): [_^ArrayCtrl`:`:IdInfo^2 I 1315dInfo][@(0.0.255)2 `&][2 _][*2 AddCtrl][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , 1316][_^Ctrl^2 Ctrl][@(0.0.255)2 `&][2 _][*@3;2 ctrl][2 )]&] 1317[s0;l288; [2 Adds a new index`-control pair to the table. This is identical 1318to the above version with the only difference that the newly 1319added index is assigned an ][*2 Id][2 identifier at the same time.]&] 1320[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|the identifier to assign 1321to the newly created index]&] 1322[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ctrl][2 -|freestanding control 1323used to edit the given index]&] 1324[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1325the IdInfo structure describing the newly added index]&] 1326[s0;0 &] 1327[s0;H6;0 &] 1328[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddCtrlAt`(int`,Ctrl`&`): [@(0.0.255)2 void][2 _][*2 AddCtr 1329lAt][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 , ][_^Ctrl^2 Ctrl][@(0.0.255)2 `&][2 _][*@3;2 ctrl][2 )]&] 1330[s0;l288; [2 Adds a new control to the table and binds it to the index 1331with given ordinal number. You can use this method to create 1332the binding between the control and an arbitrary source index.]&] 1333[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 1334of the index to bind to this control]&] 1335[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ctrl][2 -|freestanding control 1336used to edit the ][/2 ii][2 `-th data index]&] 1337[s0;0 &] 1338[s0;H6;0 &] 1339[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddCtrlAt`(const Id`&`,Ctrl`&`): [@(0.0.255)2 void][2 _][*2 A 1340ddCtrlAt][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , ][_^Ctrl^2 Ctrl][@(0.0.255)2 `& 1341][2 _][*@3;2 ctrl][2 )]&] 1342[s0;l288; [2 Adds a new control to the table and binds it to the index 1343with given identifier.]&] 1344[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the index 1345to bind to this control]&] 1346[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ctrl][2 -|freestanding control 1347used to edit the index with identifier ][/2 id]&] 1348[s0;0 &] 1349[s0;H6;0 &] 1350[s0;i448;a25;kKO9;:ArrayCtrl`:`:AddRowNumCtrl`(Ctrl`&`): [@(0.0.255)2 void][2 _][*2 AddRowN 1351umCtrl][2 (][_^Ctrl^2 Ctrl][@(0.0.255)2 `&][2 _][*@3;2 ctrl][2 )]&] 1352[s0;l288; [2 Adds a new freestanding control to the table. The control 1353is not bound to any source data index. During cursor movement 1354in the array, array uses the control`'s ][*2 SetData][2 method to 1355set it to the current row number. The control must be ready for 1356that and it can use the row number value to decode some externally 1357located data for display. In the current U`+`+ version, such 1358controls cannot be used for editing (there is currently no clean 1359way to store the edited data back to its external storage).]&] 1360[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ctrl][2 -|][/2 RowNum][2 `-based freestanding 1361editor control]&] 1362[s0;0 &] 1363[s0;H6;0 &] 1364[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetColumnCount`(`)const: [@(0.0.255)2 int][2 _][*2 GetColum 1365nCount][2 ()_][@(0.0.255)2 const]&] 1366[s0;l288; [2 Returns the current number of (output) columns in the 1367array.]&] 1368[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|number of columns]&] 1369[s0;0 &] 1370[s0;H6;0 &] 1371[s0;i448;a25;kKO9;:ArrayCtrl`:`:FindColumnWithPos`(int`)const: [@(0.0.255)2 int][2 _][*2 Fi 1372ndColumnWithPos][2 (][@(0.0.255)2 int][2 _][*@3;2 pos][2 )_][@(0.0.255)2 const]&] 1373[s0;l288; [2 Returns the zero`-based index of a column based on its 1374source data index.]&] 1375[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 pos][2 -|ordinal number of the 1376source index]&] 1377[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|ordinal number 1378of the column having the given index as its source, `-1 when 1379not found]&] 1380[s0;0 &] 1381[s0;H6;0 &] 1382[s0;i448;a25;kKO9;:ArrayCtrl`:`:FindColumnWithId`(const Id`&`)const: [@(0.0.255)2 int][2 _ 1383][*2 FindColumnWithId][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 con 1384st]&] 1385[s0;l288; [2 Returns the zero`-based index of a column based on its 1386source data index.]&] 1387[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 1388[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|ordinal number 1389of the column having the given index as its source, `-1 when 1390not found]&] 1391[s0;0 &] 1392[s0;H6;0 &] 1393[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnAt`(int`): [_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `& 1394][2 _][*2 ColumnAt][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )]&] 1395[s0;l288; [2 Returns the ][*2 Column][2 structure describing a given column.]&] 1396[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based column index]&] 1397[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1398the ][*2 Column][2 structure describing the given column]&] 1399[s0;0 &] 1400[s0;H6;0 &] 1401[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnAt`(const Id`&`): [_^ArrayCtrl`:`:Column^2 Column 1402][@(0.0.255)2 `&][2 _][*2 ColumnAt][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 1403[s0;l288; [2 Returns the ][*2 Column][2 structure describing a given column.]&] 1404[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based column index]&] 1405[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a constant reference 1406to the ][*2 Column][2 structure describing the given column]&] 1407[s0;0 &] 1408[s0;H6;0 &] 1409[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnAt`(int`)const: [@(0.0.255)2 const][2 _][_^ArrayCtrl`:`:Column^2 C 1410olumn][@(0.0.255)2 `&][2 _][*2 ColumnAt][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )_][@(0.0.255)2 cons 1411t]&] 1412[s0;l288; [2 Returns the ][*2 Column][2 structure describing a column 1413with given source index. This is merely the const version of 1414the above method; it can be used to query properties for the 1415column.]&] 1416[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the index 1417used as source for the column]&] 1418[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1419the ][*2 Column][2 structure describing the given column]&] 1420[s0;0 &] 1421[s0;H6;0 &] 1422[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnAt`(const Id`&`)const: [@(0.0.255)2 const][2 _][_^ArrayCtrl`:`:Column^2 C 1423olumn][@(0.0.255)2 `&][2 _][*2 ColumnAt][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 c 1424onst]&] 1425[s0;l288; [2 Returns a constant reference to the ][*2 Column][2 structure 1426describing a column with given source index. This is the constant 1427version of the above method; it can be used to query properties 1428for the column.]&] 1429[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the index 1430used as source for the column]&] 1431[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a constant reference 1432to the ][*2 Column][2 structure describing the given column]&] 1433[s0;0 &] 1434[s0;H6;0 &] 1435[s0;i448;a25;kKO9;:ArrayCtrl`:`:HeaderTab`(int`): [_^HeaderCtrl`:`:Column^2 HeaderCtrl`: 1436:Column][@(0.0.255)2 `&][2 _][*2 HeaderTab][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )]&] 1437[s0;l288; [2 Returns the ][*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Column`:`:Min`(int`)^2 H 1438eaderCtrl`::Column][2 descriptive structure for the given column. 1439The correspondence between the array columns and the header tabs 1440is 1:1, so that the indices of both are always the same (][*2 array.GetColumnCount() 1441 `=`= array.HeaderObject().GetCount()][2 holds all the time).]&] 1442[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based column index]&] 1443[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1444the ][*2 HeaderCtrl`::Column][2 structure. This can be used to set 1445additional properties of the header column (e.g. column width 1446constraints, font and icon for the column title etc.)]&] 1447[s0;0 &] 1448[s0;H6;0 &] 1449[s0;i448;a25;kKO9;:ArrayCtrl`:`:HeaderTab`(int`)const: [@(0.0.255)2 const][2 _][_^HeaderCtrl`:`:Column^2 H 1450eaderCtrl`::Column][@(0.0.255)2 `&][2 _][*2 HeaderTab][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )_][@(0.0.255)2 c 1451onst]&] 1452[s0;l288; [2 Returns a constant reference to the ][*2 HeaderCtrl`::Column][2 1453structure for the given column.]&] 1454[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based column index]&] 1455[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1456the ][*2 HeaderCtrl`::Column][2 structure. This can be used to set 1457additional properties of the header column (e.g. column width 1458constraints, font and icon for the column title etc.)]&] 1459[s0;0 &] 1460[s0;H6;0 &] 1461[s0;i448;a25;kKO9;:ArrayCtrl`:`:HeaderTab`(const Id`&`): [_^HeaderCtrl`:`:Column^2 Head 1462erCtrl`::Column][@(0.0.255)2 `&][2 _][*2 HeaderTab][2 (][@(0.0.255)2 const 1463][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 1464[s0;l288; [2 Returns the ][*2 HeaderCtrl`::Column][2 descriptive structure 1465for the column bound to a given source index.]&] 1466[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the index 1467used as source for the column]&] 1468[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1469the ][*2 HeaderCtrl`::Column][2 structure]&] 1470[s0;0 &] 1471[s0;H6;0 &] 1472[s0;i448;a25;kKO9;:ArrayCtrl`:`:HeaderTab`(const Id`&`)const: [@(0.0.255)2 const][2 _][_^HeaderCtrl`:`:Column^2 H 1473eaderCtrl`::Column][@(0.0.255)2 `&][2 _][*2 HeaderTab][2 (][@(0.0.255)2 const 1474][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 const]&] 1475[s0;l288; [2 Returns a constant reference to the ][*2 HeaderCtrl`::Column][2 1476descriptive structure for the column bound to a given source 1477index.]&] 1478[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the index 1479used as source for the column]&] 1480[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a constant reference 1481to the ][*2 HeaderCtrl`::Column][2 structure]&] 1482[s0;0 &] 1483[s0;H6;0 &] 1484[s0;i448;a25;kKO9;:ArrayCtrl`:`:HeaderObject`(`)const: [@(0.0.255)2 const][2 _][_^HeaderCtrl^2 H 1485eaderCtrl][@(0.0.255)2 `&][2 _][*2 HeaderObject][2 ()_][@(0.0.255)2 const]&] 1486[s0;l288; [2 Returns a non`-constant reference to the ][*2 HeaderCtrl][2 1487object for this table. The reference can be further used to alter 1488properties of the table header (tab visibility, header visual 1489mode and so on).]&] 1490[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A non`-constant 1491reference to the table HeaderCtrl object.]&] 1492[s0;0 &] 1493[s0;H6;0 &] 1494[s0;i448;a25;kKO9;:ArrayCtrl`:`:HeaderObject`(`): [_^HeaderCtrl^2 HeaderCtrl][@(0.0.255)2 `& 1495][2 _][*2 HeaderObject][2 ()]&] 1496[s0;l288; [2 This is just the constant version of the above method; 1497when called on a constant ][*2 ArrayCtrl][2 reference, it returns 1498a constant reference to its underlying HeaderCtrl object which 1499can be then used to query additional header information.]&] 1500[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|A constant reference 1501to the table HeaderCtrl object.]&] 1502[s0;0 &] 1503[s0;H6;0 &] 1504[s0;i448;a25;kKO9;:ArrayCtrl`:`:SerializeHeader`(Stream`&`): [@(0.0.255)2 void][2 _][*2 Ser 1505ializeHeader][2 (][_^Stream^2 Stream][@(0.0.255)2 `&][2 _][*@3;2 s][2 )]&] 1506[s0;l288; [2 Serializes all information pertaining to the array header 1507(mainly the user`-set column widths). This is equivalent to calling 1508][*2 HeaderObject().Serialize(s)][2 . The main purpose of this function 1509is to allow storing header configuration to be restored upon 1510opening the dialog or the application for the next time. This 1511function is now deprecated in favor of SerializeSettings.]&] 1512[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 s][2 -|the ][*^topic`:`/`/Core`/src`/Stream`$en`-us^2 S 1513tream][2 object to serialize the header to/from]&] 1514[s0;0 &] 1515[s0;H6;0 &] 1516[s0;i448;a25;kKO9;:ArrayCtrl`:`:SerializeSettings`(Stream`&`): [@(0.0.255)2 void][2 _][*2 S 1517erializeSettings][2 (][_^Stream^2 Stream][@(0.0.255)2 `&][2 _][*@3;2 s][2 )]&] 1518[s0;l288; [2 Serializes all information pertaining to the array header 1519(mainly the user`-set column widths) and the setting of sort 1520column. The main purpose of this function is to allow storing 1521configuration to be restored upon opening the dialog or the application 1522for the next time.]&] 1523[s0;0 &] 1524[s0;H6;0 &] 1525[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetDisplay`(int`,int`,const Display`&`): [@(0.0.255)2 v 1526oid][2 _][*2 SetDisplay][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 int][2 _][*@3;2 col][2 , 1527 ][@(0.0.255)2 const][2 _][_^Display^2 Display][@(0.0.255)2 `&][2 _][*@3;2 d][2 )]&] 1528[s0;l288; [2 Sets the ][*2 Display][2 object for a given array cell.]&] 1529[s0;l288;*2 &] 1530[s0;l288; [*2 Note:][2 the ownership to the Display object is not transferred 1531by this call. The ArrayCtrl stores a mere pointer to it and it 1532is the responsibility of the programmer to keep the Display object 1533alive as long as necessary (until the array is shut down or the 1534cell display changed via another call to SetDisplay). In fact, 1535most Display`-based objects don`'t support data copying at all. 1536In any case, copying Displays is not a very good practice and 1537is very prone to slicing (as most actual Displays are actually 1538derived classes with additional data members).]&] 1539[s0;l288;2 &] 1540[s0;l288; [2 In many cases it would be relatively safe to assume that 1541the Display is not used unless the array is actually painted 1542(e.g., when the control is not bound to a parent or when its 1543view has zero size), but it is not a very wise practice and it 1544can fail in very weird ways under special circumstances (like 1545making screenshots or graphical exports from the array control).]&] 1546[s0;l288;2 &] 1547[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 1548[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 j][2 -|zero`-based column index]&] 1549[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 d][2 -|display to use]&] 1550[s0;0 &] 1551[s0;H6;0 &] 1552[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetDisplay`(int`,int`): [@(0.0.255)2 const][2 _][_^Display^2 D 1553isplay][@(0.0.255)2 `&][2 _][*2 GetDisplay][2 (][@(0.0.255)2 int][2 _][*@3;2 row][2 , 1554][@(0.0.255)2 int][2 _][*@3;2 col][2 )]&] 1555[s0;l288; [2 Returns a reference to the Display object for the given 1556array cell.]&] 1557[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 row][2 -|zero`-based row index]&] 1558[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 col][2 -|zero`-based column index]&] 1559[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|a reference to 1560the Display object.]&] 1561[s0;0 &] 1562[s0;H6;0 &] 1563[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetDisplay`(int`): [@(0.0.255)2 const][2 _][_^Display^2 Dis 1564play][@(0.0.255)2 `&][2 _][*2 GetDisplay][2 (][@(0.0.255)2 int][2 _][*@3;2 col][2 )]&] 1565[s0;l288; [2 Returns a reference to the Display object for the given 1566array column.]&] 1567[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 col][2 -|zero`-based column index]&] 1568[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|constant reference 1569to the column Display]&] 1570[s0;0 &] 1571[s0;H6;0 &] 1572[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetCtrl`(int`,int`,Ctrl`&`,bool`): [@(0.0.255)2 void][2 _ 1573][*2 SetCtrl][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 int][2 _][*@3;2 col][2 , 1574][_^Ctrl^2 Ctrl][@(0.0.255)2 `&][2 _][*@3;2 ctrl][2 , ][@(0.0.255)2 bool][2 _][*@3;2 value][2 _`=_][@(0.0.255)2 t 1575rue][2 )]&] 1576[s0;l288; [2 Sets an external control to use as the editor for a single 1577array cell. Naturally, the same Ctrl object cannot be used as 1578the editor for multiple array cells. If the position of Ctrl 1579is equivalent to `'SetRect(0, 0, 0, 0)`', which is the default 1580value, Ctrl is resized to fit the ArrayCtrl cell accurately, 1581otherwise the position represents the position within the cell. 1582If ][*@3;2 value][2 is true, then the Ctrl represents the value 1583of the cell, otherwise it is independent of it.]&] 1584[s0;0 &] 1585[s0;H6;0 &] 1586[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetTotalCy`(`)const: [@(0.0.255)2 int][2 _][*2 GetTotalCy][2 ( 1587)_][@(0.0.255)2 const]&] 1588[s0;l288; [2 Returns total height of the array (sum of the individual 1589line heights for all array rows)]&] 1590[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|array height in 1591pixels]&] 1592[s0;0 &] 1593[s0;H6;0 &] 1594[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetLineAt`(int`)const: [@(0.0.255)2 int][2 _][*2 GetLineAt][2 ( 1595][@(0.0.255)2 int][2 _][*@3;2 y][2 )_][@(0.0.255)2 const]&] 1596[s0;l288; [2 Locates the array row according to given ][/2 y][2 coordinate 1597(such array row ][/2 r][2 for which ][*2 GetLineY(r) <`= y `&`& GetLineY(r) 1598`+ GetLineCy(r) > y][2 ).]&] 1599[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 y][2 -|vertical pixel coordinate 1600to locate]&] 1601[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based row 1602number or `-1 when not found]&] 1603[s0;0 &] 1604[s0;H6;0 &] 1605[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetClickColumn`(`)const: [@(0.0.255)2 int][2 _][*2 GetClick 1606Column][2 ()_][@(0.0.255)2 const]&] 1607[s0;l288; [2 Returns column index of the last clicked column in the 1608array. If the click happens past the last row of array, returns 1609Null.]&] 1610[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based index 1611of the relevant column]&] 1612[s0;0 &] 1613[s0;H6;0 &] 1614[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetClickRow`(`)const: [@(0.0.255)2 int][2 _][*2 GetClickRow 1615][2 ()_][@(0.0.255)2 const]&] 1616[s0;l288; [2 Returns column index of the last clicked row in the array. 1617If the click happens past the last row of array, returns Null.]&] 1618[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based index 1619of the relevant column]&] 1620[s0;0 &] 1621[s0;H6;0 &] 1622[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetClickPos`(`)const: [_^Point^2 Point][2 _][*2 GetClickPos 1623][2 ()_][@(0.0.255)2 const]&] 1624[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 Point(GetClickColumn(), 1625GetClickRow())][2 .]&] 1626[s0;0 &] 1627[s0;* &] 1628[s0; [* Data setting and retrieval]&] 1629[s0;0 &] 1630[s0; &] 1631[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetCount`(int`): [@(0.0.255)2 void][2 _][*2 SetCount][2 (][@(0.0.255)2 i 1632nt][2 _][*@3;2 c][2 )]&] 1633[s0;l288; [2 Sets the number of rows in the array. This extends or 1634trims the source matrix as necessary. When using the Ctrl`-based 1635individual cell editors, as a side`-effect of this call some 1636controls can be constructed or destroyed.]&] 1637[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 c][2 -|new row count]&] 1638[s0;0 &] 1639[s0;H6;0 &] 1640[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetVirtualCount`(int`): [@(0.0.255)2 void][2 _][*2 SetVirtu 1641alCount][2 (][@(0.0.255)2 int][2 _][*@3;2 c][2 )]&] 1642[s0;l288; [2 Sets the number of rows in an array with external data. 1643This makes sense only when all the ][/2 Column`'s][2 and ][/2 Ctrl`'s][2 1644of the array are ][/2 rownum][2 `-based. The function doesn`'t physically 1645allocate any source data matrix space, it just makes the array 1646`'think`' it has ][/2 c][2 rows (this is of course necessary for 1647the Paint routine, for cursor / selection management and so on).]&] 1648[s0;l288; [*2 Note:][2 in the current implementation, selection flags 1649for the individual rows are kept in the row objects. Therefore 1650it is not very wise to use multiselection for arrays with external 1651data, because as soon as the last row is selected, all row storage 1652structures are allocated as a side effect to keep the selection 1653flags.]&] 1654[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 c][2 -|new `'virtual`' number 1655of rows]&] 1656[s0;0 &] 1657[s0;H6;0 &] 1658[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetCount`(`)const: [@(0.0.255)2 int][2 _][*2 GetCount][2 ()_][@(0.0.255)2 c 1659onst]&] 1660[s0;l288; [2 Returns the number of rows in the array. In fact, this 1661returns the maximum of the number of `'real`' source matrix rows 1662(as set by the SetCount / Add / Insert methods) and the `'virtual`' 1663row count (as se by SetVirtualCount). By checking the implementation 1664of this method, you can easily find that, simply,]&] 1665[s0;l288;2 &] 1666[s0;l288; [C2 int ArrayCtrl`::GetCount() const `{]&] 1667[s0;l288; [C2 -|-|return max(virtualcount, array.GetCount());]&] 1668[s0;l288; [C2 `}]&] 1669[s0;l288;2 &] 1670[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|Number of rows 1671in the array.]&] 1672[s0;0 &] 1673[s0;H6;0 &] 1674[s0;i448;a25;kKO9;:ArrayCtrl`:`:Clear`(`): [@(0.0.255)2 void][2 _][*2 Clear][2 ()]&] 1675[s0;l288; [2 Clears the array source data matrix and sets the virtual 1676row count to 0.]&] 1677[s0;0 &] 1678[s0;H6;0 &] 1679[s0;i448;a25;kKO9;:ArrayCtrl`:`:Shrink`(`): [@(0.0.255)2 void][2 _][*2 Shrink][2 ()]&] 1680[s0;l288; [2 Shrinks the source data array, i.e. reallocates the data 1681to the minimum required memory space.]&] 1682[s0;0 &] 1683[s0;H6;0 &] 1684[s0;i448;a25;kKO9;:ArrayCtrl`:`:Get`(int`,int`)const: [_^Value^2 Value][2 _][*2 Get][2 (][@(0.0.255)2 i 1685nt][2 _][*@3;2 i][2 , ][@(0.0.255)2 int][2 _][*@3;2 ii][2 )_][@(0.0.255)2 const]&] 1686[s0;l288; [2 Returns the value at a given location in the source data 1687matrix.]&] 1688[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row number]&] 1689[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based index ordinal 1690number]&] 1691[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the given 1692location in the source data matrix]&] 1693[s0;0 &] 1694[s0;H6;0 &] 1695[s0;i448;a25;kKO9;:ArrayCtrl`:`:Get`(int`,const Id`&`)const: [_^Value^2 Value][2 _][*2 Get][2 ( 1696][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 c 1697onst]&] 1698[s0;l288; [2 Returns the value at a given location in the source data 1699matrix. In this version, the source indices are addressed by 1700their identifiers.]&] 1701[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row number]&] 1702[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 1703[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the given 1704location in the source data matrix]&] 1705[s0;0 &] 1706[s0;H6;0 &] 1707[s0;i448;a25;kKO9;:ArrayCtrl`:`:Get`(int`)const: [_^Value^2 Value][2 _][*2 Get][2 (][@(0.0.255)2 i 1708nt][2 _][*@3;2 ii][2 )_][@(0.0.255)2 const]&] 1709[s0;l288; [2 Returns the value of a given source index at the currently 1710active cursor row. This is equivalent to ][*2 Get(GetCursor(), 1711ii)][2 . When the row is currently being edited, the function returns 1712the `'new`' value (the current value of the respective editor 1713control, i.e. potentially edited).]&] 1714[s0;l288; [*2 Note:][2 when the cursor row is not set (when ][*2 !IsCursor()][2 ), 1715the function fails with an ][*2 ASSERT][2 .]&] 1716[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based index ordinal 1717number]&] 1718[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at a given 1719location in the cursor row]&] 1720[s0;0 &] 1721[s0;H6;0 &] 1722[s0;i448;a25;kKO9;:ArrayCtrl`:`:Get`(const Id`&`)const: [_^Value^2 Value][2 _][*2 Get][2 (][@(0.0.255)2 c 1723onst ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 const]&] 1724[s0;l288; [2 Returns the value of a given source index at the currently 1725active cursor row. This is equivalent to ][*2 Get(GetCursor(), 1726id)][2 .]&] 1727[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 1728[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the given 1729location in the cursor row]&] 1730[s0;0 &] 1731[s0;H6;0 &] 1732[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetOriginal`(int`)const: [_^Value^2 Value][2 _][*2 GetOrigi 1733nal][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 )_][@(0.0.255)2 const]&] 1734[s0;l288; [2 Returns the `'original`' value of a given source index 1735at the currently active cursor row. When the row is open for 1736editing, this function returns the `'old`' value before any editing 1737took place.]&] 1738[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based index ordinal 1739number]&] 1740[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the given 1741location in the cursor row]&] 1742[s0;0 &] 1743[s0;H6;0 &] 1744[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetOriginal`(const Id`&`)const: [_^Value^2 Value][2 _][*2 G 1745etOriginal][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 const]&] 1746[s0;l288; [2 Returns the `'original`' value (i.e., without any editing 1747changed applied) of a given source index at the currently active 1748cursor row.]&] 1749[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 1750[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the given 1751location in the cursor row]&] 1752[s0;0 &] 1753[s0;H6;0 &] 1754[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetKey`(`)const: [_^Value^2 Value][2 _][*2 GetKey][2 ()_][@(0.0.255)2 c 1755onst]&] 1756[s0;l288; [2 Returns the value of the current row`'s primary key. This 1757is equivalent to ][*2 Get(0)][2 .]&] 1758[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the index 1759#0 in the cursor row]&] 1760[s0;0 &] 1761[s0;H6;0 &] 1762[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetOriginalKey`(`)const: [_^Value^2 Value][2 _][*2 GetOrigi 1763nalKey][2 ()_][@(0.0.255)2 const]&] 1764[s0;l288; [2 Returns the original value of the current row`'s primary 1765key. During editing, the function returns the value at the time 1766of opening the row for editing, i.e. without any editing changes 1767applied. This is equivalent to ][*2 GetOriginal(0)][2 .]&] 1768[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value at the index 1769#0 in the cursor row]&] 1770[s0;0 &] 1771[s0;H6;0 &] 1772[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(int`,int`,const Value`&`): [@(0.0.255)2 void][2 _][*2 S 1773et][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 int][2 _][*@3;2 ii][2 , 1774][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _][*@3;2 v][2 )]&] 1775[s0;l288; [2 Sets the value at a given location in the source data 1776matrix.]&] 1777[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row number]&] 1778[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based index ordinal 1779number]&] 1780[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|value to set to the given 1781cell]&] 1782[s0;0 &] 1783[s0;H6;0 &] 1784[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(int`,const Id`&`,const Value`&`): [@(0.0.255)2 voi 1785d][2 _][*2 Set][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 i 1786d][2 , ][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _][*@3;2 v][2 )]&] 1787[s0;l288; [2 Sets the value at a given location in the source data 1788matrix. ]&] 1789[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row number]&] 1790[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 1791[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|value to set to the given 1792cell]&] 1793[s0;0 &] 1794[s0;H6;0 &] 1795[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(int`,const Value`&`): [@(0.0.255)2 void][2 _][*2 Set][2 ( 1796][@(0.0.255)2 int][2 _][*@3;2 ii][2 , ][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _ 1797][*@3;2 v][2 )]&] 1798[s0;l288; [2 Modifies the value at a given location in the cursor row. 1799When the row is open for editing, the function immediately changes 1800the value in the appropriate editor control.]&] 1801[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based index ordinal 1802number]&] 1803[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|value to set]&] 1804[s0;0 &] 1805[s0;H6;0 &] 1806[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(const Id`&`,const Value`&`): [@(0.0.255)2 void][2 _][*2 S 1807et][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , ][@(0.0.255)2 const][2 _][_^Value^2 Va 1808lue][@(0.0.255)2 `&][2 _][*@3;2 v][2 )]&] 1809[s0;l288; [2 Modifies the value at a given location in the cursor row. 1810This overloaded version uses the ][*2 Id][2 identifier to address 1811the relevant index.]&] 1812[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|index identifier]&] 1813[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|value to set]&] 1814[s0;0 &] 1815[s0;H6;0 &] 1816[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetColumn`(int`,int`)const: [_^Value^2 Value][2 _][*2 GetCo 1817lumn][2 (][@(0.0.255)2 int][2 _][*@3;2 row][2 , ][@(0.0.255)2 int][2 _][*@3;2 col][2 )_][@(0.0.255)2 c 1818onst]&] 1819[s0;l288; [2 Returns the value of a given column. This depends on the 1820column`-index mapping established when adding columns to the 1821table. When the column is a ][/2 rownum][2 type (it is bound to 1822no source indices), the function just returns the ][/2 row][2 parameter. 1823For columns with a single source index, the function returns 1824the value of the mapped source index. For columns with multiple 1825source indices, the function returns a ][*2 ValueArray ][2 containing 1826the values of its source indices.]&] 1827[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 row][2 -|zero`-based row index]&] 1828[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 col][2 -|zero`-based column index]&] 1829[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|value of the given 1830column]&] 1831[s0;0 &] 1832[s0;H6;0 &] 1833[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetConvertedColumn`(int`,int`): [_^Value^2 Value][2 _][*2 G 1834etConvertedColumn][2 (][@(0.0.255)2 int][2 _][*@3;2 row][2 , ][@(0.0.255)2 int][2 _][*@3;2 col][2 ) 1835]&] 1836[s0;l288; [2 Returns the value of a given column after application 1837of its ][*2 Convert][2 . For performance reasons, the values obtained 1838by calls to the ][*2 Convert`::Format][2 methods are cached internally 1839within the ArrayCtrl object. You can manipulate the conversion 1840cache using the methods ][*^topic`:`/`/CtrlLib`/src`/ArrayCtrl`$en`-us`#`:`:ArrayCtrl`:`:ClearCache`(`)^2 C 1841learCache][2 and][*2 ][*^topic`:`/`/CtrlLib`/src`/ArrayCtrl`$en`-us`#`:`:ArrayCtrl`:`:InvalidateCache`(int`)^2 I 1842nvalidateCache][2 .]&] 1843[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 row][2 -|zero`-based row index]&] 1844[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 col][2 -|zero`-based column index]&] 1845[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|the converted cell 1846value]&] 1847[s0;0 &] 1848[s0;H6;0 &] 1849[s0;i448;a25;kKO9;:ArrayCtrl`:`:ReadRow`(int`)const: [_^Vector^2 Vector][2 <][_^Value^2 Val 1850ue][2 >_][*2 ReadRow][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )_][@(0.0.255)2 const]&] 1851[s0;l288; [2 Returns a ][*2 Vector][2 containing the values of all source 1852indices in the given row. Invariantly, the ][*2 GetCount()][2 of 1853the returned array is equal to the ][*2 GetIndexCount()][2 of the 1854source ArrayCtrl.]&] 1855[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 1856[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|an array of all 1857source values in the given row]&] 1858[s0;0 &] 1859[s0;H6;0 &] 1860[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(int`,const Vector`<Value`>`&`): [@(0.0.255)2 void][2 _ 1861][*2 Set][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 const][2 _][_^Vector^2 Vector][2 <][_^Value^2 V 1862alue][2 >`&_][*@3;2 v][2 )]&] 1863[s0;l288; [2 Modified a given row by setting all source index values 1864to values passed in the parameter ][/2 v][2 .]&] 1865[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 1866[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|an array of values to set 1867to the source data matrix row]&] 1868[s0;0 &] 1869[s0;H6;0 &] 1870[s0;i448;a25;kKO9;:ArrayCtrl`:`:Add`(`): [@(0.0.255)2 void][2 _][*2 Add][2 ()]&] 1871[s0;l288; [2 Adds an empty row to the source data matrix.]&] 1872[s0;l288; [*2 Note:][2 the ][*2 InsertValue][2 property of the ][*2 IdInfo][2 1873structure defines a method to generate / retrieve default values 1874for newly inserted rows. However, these values are only used 1875during the GUI`-based ][*2 DoInsert][2 method and do not apply to 1876the ][*2 Add][2 method. If you need to set the newly added source 1877matrix row to some non`-null defaults, you have to modify the 1878relevant cells manually.]&] 1879[s0;0 &] 1880[s0;H6;0 &] 1881[s0;i448;a25;kKO9;:ArrayCtrl`:`:Add`(const Vector`<Value`>`&`): [@(0.0.255)2 void][2 _][*2 A 1882dd][2 (][@(0.0.255)2 const][2 _][_^Vector^2 Vector][2 <][_^Value^2 Value][2 >`&_][*@3;2 v][2 )]&] 1883[s0;l288; [2 Adds a new row at the end of the source data matrix. The 1884][*^topic`:`/`/Core`/src`/Vector`$en`-us^2 Vector][2 parameter contains 1885the values to be used to initialize the new row of the matrix.]&] 1886[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|new matrix row]&] 1887[s0;0 &] 1888[s0;H6;0 &] 1889[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(int`,const VectorMap`<String`,Value`>`&`): [@(0.0.255)2 v 1890oid][2 _][*2 Set][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 const][2 _][_^VectorMap^2 Vec 1891torMap][2 <][_^String^2 String][2 , ][_^Value^2 Value][2 >`&_][*@3;2 m][2 )]&] 1892[s0;l288; [2 Sets the row based on map. Keys are matched to row Ids, 1893keys that are not found are ignored, those found are assigned 1894correspoding map values.]&] 1895[s0;0 &] 1896[s0;H6;0 &] 1897[s0;i448;a25;kKO9;:ArrayCtrl`:`:Set`(int`,const ValueMap`&`): [@(0.0.255)2 void][2 _][*2 Se 1898t][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 const][2 _][_^ValueMap^2 ValueMap][@(0.0.255)2 `& 1899][2 _][*@3;2 m][2 )]&] 1900[s0;l288; [2 Sets the row based on map. Keys are matched to row Ids, 1901keys that are not found are ignored, those found are assigned 1902correspoding map values.]&] 1903[s0;0 &] 1904[s0;H6;0 &] 1905[s0;i448;a25;kKO9;:ArrayCtrl`:`:Add`(const VectorMap`<String`,Value`>`&`): [@(0.0.255)2 v 1906oid][2 _][*2 Add][2 (][@(0.0.255)2 const][2 _][_^VectorMap^2 VectorMap][2 <][_^String^2 String][2 , 1907 ][_^Value^2 Value][2 >`&_][*@3;2 m][2 )]&] 1908[s0;l288; [2 Adds the row based on map. Keys are matched to row Ids, 1909keys that are not found are ignored, those found are assigned 1910correspoding map values.]&] 1911[s0;0 &] 1912[s0;H6;0 &] 1913[s0;i448;a25;kKO9;:ArrayCtrl`:`:Add`(const ValueMap`&`): [@(0.0.255)2 void][2 _][*2 Add][2 (][@(0.0.255)2 c 1914onst][2 _][_^ValueMap^2 ValueMap][@(0.0.255)2 `&][2 _][*@3;2 m][2 )]&] 1915[s0;l288; [2 Adds the row based on map. Keys are matched to row Ids, 1916keys that are not found are ignored, those found are assigned 1917correspoding map values.]&] 1918[s0;0 &] 1919[s0;H6;0 &] 1920[s0;i448;a25;kKO9;:ArrayCtrl`:`:Add`(const Value`&`[`,const Value`&`]`.`.`.`): [@(0.0.255)2 v 1921oid][2 _][*2 Add][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _`[, 1922][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _`]...)]&] 1923[s0;l288; [2 Adds a new row at the bottom of the source data matrix. 1924This is in fact a series of functions (generated automatically 1925using the ][*2 Expand][2 macro) which takes an arbitrary number 1926of arguments. Its arguments are used to initialize the source 1927indices in the newly added row.]&] 1928[s0;0 &] 1929[s0;H6;0 &] 1930[s0;i448;a25;kKO9;:ArrayCtrl`:`:Add`(const Nuller`&`): [@(0.0.255)2 void][2 _][*2 Add][2 (][@(0.0.255)2 c 1931onst][2 _][_^Nuller^2 Nuller][@(0.0.255)2 `&][2 _][*@3;2 null][2 )]&] 1932[s0;l288; [2 This is helper method required for correct overloading 1933resolution of Add(Null).]&] 1934[s0;0 &] 1935[s0;H6;0 &] 1936[s0;i448;a25;kKO9;:ArrayCtrl`:`:Insert`(int`): [@(0.0.255)2 void][2 _][*2 Insert][2 (][@(0.0.255)2 i 1937nt][2 _][*@3;2 i][2 )]&] 1938[s0;l288; [2 Inserts a new row into the source array. All indices are 1939initialized to ][*2 Null][2 values. The ][*2 InsertValue][2 property 1940doesn`'t apply; if you need to set the newly created row to some 1941non`-trivial values, you have to do so manually.]&] 1942[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based position of 1943the newly created row]&] 1944[s0;0 &] 1945[s0;H6;0 &] 1946[s0;i448;a25;kKO9;:ArrayCtrl`:`:Insert`(int`,const Vector`<Value`>`&`): [@(0.0.255)2 vo 1947id][2 _][*2 Insert][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 const][2 _][_^Vector^2 Vect 1948or][2 <][_^Value^2 Value][2 >`&_][*@3;2 v][2 )]&] 1949[s0;l288; [2 Inserts a new row into the array at a given position. 1950The second parameter, ][/2 v][2 , is used to initialize the source 1951indices of the newly created row.]&] 1952[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 1953[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|a vector of values used 1954to initialize the source indices of the given row]&] 1955[s0;0 &] 1956[s0;H6;0 &] 1957[s0;i448;a25;kKO9;:ArrayCtrl`:`:Remove`(int`): [@(0.0.255)2 void][2 _][*2 Remove][2 (][@(0.0.255)2 i 1958nt][2 _][*@3;2 i][2 )]&] 1959[s0;l288; [2 Removes the given source data row.]&] 1960[s0;l288; [*2 Note:][2 the ][*2 AskRemove][2 property of the ][*2 ArrayCtrl][2 1961object tells whether a confirmation dialog should pop up every 1962time the user wants to remove a row. However, this method applies 1963only to the GUI`-based row removal; the ][*2 Remove][2 method always 1964removes the requested row unconditionally without popping up 1965any confirmation dialog.]&] 1966[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based index of the 1967row to remove]&] 1968[s0;0 &] 1969[s0;H6;0 &] 1970[s0;i448;a25;kKO9;:ArrayCtrl`:`:SwapUp`(`): [@(0.0.255)2 void][2 _][*2 SwapUp][2 ()]&] 1971[s0;l288; [2 Exchanges the cursor row with the preceding row, effectively 1972moving it up.]&] 1973[s0;0 &] 1974[s0;H6;0 &] 1975[s0;i448;a25;kKO9;:ArrayCtrl`:`:SwapDown`(`): [@(0.0.255)2 void][2 _][*2 SwapDown][2 ()]&] 1976[s0;l288; [2 Exchanges the cursor row with following row, effectively 1977moving it down.]&] 1978[s0;0 &] 1979[s0;H6;0 &] 1980[s0;i448;a25;kKO9;:ArrayCtrl`:`:Sort`(const ArrayCtrl`:`:Order`&`): [@(0.0.255)2 void][2 _ 1981][*2 Sort][2 (][@(0.0.255)2 const][2 _][_^ArrayCtrl`:`:Order^2 ArrayCtrl`::Order][@(0.0.255)2 `& 1982][2 _][*@3;2 order][2 )]&] 1983[s0;l288; [2 Sorts the array rows according to a given ordering predicate. 1984The ][*2 ArrayCtrl`::Order][2 object defines the ordering predicate; 1985its ][*2 operator ()][2 should return ][*2 true][2 whenever its first 1986parameter (a vector containing the values of all source indices 1987in a row) is less than its second parameter.]&] 1988[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 order][2 -|]&] 1989[s0;0 &] 1990[s0;H6;0 &] 1991[s0;i448;a25;kKO9;:ArrayCtrl`:`:Sort`(int`,int`,const ArrayCtrl`:`:Order`&`): [@(0.0.255)2 v 1992oid][2 _][*2 Sort][2 (][@(0.0.255)2 int][2 _][*@3;2 from][2 , ][@(0.0.255)2 int][2 _][*@3;2 count][2 , 1993][@(0.0.255)2 const][2 _][_^ArrayCtrl`:`:Order^2 ArrayCtrl`::Order][@(0.0.255)2 `&][2 _][*@3;2 o 1994rder][2 )]&] 1995[s0;l288; [2 Sorts a portion of the array using a given ordering predicate.]&] 1996[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 from][2 -|zero`-based index of 1997the first row to sort]&] 1998[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 count][2 -|number of rows to be 1999sorted]&] 2000[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 order][2 -|the ordering predicate 2001object. The object should be derived from ][*2 ArrayCtrl`::Order][2 2002and should override the ][*2 operator ()][2 method. This method 2003should return ][*2 true ][2 whenever its first parameter (a vector 2004containing all source index values for a certain row) is less 2005than its second parameter.]&] 2006[s0;0 &] 2007[s0;H6;0 &] 2008[s0;i448;a25;kKO9;:ArrayCtrl`:`:Sort`(int`(`*`)`(const Vector`<Value`>`&v1`,const Vector`<Value`>`&v2`)`): [@(0.0.255)2 v 2009oid][2 _][*2 Sort][2 (][@(0.0.255)2 int][2 _(`*][*@3;2 compare][2 )(][@(0.0.255)2 const][2 _Vector< 2010Value>`&_v1, ][@(0.0.255)2 const][2 _Vector<Value>`&_v2))]&] 2011[s0;l288; [2 Sorts the array rows according to the order defined by 2012the specified ordering predicate ][/2 compare][2 . This is supposed 2013to be a global function returning ][*2 true][2 whenever its first 2014parameter (][/2 v1][2 , an array consisting of all source indices 2015within a row) is less than the second parameter ][/2 v2][2 (according 2016to the desired ordering).]&] 2017[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 compare][2 -|the ordering predicate; 2018_the function is supposed to return ][*2 true][2 whenever its first 2019parameter (][/2 v1][2 ) is less than the second parameter (][/2 v2][2 ) 2020according to the desired ordering.]&] 2021[s0;0 &] 2022[s0;H6;0 &] 2023[s0;i448;a25;kKO9;:ArrayCtrl`:`:Sort`(int`,int`(`*`)`(const Value`&v1`,const Value`&v2`)`): [@(0.0.255)2 v 2024oid][2 _][*2 Sort][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 , ][@(0.0.255)2 int][2 _(`*][*@3;2 compare][2 ) 2025(][@(0.0.255)2 const][2 _Value][@(0.0.255)2 `&][2 _v1, ][@(0.0.255)2 const][2 _Value][@(0.0.255)2 `& 2026][2 _v2)_`=_StdValueCompare)]&] 2027[s0;l288; [2 Sorts the array rows according to the given ordering predicate 2028for the source index with a given ordinal number. When not explicitly 2029specified, the ][*2 StdValueCompare][2 function is used as the default 2030comparison predicate.]&] 2031[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 2032of the source index used for sorting]&] 2033[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 compare][2 -|the sorting predicate 2034function: the function is supposed to return ][*2 true][2 whenever 2035its first parameter (][/2 v1][2 ) is less than the second parameter 2036(][/2 v2][2 ) according to the desired ordering.]&] 2037[s0;0 &] 2038[s0;H6;0 &] 2039[s0;i448;a25;kKO9;:ArrayCtrl`:`:Sort`(const Id`&`,int`(`*`)`(const Value`&v1`,const Value`&v2`)`): [@(0.0.255)2 v 2040oid][2 _][*2 Sort][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , ][@(0.0.255)2 int][2 _(`* 2041][*@3;2 compare][2 )(][@(0.0.255)2 const][2 _Value][@(0.0.255)2 `&][2 _v1, 2042][@(0.0.255)2 const][2 _Value][@(0.0.255)2 `&][2 _v2)_`=_StdValueCompare)]&] 2043[s0;l288; [2 Sorts the array rows according to the given ordering predicate 2044for the source index with a given identifier. When not explicitly 2045specified, the ][*2 StdValueCompare][2 function is used as the default 2046comparison predicate.]&] 2047[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|identifier of the source 2048index used for sorting]&] 2049[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 compare][2 -|the sorting predicate 2050function: the function is supposed to return ][*2 true][2 whenever 2051its first parameter (][/2 v1][2 ) is less than the second parameter 2052(][/2 v2][2 ) according to the desired ordering .]&] 2053[s0;0 &] 2054[s0;H6;0 &] 2055[s0;i448;a25;kKO9;:ArrayCtrl`:`:Sort`(`): [@(0.0.255)2 void][2 _][*2 Sort][2 ()]&] 2056[s0;l288; [2 Sorts the array according to the default ordering predicate 2057for the first source index. This is equivalent to calling ][*2 Sort(0)][2 .]&] 2058[s0;0 &] 2059[s0;H6;0 &] 2060[s0;i448;a25;kKO9;:ArrayCtrl`:`:ColumnSort`(int`,const ValueOrder`&`): [@(0.0.255)2 voi 2061d][2 _][*2 ColumnSort][2 (][@(0.0.255)2 int][2 _][*@3;2 column][2 , ][@(0.0.255)2 const][2 _][_^ValueOrder^2 V 2062alueOrder][@(0.0.255)2 `&][2 _][*@3;2 order][2 )]&] 2063[s0;l288; [2 Sorts by the column. Note that this is different from 2064Sort, because the final converted value of column is used (which 2065can even be combination of more indexes).]&] 2066[s0;0 &] 2067[s0;H6;0 &] 2068[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetSortColumn`(int`,bool`): [@(0.0.255)2 void][2 _][*2 SetS 2069ortColumn][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 , ][@(0.0.255)2 bool][2 _][*@3;2 descending][2 _`= 2070_][@(0.0.255)2 false][2 )]&] 2071[s0;l288; [2 Sets the `"sorting`" column and calls DoColumnSort. This 2072setting is used by DoColumnSort.]&] 2073[s0;0 &] 2074[s0;H6;0 &] 2075[s0;i448;a25;kKO9;:ArrayCtrl`:`:ToggleSortColumn`(int`): [@(0.0.255)2 void][2 _][*2 ToggleS 2076ortColumn][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 )]&] 2077[s0;l288; [2 Similar to SetSortColumn, but if the column is already 2078set, descending flag is inverted; otherwise descending flag is 2079set to false (indicating ascending sort).]&] 2080[s0;0 &] 2081[s0;H6;0 &] 2082[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoColumnSort`(`): [@(0.0.255)2 void][2 _][*2 DoColumnSort][2 ( 2083)]&] 2084[s0;l288; [2 Sorts the array by sorting column and indicates it by 2085setting an image in the header.]&] 2086[s0;0 &] 2087[s0;H6;0 &] 2088[s0;i448;a25;kKO9;:ArrayCtrl`:`:ClearCache`(`): [@(0.0.255)2 void][2 _][*2 ClearCache][2 ()]&] 2089[s0;l288; [2 Invalidates the whole ][/2 convert cache][2 . The convert 2090cache keeps the results of the ][*2 Convert`::Format][2 method applied 2091to individual array data cells for performance reasons. Whenever 2092you call the ][*2 ClearCache][2 method, all cache entries are marked 2093as obsolete and the ][*2 Convert][2 `'s ][*2 Format][2 method will be 2094called as soon as the converted value of a table cell is required 2095(usually during the next ][*2 Paint][2 ).]&] 2096[s0;0 &] 2097[s0;H6;0 &] 2098[s0;i448;a25;kKO9;:ArrayCtrl`:`:InvalidateCache`(int`): [@(0.0.255)2 void][2 _][*2 Invalida 2099teCache][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )]&] 2100[s0;l288; [2 Invalidates a given row in the ][/2 convert cache][2 . For 2101performance reasons, the results of the ][*2 Convert`::Format][2 2102method applied to the individual data cells are kept in a cache. 2103This function marks a given row of the cache as obsolete; this 2104means the next time the converted values are to be used (usually 2105within the ][*2 Paint][2 routine or when setting up the row editor 2106controls), the ][*2 Convert][2 objects are used again to generate 2107the actualized output values.]&] 2108[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 2109[s0;0 &] 2110[s0; &] 2111[s0; [* Cursor and selection management]&] 2112[s0;0 &] 2113[s0; &] 2114[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollUp`(`): [@(0.0.255)2 void][2 _][*2 ScrollUp][2 ()]&] 2115[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollDown`(`): [@(0.0.255)2 void][2 _][*2 ScrollDown][2 ()]&] 2116[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollPageUp`(`): [@(0.0.255)2 void][2 _][*2 ScrollPageUp][2 ( 2117)]&] 2118[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollPageDown`(`): [@(0.0.255)2 void][2 _][*2 ScrollPageDo 2119wn][2 ()]&] 2120[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollEnd`(`): [@(0.0.255)2 void][2 _][*2 ScrollEnd][2 ()]&] 2121[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollBegin`(`): [@(0.0.255)2 void][2 _][*2 ScrollBegin][2 () 2122]&] 2123[s0;l288; [2 Scrolls the content of ArrayCtrl.]&] 2124[s0;0 &] 2125[s0;H6;0 &] 2126[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetSelectCount`(`)const: [@(0.0.255)2 int][2 _][*2 GetSelec 2127tCount][2 ()_][@(0.0.255)2 const]&] 2128[s0;l288; [2 Returns the number of selected row within the table.]&] 2129[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|number of selected 2130records (in the range ][/2 `[0 .. GetCount()`]][2 )]&] 2131[s0;0 &] 2132[s0;H6;0 &] 2133[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsSelection`(`)const: [@(0.0.255)2 bool][2 _][*2 IsSelectio 2134n][2 ()_][@(0.0.255)2 const]&] 2135[s0;l288; [2 Checks whether any rows are selected. Equivalent to ][*2 GetSelectCount() 2136> 0][2 .]&] 2137[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= there 2138is at least one selected row, ][*2 false][2 `= there is none.]&] 2139[s0;0 &] 2140[s0;H6;0 &] 2141[s0;i448;a25;kKO9;:ArrayCtrl`:`:Select`(int`,bool`): [@(0.0.255)2 void][2 _][*2 Select][2 (][@(0.0.255)2 i 2142nt][2 _][*@3;2 i][2 , ][@(0.0.255)2 bool][2 _][*@3;2 sel][2 _`=_][@(0.0.255)2 true][2 )]&] 2143[s0;l288; [2 Selects / unselects a given row.]&] 2144[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 2145[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 sel][2 -|][*2 true][2 `= add row 2146to the current selection, ][*2 false][2 `= remove row from selection]&] 2147[s0;0 &] 2148[s0;H6;0 &] 2149[s0;i448;a25;kKO9;:ArrayCtrl`:`:Select`(int`,int`,bool`): [@(0.0.255)2 void][2 _][*2 Select 2150][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 , ][@(0.0.255)2 int][2 _][*@3;2 count][2 , 2151][@(0.0.255)2 bool][2 _][*@3;2 sel][2 _`=_][@(0.0.255)2 true][2 )]&] 2152[s0;l288; [2 Selects / unselects a given row range.]&] 2153[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based index of the 2154first row to select / unselect]&] 2155[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 count][2 -|number of rows to select 2156/ unselect]&] 2157[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 sel][2 -|][*2 true][2 `= select the 2158rows, ][*2 false][2 `= unselect the rows]&] 2159[s0;0 &] 2160[s0;H6;0 &] 2161[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsSelected`(int`)const: [@(0.0.255)2 bool][2 _][*2 IsSelect 2162ed][2 (][@(0.0.255)2 int][2 _][*@3;2 i][2 )_][@(0.0.255)2 const]&] 2163[s0;l288; [2 Checks whether a given row is selected. For tables without 2164the multiselection option, this is equal to the check ][*2 GetCursor() 2165`=`= i][2 .]&] 2166[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index to 2167check for selection]&] 2168[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= row 2169is selected, ][*2 false][2 `= not selected]&] 2170[s0;0 &] 2171[s0;H6;0 &] 2172[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsSel`(int`)const: [@(0.0.255)2 bool][2 _][*2 IsSel][2 (][@(0.0.255)2 i 2173nt][2 _][*@3;2 i][2 )_][@(0.0.255)2 const]&] 2174[s0;l288; [2 If there is selection in the widget, returns true if ][*@3;2 i][2 2175is selected, otherwise returns true if cursor is at ][*@3;2 i][2 .]&] 2176[s0;0 &] 2177[s0;H6;0 &] 2178[s0;i448;a25;kKO9;:ArrayCtrl`:`:ClearSelection`(`): [@(0.0.255)2 void][2 _][*2 ClearSelecti 2179on][2 ()]&] 2180[s0;l288; [2 Clears the current selection (unselects all selected rows).]&] 2181[s0;0 &] 2182[s0;H6;0 &] 2183[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsCursor`(`)const: [@(0.0.255)2 bool][2 _][*2 IsCursor][2 ()_ 2184][@(0.0.255)2 const]&] 2185[s0;l288; [2 Checks whether the cursor is within the table. This is 2186equivalent to ][*2 GetCursor()_>`=_0][2 .]&] 2187[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|]&] 2188[s0;0 &] 2189[s0;H6;0 &] 2190[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetCursor`(int`): [@(0.0.255)2 bool][2 _][*2 SetCursor][2 (][@(0.0.255)2 i 2191nt][2 _][*@3;2 i][2 )]&] 2192[s0;l288; [2 Sets the current cursor row. When an array row is open 2193for editing, the function first commits the edited row, then 2194moved the cursor to the new row. When the edited row cannot be 2195commited, the function returns ][*2 false][2 and doesn`'t change 2196the cursor location.]&] 2197[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 i][2 -|zero`-based row index]&] 2198[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= cursor 2199has been moved, ][*2 false ][2 when not (when committing the previously 2200edited row failed)]&] 2201[s0;0 &] 2202[s0;H6;0 &] 2203[s0;i448;a25;kKO9;:ArrayCtrl`:`:KillCursor`(`): [@(0.0.255)2 bool][2 _][*2 KillCursor][2 ()]&] 2204[s0;l288; [2 Moves the cursor away from the array. When an array row 2205is open for editing, the function first commits the edited row, 2206then moved the cursor away from the array. When the edited row 2207cannot be commited, the function returns ][*2 false][2 and doesn`'t 2208change the cursor location.]&] 2209[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= cursor 2210has been moved away from the array, ][*2 false][2 when not (when 2211committing the previously edited row failed)]&] 2212[s0;0 &] 2213[s0;H6;0 &] 2214[s0;i448;a25;kKO9;:ArrayCtrl`:`:CancelCursor`(`): [@(0.0.255)2 void][2 _][*2 CancelCursor][2 ( 2215)]&] 2216[s0;l288; [2 Cancels editing of the row being currently edited. All 2217changes made in the individual column editors are rejected.]&] 2218[s0;0 &] 2219[s0;H6;0 &] 2220[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetCursor`(`)const: [@(0.0.255)2 int][2 _][*2 GetCursor][2 () 2221_][@(0.0.255)2 const]&] 2222[s0;l288; [2 Returns the current cursor row, `-1 when none.]&] 2223[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based cursor 2224row index, `-1 `= cursor is not in the array]&] 2225[s0;0 &] 2226[s0;H6;0 &] 2227[s0;i448;a25;kKO9;:ArrayCtrl`:`:GoBegin`(`): [@(0.0.255)2 void][2 _][*2 GoBegin][2 ()]&] 2228[s0;l288; [2 Moves the cursor to the first row in the array (equivalent 2229to ][*2 SetCursor(0)][2 ).]&] 2230[s0;0 &] 2231[s0;H6;0 &] 2232[s0;i448;a25;kKO9;:ArrayCtrl`:`:GoEnd`(`): [@(0.0.255)2 void][2 _][*2 GoEnd][2 ()]&] 2233[s0;l288; [2 Moves the cursor to the last array row (equivalent to 2234][*2 SetCursor(GetCount() `- 1)][2 ).]&] 2235[s0;0 &] 2236[s0;H6;0 &] 2237[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetCursorSc`(`)const: [@(0.0.255)2 int][2 _][*2 GetCursorSc 2238][2 ()_][@(0.0.255)2 const]&] 2239[s0;l288; [2 Returns the visual vertical position of the cursor row 2240relative to the current view. This method, in combination with 2241][*2 ScCursor][2 , can be used to reposition the cursor row while 2242maintaining the same visual position of the row within the array 2243view.]&] 2244[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|an integer describing 2245the vertical position of the cursor row relative to the array 2246view]&] 2247[s0;0 &] 2248[s0;H6;0 &] 2249[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScCursor`(int`): [@(0.0.255)2 void][2 _][*2 ScCursor][2 (][@(0.0.255)2 i 2250nt][2 _][*@3;2 a][2 )]&] 2251[s0;l288; [2 Modifies the scrollbar position so that the current cursor 2252row appears at a given vertical position relative to the array 2253view. By doing the following sequence of operations: ][*2 GetCursorSc][2 , 2254then reposition the cursor row, then ][*2 ScCursor][2 , you can achieve 2255cursor relocation while maintaining its visual location within 2256the array view.]&] 2257[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 a][2 -|an integer describing the 2258vertical position of the cursor row (typically a number returned 2259by a previous call to ][*2 GetCursorSc][2 )]&] 2260[s0;0 &] 2261[s0;H6;0 &] 2262[s0;i448;a25;kKO9;:ArrayCtrl`:`:CenterCursor`(`): [@(0.0.255)2 void][2 _][*2 CenterCursor][2 ( 2263)]&] 2264[s0;l288; [2 Modifies the scrollbar position so that the current cursor 2265row appears in the middle of the array view.]&] 2266[s0;0 &] 2267[s0;H6;0 &] 2268[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollInto`(int`): [@(0.0.255)2 void][2 _][*2 ScrollInto][2 ( 2269][@(0.0.255)2 int][2 _][*@3;2 line][2 )]&] 2270[s0;l288; [2 Moves the scrollbar by the least possible amount in order 2271to make the given array row visible. When the given array row 2272is already visible, the function does nothing.]&] 2273[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 line][2 -|zero`-based row index 2274of the array row to make visible]&] 2275[s0;0 &] 2276[s0;H6;0 &] 2277[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollIntoCursor`(`): [@(0.0.255)2 void][2 _][*2 ScrollInto 2278Cursor][2 ()]&] 2279[s0;l288; [2 Moves the scrollbar by the least possible amount in order 2280to make the cursor row visible. This is equivalent to ][*2 ScrollInto(GetCursor())][2 . 2281]&] 2282[s0;0 &] 2283[s0;H6;0 &] 2284[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetCursor`(`)const: [@(0.0.255)2 int][2 _][*2 GetCursor][2 () 2285_][@(0.0.255)2 const]&] 2286[s0;l288; [2 Returns the current vertical scrollbar position.]&] 2287[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|Pixel position 2288of the vertical scrollbar. Position 0 is at the very top (the 2289top row of the array is fully visible).]&] 2290[s0;0 &] 2291[s0;H6;0 &] 2292[s0;i448;a25;kKO9;:ArrayCtrl`:`:ScrollTo`(int`): [@(0.0.255)2 void][2 _][*2 ScrollTo][2 (][@(0.0.255)2 i 2293nt][2 _][*@3;2 sc][2 )]&] 2294[s0;l288; [2 Moves the vertical array scrollbar to a given position.]&] 2295[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 sc][2 -|Pixel position of the 2296scrollbar. The visible portion of the array can be obtained conceptually 2297by taking the stack of array rows with its top aligned at the 2298top of the view and moving it ][/2 sc][2 pixels upwards.]&] 2299[s0;0 &] 2300[s0;H6;0 &] 2301[s0;i448;a25;kKO9;:ArrayCtrl`:`:Find`(const Value`&`,int`,int`)const: [@(0.0.255)2 int][2 _ 2302][*2 Find][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _][*@3;2 v][2 , 2303][@(0.0.255)2 int][2 _][*@3;2 ii][2 _`=_][@3;2 0][2 , ][@(0.0.255)2 int][2 _][*@3;2 from][2 _`=_][@3;2 0 2304][2 )_][@(0.0.255)2 const]&] 2305[s0;l288; [*C@3;2 v][2 -|value to look for in the given source index]&] 2306[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 2307of the source index to search]&] 2308[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 from][2 -|zero`-based row index 2309to start the search from]&] 2310[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based number 2311of the matched row, `-1 when none]&] 2312[s0;0 &] 2313[s0;H6;0 &] 2314[s0;i448;a25;kKO9;:ArrayCtrl`:`:Find`(const Value`&`,const Id`&`,int`)const: [@(0.0.255)2 i 2315nt][2 _][*2 Find][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _][*@3;2 v][2 , 2316][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , ][@(0.0.255)2 int][2 _][*@3;2 from][2 _`=_][@3;2 0 2317][2 )_][@(0.0.255)2 const]&] 2318[s0;l288; [2 Locates the row (using linear search beginning at the 2319row ][/2 from][2 ) in which the source index value identified by 2320][/2 id][2 equals ][/2 val][2 . If such a row is found, the function 2321returns its zero`-based index. When not matched, the function 2322returns `-1.]&] 2323[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|value to look for in the 2324given source index]&] 2325[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 2326[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 from][2 -|zero`-based row index 2327to start the search from]&] 2328[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based number 2329of the matched row, `-1 when none]&] 2330[s0;0 &] 2331[s0;H6;0 &] 2332[s0;i448;a25;kKO9;:ArrayCtrl`:`:FindSetCursor`(const Value`&`,int`,int`): [@(0.0.255)2 b 2333ool][2 _][*2 FindSetCursor][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _][*@3;2 v 2334al][2 , ][@(0.0.255)2 int][2 _][*@3;2 ii][2 _`=_][@3;2 0][2 , ][@(0.0.255)2 int][2 _][*@3;2 from][2 _`= 2335_][@3;2 0][2 )]&] 2336[s0;l288; [2 Locates the row (using linear search beginning at the 2337row ][/2 from][2 ) in which the source index value identified by 2338its ordinal number ][/2 ii][2 equals ][/2 val][2 . If such a row is 2339found, the ][*2 SetCursor][2 is called automatically to move the 2340cursor to such a row.]&] 2341[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 val][2 -|value to look for in 2342the given source index]&] 2343[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based ordinal number 2344of the source index to search]&] 2345[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 from][2 -|zero`-based row index 2346to start the search from]&] 2347[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based number 2348of the matched row, `-1 when none]&] 2349[s0;0 &] 2350[s0;H6;0 &] 2351[s0;i448;a25;kKO9;:ArrayCtrl`:`:FindSetCursor`(const Value`&`,const Id`&`,int`): [@(0.0.255)2 b 2352ool][2 _][*2 FindSetCursor][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `&][2 _][*@3;2 v 2353al][2 , ][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 , ][@(0.0.255)2 int][2 _][*@3;2 from][2 _ 2354`=_][@3;2 0][2 )]&] 2355[s0;l288; [2 Locates the row (using linear search beginning at the 2356row ][/2 from][2 ) in which the source index value identified by 2357][/2 id][2 equals ][/2 val][2 . If such a row is found, the ][*2 SetCursor][2 2358is called automatically to move the cursor to such a row.]&] 2359[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 val][2 -|value to look for in 2360the given source index]&] 2361[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 2362[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 from][2 -|zero`-based row index 2363to start the search from]&] 2364[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= the 2365desired row was found (and the cursor set), ][*2 false][2 when not]&] 2366[s0;0 &] 2367[s0;* &] 2368[s0; [* User interface elements]&] 2369[s0;0 &] 2370[s0; &] 2371[s0;i448;a25;kKO9;:ArrayCtrl`:`:StdBar`(Bar`&`): [@(0.0.255)2 void][2 _][*2 StdBar][2 (][_^Bar^2 B 2372ar][@(0.0.255)2 `&][2 _][*@3;2 menu][2 )]&] 2373[s0;l288; [2 The default array local menu. The default local menu consists 2374of the standard editing actions (inserting / appending / duplicating 2375a row, editing a row, removing a row, moving a row, select all 2376rows) filtered by the array properties enabling / disabling the 2377various GUI elements (item insertion / deletion etc.). ]&] 2378[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 menu][2 -|the ][*2 Bar][2 object 2379representing the menu being generated]&] 2380[s0;0 &] 2381[s0;H6;0 &] 2382[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsModified`(int`)const: [@(0.0.255)2 bool][2 _][*2 IsModifi 2383ed][2 (][@(0.0.255)2 int][2 _][*@3;2 ii][2 )_][@(0.0.255)2 const]&] 2384[s0;l288; [2 Checks a source index in the currently edited row for 2385changes.]&] 2386[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 ii][2 -|zero`-based row index]&] 2387[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= the 2388index has been modified, ][*2 false][2 `= the index is in its original 2389state]&] 2390[s0;0 &] 2391[s0;H6;0 &] 2392[s0;i448;a25;kKO9;:ArrayCtrl`:`:IsModified`(const Id`&`)const: [@(0.0.255)2 bool][2 _][*2 I 2393sModified][2 (][@(0.0.255)2 const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )_][@(0.0.255)2 const]&] 2394[s0;l288; [2 Checks a source index in the currently edited array row 2395for changes.]&] 2396[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|source index identifier]&] 2397[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= the 2398source index has been modified, ][*2 false ][2 when not]&] 2399[s0;0 &] 2400[s0;H6;0 &] 2401[s0;i448;a25;kKO9;:ArrayCtrl`:`:StartEdit`(int`): [@(0.0.255)2 bool][2 _][*2 StartEdit][2 (][@(0.0.255)2 i 2402nt][2 _][*@3;2 d][2 _`=_][@3;2 0][2 )]&] 2403[s0;l288; [2 Opens the current cursor row for editing and sets focus 2404to the ][/2 d][2 `-th column.]&] 2405[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 d][2 -|zero`-based column index]&] 2406[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= editing 2407successfully initiated, ][*2 false][2 when not (when the array is 2408in ][*2 ReadOnly][2 mode or it has no editable columns)]&] 2409[s0;0 &] 2410[s0;H6;0 &] 2411[s0;i448;a25;kKO9;:ArrayCtrl`:`:GetEditColumn`(`)const: [@(0.0.255)2 int][2 _][*2 GetEditCo 2412lumn][2 ()_][@(0.0.255)2 const]&] 2413[s0;l288; [2 Returns the column being currently edited.]&] 2414[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|zero`-based index 2415of the column being edited, `-1 `= none]&] 2416[s0;0 &] 2417[s0;H6;0 &] 2418[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoEdit`(`): [@(0.0.255)2 void][2 _][*2 DoEdit][2 ()]&] 2419[s0;l288; [2 Opens the current cursor row for editing.]&] 2420[s0;0 &] 2421[s0;H6;0 &] 2422[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoInsert`(int`): [@(0.0.255)2 void][2 _][*2 DoInsert][2 (][@(0.0.255)2 i 2423nt][2 _][*@3;2 cursor][2 )]&] 2424[s0;l288; [2 Begins the GUI insertion of a new row at a given location.]&] 2425[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 cursor][2 -|zero`-based location 2426of the new row]&] 2427[s0;0 &] 2428[s0;H6;0 &] 2429[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoInsertBefore`(`): [@(0.0.255)2 void][2 _][*2 DoInsertBefo 2430re][2 ()]&] 2431[s0;l288; [2 Begins the GUI insertion of a new row above the current 2432row.]&] 2433[s0;0 &] 2434[s0;H6;0 &] 2435[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoInsertAfter`(`): [@(0.0.255)2 void][2 _][*2 DoInsertAfter 2436][2 ()]&] 2437[s0;l288; [2 Begins the GUI insertion of a new row below the current 2438row.]&] 2439[s0;0 &] 2440[s0;H6;0 &] 2441[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoAppend`(`): [@(0.0.255)2 void][2 _][*2 DoAppend][2 ()]&] 2442[s0;l288; [2 Begins the GUI insertion of a new row at the end of the 2443array.]&] 2444[s0;0 &] 2445[s0;H6;0 &] 2446[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoRemove`(`): [@(0.0.255)2 virtual][2 2447][@(0.0.255)2 bool][2 _][*2 DoRemove][2 ()]&] 2448[s0;l288; [2 Performs the GUI`-based removal of the current cursor 2449row. When the ][*2 AskRemove][2 property is set to ][*2 true][2 and 2450the user cancels the confirmation dialog, the function returns 2451][*2 false][2 and the current row is not removed.]&] 2452[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= row 2453has been removed successfully, ][*2 false][2 `= user has canceled 2454the row removal]&] 2455[s0;0 &] 2456[s0;H6;0 &] 2457[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoDuplicate`(`): [@(0.0.255)2 void][2 _][*2 DoDuplicate][2 () 2458]&] 2459[s0;l288; [2 Duplicates the current row and opens it for editing.]&] 2460[s0;0 &] 2461[s0;H6;0 &] 2462[s0;i448;a25;kKO9;:ArrayCtrl`:`:DoSelectAll`(`): [@(0.0.255)2 void][2 _][*2 DoSelectAll][2 () 2463]&] 2464[s0;l288; [2 Marks all array row as selected.]&] 2465[s0;0 &] 2466[s0;H6;0 &] 2467[s0;i448;a25;kKO9;:ArrayCtrl`:`:AcceptEnter`(`): [@(0.0.255)2 bool][2 _][*2 AcceptEnter][2 () 2468]&] 2469[s0;l288; [2 Performs all necessary GUI actions equivalent to when 2470the user presses the ][*2 Enter][2 key. The row being currently 2471edited is committed and, in the case it was a newly appended 2472line and the ][*2 NoInsertAppend][2 property is not set, an additional 2473row is added to the array and opened for editing.]&] 2474[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= the 2475current row has been successfully committed, ][*2 false][2 when 2476not]&] 2477[s0;0 &] 2478[s0; &] 2479[s0; &] 2480[s0; [* Content export]&] 2481[s0;* &] 2482[s0;0 &] 2483[s0;i448;a25;kKO9;:ArrayCtrl`:`:AsText`(String`(`*`)`(const Value`&`)`,bool`,const char`*`,const char`*`,const char`*`,const char`*`)const: [_^String^2 S 2484tring][2 _][*2 AsText][2 (][_^String^2 String][2 _(`*][*@3;2 format][2 )(][@(0.0.255)2 const][2 _Va 2485lue][@(0.0.255)2 `&][2 ), ][@(0.0.255)2 bool][2 _][*@3;2 sel][2 _`=_][@(0.0.255)2 false][2 , 2486][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 tab][2 _`=_`"`\t`", 2487][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 row][2 _`=_`"`\r`\n`", 2488][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 hdrtab][2 _`=_`"`\t`", 2489][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 hdrrow][2 _`=_`"`\r`\n`")_][@(0.0.255)2 c 2490onst]&] 2491[s0;l288; [2 Generic function for conversion of ArrayCtrl content to 2492text. The content visible on screen is exported (means, it exports 2493columns defined using AddColumn, not indicies). Cells are converted 2494to output format using ][*@3;2 format][2 function. If ][*@3;2 sel][2 2495is true, only rows with IsSel true are exported. ][*@3;2 tab][2 2496represents a separator text between cells in a row, ][*@3;2 row][2 2497separator of rows. ][*@3;2 hdrtab][2 is separator of header cells 2498(those are texts of ArrayCtrl header) `- if NULL, no header is 2499exported. ][*@3;2 hdrrow][2 .is separator of header and data rows.]&] 2500[s0;0 &] 2501[s0;H6;0 &] 2502[s0;i448;a25;kKO9;:ArrayCtrl`:`:SetClipboard`(bool`,bool`)const: [@(0.0.255)2 void][2 _][*2 S 2503etClipboard][2 (][@(0.0.255)2 bool][2 _][*@3;2 sel][2 _`=_][@(0.0.255)2 false][2 , 2504][@(0.0.255)2 bool][2 _][*@3;2 hdr][2 _`=_][@(0.0.255)2 true][2 )_][@(0.0.255)2 const]&] 2505[s0;l288; [2 Puts ArrayCtrl content to clipboard in text format, `"`\t`" 2506and `"`\r`\n`" as separators. If ][*@3;2 sel][2 is true, only rows 2507with IsSel true are exported, ][*@3;2 hdr][2 controls whether header 2508is exported.]&] 2509[s0;0 &] 2510[s0;H6;0 &] 2511[s0;i448;a25;kKO9;:ArrayCtrl`:`:AsQtf`(bool`,bool`): [_^String^2 String][2 _][*2 AsQtf][2 (][@(0.0.255)2 b 2512ool][2 _][*@3;2 sel][2 _`=_][@(0.0.255)2 false][2 , ][@(0.0.255)2 bool][2 _][*@3;2 hdr][2 _`=_][@(0.0.255)2 t 2513rue][2 )]&] 2514[s0;l288; [2 Returns ArrayCtrl content in QTF format. If ][*@3;2 sel][2 2515is true, only rows with IsSel true are exported, ][*@3;2 hdr][2 2516controls whether header is exported.]&] 2517[s0;0 &] 2518[s0;H6;0 &] 2519[s0;i448;a25;kKO9;:ArrayCtrl`:`:AsCsv`(bool`,int`,bool`): [_^String^2 String][2 _][*2 AsCsv 2520][2 (][@(0.0.255)2 bool][2 _][*@3;2 sel][2 _`=_][@(0.0.255)2 false][2 , ][@(0.0.255)2 int][2 _][*@3;2 s 2521ep][2 _`=_`';`', ][@(0.0.255)2 bool][2 _][*@3;2 hdr][2 _`=_][@(0.0.255)2 true][2 )]&] 2522[s0;l288; [2 Returns ArrayCtrl content in csv format, using ][*@3;2 sep][2 2523as separator. If ][*@3;2 sel][2 is true, only rows with IsSel true 2524are exported, ][*@3;2 hdr][2 controls whether header is exported.]&] 2525[s0; &] 2526[s0; &] 2527[s0; [* Notification callbacks]&] 2528[s0;0 &] 2529[s0; &] 2530[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenLeftClick: [_^Callback^2 Callback][2 _][*2 WhenLeftClic 2531k]&] 2532[s0;l288; [2 This callback is called whenever the user clicks an array 2533cell.]&] 2534[s0;0 &] 2535[s0;H6;0 &] 2536[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenLeftDouble: [_^Callback^2 Callback][2 _][*2 WhenLeftDou 2537ble]&] 2538[s0;l288; [2 This callback is called whenever the user doubleclicks 2539an array cell.]&] 2540[s0;0 &] 2541[s0;H6;0 &] 2542[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenBar: [_^Callback1^2 Callback1][2 <Bar][@(0.0.255)2 `&][2 > 2543_][*2 WhenBar]&] 2544[s0;l288; [2 This callback is called whenever the local array menu 2545has to be regenerated. By setting this callback to a different 2546function / method you can supply a custom local menu for the 2547array. The ][*2 Bar`&][2 argument is a reference to the menu to 2548be generated.]&] 2549[s0;0 &] 2550[s0;H6;0 &] 2551[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenEnterRow: [_^Callback^2 Callback][2 _][*2 WhenEnterRow]&] 2552[s0;l288; [2 This callback is called every time the cursor location 2553changes to a different row of the array.]&] 2554[s0;0 &] 2555[s0;H6;0 &] 2556[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenAcceptRow: [_^Gate^2 Gate][2 _][*2 WhenAcceptRow]&] 2557[s0;l288; [2 This gate is called every time an array row (open for 2558editing) needs to be validated. When the gate returns ][*2 false][2 , 2559the validation process is assumed to have failed, when it returns 2560][*2 true][2 , it is assumed to have succeeded. You can use this 2561callback to add your own validation algorithms relevant to the 2562array context within your application.]&] 2563[s0;0 &] 2564[s0;H6;0 &] 2565[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenUpdateRow: [_^Callback^2 Callback][2 _][*2 WhenUpdateRo 2566w]&] 2567[s0;l288; [2 This callback is called whenever an array row has been 2568updated. You can use this callback e.g. to project the changes 2569to a database or generally to an external data source.]&] 2570[s0;0 &] 2571[s0;H6;0 &] 2572[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenKillCursor: [_^Callback^2 Callback][2 _][*2 WhenKillCur 2573sor]&] 2574[s0;l288; [2 This callback is called whenever the cursor is moved away 2575from the table.]&] 2576[s0;l288; [*2 Note:][2 internally, when moving the cursor (e.g. by calling 2577the ][*2 SetCursor ][2 method), after committing the previous row 2578the cursor is removed from the table using ][*2 KillCursor][2 and 2579placed to the new location afterwards. Therefore every time the 2580cursor is moved, the ][*2 WhenKillCursor][2 callback is called as 2581a by`-product.]&] 2582[s0;0 &] 2583[s0;H6;0 &] 2584[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenCursor: [_^Callback^2 Callback][2 _][*2 WhenCursor]&] 2585[s0;l288; [2 This callback is called every time the cursor row number 2586changes (either when the cursor is removed from the table, or 2587when it has been moved to a different row).]&] 2588[s0;0 &] 2589[s0;H6;0 &] 2590[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenArrayAction: [_^Callback^2 Callback][2 _][*2 WhenArrayA 2591ction]&] 2592[s0;l288; [2 This callback is called every time the source array data 2593changes (typically after accepting changes to a certain row or 2594after deleting a row).]&] 2595[s0;0 &] 2596[s0;H6;0 &] 2597[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenStartEdit: [_^Callback^2 Callback][2 _][*2 WhenStartEdi 2598t]&] 2599[s0;l288; [2 This callback is called whenever the array row editing 2600process is initiated. It can be used e.g. to set up some additional 2601properties of the column editor objects, to fill in drop`-down 2602lists pertaining to certain column editors etc.]&] 2603[s0;0 &] 2604[s0;H6;0 &] 2605[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenAcceptEdit: [_^Callback^2 Callback][2 _][*2 WhenAcceptE 2606dit]&] 2607[s0;l288; [2 This callback is called whenever the currently edited 2608line has been committed.]&] 2609[s0;0 &] 2610[s0;H6;0 &] 2611[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenSelection: [_^Callback^2 Callback][2 _][*2 WhenSelectio 2612n]&] 2613[s0;l288; [2 This callback is called whenever the current array selection 2614changes. This includes changes to the cursor location as the 2615cursor is automatically considered part of the selection.]&] 2616[s0;0 &] 2617[s0;H6;0 &] 2618[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenCtrlsAction: [_^Callback^2 Callback][2 _][*2 WhenCtrlsA 2619ction]&] 2620[s0;l288; [2 This callback is called whenever some of the editor controls 2621constructed automatically via the column editing ][/2 factory][2 2622calls its ][*2 WhenAction][2 method. It can be used to watch out 2623for changes in the cell editors and react to specific situations 2624accordingly.]&] 2625[s0;0 &] 2626[s0;H6;0 &] 2627[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenSel: [_^Callback^2 Callback][2 _][*2 WhenSel]&] 2628[s0;l288; [2 Called whenever cursor or selection changes.]&] 2629[s0;0 &] 2630[s0;H6;0 &] 2631[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenScroll: [_^Callback^2 Callback][2 _][*2 WhenScroll]&] 2632[s0;l288; [2 Called when scrolling of ArrayCtrl content happened.]&] 2633[s0;0 &] 2634[s0;0 &] 2635[s0;H6;0 &] 2636[s0;i448;a25;kKO9;:ArrayCtrl`:`:WhenHeaderLayout: [_^Callback^2 Callback][2 _][*2 WhenHeade 2637rLayout]&] 2638[s0;l288; [2 Called when header changes.]&] 2639[s0; &] 2640[s0; &] 2641[ {{10000t/25b/25@3 [s0; [*@(229)4 ArrayCtrl`::IdInfo]]}}&] 2642[s0;0 &] 2643[s0;i448;a25;kKO9;:ArrayCtrl`:`:IdInfo`:`:struct: [@(0.0.255) struct]_[* IdInfo]&] 2644[s0;b42; [2 The ][*2 IdInfo][2 structure contains properties of all source 2645array indices. It can be used to set additional properties pertaining 2646to source array data.]&] 2647[s0;0 &] 2648[s0; &] 2649[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] 2650[s0;0 &] 2651[s0;i448;a25;kKO9;:ArrayCtrl`:`:IdInfo`:`:InsertValue`(const Value`&`): [_^ArrayCtrl`:`:IdInfo^2 I 2652dInfo][@(0.0.255)2 `&][2 _][*2 InsertValue][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `& 2653][2 _][*@3;2 v][2 )]&] 2654[s0;l288; [2 The method sets up the default source index value for 2655newly created rows. This is used only when the row insertion 2656is GUI`-based (like using the ][*2 DoInsert][2 method for instance). 2657When a row is added to the array programmatically (e.g. using 2658][*2 Add][2 or ][*2 Insert][2 ), these default values are not used.]&] 2659[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|default source index value]&] 2660[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2661[s0;0 &] 2662[s0;H6;0 &] 2663[s0;i448;a25;kKO9;:ArrayCtrl`:`:IdInfo`:`:InsertValue`(ValueGen`&`): [_^ArrayCtrl`:`:IdInfo^2 I 2664dInfo][@(0.0.255)2 `&][2 _][*2 InsertValue][2 (][_^ValueGen^2 ValueGen][@(0.0.255)2 `&][2 _][*@3;2 g 2665][2 )]&] 2666[s0;l288; [2 The method sets up a factory for generating default index 2667values for newly created rows. This is used only when the row 2668insertion is GUI`-based (like using the ][*2 DoInsert][2 method 2669for instance). When a row is added to the array programmatically 2670(e.g. using ][*2 Add][2 or ][*2 Insert][2 ), the ][*2 InserValue][2 property 2671is not consulted.]&] 2672[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 g][2 -|a reference to the value 2673generation factory. The ownership to the factory is not passed 2674by this call; the caller must insure the existence of the factory 2675object throughout the array duration.]&] 2676[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2677[s0;0 &] 2678[s0;H6;0 &] 2679[s0;i448;a25;kKO9;:ArrayCtrl`:`:IdInfo`:`:Accel`(int`(`*`)`(int`)`): [_^ArrayCtrl`:`:IdInfo^2 I 2680dInfo][@(0.0.255)2 `&][2 _][*2 Accel][2 (][@(0.0.255)2 int][2 _(`*][*@3;2 filter][2 )(][@(0.0.255)2 i 2681nt][2 ))]&] 2682[s0;l288; [2 This method sets up the source index accelerator function. 2683The accelerator is used to quickly locate rows using the keyboard 2684key presses.]&] 2685[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 filter][2 -|a ][*2 CharFilter ][2 function 2686for keypress filtering]&] 2687[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2688[s0;0 &] 2689[s0;H6;0 &] 2690[s0;i448;a25;kKO9;:ArrayCtrl`:`:IdInfo`:`:Accel`(`): [_^ArrayCtrl`:`:IdInfo^2 IdInfo][@(0.0.255)2 `& 2691][2 _][*2 Accel][2 ()]&] 2692[s0;l288; [2 This method sets up keyboard acceleration for the given 2693source index. The `'trivial`' ][/2 CharConvert][2 is used for character 2694translation.]&] 2695[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2696[s0;0 &] 2697[s0;H6;0 &] 2698[s0;i448;a25;kKO9;:ArrayCtrl`:`:IdInfo`:`:GetInsertValue`(`): [_^Value^2 Value][2 _][*2 Get 2699InsertValue][2 ()]&] 2700[s0;l288; [2 Uses the ][*2 InsertValue][2 property to generate a new source 2701index value (either using a fixed default value or the value 2702creation factory).]&] 2703[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|the generated value 2704to be used as the default for the newly inserted row.]&] 2705[s0;0 &] 2706[s0; &] 2707[s0; &] 2708[s0; &] 2709[ {{10000t/25b/25@3 [s0; [*@(229)4 ArrayCtrl`::Column]]}}&] 2710[s0;0 &] 2711[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:class: [@(0.0.255) class]_[* Column]_:_[@(0.0.255) p 2712rivate]_[*@3 FormatConvert]&] 2713[s0;l288;2 &] 2714[s0; [%%/ Derived from][%% ]FormatConvert&] 2715[s0; &] 2716[s0; The [* ArrayCtrl`::Column] structure describes an output array 2717column. Its methods can be used to set or query its properties, 2718some of which are also settable via ArrayCtrl methods.&] 2719[s0;0 &] 2720[s0; &] 2721[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] 2722[s0;0 &] 2723[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Add`(int`): [_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `& 2724][2 _][*2 Add][2 (][@(0.0.255)2 int][2 _][*@3;2 `_pos][2 )]&] 2725[s0;l288; [2 Adds another source data index to the list of source indices 2726used as the data for the given output column.]&] 2727[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 `_pos][2 -|zero`-based ordinal 2728number of the source index]&] 2729[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this][2 .]&] 2730[s0;0 &] 2731[s0;H6;0 &] 2732[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Add`(const Id`&`): [_^ArrayCtrl`:`:Column^2 C 2733olumn][@(0.0.255)2 `&][2 _][*2 Add][2 (const ][_^Id^2 Id][2 `&_][*@3;2 id][2 )]&] 2734[s0;l288; [2 Adds another source data index to the list of source indices 2735used as the data for the given output column.]&] 2736[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|the ][*2 Id][2 identifier 2737of the source index]&] 2738[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2739[s0;0 &] 2740[s0;0 &] 2741[s0;H6;0 &] 2742[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:AddIndex`(const Id`&`): [_^ArrayCtrl`:`:Column^2 C 2743olumn][@(0.0.255)2 `&][2 _][*2 AddIndex][2 (][@(0.0.255)2 const][2 _][_^Id^2 Id][@(0.0.255)2 `&][2 _ 2744][*@3;2 id][2 )]&] 2745[s0;l288; [2 Adds another source index to the array and adds it to 2746the list of source indices bound to this output column. The newly 2747created index is assigned the given identifier.]&] 2748[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 id][2 -|the identifier for the 2749newly created index]&] 2750[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2751[s0;0 &] 2752[s0;H6;0 &] 2753[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:AddIndex`(`): [_^ArrayCtrl`:`:Column^2 Column 2754][@(0.0.255)2 `&][2 _][*2 AddIndex][2 ()]&] 2755[s0;l288; [2 Adds another source index to the array and adds it to 2756the list of source indices bound to this output column.]&] 2757[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2758[s0;0 &] 2759[s0;H6;0 &] 2760[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:SetConvert`(const Convert`&`): [_^ArrayCtrl`:`:Column^2 C 2761olumn][@(0.0.255)2 `&][2 _][*2 SetConvert][2 (][@(0.0.255)2 const][2 _][_^Convert^2 Convert][@(0.0.255)2 `& 2762][2 _][*@3;2 c][2 )]&] 2763[s0;l288; [2 Sets the ][*2 Convert][2 object for the given column. This 2764object is used to convert the source values (obtained from the 2765source data matrix) to the values displayable and/or editable 2766by the respective column display / editor object.]&] 2767[s0;l288; [*2 Note:][2 the ownership of the ][*2 Convert][2 object is not 2768transferred by this function. The array merely stores a pointer 2769to the Convert object. It is up to the host application to keep 2770the Convert object alive as long as necessary (until the ArrayCtrl 2771object is destroyed or all references to the Convert object obliterated 2772by new calls to the ][*2 SetConvert][2 method). In any case, most 2773Convert`-based object do not support copying at all; moreover, 2774as the Convert`-based objects are mostly derived from the basic 2775class, their copying is normally prone to slicing.]&] 2776[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 c][2 -|a constant reference to 2777the Convert object to use for the given column]&] 2778[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2779[s0;0 &] 2780[s0;H6;0 &] 2781[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:SetFormat`(const char`*`): [@(0.0.255)2 virtu 2782al][2 ][_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `&][2 _][*2 SetFormat][2 (][@(0.0.255)2 co 2783nst][2 _][@(0.0.255)2 char][2 _`*][*@3;2 fmt][2 )]&] 2784[s0;l288; [2 Sets the format string to use for the default value formatting. 2785When no Convert object is set for the column, the source value 2786is normally passed to the ][*2 NFormat][2 function where the ][/2 fmt][2 2787argument defines the desired formatting pattern.]&] 2788[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 fmt][2 -|a ][*2 NFormat][2 `-compatible 2789formatting pattern]&] 2790[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2791[s0;0 &] 2792[s0;H6;0 &] 2793[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:SetDisplay`(const Display`&`): [_^ArrayCtrl`:`:Column^2 C 2794olumn][@(0.0.255)2 `&][2 _][*2 SetDisplay][2 (][@(0.0.255)2 const][2 _][_^Display^2 Display][@(0.0.255)2 `& 2795][2 _][*@3;2 d][2 )]&] 2796[s0;l288; [2 Sets the default Display to use for this column. The column 2797Display can be overridden for certain array cells by calls to 2798the ][*^topic`:`/`/CtrlLib`/src`/ArrayCtrl`$en`-us`#`:`:ArrayCtrl`:`:SetDisplay`(int`,int`,const Display`&`)^2 A 2799rrayCtrl`::SetDisplay][2 method.]&] 2800[s0;l288; [*2 Note:][2 the ownership to the Display object is not transferred 2801by this function. The array merely stores a pointer to the Display; 2802it is up to the host application to keep the Display object alive 2803as long as necessary.]&] 2804[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 d][2 -|a reference to the Display 2805object]&] 2806[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2807[s0;0 &] 2808[s0;H6;0 &] 2809[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Edit`(Ctrl`&`): [_^ArrayCtrl`:`:Column^2 Colu 2810mn][@(0.0.255)2 `&][2 _][*2 Edit][2 (][_^Ctrl^2 Ctrl][@(0.0.255)2 `&][2 _][*@3;2 e][2 )]&] 2811[s0;l288; [2 Sets up the Ctrl`-based object to use for inline array 2812column editing.]&] 2813[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 e][2 -|a reference to the editor 2814control object]&] 2815[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2816[s0;0 &] 2817[s0;H6;0 &] 2818[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Ctrls`(Callback1`<One`<Ctrl`>`&`>`): [_^ArrayCtrl`:`:Column^2 C 2819olumn][@(0.0.255)2 `&][2 _][*2 Ctrls][2 (][_^Callback1^2 Callback1][2 <][_^One^2 One][2 <][_^Ctrl^2 C 2820trl][2 >`&>_][*@3;2 factory][2 )]&] 2821[s0;l288; [2 The methods sets up a factory which the ArrayCtrl uses 2822as necessary to create new Ctrl`'s for editing a given column. 2823The argument of this function is a callback, which, upon execution, 2824should allocate (normally using the ][*2 new][2 operator) the desired 2825editor object and set it to its argument. If the position of 2826Ctrl is equivalent to `'SetRect(0, 0, 0, 0)`', which is the default 2827value, Ctrl is resized to fit the ArrayCtrl cell accurately, 2828otherwise the position represents the position within the cell.]&] 2829[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 factory][2 -|callback used for 2830new control creation]&] 2831[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2832[s0;0 &] 2833[s0;H6;0 &] 2834[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Ctrls`(void`(`*`)`(One`<Ctrl`>`&`)`): [_^ArrayCtrl`:`:Column^2 C 2835olumn][@(0.0.255)2 `&][2 _][*2 Ctrls][2 (][@(0.0.255)2 void][2 _(`*][*@3;2 factory][2 )(One<Ctrl> 2836`&))]&] 2837[s0;l288; [2 This method sets up a factory which the ArrayCtrl uses 2838as necessary to create new Ctrl`'s for editing a given column. 2839The argument, a global function, is supposed to allocate a new 2840editor control (normally using the ][*2 new][2 operator) and set 2841it to its argument. If the position of Ctrl is equivalent to 2842`'SetRect(0, 0, 0, 0)`', which is the default value, Ctrl is 2843resized to fit the ArrayCtrl cell accurately, otherwise the position 2844represents the position within the cell. If the position of Ctrl 2845is equivalent to `'SetRect(0, 0, 0, 0)`', which is the default 2846value, Ctrl is resized to fit the ArrayCtrl cell accurately, 2847otherwise the position represents the position within the cell.]&] 2848[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 factory][2 -|a global function 2849used for editor control creation]&] 2850[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2851[s0;0 &] 2852[s0;H6;0 &] 2853[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Ctrls`(`): [@(0.0.255)2 template][2 _<][@(0.0.255)2 c 2854lass][2 _][*@4;2 T][2 >_][_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `&][2 _][*2 Ctrls][2 ()]&] 2855[s0;l288; [2 This member template sets up a default factory for creating 2856editor controls of a given type. Every time the ArrayCtrl needs 2857to create a new editor control, an object of the type ][*2 T][2 2858is created automatically (using the ][*2 new][2 operator). If the 2859position of Ctrl is equivalent to `'SetRect(0, 0, 0, 0)`', which 2860is the default value, Ctrl is resized to fit the ArrayCtrl cell 2861accurately, otherwise the position represents the position within 2862the cell.]&] 2863[s0;l288;i1121;b17;O9;~~~.1408; [*C@4;2 T][2 -|the desired object editor 2864type ]&] 2865[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2866[s0;0 &] 2867[s0;H6;0 &] 2868[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:InsertValue`(const Value`&`): [_^ArrayCtrl`:`:Column^2 C 2869olumn][@(0.0.255)2 `&][2 _][*2 InsertValue][2 (][@(0.0.255)2 const][2 _][_^Value^2 Value][@(0.0.255)2 `& 2870][2 _][*@3;2 v][2 )]&] 2871[s0;l288; [2 Instructs the ArrayCtrl object to initialize this column 2872in newly created rows to the given value ][/2 v][2 . (This applies 2873only to GUI`-based row insertion using methods like ][*2 DoInsert][2 2874etc., the low`-level, programmer`-controlled row insertion methods 2875like ][*2 Add][2 or ][*2 Insert][2 always initialize the source data 2876matrix with ][*2 Null][2 `'s).]&] 2877[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 v][2 -|the value to use as the 2878default for newly inserted rows]&] 2879[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2880[s0;0 &] 2881[s0;H6;0 &] 2882[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:InsertValue`(ValueGen`&`): [_^ArrayCtrl`:`:Column^2 C 2883olumn][@(0.0.255)2 `&][2 _][*2 InsertValue][2 (][_^ValueGen^2 ValueGen][@(0.0.255)2 `&][2 _][*@3;2 g 2884][2 )]&] 2885[s0;l288; [2 Programs the ArrayCtrl object to use the given ][*2 ValueGen][2 2886factory for default value generation for newly created rows. 2887This can be used e.g. to generate unique UUID`'s or primary keys 2888using an Oracle SEQUENCE object for a primary key column.]&] 2889[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 g][2 -|a reference to the ValueGen 2890object used for default value generation]&] 2891[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2892[s0;0 &] 2893[s0;H6;0 &] 2894[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:NoClickEdit`(`): [_^ArrayCtrl`:`:Column^2 Col 2895umn][@(0.0.255)2 `&][2 _][*2 NoClickEdit][2 ()]&] 2896[s0;l288; [2 Disables entering the editing mode when clicking the respective 2897column.]&] 2898[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2899[s0;0 &] 2900[s0;H6;0 &] 2901[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Cache`(`): [_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `& 2902][2 _][*2 Cache][2 ()]&] 2903[s0;l288; [2 Enables using the cache to store the converted values 2904of this column. By default, converted value caching is turned 2905off to make cell value conversion entirely dynamic; however, 2906very often it is advisable to enable using the cache, especially 2907when the conversion is relatively slow (for instance, when the 2908conversion queries a database connection to convert the value).]&] 2909[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2910[s0;0 &] 2911[s0;H6;0 &] 2912[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Accel`(int`(`*`)`(int`)`): [_^ArrayCtrl`:`:Column^2 C 2913olumn][@(0.0.255)2 `&][2 _][*2 Accel][2 (][@(0.0.255)2 int][2 _(`*][*@3;2 filter][2 )(][@(0.0.255)2 i 2914nt][2 ))]&] 2915[s0;l288; [2 Sets up the accelerator for the given column. A given 2916filtering function is used to convert keystrokes before acceleration.]&] 2917[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 filter][2 -|a ][*2 CharConvert][2 `-style 2918function to use for keystroke conversion]&] 2919[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2920[s0;0 &] 2921[s0;H6;0 &] 2922[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Accel`(`): [_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `& 2923][2 _][*2 Accel][2 ()]&] 2924[s0;l288; [2 Sets up the accelerator for the given column. No keystroke 2925conversion is performed.]&] 2926[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2927[s0;0 &] 2928[s0;H6;0 &] 2929[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Margin`(int`): [_^ArrayCtrl`:`:Column^2 Colum 2930n][@(0.0.255)2 `&][2 _][*2 Margin][2 (][@(0.0.255)2 int][2 _][*@3;2 m][2 )]&] 2931[s0;l288; [2 Sets up the margin width for the given column. This is 2932equivalent to calling the ][*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Column`:`:SetMargin`(int`)^2 S 2933etMargin][2 method of the underlying ][*2 HeaderTab][2 .]&] 2934[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 m][2 -|]&] 2935[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 `*this]&] 2936[s0;0 &] 2937[s0;H6;0 &] 2938[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Sorting`(const ValueOrder`&`): [_^ArrayCtrl`:`:Column^2 C 2939olumn][@(0.0.255)2 `&][2 _][*2 Sorting][2 (][@(0.0.255)2 const][2 _][_^ValueOrder^2 ValueOrder][@(0.0.255)2 `& 2940][2 _][*@3;2 o][2 )]&] 2941[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Sorting`(int`(`*`)`(const Value`&a`,const Value`&b`)`): [_^ArrayCtrl`:`:Column^2 C 2942olumn][@(0.0.255)2 `&][2 _][*2 Sorting][2 (][@(0.0.255)2 int][2 _(`*][*@3;2 c][2 )(][@(0.0.255)2 co 2943nst][2 _Value][@(0.0.255)2 `&][2 _a, ][@(0.0.255)2 const][2 _Value][@(0.0.255)2 `&][2 _b))]&] 2944[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Sorting`(`): [_^ArrayCtrl`:`:Column^2 Column][@(0.0.255)2 `& 2945][2 _][*2 Sorting][2 ()]&] 2946[s0;l288; [2 Activates sorting of ArrayCtrl column by clicking on its 2947header tab. Parameterless version uses default Value ordering 2948using StdValueCompare.]&] 2949[s0;0 &] 2950[s0;H6;0 &] 2951[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:SortDefault`(`): [_^ArrayCtrl`:`:Column^2 Col 2952umn][@(0.0.255)2 `&][2 _][*2 SortDefault][2 ()]&] 2953[s0;l288; [2 Sets this column to be initial sorting column (calls SetSortColumn 2954of ArrayCtrl).]&] 2955[s0;0 &] 2956[s0;H6;0 &] 2957[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:HeaderTab`(`): [_^HeaderCtrl`:`:Column^2 Head 2958erCtrl`::Column][@(0.0.255)2 `&][2 _][*2 HeaderTab][2 ()]&] 2959[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:HeaderTab`(`)const: [@(0.0.255)2 const][2 _][_^HeaderCtrl`:`:Column^2 H 2960eaderCtrl`::Column][@(0.0.255)2 `&][2 _][*2 HeaderTab][2 ()_][@(0.0.255)2 const]&] 2961[s0;l288; [2 Returns the ][*2 HeaderCtrl`::Column][2 object describing 2962the given column. This object can be used to set up additional 2963column properties (like column width constraints or the ][*^topic`:`/`/CtrlLib`/src`/HeaderCtrl`$en`-us`#`:`:HeaderCtrl`:`:Column`:`:Callback WhenAction^2 W 2964henAction][2 callback).]&] 2965[s0;0 &] 2966[s0;H6;0 &] 2967[s0;i448;a25;kKO9;:ArrayCtrl`:`:Column`:`:Tip`(const char`*`): [_^ArrayCtrl`:`:Column^2 C 2968olumn][@(0.0.255)2 `&][2 _][*2 Tip][2 (][@(0.0.255)2 const][2 _][@(0.0.255)2 char][2 _`*][*@3;2 tip 2969][2 )]&] 2970[s0;l288; [2 Assigns a ][*@3;2 tip][2 to header tab column.]&] 2971[s0;0 &] 2972[s0; &] 2973[ {{10000t/25b/25@3 [s0; [*@(229)4 ArrayCtrl`::Order]]}}&] 2974[s0;0 &] 2975[s0;i448;a25;kKO9;:ArrayCtrl`:`:Order`:`:struct: [@(0.0.255) struct]_[* Order]&] 2976[s0;b42; [2 The ][*2 Order][2 object is used for array row sorting. The 2977overloaded ][*2 operator ()][2 acts as the sorting predicate, which 2978is consulted within the sorting method to determine which of 2979a given pair of row is `'less`' according to the desired sorting.]&] 2980[s0;0 &] 2981[s0; &] 2982[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] 2983[s0;0 &] 2984[s0;i448;a25;kKO9;:ArrayCtrl`:`:Order`:`:operator`(`)`(const Vector`<Value`>`&`,const Vector`<Value`>`&`)const: [@(0.0.255)2 v 2985irtual][2 ][@(0.0.255)2 bool][2 _][*2 operator()][2 (][@(0.0.255)2 const][2 _][_^Vector^2 Vector 2986][2 <][_^Value^2 Value][2 >`&_][*@3;2 row1][2 , ][@(0.0.255)2 const][2 _][_^Vector^2 Vector][2 <][_^Value^2 V 2987alue][2 >`&_][*@3;2 row2][2 )_][@(0.0.255)2 const][2 _`=_][@3;2 0]&] 2988[s0;l288; [2 The sorting predicate. This method should return ][*2 true][2 2989when its first argument (][/2 row1][2 ) is less than the second argument 2990(][/2 row2][2 ) according to the desired ordering.]&] 2991[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 row1][2 -|an array of source data 2992index values for the first of the rows to compare]&] 2993[s0;l288;i1121;b17;O9;~~~.1408; [*C@3;2 row2][2 -|an array of source data 2994index values for the other row to compare]&] 2995[s0;l288;i1121;b17;O9;~~~.1408; [*/2 Return value][2 -|][*2 true][2 `= row1 2996< row2, ][*2 false][2 `= row1 >`= row2]&] 2997[s0;0 &] 2998[s0; ]]