ui/common/types.c

Mon, 29 Sep 2025 21:14:46 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 29 Sep 2025 21:14:46 +0200
changeset 779
b84cbe57e0bd
parent 758
d5ff5520affe
child 796
4d04cb879daa
permissions
-rw-r--r--

change UiCellValue from struct to union and pass it as pointer to the onsave function, for better compatibility with other languages

14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
4 * Copyright 2017 Olaf Wintermann. All rights reserved.
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
e2fd132ab781 added menu item lists (Cocoa implementation)
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
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
31 #include <string.h>
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
32 #include <stdarg.h>
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
34 #include <cx/list.h>
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
35 #include <cx/array_list.h>
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
36 #include "../ui/tree.h"
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #include "types.h"
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
38 #include "context.h"
611
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
39 #include "../ui/image.h"
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
41 static ui_list_init_func default_list_init;
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
42 static void *default_list_init_userdata;
378
d41b1ffc5f77 implement some missing WinUI functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 361
diff changeset
43
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 UiObserver* ui_observer_new(ui_callback f, void *data) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 UiObserver *observer = malloc(sizeof(UiObserver));
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 observer->callback = f;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 observer->data = data;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 observer->next = NULL;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 return observer;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 UiObserver* ui_obsvlist_add(UiObserver *list, UiObserver *observer) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 if(!list) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 return observer;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 } else {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 UiObserver *l = list;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 while(l->next) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 l = l->next;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 l->next = observer;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 return list;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 UiObserver* ui_add_observer(UiObserver *list, ui_callback f, void *data) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 UiObserver *observer = ui_observer_new(f, data);
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 return ui_obsvlist_add(list, observer);
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 void ui_notify(UiObserver *observer, void *data) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 ui_notify_except(observer, NULL, data);
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 void ui_notify_except(UiObserver *observer, UiObserver *exc, void *data) {
167
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
75 UiEvent evt;
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
76 evt.obj = NULL;
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
77 evt.window = NULL;
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
78 evt.document = NULL;
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
79 evt.eventdata = data;
659
d6baaa93f7be add UiEvent eventdatatype
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 631
diff changeset
80 evt.eventdatatype = UI_EVENT_DATA_POINTER;
167
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
81 evt.intval = 0;
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
82
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 while(observer) {
167
161511838ea6 add new toolbar toggle button
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 157
diff changeset
84 if(observer != exc) {
16
a499c8a72c15 added menu item lists (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
85 observer->callback(&evt, observer->data);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 observer = observer->next;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
142
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
91 void ui_notify_evt(UiObserver *observer, UiEvent *event) {
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
92 while(observer) {
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
93 observer->callback(event, observer->data);
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
94 observer = observer->next;
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
95 }
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
96 }
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
97
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 /* --------------------------- UiList --------------------------- */
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
100 void uic_ucx_list_init(UiContext *ctx, UiList *list, void *unused) {
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
101 list->data = cxArrayListCreate(ctx->mp->allocator, NULL, CX_STORE_POINTERS, 32);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 list->first = ui_list_first;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 list->next = ui_list_next;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 list->get = ui_list_get;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 list->count = ui_list_count;
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
106 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
107
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
108 UiList* ui_list_new(UiContext *ctx, const char *name) {
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
109 return ui_list_new2(ctx, name, default_list_init ? default_list_init : uic_ucx_list_init, default_list_init_userdata);
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
110 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
111
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
112 UiList* ui_list_new2(UiContext *ctx, const char *name, ui_list_init_func listinit, void *userdata) {
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
113 UiList *list = cxMalloc(ctx->mp->allocator, sizeof(UiList));
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
114 memset(list, 0, sizeof(UiList));
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
115 listinit(ctx, list, userdata);
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
116
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
117 if(name) {
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
118 uic_reg_var(ctx, name, UI_VAR_LIST, list);
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
119 }
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
120
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 return list;
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 void ui_list_free(UiList *list) {
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 395
diff changeset
125 cxListFree(list->data);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 free(list);
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 void* ui_list_first(UiList *list) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
130 list->iter = (void*)(intptr_t)0;
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
131 return cxListAt(list->data, 0);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 void* ui_list_next(UiList *list) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
135 intptr_t iter = (intptr_t)list->iter;
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
136 iter++;
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
137 void *elm = cxListAt(list->data, iter);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 if(elm) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
139 list->iter = (void*)iter;
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 }
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
141 return elm;
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 void* ui_list_get(UiList *list, int i) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
145 return cxListAt(list->data, i);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 int ui_list_count(UiList *list) {
325
99a93a9250c4 fix build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 251
diff changeset
149 return cxListSize(list->data);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 void ui_list_append(UiList *list, void *data) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
153 cxListAdd(list->data, data);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 void ui_list_prepend(UiList *list, void *data) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
157 cxListInsert(list->data, 0, data);
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159
251
22dc0b739dd8 add list remove function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 248
diff changeset
160 void ui_list_remove(UiList *list, int i) {
22dc0b739dd8 add list remove function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 248
diff changeset
161 cxListRemove(list->data, i);
22dc0b739dd8 add list remove function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 248
diff changeset
162 }
22dc0b739dd8 add list remove function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 248
diff changeset
163
152
62921b370c60 fixes use after free when a GtkTreeView was destroyed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 146
diff changeset
164 void ui_list_clear(UiList *list) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
165 cxListClear(list->data);
152
62921b370c60 fixes use after free when a GtkTreeView was destroyed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 146
diff changeset
166 }
62921b370c60 fixes use after free when a GtkTreeView was destroyed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 146
diff changeset
167
692
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
168 void ui_list_update(UiList *list) {
361
16c8b9ea3aa3 allow ui_list_update called with unbound lists
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 360
diff changeset
169 if(list->update) {
503
fefdfe7b2fc5 implement single row list updates (GTK)
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 498
diff changeset
170 list->update(list, -1);
361
16c8b9ea3aa3 allow ui_list_update called with unbound lists
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 360
diff changeset
171 }
342
99f83fbf48e9 implement context destroy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 337
diff changeset
172 }
99f83fbf48e9 implement context destroy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 337
diff changeset
173
692
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
174 void ui_list_update_row(UiList *list, int row) {
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
175 if(list->update) {
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
176 list->update(list, row);
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
177 }
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
178 }
40e1c2045ef3 add ui_list_update_row
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
179
693
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
180 UiListSelection ui_list_get_selection(UiList *list) {
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
181 if(list->getselection) {
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
182 return list->getselection(list);
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
183 } else {
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
184 return (UiListSelection){0, NULL};
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
185 }
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
186 }
3e1cd004da0a add UiListSelection wrapper functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
187
14
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 void ui_list_addobsv(UiList *list, ui_callback f, void *data) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 list->observers = ui_add_observer(list->observers, f, data);
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 }
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 void ui_list_notify(UiList *list) {
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 ui_notify(list->observers, list);
e2fd132ab781 added menu item lists (Cocoa implementation)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194 }
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
195
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
196
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
197 typedef struct {
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
198 int type;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
199 char *name;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
200 } UiColumn;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
201
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
202 UiModel* ui_model(UiContext *ctx, ...) {
142
46448d38885c new checkbox and radionbutton features and more refactoring
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 141
diff changeset
203 UiModel *info = ui_calloc(ctx, 1, sizeof(UiModel));
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
204
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
205 va_list ap;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
206 va_start(ap, ctx);
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
207
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
208 CxList *cols = cxArrayListCreate(cxDefaultAllocator, NULL, sizeof(UiColumn), 32);
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
209 int type;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
210 while((type = va_arg(ap, int)) != -1) {
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
211 char *name = va_arg(ap, char*);
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
212
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
213 UiColumn column;
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
214 column.type = type;
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
215 column.name = name;
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
216
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
217 cxListAdd(cols, &column);
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
218 }
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
219
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
220 va_end(ap);
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
221
325
99a93a9250c4 fix build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 251
diff changeset
222 size_t len = cxListSize(cols);
728
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
223 info->alloc = len;
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
224 info->columns = len;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
225 info->types = ui_calloc(ctx, len, sizeof(UiModelType));
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
226 info->titles = ui_calloc(ctx, len, sizeof(char*));
380
aad99285865c make table column sizes adjustable (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 378
diff changeset
227 info->columnsize = ui_calloc(ctx, len, sizeof(int));
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
228
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
229 int i = 0;
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
230 CxIterator iter = cxListIterator(cols);
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 167
diff changeset
231 cx_foreach(UiColumn*, c, iter) {
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
232 info->types[i] = c->type;
728
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
233 info->titles[i] = ui_strdup(ctx, c->name);
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
234 i++;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
235 }
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 395
diff changeset
236 cxListFree(cols);
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
237
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
238 return info;
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
239 }
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
240
728
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
241 #define UI_MODEL_DEFAULT_ALLOC_SIZE 16
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
242
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
243 UiModel* ui_model_new(UiContext *ctx) {
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
244 UiModel *info = ui_calloc(ctx, 1, sizeof(UiModel));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
245 info->alloc = UI_MODEL_DEFAULT_ALLOC_SIZE;
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
246 info->types = ui_calloc(ctx, UI_MODEL_DEFAULT_ALLOC_SIZE, sizeof(UiModelType));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
247 info->titles = ui_calloc(ctx, UI_MODEL_DEFAULT_ALLOC_SIZE, sizeof(char*));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
248 info->columnsize = ui_calloc(ctx, UI_MODEL_DEFAULT_ALLOC_SIZE, sizeof(int));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
249 return info;
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
250 }
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
251
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
252 void ui_model_add_column(UiContext *ctx, UiModel *model, UiModelType type, const char *title, int width) {
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
253 if(model->columns >= model->alloc) {
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
254 model->alloc += UI_MODEL_DEFAULT_ALLOC_SIZE;
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
255 model->types = ui_realloc(ctx, model->types, model->alloc * sizeof(UiModelType));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
256 model->titles = ui_realloc(ctx, model->titles, model->alloc * sizeof(char*));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
257 model->columnsize = ui_realloc(ctx, model->columnsize, model->alloc * sizeof(int));
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
258 }
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
259 model->types[model->columns] = type;
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
260 model->titles[model->columns] = ui_strdup(ctx, title);
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
261 model->columnsize[model->columns] = width;
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
262 model->columns++;
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
263 }
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
264
215
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
265 UiModel* ui_model_copy(UiContext *ctx, UiModel* model) {
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
266 const CxAllocator* a = ctx ? ctx->allocator : cxDefaultAllocator;
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
267
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
268 UiModel* newmodel = cxMalloc(a, sizeof(UiModel));
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
269 *newmodel = *model;
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
270
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
271 newmodel->types = cxCalloc(a, model->columns, sizeof(UiModelType));
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
272 memcpy(newmodel->types, model->types, model->columns);
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
273
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
274 newmodel->titles = cxCalloc(a, model->columns, sizeof(char*));
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
275 for (int i = 0; i < model->columns; i++) {
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
276 newmodel->titles[i] = model->titles[i] ? cx_strdup_a(a, cx_str(model->titles[i])).ptr : NULL;
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
277 }
444
0a52c26bba1a fix columnsize field not copied in ui_model_copy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 440
diff changeset
278 newmodel->columnsize = cxCalloc(a, model->columns, sizeof(int));
0a52c26bba1a fix columnsize field not copied in ui_model_copy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 440
diff changeset
279 memcpy(newmodel->columnsize, model->columnsize, model->columns*sizeof(int));
215
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
280
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
281 return newmodel;
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
282 }
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
283
146
dd0ae1c62a72 new icon/image api and pixbuf support in treeview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
284 void ui_model_free(UiContext *ctx, UiModel *mi) {
215
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
285 const CxAllocator* a = ctx ? ctx->allocator : cxDefaultAllocator;
728
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
286 for(int i=0;i<mi->columns;i++) {
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
287 ui_free(ctx, mi->titles[i]);
011d236c4a05 add alternative UiModel creation functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 693
diff changeset
288 }
215
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
289 cxFree(a, mi->types);
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
290 cxFree(a, mi->titles);
444
0a52c26bba1a fix columnsize field not copied in ui_model_copy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 440
diff changeset
291 cxFree(a, mi->columnsize);
215
1bd5534c395d add support for icons in the table widget (WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
292 cxFree(a, mi);
39
4e66271541e8 added table view (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 16
diff changeset
293 }
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
294
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
295 // types
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
296
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
297 // public functions
622
9090faa4094b make var name parameters const
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
298 UiInteger* ui_int_new(UiContext *ctx, const char *name) {
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
299 UiInteger *i = ui_malloc(ctx, sizeof(UiInteger));
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
300 memset(i, 0, sizeof(UiInteger));
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
301 if(name) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
302 uic_reg_var(ctx, name, UI_VAR_INTEGER, i);
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
303 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
304 return i;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
305 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
306
622
9090faa4094b make var name parameters const
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
307 UiDouble* ui_double_new(UiContext *ctx, const char *name) {
145
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
308 UiDouble *d = ui_malloc(ctx, sizeof(UiDouble));
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
309 memset(d, 0, sizeof(UiDouble));
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
310 if(name) {
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
311 uic_reg_var(ctx, name, UI_VAR_DOUBLE, d);
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
312 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
313 return d;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
314 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
315
622
9090faa4094b make var name parameters const
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
316 UiString* ui_string_new(UiContext *ctx, const char *name) {
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
317 UiString *s = ui_malloc(ctx, sizeof(UiString));
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
318 memset(s, 0, sizeof(UiString));
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
319 if(name) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
320 uic_reg_var(ctx, name, UI_VAR_STRING, s);
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
321 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
322 return s;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
323 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
324
622
9090faa4094b make var name parameters const
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
325 UiText* ui_text_new(UiContext *ctx, const char *name) {
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
326 UiText *t = ui_malloc(ctx, sizeof(UiText));
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
327 memset(t, 0, sizeof(UiText));
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
328 if(name) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
329 uic_reg_var(ctx, name, UI_VAR_TEXT, t);
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
330 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
331 return t;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
332 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
333
622
9090faa4094b make var name parameters const
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
334 UiRange* ui_range_new(UiContext *ctx, const char *name) {
145
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
335 UiRange *r = ui_malloc(ctx, sizeof(UiRange));
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
336 memset(r, 0, sizeof(UiRange));
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
337 if(name) {
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
338 uic_reg_var(ctx, name, UI_VAR_RANGE, r);
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
339 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
340 return r;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
341 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
342
622
9090faa4094b make var name parameters const
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
343 UIEXPORT UiGeneric* ui_generic_new(UiContext *ctx, const char *name) {
337
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
344 UiGeneric *g = ui_malloc(ctx, sizeof(UiGeneric));
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
345 memset(g, 0, sizeof(UiGeneric));
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
346 if(name) {
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
347 uic_reg_var(ctx, name, UI_VAR_GENERIC, g);
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
348 }
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
349 return g;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
350 }
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
351
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
352
231
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
353 void ui_int_set(UiInteger* i, int64_t value) {
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
354 if (i) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
355 if (i->set) {
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
356 ui_setop_enable(TRUE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
357 i->set(i, value);
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
358 ui_setop_enable(FALSE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
359 } else {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
360 i->value = value;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
361 }
231
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
362 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
363 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
364
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
365 int64_t ui_int_get(UiInteger* i) {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
366 if (i) {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
367 return i->get ? i->get(i) : i->value;
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
368 } else {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
369 return 0;
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
370 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
371 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
372
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
373 void ui_double_set(UiDouble* d, double value) {
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
374 if (d) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
375 if (d->set) {
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
376 ui_setop_enable(TRUE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
377 d->set(d, value);
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
378 ui_setop_enable(FALSE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
379 } else {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
380 d->value = value;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
381 }
231
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
382 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
383 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
384
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
385 double ui_double_get(UiDouble* d) {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
386 if (d) {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
387 return d->get ? d->get(d) : d->value;
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
388 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
389 else {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
390 return 0;
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
391 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
392 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
393
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
394 void ui_string_set(UiString* s, const char* value) {
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
395 if (s) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
396 if (s->set) {
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
397 ui_setop_enable(TRUE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
398 s->set(s, value);
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
399 ui_setop_enable(FALSE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
400 } else {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
401 if(s->value.free) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
402 s->value.free(s->value.ptr);
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
403 }
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
404 if (value) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
405 s->value.ptr = strdup(value);
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
406 s->value.free = free;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
407 } else {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
408 s->value.ptr = NULL;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
409 s->value.free = NULL;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
410 }
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
411 }
231
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
412 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
413 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
414
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
415 char* ui_string_get(UiString* s) {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
416 if (s) {
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
417 return s->get ? s->get(s) : s->value.ptr;
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
418 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
419 else {
757
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
420 return NULL;
231
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
421 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
422 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
423
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
424 void ui_text_set(UiText* s, const char* value) {
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
425 if (s) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
426 if (s->set) {
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
427 ui_setop_enable(TRUE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
428 s->set(s, value);
497
bf53d553e3dc add UiEvent set for indicating, if the event was triggered by ui_set
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 487
diff changeset
429 ui_setop_enable(FALSE);
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
430 } else {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
431 if(s->value.free) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
432 s->value.free(s->value.ptr);
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
433 }
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
434 if (value) {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
435 s->value.ptr = strdup(value);
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
436 s->value.free = free;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
437 } else {
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
438 s->value.ptr = NULL;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
439 s->value.free = NULL;
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
440 }
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 444
diff changeset
441 }
231
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
442 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
443 }
e160bb392148 add getter/setter for ui number/string types
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 215
diff changeset
444
612
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
445 char* ui_text_get(UiText* s) {
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
446 if (s) {
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
447 return s->get ? s->get(s) : s->value.ptr;
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
448 }
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
449 else {
757
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
450 return NULL;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
451 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
452 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
453
758
d5ff5520affe rename ui_range_set_value/ui_range_get_value
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 757
diff changeset
454 void ui_range_set(UiRange *r, double value) {
757
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
455 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
456 if (r->set) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
457 r->set(r, value);
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
458 } else {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
459 r->value = value;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
460 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
461 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
462 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
463
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
464 void ui_range_set_range(UiRange *r, double min, double max) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
465 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
466 if (r->setrange) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
467 r->setrange(r, min, max);
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
468 } else {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
469 r->min = min;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
470 r->max = max;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
471 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
472 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
473 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
474
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
475 void ui_range_set_extent(UiRange *r, double extent) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
476 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
477 if (r->setextent) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
478 r->setextent(r, extent);
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
479 } else {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
480 r->extent = extent;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
481 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
482 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
483 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
484
758
d5ff5520affe rename ui_range_set_value/ui_range_get_value
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 757
diff changeset
485 double ui_range_get(UiRange *r) {
757
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
486 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
487 return r->get ? r->get(r) : r->value;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
488 } else {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
489 return 0;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
490 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
491 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
492
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
493 double ui_range_get_min(UiRange *r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
494 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
495 return r->min;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
496 } else {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
497 return 0;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
498 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
499 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
500
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
501 double ui_range_get_max(UiRange *r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
502 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
503 return r->max;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
504 } else {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
505 return 0;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
506 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
507 }
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
508
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
509 double ui_range_get_extent(UiRange *r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
510 if (r) {
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
511 return r->extent;
2b977b332582 add UiRange getter/setter functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 737
diff changeset
512 } else {
612
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
513 return 0;
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
514 }
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
515 }
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
516
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
517 void ui_generic_set_image(UiGeneric *g, void *img) {
611
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
518 if(g->set) {
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
519 g->set(g, img, UI_IMAGE_OBJECT_TYPE);
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
520 } else {
612
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
521 if(g->value) {
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
522 ui_image_unref(g->value);
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
523 }
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
524 ui_image_ref(img);
611
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
525 g->value = img;
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
526 g->type = UI_IMAGE_OBJECT_TYPE;
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
527 }
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
528 }
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
529
612
8570430391b3 fix reference counting in UiGeneric set/get functions
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 611
diff changeset
530 void* ui_generic_get_image(UiGeneric *g) {
611
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
531 if(g->type) {
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
532 if(!strcmp(g->type, UI_IMAGE_OBJECT_TYPE)) {
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
533 return g->value;
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
534 } else {
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
535 return NULL;
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
536 }
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
537 }
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
538 return g->value;
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
539 }
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
540
a5b393e766c4 add ui_image_set/ui_image_get for setting UiGeneric image values
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 553
diff changeset
541
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
542 // private functions
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
543 void uic_int_copy(UiInteger *from, UiInteger *to) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
544 to->get = from->get;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
545 to->set = from->set;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
546 to->obj = from->obj;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
547 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
548
145
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
549 void uic_double_copy(UiDouble *from, UiDouble *to) {
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
550 to->get = from->get;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
551 to->set = from->set;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
552 to->obj = from->obj;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
553 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
554
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
555 void uic_string_copy(UiString *from, UiString *to) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
556 to->get = from->get;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
557 to->set = from->set;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
558 to->obj = from->obj;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
559 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
560
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
561 void uic_text_copy(UiText *from, UiText *to) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
562 to->get = from->get;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
563 to->set = from->set;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
564 to->getsubstr = from->getsubstr;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
565 to->insert = from->insert;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
566 to->setposition = from->setposition;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
567 to->position = from->position;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
568 to->selection = from->selection;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
569 to->length = from->length;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
570 to->remove = from->remove;
487
077c5029aaee fix text binding
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 486
diff changeset
571 to->restore = from->restore;
077c5029aaee fix text binding
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 486
diff changeset
572 to->save = from->save;
077c5029aaee fix text binding
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 486
diff changeset
573 to->destroy = from->destroy;
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
574
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
575 to->obj = from->obj;
486
a5f3abf8b9d1 refactor textarea to store a text buffer object in UiText values (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 471
diff changeset
576 // do not copy the undo manager, data1, data2
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
577 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
578
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
579 void uic_range_copy(UiRange *from, UiRange *to) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
580 to->get = from->get;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
581 to->set = from->set;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
582 to->setrange = from->setrange;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
583 to->setextent = from->setextent;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
584 to->obj = from->obj;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
585 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
586
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
587 void uic_list_copy(UiList *from, UiList *to) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
588 to->update = from->update;
553
90e38db0c755 rework uic_copy_binding and refactore menu itemlists to bind directly to lists without using observers
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 503
diff changeset
589 to->getselection = from->getselection;
90e38db0c755 rework uic_copy_binding and refactore menu itemlists to bind directly to lists without using observers
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 503
diff changeset
590 to->setselection = from->setselection;
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
591 to->obj = from->obj;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
592 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
593
337
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
594 void uic_generic_copy(UiGeneric *from, UiGeneric *to) {
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
595 to->get = from->get;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
596 to->get_type = from->get_type;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
597 to->set = from->set;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
598 to->obj = from->obj;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
599 }
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
600
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
601 void uic_int_save(UiInteger *i) {
143
d499b29d7cb6 adds observer support for textarea and textfield (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 142
diff changeset
602 if(!i->obj) return;
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
603 i->value = i->get(i);
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
604 }
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
605
145
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
606 void uic_double_save(UiDouble *d) {
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
607 if(!d->obj) return;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
608 d->value = d->get(d);
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
609 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
610
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
611 void uic_string_save(UiString *s) {
143
d499b29d7cb6 adds observer support for textarea and textfield (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 142
diff changeset
612 if(!s->obj) return;
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
613 s->get(s);
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
614 }
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
615
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
616 void uic_text_save(UiText *t) {
143
d499b29d7cb6 adds observer support for textarea and textfield (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 142
diff changeset
617 if(!t->obj) return;
486
a5f3abf8b9d1 refactor textarea to store a text buffer object in UiText values (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 471
diff changeset
618 t->save(t);
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
619 t->position(t);
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
620 }
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
621
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
622 void uic_range_save(UiRange *r) {
143
d499b29d7cb6 adds observer support for textarea and textfield (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 142
diff changeset
623 if(!r->obj) return;
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
624 r->get(r);
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
625 }
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
626
337
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
627 void uic_generic_save(UiGeneric *g) {
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
628 if(!g->obj) return;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
629 g->get(g);
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
630 }
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
631
141
cc2170ea05ad improves doc detach and string value handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 140
diff changeset
632
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
633 void uic_int_unbind(UiInteger *i) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
634 i->get = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
635 i->set = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
636 i->obj = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
637 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
638
145
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
639 void uic_double_unbind(UiDouble *d) {
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
640 d->get = NULL;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
641 d->set = NULL;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
642 d->obj = NULL;
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
643 }
853685152c1d adds spinner widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 143
diff changeset
644
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
645 void uic_string_unbind(UiString *s) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
646 s->get = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
647 s->set = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
648 s->obj = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
649 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
650
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
651 void uic_text_unbind(UiText *t) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
652 t->set = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
653 t->get = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
654 t->getsubstr = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
655 t->insert = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
656 t->setposition = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
657 t->position = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
658 t->selection = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
659 t->length = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
660 t->remove = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
661 t->obj = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
662 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
663
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
664 void uic_range_unbind(UiRange *r) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
665 r->get = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
666 r->set = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
667 r->setextent = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
668 r->setrange = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
669 r->obj = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
670 }
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
671
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
672 void uic_list_unbind(UiList *l) {
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
673 l->update = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
674 l->obj = NULL;
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
675 }
241
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
676
337
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
677 void uic_generic_unbind(UiGeneric *g) {
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
678 g->get = NULL;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
679 g->get_type = NULL;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
680 g->set = NULL;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
681 g->obj = NULL;
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
682 }
2904fba2708b add UiGeneric var type
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 325
diff changeset
683
241
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
684
248
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
685 UIEXPORT UiListSelection ui_list_getselection(UiList *list) {
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
686 if (list->getselection) {
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
687 return list->getselection(list);
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
688 }
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
689 return (UiListSelection){ 0, NULL };
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
690 }
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
691
360
681b930abe84 implement combobox get/set selection (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 342
diff changeset
692 UIEXPORT void ui_list_setselection(UiList *list, int index) {
737
ac7f0869e8ae extend ui_list_setselection to allow to remove selections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 728
diff changeset
693 if (list->setselection) {
ac7f0869e8ae extend ui_list_setselection to allow to remove selections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 728
diff changeset
694 UiListSelection sel = { 0, NULL };
ac7f0869e8ae extend ui_list_setselection to allow to remove selections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 728
diff changeset
695 if(index >= 0) {
ac7f0869e8ae extend ui_list_setselection to allow to remove selections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 728
diff changeset
696 sel.count = 1;
ac7f0869e8ae extend ui_list_setselection to allow to remove selections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 728
diff changeset
697 sel.rows = &index;
ac7f0869e8ae extend ui_list_setselection to allow to remove selections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 728
diff changeset
698 }
360
681b930abe84 implement combobox get/set selection (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 342
diff changeset
699 list->setselection(list, sel);
681b930abe84 implement combobox get/set selection (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 342
diff changeset
700 }
681b930abe84 implement combobox get/set selection (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 342
diff changeset
701 }
681b930abe84 implement combobox get/set selection (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 342
diff changeset
702
248
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
703 UIEXPORT void ui_listselection_free(UiListSelection selection) {
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
704 if (selection.rows) {
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
705 free(selection.rows);
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
706 }
22257f5f4019 add getter for list selections (Common, WinUI3)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 246
diff changeset
707 }
241
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
708
246
b19f3098dd11 add missing UIEXPORT
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 243
diff changeset
709 UIEXPORT UiStr ui_str(char *cstr) {
241
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
710 return (UiStr) { cstr, NULL };
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
711 }
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
712
246
b19f3098dd11 add missing UIEXPORT
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 243
diff changeset
713 UIEXPORT UiStr ui_str_free(char *str, void (*freefunc)(void *v)) {
241
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
714 return (UiStr) { str, freefunc };
c51dd0e9ecb7 add support for table string values, that need to be freed
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 231
diff changeset
715 }
243
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
716
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
717
246
b19f3098dd11 add missing UIEXPORT
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 243
diff changeset
718 UIEXPORT UiFileList ui_filelist_copy(UiFileList list) {
243
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
719 char **newlist = calloc(sizeof(char*), list.nfiles);
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
720 for (int i = 0; i < list.nfiles; i++) {
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
721 newlist[i] = strdup(list.files[i]);
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
722 }
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
723 return (UiFileList) { newlist, list.nfiles };
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
724 }
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
725
246
b19f3098dd11 add missing UIEXPORT
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 243
diff changeset
726 UIEXPORT void ui_filelist_free(UiFileList list) {
243
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
727 for (int i = 0; i < list.nfiles; i++) {
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
728 free(list.files[i]);
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
729 }
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
730 free(list.files);
9f66c31a27ed implement table dnd drop
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 241
diff changeset
731 }
395
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
732
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
733
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
734 typedef struct UiObserverDestructor {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
735 UiList *list;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
736 UiObserver *observer;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
737 } UiObserverDestructor;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
738
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
739 static void observer_destructor(UiObserverDestructor *destr) {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
740 UiObserver *remove_obs = destr->observer;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
741 UiObserver *obs = destr->list->observers;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
742 UiObserver *prev = NULL;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
743 while(obs) {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
744 if(obs == remove_obs) {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
745 if(prev) {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
746 prev->next = obs->next;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
747 } else {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
748 destr->list->observers = obs->next;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
749 }
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
750 break;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
751 }
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
752 prev = obs;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
753 obs = obs->next;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
754 }
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
755 free(remove_obs);
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
756 }
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
757
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
758 void uic_list_register_observer_destructor(UiContext *ctx, UiList *list, UiObserver *observer) {
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
759 CxMempool *mp = ctx->mp;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
760 UiObserverDestructor *destr = cxMalloc(mp->allocator, sizeof(UiObserverDestructor));
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
761 destr->list = list;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
762 destr->observer = observer;
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
763 cxMempoolSetDestructor(destr, (cx_destructor_func)observer_destructor);
b8277deb75b8 remove global menu observer when destroying a window
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 380
diff changeset
764 }
498
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
765
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
766 static int ui_set_op = 0;
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
767
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
768 void ui_setop_enable(int set) {
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
769 ui_set_op = set;
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
770 }
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
771
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
772 int ui_get_setop(void) {
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
773 return ui_set_op;
3688266cab3c add missing setop functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
774 }
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
775
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
776 /* ---------------- List initializers and wrapper functions ---------------- */
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
777
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
778 void ui_global_list_initializer(ui_list_init_func func, void *userdata) {
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
779 default_list_init = func;
631
5d745e140ee7 add userdata parameter to list initializer
Olaf Winermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
780 default_list_init_userdata = userdata;
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
781 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
782
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
783 void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)) {
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
784 list->first = first;
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
785 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
786
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
787 void ui_list_class_set_next(UiList *list, void*(*next)(UiList *list)) {
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
788 list->next = next;
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
789 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
790
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
791 void ui_list_class_set_get(UiList *list, void*(*get)(UiList *list, int i)) {
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
792 list->get = get;
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
793 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
794
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
795 void ui_list_class_set_count(UiList *list, int(*count)(UiList *list)) {
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
796 list->count = count;
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
797 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
798
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
799 void ui_list_class_set_data(UiList *list, void *data) {
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
800 list->data = data;
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
801 }
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
802
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
803 void ui_list_class_set_iter(UiList *list, void *iter) {
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
804 list->iter = iter;
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 622
diff changeset
805 }

mercurial