ui/cocoa/ListDataSource.m

changeset 109
c3dfcb8f0be7
child 113
dde28a806552
equal deleted inserted replaced
108:77254bd6dccb 109:c3dfcb8f0be7
1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #import "ListDataSource.h"
30
31 @implementation ListDataSource
32
33 - (id) init:(NSArray<NSTableColumn*>*) columns var:(UiVar*)var getvalue:(ui_getvaluefunc2) getvaluefunc getvaluedata:(void*)userdata {
34 _columns = columns;
35 _var = var;
36 _getvalue = getvaluefunc;
37 _getvaluedata = userdata;
38 return self;
39 }
40
41 - (NSInteger) numberOfRowsInTableView:(NSTableView *) tableView {
42 if(_var) {
43 UiList *list = _var->value;
44 if(list->count) {
45 return list->count(list);
46 }
47 }
48 return 0;
49 }
50
51 - (id) tableView:(NSTableView *) tableView
52 objectValueForTableColumn:(NSTableColumn *) tableColumn
53 row:(NSInteger) row
54 {
55 id ret = nil;
56 UiList *list = _var->value;
57 void *elm = list->get(list, (int)row);
58 if(elm) {
59 // get column index
60 NSUInteger colIndex = [_columns indexOfObject:tableColumn];
61 if(colIndex == NSNotFound) {
62 return nil;
63 }
64
65 // get UI model type for this column
66 UiModelType type = UI_STRING;
67 UiModel *model = _model;
68 if(model) {
69 if(colIndex >= model->columns) {
70 return nil;
71 }
72 type = model->types[colIndex];
73 }
74
75 // convert the list element
76 UiBool freeResult = FALSE;
77 void *data = _getvalue(list, elm, (int)row, (int)colIndex, _getvaluedata, &freeResult);
78
79 switch(type) {
80 case UI_STRING: {
81 ret = [[NSString alloc] initWithUTF8String:data];
82 break;
83 }
84 case UI_STRING_FREE: {
85 ret = [[NSString alloc] initWithUTF8String:data];
86 freeResult = TRUE;
87 break;
88 }
89 case UI_INTEGER: {
90 break;
91 }
92 case UI_ICON: {
93 break;
94 }
95 case UI_ICON_TEXT: {
96 break;
97 }
98 case UI_ICON_TEXT_FREE: {
99 break;
100 }
101 }
102
103 if(freeResult) {
104 free(data);
105 }
106 }
107 return ret;
108 }
109
110 @end

mercurial