Sat, 27 Dec 2025 22:47:56 +0100
update toolkit, ucx
|
109
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2025 Olaf Wintermann. All rights reserved. |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #import "list.h" |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #import "ListDelegate.h" |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #import <objc/runtime.h> |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | |
| 112 | 33 | #import <inttypes.h> |
| 34 | #import <limits.h> | |
| 35 | ||
| 36 | #import <cx/array_list.h> | |
| 37 | ||
|
109
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | static void* getvalue_wrapper(UiList *list, void *elm, int row, int col, void *userdata, UiBool *freeResult) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | ui_getvaluefunc getvalue = (ui_getvaluefunc)userdata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | return getvalue(elm, col); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | static void* str_getvalue(UiList *list, void *elm, int row, int col, void *userdata, UiBool *freeResult) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | return elm; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | /* --------------------------- ListView --------------------------- */ |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | /* |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | * adds a NSTableViewDelegate that handles all events and calls |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | * callbacks specified in the UiListArgs |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | */ |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | static void add_listdelegate(UiObject *obj, NSTableView *tableview, UiListArgs *args) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | delegate.onactivate = args->onactivate; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | delegate.onactivatedata = args->onactivatedata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | delegate.onselection = args->onselection; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | delegate.onselectiondata = args->onselectiondata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | tableview.delegate = delegate; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | objc_setAssociatedObject(tableview, "ui_listdelegate", delegate, OBJC_ASSOCIATION_RETAIN); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | tableview.doubleAction = @selector(activateEvent:); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | tableview.target = delegate; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | static void bind_list_to_tableview(UiList *list, NSTableView *tableview) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | list->obj = (__bridge void*)tableview; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | list->update = ui_tableview_update; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | list->getselection = ui_tableview_getselection; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | list->setselection = ui_tableview_setselection; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | NSScrollView *scrollview = [[NSScrollView alloc] init]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | NSTableView *tableview = [[NSTableView alloc] init]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | tableview.autoresizingMask = NSViewWidthSizable; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | tableview.headerView = nil; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | if(args->multiselection) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | tableview.allowsMultipleSelection = YES; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | scrollview.documentView = tableview; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | UiLayout layout = UI_INIT_LAYOUT(args); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | ui_container_add(obj, scrollview, &layout); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | add_listdelegate(obj, tableview, args); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | |
|
117
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
90 | char **static_elements = args->static_elements; |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
91 | size_t static_nelm = args->static_nelm; |
|
109
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | if(var) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | UiList *list = var->value; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | bind_list_to_tableview(list, tableview); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | ui_getvaluefunc2 getvalue = args->getvalue2; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | void *getvaluedata = args->getvalue2data; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | if(!getvalue) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | if(args->getvalue) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | getvalue = getvalue_wrapper; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | getvaluedata = (void*)args->getvalue; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | getvalue = str_getvalue; // by default list values are interpreted as strings |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column"]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | [tableview addTableColumn:column]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
111 | ListDataSource *dataSource = [[ListDataSource alloc] init:tableview.tableColumns var:var getvalue:getvalue getvaluedata:getvaluedata]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
112 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
113 | tableview.dataSource = dataSource; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
114 | [tableview reloadData]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
116 | objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); |
|
117
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
117 | } else if(static_elements && static_nelm) { |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
118 | NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column"]; |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
119 | [tableview addTableColumn:column]; |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
120 | |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
121 | ArrayDataSource *dataSource = [[ArrayDataSource alloc]init:static_elements size:static_nelm]; |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
122 | tableview.dataSource = dataSource; |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
123 | [tableview reloadData]; |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
124 | |
|
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
125 | objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); |
|
109
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
126 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
127 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
128 | return (__bridge void*)scrollview; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
129 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
130 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
131 | /* --------------------------- TableView --------------------------- */ |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
132 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
133 | UIWIDGET ui_table_create(UiObject* obj, UiListArgs *args) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
134 | NSScrollView *scrollview = [[NSScrollView alloc] init]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
135 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
136 | NSTableView *tableview = [[NSTableView alloc] init]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
137 | tableview.autoresizingMask = NSViewWidthSizable; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
138 | tableview.columnAutoresizingStyle = NSTableViewSequentialColumnAutoresizingStyle; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
139 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
140 | if(args->multiselection) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
141 | tableview.allowsMultipleSelection = YES; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
142 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
143 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
144 | UiLayout layout = UI_INIT_LAYOUT(args); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
145 | ui_container_add(obj, scrollview, &layout); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
147 | add_listdelegate(obj, tableview, args); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
148 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
149 | // convert model |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
150 | NSMutableArray<NSTableColumn*> *cols = [[NSMutableArray alloc] init]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
151 | UiModel *model = args->model; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
152 | if(model) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
153 | for(int i=0;i<model->columns;i++) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
154 | char *title = model->titles[i]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
155 | UiModelType type = model->types[i]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
156 | int width = model->columnsize[i]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
157 | NSString *identifier = [[NSString alloc] initWithUTF8String:title]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
158 | NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:identifier]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
159 | column.title = identifier; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
160 | column.resizingMask = NSTableColumnUserResizingMask; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
161 | if(width > 0) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
162 | column.width = width; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
163 | } else if(width < 0) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
164 | column.resizingMask = NSTableColumnAutoresizingMask | NSTableColumnUserResizingMask; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
165 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
166 | if(type >= UI_ICON) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | // TODO |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
168 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
169 | [tableview addTableColumn:column]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
170 | [cols addObject:column]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
175 | if(var) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | UiList *list = var->value; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | bind_list_to_tableview(list, tableview); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
178 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
179 | ui_getvaluefunc2 getvalue = args->getvalue2; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | void *getvaluedata = args->getvalue2data; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | if(!getvalue) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | if(args->getvalue) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | getvalue = getvalue_wrapper; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
184 | getvaluedata = (void*)args->getvalue; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
185 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
186 | fprintf(stderr, "Error: tableview requires getvalue or getvalue2 func\n"); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
187 | return (__bridge void*)scrollview; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | ListDataSource *dataSource = [[ListDataSource alloc] init:cols var:var getvalue:getvalue getvaluedata:getvaluedata]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | if(model) { |
|
115
e57ca2747782
fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
113
diff
changeset
|
193 | dataSource.model = model; |
|
109
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
196 | tableview.dataSource = dataSource; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
197 | [tableview reloadData]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
200 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
201 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
202 | scrollview.documentView = tableview; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
203 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
204 | return (__bridge void*)scrollview; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
205 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
206 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
207 | /* ------ common functions ------ */ |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
208 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
209 | void ui_tableview_update(UiList *list, int i) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
210 | NSTableView *tableview = (__bridge NSTableView*)list->obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
211 | if(i < 0) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
212 | [tableview reloadData]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
213 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
214 | [tableview reloadData]; // TODO: optimize |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
215 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
216 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | UiListSelection ui_tableview_getselection(UiList *list) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | NSTableView *tableview = (__bridge NSTableView*)list->obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | return ui_tableview_selection(tableview); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | void ui_tableview_setselection(UiList *list, UiListSelection selection) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | NSTableView *tableview = (__bridge NSTableView*)list->obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | for(int i=0;i<selection.count;i++) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | [indexSet addIndex:selection.rows[i]]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | [tableview selectRowIndexes:indexSet byExtendingSelection:NO]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | /* --------------------------- DropDown --------------------------- */ |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
234 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | @implementation UiDropDown |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | - (id)init:(UiObject*)obj { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | _obj = obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
239 | return self; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
240 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
241 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
242 | - (void) comboBoxSelectionDidChange:(NSNotification *) notification { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
243 | int index = (int)_combobox.indexOfSelectedItem; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
244 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | void *eventdata = NULL; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | if(_var) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
247 | UiList *list = _var->value; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
248 | if(index >= 0) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
249 | eventdata = list->get(list, index); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
250 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
251 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
252 | NSString *str = _combobox.objectValueOfSelectedItem; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
253 | if(str) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
254 | eventdata = (void*)str.UTF8String; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
255 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
256 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
257 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
258 | UiEvent event; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
259 | event.obj = _obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
260 | event.window = event.obj->window; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
261 | event.document = event.obj->ctx->document; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
262 | event.eventdata = eventdata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
263 | event.eventdatatype = UI_EVENT_DATA_LIST_ELM; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
264 | event.intval = index; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
265 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
266 | if(_onselection) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
267 | _onselection(&event, _onselectiondata); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
268 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
269 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
270 | if(_onactivate) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
271 | _onactivate(&event, _onactivatedata); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
272 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
273 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
274 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
275 | @end |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
276 | |
|
115
e57ca2747782
fix build with newest toolkit version
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
113
diff
changeset
|
277 | UIWIDGET ui_dropdown_create(UiObject* obj, UiListArgs *args) { |
|
109
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
278 | NSComboBox *dropdown = [[NSComboBox alloc] init]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
279 | dropdown.editable = NO; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
280 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
281 | UiDropDown *uidropdown = [[UiDropDown alloc] init:obj]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
282 | objc_setAssociatedObject(dropdown, "ui_dropdown", uidropdown, OBJC_ASSOCIATION_RETAIN); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
283 | uidropdown.onactivate = args->onactivate; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
284 | uidropdown.onactivatedata = args->onactivatedata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
285 | uidropdown.onselection = args->onselection; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
286 | uidropdown.onselectiondata = args->onselectiondata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
287 | uidropdown.combobox = dropdown; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
288 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
289 | if(!args->getvalue2) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | if(args->getvalue) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
291 | args->getvalue2 = getvalue_wrapper; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
292 | args->getvalue2data = (void*)args->getvalue; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
293 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
294 | args->getvalue2 = str_getvalue; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
295 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
296 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
297 | uidropdown.getvalue = args->getvalue2; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
298 | uidropdown.getvaluedata = args->getvalue2data; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
299 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
300 | UiLayout layout = UI_INIT_LAYOUT(args); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
301 | ui_container_add(obj, dropdown, &layout); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
302 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
303 | UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
304 | if(var) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
305 | UiList *list = var->value; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
306 | list->obj = (__bridge void*)dropdown; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
307 | list->update = ui_dropdown_update; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
308 | list->getselection = ui_dropdown_getselection; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
309 | list->setselection = ui_dropdown_setselection; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
310 | ui_dropdown_update(list, -1); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
311 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
312 | for(int i=0;i<args->static_nelm;i++) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
313 | char *str = args->static_elements[i]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
314 | NSString *item = [[NSString alloc] initWithUTF8String:str]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
315 | [dropdown addItemWithObjectValue:item]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
316 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
318 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | uidropdown.var = var; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
320 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
321 | return (__bridge void*)dropdown; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
322 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
323 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
324 | void ui_dropdown_update(UiList *list, int i) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
325 | NSComboBox *combobox = (__bridge NSComboBox*)list->obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
326 | UiDropDown *dropdown = objc_getAssociatedObject(combobox, "ui_dropdown"); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
327 | if(dropdown) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
328 | [combobox removeAllItems]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
329 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
330 | ui_getvaluefunc2 getvalue = dropdown.getvalue; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
331 | void *getvaluedata = dropdown.getvaluedata; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
332 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
333 | int index = 0; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
334 | void *elm = list->first(list); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
335 | while(elm) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
336 | UiBool freeResult = FALSE; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
337 | char *str = getvalue(list, elm, index, 0, getvaluedata, &freeResult); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
338 | if(str) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
339 | NSString *item = [[NSString alloc] initWithUTF8String:str]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
340 | [combobox addItemWithObjectValue:item]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
341 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
342 | if(freeResult) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
343 | free(str); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
344 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
345 | elm = list->next(list); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
346 | index++; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
347 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
348 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
349 | fprintf(stderr, "Error: obj is not a dropdown\n"); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
350 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
351 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
352 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
353 | UiListSelection ui_dropdown_getselection(UiList *list) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
354 | UiListSelection sel = { 0, NULL }; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
355 | NSComboBox *combobox = (__bridge NSComboBox*)list->obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
356 | NSInteger index = combobox.indexOfSelectedItem; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
357 | if(index >= 0) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
358 | sel.rows = malloc(sizeof(int)); |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
359 | sel.count = 1; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
360 | sel.rows[0] = (int)index; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
361 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
362 | return sel; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
363 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
364 | |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
365 | void ui_dropdown_setselection(UiList *list, UiListSelection selection) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
366 | NSComboBox *combobox = (__bridge NSComboBox*)list->obj; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
367 | if(selection.count > 0) { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
368 | [combobox selectItemAtIndex:selection.rows[0]]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
369 | } else { |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
370 | [combobox selectItemAtIndex: -1]; |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
371 | } |
|
c3dfcb8f0be7
update toolkit, remove getvalue func from model to table/listview args
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
372 | } |
| 112 | 373 | |
| 374 | ||
| 375 | /* --------------------------- SourceList --------------------------- */ | |
| 376 | ||
| 113 | 377 | static ui_sourcelist_update_func sclist_update_callback = NULL; |
| 378 | ||
| 379 | void ui_sourcelist_set_update_callback(ui_sourcelist_update_func cb) { | |
| 380 | sclist_update_callback = cb; | |
| 381 | } | |
| 382 | ||
| 383 | void ui_sourcelist_updated(void) { | |
| 384 | if(sclist_update_callback) { | |
| 385 | sclist_update_callback(); | |
| 386 | } | |
| 387 | } | |
| 388 | ||
| 112 | 389 | static void sublist_free(const CxAllocator *a, UiSubList *sl) { |
| 390 | cxFree(a, (char*)sl->varname); | |
| 391 | cxFree(a, (char*)sl->header); | |
| 392 | } | |
| 393 | ||
| 394 | static UiSubList copy_sublist(const CxAllocator *a, UiSubList *sl) { | |
| 395 | UiSubList new_sl; | |
| 396 | new_sl.value = sl->value; | |
| 397 | new_sl.varname = sl->varname ? cx_strdup_a(a, cx_str(sl->varname)).ptr : NULL; | |
| 398 | new_sl.header = sl->header ? cx_strdup_a(a, cx_str(sl->header)).ptr : NULL; | |
| 399 | new_sl.separator = sl->separator; | |
| 400 | new_sl.userdata = sl->userdata; | |
| 401 | return new_sl; | |
| 402 | } | |
| 403 | ||
| 404 | static CxList* copy_sublists(const CxAllocator *a, UiSourceListArgs *args) { | |
| 405 | if(args->sublists) { | |
| 406 | size_t max = args->numsublists; | |
| 407 | if(max == 0) { | |
| 408 | max = INT_MAX; | |
| 409 | } | |
| 410 | ||
|
117
b174e721663e
update toolkit, ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
411 | CxList *sublists = cxArrayListCreate(a, sizeof(UiSubList), args->numsublists); |
| 112 | 412 | sublists->collection.advanced_destructor = (cx_destructor_func2)sublist_free; |
| 413 | ||
| 414 | for(int i=0;i<max;i++) { | |
| 415 | UiSubList *sl = &args->sublists[i]; | |
| 416 | if(sl->value == NULL && sl->varname == NULL) { | |
| 417 | break; | |
| 418 | } | |
| 419 | ||
| 420 | UiSubList new_sl = copy_sublist(a, sl); | |
| 421 | cxListAdd(sublists, &new_sl); | |
| 422 | } | |
| 423 | ||
| 424 | return sublists; | |
| 425 | } | |
| 426 | return NULL; | |
| 427 | } | |
| 428 | ||
| 429 | UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args) { | |
| 430 | // create views | |
| 431 | NSScrollView *scrollview = [[NSScrollView alloc] init]; | |
| 432 | scrollview.autoresizingMask = NSViewWidthSizable; | |
| 433 | scrollview.hasVerticalScroller = YES; | |
| 434 | scrollview.hasHorizontalScroller = NO; | |
| 435 | scrollview.autohidesScrollers = YES; | |
| 436 | ||
| 437 | NSOutlineView *outline = [[NSOutlineView alloc]init]; | |
| 438 | NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"x"]; | |
| 439 | [outline addTableColumn:column]; | |
| 440 | outline.outlineTableColumn = column; | |
| 441 | outline.headerView = NULL; | |
| 442 | outline.rowSizeStyle = NSTableViewRowSizeStyleDefault; | |
| 443 | outline.usesAutomaticRowHeights = YES; | |
| 444 | outline.indentationPerLevel = 0; | |
| 445 | ||
| 446 | outline.style = NSTableViewStyleSourceList; | |
| 447 | ||
| 448 | // Make background transparent so vibrancy shows through | |
| 449 | scrollview.drawsBackground = NO; | |
| 450 | ||
| 451 | scrollview.documentView = outline; | |
| 452 | ||
| 453 | UiLayout layout = UI_ARGS2LAYOUT(args); | |
| 454 | ui_container_add(obj, scrollview, &layout); | |
| 455 | ||
| 456 | // datasource and delegate | |
| 457 | UiSourceList *data = [[UiSourceList alloc] init:obj outline:outline]; | |
| 458 | data.sublists = copy_sublists(obj->ctx->allocator, args); | |
| 459 | UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST); | |
| 460 | if(var) { | |
| 461 | UiList *list = var->value; | |
| 462 | list->obj = (__bridge void*)data; | |
| 463 | list->update = ui_sourcelist_update; | |
| 464 | } | |
| 465 | data.dynamic_sublists = var; | |
| 466 | data.getvalue = args->getvalue; | |
| 467 | data.getvaluedata = args->getvaluedata; | |
| 468 | data.onactivate = args->onactivate; | |
| 469 | data.onactivatedata = args->onactivatedata; | |
| 470 | data.onbuttonclick = args->onbuttonclick; | |
| 471 | data.onactivatedata = args->onbuttonclickdata; | |
| 472 | [data update:-1]; | |
| 473 | ||
| 474 | outline.dataSource = data; | |
| 475 | outline.delegate = data; | |
| 476 | ||
| 477 | [data update:-1]; | |
| 478 | ||
| 479 | objc_setAssociatedObject(outline, "ui_datasource", data, OBJC_ASSOCIATION_RETAIN); | |
| 480 | ||
| 481 | return (__bridge void*)scrollview; | |
| 482 | } | |
| 483 | ||
| 484 | void ui_sourcelist_update(UiList *list, int row) { | |
| 485 | UiSourceList *sourcelist = (__bridge UiSourceList*)list->obj; | |
| 486 | [sourcelist update:row]; | |
| 487 | } | |
| 488 | ||
| 489 | ||
| 490 | /* | |
| 491 | * Data Source and Delegate for the sourcelist NSOutlineView | |
| 492 | */ | |
| 493 | @implementation UiSourceList | |
| 494 | ||
| 495 | - (id)init:(UiObject*)obj outline:(NSOutlineView*)view { | |
| 496 | _obj = obj; | |
| 497 | _outlineView = view; | |
| 498 | _sections = [[NSMutableArray alloc] initWithCapacity:16]; | |
| 499 | return self; | |
| 500 | } | |
| 501 | ||
| 502 | - (void)dealloc { | |
| 503 | cxListFree(_sublists); | |
| 504 | } | |
| 505 | ||
| 506 | - (void)update:(int)row { | |
| 507 | // TODO: check row | |
| 508 | ||
| 509 | [_sections removeAllObjects]; | |
| 510 | ||
| 511 | CxIterator i = cxListIterator(_sublists); | |
| 512 | int index = 0; | |
| 513 | int rownum = 0; | |
| 514 | cx_foreach(UiSubList *, sl, i) { | |
| 515 | UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl]; | |
| 516 | section.sublistIndex = index; | |
| 517 | section.rownum = rownum; | |
| 518 | section.sublistStartRow = rownum; | |
| 519 | [section update:-1]; | |
| 520 | [_sections addObject:section]; | |
| 521 | index++; | |
| 522 | rownum += 1 + section.items.count; | |
| 523 | } | |
| 524 | ||
| 525 | [_outlineView reloadData]; | |
| 526 | [_outlineView expandItem:nil expandChildren:YES]; | |
| 527 | } | |
| 528 | ||
| 529 | // NSOutlineViewDataSource implementation | |
| 530 | ||
| 531 | - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { | |
| 532 | if(item == nil) { | |
| 533 | return _sections.count; | |
| 534 | } else { | |
| 535 | UiSourceListItem *i = item; | |
| 536 | return i.items.count; | |
| 537 | } | |
| 538 | } | |
| 539 | ||
| 540 | - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item { | |
| 541 | UiSourceListItem *i = item; | |
| 542 | return [i isSection] ? YES : NO; | |
| 543 | } | |
| 544 | ||
| 545 | - (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item { | |
| 546 | UiSourceListItem *i = item; | |
| 547 | if(i) { | |
| 548 | return [i.items objectAtIndex:index]; | |
| 549 | } | |
| 550 | return [_sections objectAtIndex:index]; | |
| 551 | } | |
| 552 | ||
| 553 | - (void)outlineView:(NSOutlineView *)outlineView | |
| 554 | setObjectValue:(id)object | |
| 555 | forTableColumn:(NSTableColumn *)tableColumn | |
| 556 | byItem:(id)item | |
| 557 | { | |
| 558 | ||
| 559 | } | |
| 560 | ||
| 561 | // NSOutlineViewDelegate implementation | |
| 562 | ||
| 563 | - (NSView *)outlineView:(NSOutlineView *)outlineView | |
| 564 | viewForTableColumn:(NSTableColumn *)tableColumn | |
| 565 | item:(id)item | |
| 566 | { | |
| 567 | UiSourceListItem *i = item; | |
| 568 | ||
| 569 | NSTableCellView *cell = [[NSTableCellView alloc] init]; | |
| 570 | cell.identifier = @"cell"; | |
| 571 | // Icon | |
| 572 | NSImageView *iconView = [[NSImageView alloc] initWithFrame:NSZeroRect]; | |
| 573 | iconView.translatesAutoresizingMaskIntoConstraints = NO; | |
| 574 | [cell addSubview:iconView]; | |
| 575 | cell.imageView = iconView; | |
| 576 | ||
| 577 | // Label | |
| 578 | //NSTextField *textField = [NSTextField labelWithString:@""]; | |
| 579 | NSTextField *textField = [[NSTextField alloc] initWithFrame:NSZeroRect]; | |
| 580 | textField.translatesAutoresizingMaskIntoConstraints = NO; | |
| 581 | textField.bezeled = NO; | |
| 582 | textField.editable = NO; | |
| 583 | textField.drawsBackground = NO; | |
| 584 | textField.selectable = NO; | |
| 585 | textField.lineBreakMode = NSLineBreakByTruncatingTail; | |
| 586 | ||
| 587 | ||
| 588 | [cell addSubview:textField]; | |
| 589 | cell.textField = textField; | |
| 590 | ||
| 591 | if([i isSection]) { | |
| 592 | NSFont *font = [NSFont boldSystemFontOfSize:[NSFont systemFontSize]*0.85]; | |
| 593 | //NSFont *font = [NSFont preferredFontForTextStyle:NSFontTextStyleCaption1 options:@{}]; | |
| 594 | NSDictionary *attrs = @{ | |
| 595 | NSFontAttributeName: font, | |
| 596 | NSForegroundColorAttributeName: [NSColor tertiaryLabelColor] | |
| 597 | }; | |
| 598 | textField.attributedStringValue = [[NSAttributedString alloc] initWithString:i.label attributes:attrs]; | |
| 599 | ||
| 600 | // Layout constraints | |
| 601 | [NSLayoutConstraint activateConstraints:@[ | |
| 602 | [iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0], | |
| 603 | [iconView.bottomAnchor constraintEqualToAnchor:cell.bottomAnchor constant:-1], | |
| 604 | ||
| 605 | [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0], | |
| 606 | [textField.bottomAnchor constraintEqualToAnchor:cell.bottomAnchor constant:-1], | |
| 607 | [textField.trailingAnchor constraintEqualToAnchor:cell.trailingAnchor constant:0], | |
| 608 | ]]; | |
| 609 | } else { | |
| 610 | textField.stringValue = i.label; | |
| 611 | ||
| 612 | // Layout constraints | |
| 613 | [NSLayoutConstraint activateConstraints:@[ | |
| 614 | [iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0], | |
| 615 | [iconView.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor], | |
| 616 | ||
| 617 | [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0], | |
| 618 | [textField.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor], | |
| 619 | [textField.trailingAnchor constraintEqualToAnchor:cell.trailingAnchor constant:0], | |
| 620 | ]]; | |
| 621 | } | |
| 622 | ||
| 623 | return cell; | |
| 624 | } | |
| 625 | ||
| 626 | - (NSTableRowView *) outlineView:(NSOutlineView *) outlineView | |
| 627 | rowViewForItem:(id)item { | |
| 628 | UiSourceListItem *it = item; | |
| 629 | UiSourceListRow *row = [[UiSourceListRow alloc]init]; | |
| 630 | if([it isSection] && it.sublist->header) { | |
| 631 | row.showDisclosureButton = YES; | |
| 632 | } | |
| 633 | return row; | |
| 634 | } | |
| 635 | ||
| 636 | - (BOOL) outlineView:(NSOutlineView *) outlineView | |
| 637 | shouldSelectItem:(id)item | |
| 638 | { | |
| 639 | UiSourceListItem *i = item; | |
| 640 | return [i isSection] ? NO : YES; | |
| 641 | } | |
| 642 | ||
| 643 | - (CGFloat) outlineView:(NSOutlineView *) outlineView | |
| 644 | heightOfRowByItem:(id) item | |
| 645 | { | |
| 646 | UiSourceListItem *i = item; | |
| 647 | CGFloat rowHeight = outlineView.rowHeight; | |
| 648 | if([i isSection]) { | |
| 649 | if(i.sublist->header) { | |
| 650 | rowHeight += i.sublistIndex == 0 ? -12 : 4; | |
| 651 | } else { | |
| 652 | rowHeight = i.sublistIndex == 0 ? 0.1 : 12; | |
| 653 | } | |
| 654 | } | |
| 655 | return rowHeight; | |
| 656 | } | |
| 657 | ||
| 658 | - (void) outlineViewSelectionDidChange:(NSNotification *) notification { | |
| 659 | UiEvent event; | |
| 660 | event.obj = _obj; | |
| 661 | event.window = event.obj->window; | |
| 662 | event.document = event.obj->ctx->document; | |
| 663 | event.eventdata = NULL; | |
| 664 | event.eventdatatype = 0; | |
| 665 | event.intval = 0; | |
| 666 | event.set = ui_get_setop(); | |
| 667 | ||
| 668 | UiSubListEventData sublistEvent; | |
| 669 | ||
| 670 | NSInteger selectedRow = _outlineView.selectedRow; | |
| 671 | if(selectedRow >= 0) { | |
| 672 | UiSourceListItem *item = [_outlineView itemAtRow:selectedRow]; | |
| 673 | UiSourceListItem *parent = item.parent; | |
| 674 | UiSubList *sublist = parent != nil ? parent.sublist : item.sublist; | |
| 675 | UiVar *var = parent != nil ? parent.var : item.var; | |
| 676 | if(item && var) { | |
| 677 | sublistEvent.list = var->value; | |
| 678 | sublistEvent.sublist_index = parent ? parent.sublistIndex : item.sublistIndex; | |
| 679 | sublistEvent.row_index = (int)selectedRow - item.sublistStartRow - 1; | |
| 680 | sublistEvent.sublist_userdata = sublist ? sublist->userdata : NULL; | |
| 681 | sublistEvent.event_data = item.eventdata; | |
| 682 | sublistEvent.row_data = sublistEvent.list->get(sublistEvent.list, sublistEvent.row_index); | |
| 683 | ||
| 684 | event.eventdata = &sublistEvent; | |
| 685 | event.eventdatatype = UI_EVENT_DATA_SUBLIST; | |
| 686 | } | |
| 687 | } | |
| 688 | ||
| 689 | if(_onactivate) { | |
| 690 | _onactivate(&event, _onactivatedata); | |
| 691 | } | |
| 692 | } | |
| 693 | ||
| 694 | @end | |
| 695 | ||
| 696 | /* | |
| 697 | * Outline datasource item | |
| 698 | * Is used for sections (sublists) and individual items | |
| 699 | */ | |
| 700 | @implementation UiSourceListItem | |
| 701 | ||
| 702 | - (id)init:(UiSourceList*)sourcelist sublist:(UiSubList*)sublist { | |
| 703 | _sourcelist = sourcelist; | |
| 704 | _sublist = sublist; | |
| 705 | _items = [[NSMutableArray alloc]initWithCapacity:16]; | |
| 706 | if(sublist->header) { | |
| 707 | _label = [[NSString alloc]initWithUTF8String:sublist->header]; | |
| 708 | } else { | |
| 709 | _label = @""; | |
| 710 | } | |
| 711 | UiVar *var = uic_widget_var(sourcelist.obj->ctx, | |
| 712 | sourcelist.obj->ctx, | |
| 713 | sublist->value, | |
| 714 | sublist->varname, | |
| 715 | UI_VAR_LIST); | |
| 716 | _var = var; | |
| 717 | return self; | |
| 718 | } | |
| 719 | ||
| 720 | - (id)init:(UiSubListItem*)item parent:(UiSourceListItem*)parent { | |
| 721 | _parent = parent; | |
| 722 | if(item->label) { | |
| 723 | _label = [[NSString alloc]initWithUTF8String:item->label]; | |
| 724 | } else { | |
| 725 | _label = @""; | |
| 726 | } | |
| 727 | _eventdata = item->eventdata; | |
| 728 | return self; | |
| 729 | } | |
| 730 | ||
| 731 | - (BOOL)isSection { | |
| 732 | return _sublist != NULL; | |
| 733 | } | |
| 734 | ||
| 735 | - (void)update:(int)row { | |
| 736 | // TODO: check row | |
| 737 | ||
| 738 | [_items removeAllObjects]; | |
| 739 | if(_var == NULL) { | |
| 740 | return; | |
| 741 | } | |
| 742 | UiList *list = _var->value; | |
| 743 | void *elm = list->first(list); | |
| 744 | int index = 0; | |
| 745 | while(elm) { | |
| 746 | UiSubListItem item = { NULL, NULL, NULL, NULL, NULL, NULL }; | |
| 747 | if(_sourcelist.getvalue) { | |
| 748 | _sourcelist.getvalue(list, _sublist->userdata, elm, index, &item, _sourcelist.getvaluedata); | |
| 749 | } else { | |
| 750 | item.label = strdup(elm); | |
| 751 | } | |
| 752 | ||
| 753 | UiSourceListItem *it = [[UiSourceListItem alloc] init:&item parent:self]; | |
| 754 | it.sublistIndex = index; | |
| 755 | it.rownum = self.rownum + index; | |
| 756 | it.sublistStartRow = _parent ? _parent.sublistStartRow : _sublistStartRow; | |
| 757 | [_items addObject:it]; | |
| 758 | ||
| 759 | elm = list->next(list); | |
| 760 | index++; | |
| 761 | } | |
| 762 | } | |
| 763 | ||
| 764 | @end | |
| 765 | ||
| 766 | /* | |
| 767 | * Custom NSTableRowView implementation | |
| 768 | * Moves the disclosure button to the right side | |
| 769 | * Handles mouse hover events (for hiding the disclosure button) | |
| 770 | */ | |
| 771 | @implementation UiSourceListRow | |
| 772 | ||
| 773 | - (void)layout { | |
| 774 | [super layout]; | |
| 775 | ||
| 776 | for (NSView *subview in self.subviews) { | |
| 777 | if ([subview.identifier isEqualToString:NSOutlineViewDisclosureButtonKey] || | |
| 778 | [subview.identifier isEqualToString:NSOutlineViewShowHideButtonKey]) | |
| 779 | { | |
| 780 | NSRect frame = subview.frame; | |
| 781 | frame.origin.x = self.bounds.size.width - frame.size.width - 16.0; | |
| 782 | subview.frame = frame; | |
| 783 | ||
| 784 | if(!_hover) { | |
| 785 | subview.hidden = YES; | |
| 786 | } | |
| 787 | ||
| 788 | if(subview != _disclosureButton) { | |
| 789 | // init disclosure button | |
| 790 | _disclosureButton = (NSButton*)subview; | |
| 791 | if ([subview isKindOfClass:[NSButton class]]) { | |
| 792 | NSButton *button = (NSButton*)subview; | |
| 793 | button.contentTintColor = [NSColor tertiaryLabelColor]; | |
| 794 | } | |
| 795 | } | |
| 796 | ||
| 797 | ||
| 798 | } else if ([subview.identifier isEqualToString:@"cell"]) { | |
| 799 | NSRect frame = subview.frame; | |
| 800 | frame.origin.x = 16; | |
| 801 | subview.frame = frame; | |
| 802 | } | |
| 803 | } | |
| 804 | } | |
| 805 | ||
| 806 | - (void)updateTrackingAreas { | |
| 807 | [super updateTrackingAreas]; | |
| 808 | if(_trackingArea != nil) { | |
| 809 | [self removeTrackingArea:_trackingArea]; | |
| 810 | } | |
| 811 | _trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds | |
| 812 | options:NSTrackingMouseEnteredAndExited | | |
| 813 | NSTrackingActiveInActiveApp | | |
| 814 | NSTrackingInVisibleRect | |
| 815 | owner:self | |
| 816 | userInfo:nil]; | |
| 817 | [self addTrackingArea:_trackingArea]; | |
| 818 | } | |
| 819 | ||
| 820 | - (void)mouseEntered:(NSEvent *)event { | |
| 821 | _hover = YES; | |
| 822 | _disclosureButton.hidden = _showDisclosureButton ? NO : YES; | |
| 823 | } | |
| 824 | ||
| 825 | - (void)mouseExited:(NSEvent *)event { | |
| 826 | _hover = NO; | |
| 827 | _disclosureButton.hidden = YES; | |
| 828 | } | |
| 829 | ||
| 830 | @end |