ui/cocoa/list.m

Sat, 27 Dec 2025 22:47:56 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 27 Dec 2025 22:47:56 +0100
changeset 117
b174e721663e
parent 115
e57ca2747782
permissions
-rw-r--r--

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
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
33 #import <inttypes.h>
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
34 #import <limits.h>
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
35
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
36 #import <cx/array_list.h>
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
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
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
373
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
374
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
375 /* --------------------------- SourceList --------------------------- */
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
376
113
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
377 static ui_sourcelist_update_func sclist_update_callback = NULL;
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
378
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
379 void ui_sourcelist_set_update_callback(ui_sourcelist_update_func cb) {
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
380 sclist_update_callback = cb;
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
381 }
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
382
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
383 void ui_sourcelist_updated(void) {
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
384 if(sclist_update_callback) {
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
385 sclist_update_callback();
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
386 }
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
387 }
dde28a806552 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 112
diff changeset
388
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
389 static void sublist_free(const CxAllocator *a, UiSubList *sl) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
390 cxFree(a, (char*)sl->varname);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
391 cxFree(a, (char*)sl->header);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
392 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
393
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
394 static UiSubList copy_sublist(const CxAllocator *a, UiSubList *sl) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
395 UiSubList new_sl;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
396 new_sl.value = sl->value;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
397 new_sl.varname = sl->varname ? cx_strdup_a(a, cx_str(sl->varname)).ptr : NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
398 new_sl.header = sl->header ? cx_strdup_a(a, cx_str(sl->header)).ptr : NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
399 new_sl.separator = sl->separator;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
400 new_sl.userdata = sl->userdata;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
401 return new_sl;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
402 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
403
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
404 static CxList* copy_sublists(const CxAllocator *a, UiSourceListArgs *args) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
405 if(args->sublists) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
406 size_t max = args->numsublists;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
407 if(max == 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
408 max = INT_MAX;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
409 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
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
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
412 sublists->collection.advanced_destructor = (cx_destructor_func2)sublist_free;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
413
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
414 for(int i=0;i<max;i++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
415 UiSubList *sl = &args->sublists[i];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
416 if(sl->value == NULL && sl->varname == NULL) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
417 break;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
418 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
419
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
420 UiSubList new_sl = copy_sublist(a, sl);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
421 cxListAdd(sublists, &new_sl);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
422 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
423
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
424 return sublists;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
425 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
426 return NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
427 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
428
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
429 UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
430 // create views
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
431 NSScrollView *scrollview = [[NSScrollView alloc] init];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
432 scrollview.autoresizingMask = NSViewWidthSizable;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
433 scrollview.hasVerticalScroller = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
434 scrollview.hasHorizontalScroller = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
435 scrollview.autohidesScrollers = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
436
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
437 NSOutlineView *outline = [[NSOutlineView alloc]init];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
438 NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"x"];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
439 [outline addTableColumn:column];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
440 outline.outlineTableColumn = column;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
441 outline.headerView = NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
442 outline.rowSizeStyle = NSTableViewRowSizeStyleDefault;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
443 outline.usesAutomaticRowHeights = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
444 outline.indentationPerLevel = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
445
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
446 outline.style = NSTableViewStyleSourceList;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
447
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
448 // Make background transparent so vibrancy shows through
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
449 scrollview.drawsBackground = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
450
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
451 scrollview.documentView = outline;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
452
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
453 UiLayout layout = UI_ARGS2LAYOUT(args);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
454 ui_container_add(obj, scrollview, &layout);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
455
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
456 // datasource and delegate
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
457 UiSourceList *data = [[UiSourceList alloc] init:obj outline:outline];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
458 data.sublists = copy_sublists(obj->ctx->allocator, args);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
459 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
460 if(var) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
461 UiList *list = var->value;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
462 list->obj = (__bridge void*)data;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
463 list->update = ui_sourcelist_update;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
464 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
465 data.dynamic_sublists = var;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
466 data.getvalue = args->getvalue;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
467 data.getvaluedata = args->getvaluedata;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
468 data.onactivate = args->onactivate;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
469 data.onactivatedata = args->onactivatedata;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
470 data.onbuttonclick = args->onbuttonclick;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
471 data.onactivatedata = args->onbuttonclickdata;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
472 [data update:-1];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
473
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
474 outline.dataSource = data;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
475 outline.delegate = data;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
476
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
477 [data update:-1];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
478
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
479 objc_setAssociatedObject(outline, "ui_datasource", data, OBJC_ASSOCIATION_RETAIN);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
480
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
481 return (__bridge void*)scrollview;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
482 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
483
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
484 void ui_sourcelist_update(UiList *list, int row) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
485 UiSourceList *sourcelist = (__bridge UiSourceList*)list->obj;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
486 [sourcelist update:row];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
487 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
488
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
489
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
490 /*
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
491 * Data Source and Delegate for the sourcelist NSOutlineView
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
492 */
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
493 @implementation UiSourceList
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
494
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
495 - (id)init:(UiObject*)obj outline:(NSOutlineView*)view {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
496 _obj = obj;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
497 _outlineView = view;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
498 _sections = [[NSMutableArray alloc] initWithCapacity:16];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
499 return self;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
500 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
501
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
502 - (void)dealloc {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
503 cxListFree(_sublists);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
504 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
505
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
506 - (void)update:(int)row {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
507 // TODO: check row
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
508
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
509 [_sections removeAllObjects];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
510
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
511 CxIterator i = cxListIterator(_sublists);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
512 int index = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
513 int rownum = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
514 cx_foreach(UiSubList *, sl, i) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
515 UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
516 section.sublistIndex = index;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
517 section.rownum = rownum;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
518 section.sublistStartRow = rownum;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
519 [section update:-1];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
520 [_sections addObject:section];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
521 index++;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
522 rownum += 1 + section.items.count;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
523 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
524
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
525 [_outlineView reloadData];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
526 [_outlineView expandItem:nil expandChildren:YES];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
527 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
528
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
529 // NSOutlineViewDataSource implementation
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
530
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
531 - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
532 if(item == nil) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
533 return _sections.count;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
534 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
535 UiSourceListItem *i = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
536 return i.items.count;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
537 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
538 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
539
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
540 - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
541 UiSourceListItem *i = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
542 return [i isSection] ? YES : NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
543 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
544
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
545 - (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
546 UiSourceListItem *i = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
547 if(i) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
548 return [i.items objectAtIndex:index];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
549 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
550 return [_sections objectAtIndex:index];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
551 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
552
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
553 - (void)outlineView:(NSOutlineView *)outlineView
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
554 setObjectValue:(id)object
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
555 forTableColumn:(NSTableColumn *)tableColumn
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
556 byItem:(id)item
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
557 {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
558
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
559 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
560
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
561 // NSOutlineViewDelegate implementation
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
562
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
563 - (NSView *)outlineView:(NSOutlineView *)outlineView
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
564 viewForTableColumn:(NSTableColumn *)tableColumn
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
565 item:(id)item
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
566 {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
567 UiSourceListItem *i = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
568
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
569 NSTableCellView *cell = [[NSTableCellView alloc] init];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
570 cell.identifier = @"cell";
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
571 // Icon
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
572 NSImageView *iconView = [[NSImageView alloc] initWithFrame:NSZeroRect];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
573 iconView.translatesAutoresizingMaskIntoConstraints = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
574 [cell addSubview:iconView];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
575 cell.imageView = iconView;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
576
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
577 // Label
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
578 //NSTextField *textField = [NSTextField labelWithString:@""];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
579 NSTextField *textField = [[NSTextField alloc] initWithFrame:NSZeroRect];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
580 textField.translatesAutoresizingMaskIntoConstraints = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
581 textField.bezeled = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
582 textField.editable = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
583 textField.drawsBackground = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
584 textField.selectable = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
585 textField.lineBreakMode = NSLineBreakByTruncatingTail;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
586
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
587
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
588 [cell addSubview:textField];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
589 cell.textField = textField;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
590
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
591 if([i isSection]) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
592 NSFont *font = [NSFont boldSystemFontOfSize:[NSFont systemFontSize]*0.85];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
593 //NSFont *font = [NSFont preferredFontForTextStyle:NSFontTextStyleCaption1 options:@{}];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
594 NSDictionary *attrs = @{
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
595 NSFontAttributeName: font,
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
596 NSForegroundColorAttributeName: [NSColor tertiaryLabelColor]
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
597 };
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
598 textField.attributedStringValue = [[NSAttributedString alloc] initWithString:i.label attributes:attrs];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
599
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
600 // Layout constraints
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
601 [NSLayoutConstraint activateConstraints:@[
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
602 [iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
603 [iconView.bottomAnchor constraintEqualToAnchor:cell.bottomAnchor constant:-1],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
604
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
605 [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
606 [textField.bottomAnchor constraintEqualToAnchor:cell.bottomAnchor constant:-1],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
607 [textField.trailingAnchor constraintEqualToAnchor:cell.trailingAnchor constant:0],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
608 ]];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
609 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
610 textField.stringValue = i.label;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
611
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
612 // Layout constraints
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
613 [NSLayoutConstraint activateConstraints:@[
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
614 [iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
615 [iconView.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
616
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
617 [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
618 [textField.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
619 [textField.trailingAnchor constraintEqualToAnchor:cell.trailingAnchor constant:0],
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
620 ]];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
621 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
622
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
623 return cell;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
624 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
625
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
626 - (NSTableRowView *) outlineView:(NSOutlineView *) outlineView
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
627 rowViewForItem:(id)item {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
628 UiSourceListItem *it = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
629 UiSourceListRow *row = [[UiSourceListRow alloc]init];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
630 if([it isSection] && it.sublist->header) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
631 row.showDisclosureButton = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
632 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
633 return row;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
634 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
635
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
636 - (BOOL) outlineView:(NSOutlineView *) outlineView
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
637 shouldSelectItem:(id)item
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
638 {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
639 UiSourceListItem *i = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
640 return [i isSection] ? NO : YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
641 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
642
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
643 - (CGFloat) outlineView:(NSOutlineView *) outlineView
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
644 heightOfRowByItem:(id) item
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
645 {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
646 UiSourceListItem *i = item;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
647 CGFloat rowHeight = outlineView.rowHeight;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
648 if([i isSection]) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
649 if(i.sublist->header) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
650 rowHeight += i.sublistIndex == 0 ? -12 : 4;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
651 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
652 rowHeight = i.sublistIndex == 0 ? 0.1 : 12;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
653 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
654 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
655 return rowHeight;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
656 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
657
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
658 - (void) outlineViewSelectionDidChange:(NSNotification *) notification {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
659 UiEvent event;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
660 event.obj = _obj;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
661 event.window = event.obj->window;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
662 event.document = event.obj->ctx->document;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
663 event.eventdata = NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
664 event.eventdatatype = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
665 event.intval = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
666 event.set = ui_get_setop();
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
667
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
668 UiSubListEventData sublistEvent;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
669
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
670 NSInteger selectedRow = _outlineView.selectedRow;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
671 if(selectedRow >= 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
672 UiSourceListItem *item = [_outlineView itemAtRow:selectedRow];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
673 UiSourceListItem *parent = item.parent;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
674 UiSubList *sublist = parent != nil ? parent.sublist : item.sublist;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
675 UiVar *var = parent != nil ? parent.var : item.var;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
676 if(item && var) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
677 sublistEvent.list = var->value;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
678 sublistEvent.sublist_index = parent ? parent.sublistIndex : item.sublistIndex;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
679 sublistEvent.row_index = (int)selectedRow - item.sublistStartRow - 1;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
680 sublistEvent.sublist_userdata = sublist ? sublist->userdata : NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
681 sublistEvent.event_data = item.eventdata;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
682 sublistEvent.row_data = sublistEvent.list->get(sublistEvent.list, sublistEvent.row_index);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
683
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
684 event.eventdata = &sublistEvent;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
685 event.eventdatatype = UI_EVENT_DATA_SUBLIST;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
686 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
687 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
688
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
689 if(_onactivate) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
690 _onactivate(&event, _onactivatedata);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
691 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
692 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
693
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
694 @end
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
695
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
696 /*
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
697 * Outline datasource item
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
698 * Is used for sections (sublists) and individual items
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
699 */
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
700 @implementation UiSourceListItem
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
701
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
702 - (id)init:(UiSourceList*)sourcelist sublist:(UiSubList*)sublist {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
703 _sourcelist = sourcelist;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
704 _sublist = sublist;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
705 _items = [[NSMutableArray alloc]initWithCapacity:16];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
706 if(sublist->header) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
707 _label = [[NSString alloc]initWithUTF8String:sublist->header];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
708 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
709 _label = @"";
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
710 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
711 UiVar *var = uic_widget_var(sourcelist.obj->ctx,
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
712 sourcelist.obj->ctx,
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
713 sublist->value,
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
714 sublist->varname,
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
715 UI_VAR_LIST);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
716 _var = var;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
717 return self;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
718 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
719
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
720 - (id)init:(UiSubListItem*)item parent:(UiSourceListItem*)parent {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
721 _parent = parent;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
722 if(item->label) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
723 _label = [[NSString alloc]initWithUTF8String:item->label];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
724 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
725 _label = @"";
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
726 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
727 _eventdata = item->eventdata;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
728 return self;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
729 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
730
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
731 - (BOOL)isSection {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
732 return _sublist != NULL;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
733 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
734
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
735 - (void)update:(int)row {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
736 // TODO: check row
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
737
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
738 [_items removeAllObjects];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
739 if(_var == NULL) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
740 return;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
741 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
742 UiList *list = _var->value;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
743 void *elm = list->first(list);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
744 int index = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
745 while(elm) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
746 UiSubListItem item = { NULL, NULL, NULL, NULL, NULL, NULL };
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
747 if(_sourcelist.getvalue) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
748 _sourcelist.getvalue(list, _sublist->userdata, elm, index, &item, _sourcelist.getvaluedata);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
749 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
750 item.label = strdup(elm);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
751 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
752
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
753 UiSourceListItem *it = [[UiSourceListItem alloc] init:&item parent:self];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
754 it.sublistIndex = index;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
755 it.rownum = self.rownum + index;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
756 it.sublistStartRow = _parent ? _parent.sublistStartRow : _sublistStartRow;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
757 [_items addObject:it];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
758
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
759 elm = list->next(list);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
760 index++;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
761 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
762 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
763
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
764 @end
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
765
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
766 /*
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
767 * Custom NSTableRowView implementation
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
768 * Moves the disclosure button to the right side
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
769 * Handles mouse hover events (for hiding the disclosure button)
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
770 */
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
771 @implementation UiSourceListRow
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
772
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
773 - (void)layout {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
774 [super layout];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
775
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
776 for (NSView *subview in self.subviews) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
777 if ([subview.identifier isEqualToString:NSOutlineViewDisclosureButtonKey] ||
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
778 [subview.identifier isEqualToString:NSOutlineViewShowHideButtonKey])
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
779 {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
780 NSRect frame = subview.frame;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
781 frame.origin.x = self.bounds.size.width - frame.size.width - 16.0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
782 subview.frame = frame;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
783
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
784 if(!_hover) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
785 subview.hidden = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
786 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
787
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
788 if(subview != _disclosureButton) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
789 // init disclosure button
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
790 _disclosureButton = (NSButton*)subview;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
791 if ([subview isKindOfClass:[NSButton class]]) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
792 NSButton *button = (NSButton*)subview;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
793 button.contentTintColor = [NSColor tertiaryLabelColor];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
794 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
795 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
796
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
797
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
798 } else if ([subview.identifier isEqualToString:@"cell"]) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
799 NSRect frame = subview.frame;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
800 frame.origin.x = 16;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
801 subview.frame = frame;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
802 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
803 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
804 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
805
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
806 - (void)updateTrackingAreas {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
807 [super updateTrackingAreas];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
808 if(_trackingArea != nil) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
809 [self removeTrackingArea:_trackingArea];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
810 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
811 _trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
812 options:NSTrackingMouseEnteredAndExited |
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
813 NSTrackingActiveInActiveApp |
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
814 NSTrackingInVisibleRect
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
815 owner:self
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
816 userInfo:nil];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
817 [self addTrackingArea:_trackingArea];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
818 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
819
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
820 - (void)mouseEntered:(NSEvent *)event {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
821 _hover = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
822 _disclosureButton.hidden = _showDisclosureButton ? NO : YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
823 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
824
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
825 - (void)mouseExited:(NSEvent *)event {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
826 _hover = NO;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
827 _disclosureButton.hidden = YES;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
828 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
829
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 109
diff changeset
830 @end

mercurial