ui/qt/button.cpp

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 703
4ee6a23bdcbf
child 802
cc73993a3ff9
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

66
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
560
9e302b8a6c37 add spinner entry (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 559
diff changeset
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
66
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
8d490d97aab8 added button and box container (Qt)
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
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "button.h"
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include "container.h"
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include "toolkit.h"
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
33 UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
520
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
34 UiContainerPrivate *ctn = ui_obj_container(obj);
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
35 UI_APPLY_LAYOUT(ctn->layout, args);
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
36
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
37 QString str = QString::fromUtf8(args->label);
520
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
38 QPushButton *button = new QPushButton(str);
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
39
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
40 if(args->onclick) {
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
41 UiEventWrapper *event = new UiEventWrapper(obj, args->onclick, args->onclickdata);
520
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
42 button->connect(button, SIGNAL(clicked()), event, SLOT(slot()));
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
43 button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
44 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
45
672
1b08ba076b65 remove fill parameter from Container add method (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
46 ctn->add(button);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
47
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
48 return button;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
49 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
50
703
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
51 void ui_button_set_label(UIWIDGET button, const char *label) {
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
52 QString str = QString::fromUtf8(label);
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
53 QAbstractButton *b = (QAbstractButton*)button;
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
54 b->setText(str);
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
55 }
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
56
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
57 void ui_button_set_icon(UIWIDGET button, const char *icon) {
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
58 // TODO
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
59 }
4ee6a23bdcbf implement ui_button_set_label (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 672
diff changeset
60
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
61 static void togglebutton_event(UiEvent *event, UiEventWrapper *wrapper) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
62 QPushButton *button = (QPushButton*)wrapper->customdata1;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
63 event->intval = button->isChecked();
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
64 if(wrapper->var) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
65 event->eventdata = wrapper->var->value;
659
d6baaa93f7be add UiEvent eventdatatype
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 597
diff changeset
66 event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
67 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
68 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
69
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
70 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
71 UiContainerPrivate *ctn = ui_obj_container(obj);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
72 UI_APPLY_LAYOUT(ctn->layout, args);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
73
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
74 QString str = QString::fromUtf8(args->label);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
75 QPushButton *button = new QPushButton(str);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
76 button->setCheckable(true);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
77
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
78 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
79
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
80 if(args->onchange) {
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
81 UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
82 event->var = var;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
83 event->customdata1 = button;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
84 event->prepare_event = togglebutton_event;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
85 button->connect(button, SIGNAL(clicked()), event, SLOT(slot()));
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
86 button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
87 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
88
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
89 if(var) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
90 UiInteger *i = (UiInteger*)var->value;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
91
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
92 if(i->value) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
93 button->setChecked(true);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
94 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
95
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
96 i->obj = button;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
97 i->get = ui_togglebutton_get;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
98 i->set = ui_togglebutton_set;
520
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
99 }
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
100
672
1b08ba076b65 remove fill parameter from Container add method (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
101 ctn->add(button);
520
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
102
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
103 return button;
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
104 }
ea1bba55de44 add button (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 516
diff changeset
105
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
106 int64_t ui_togglebutton_get(UiInteger *value) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
107 QPushButton *button = (QPushButton*)value->obj;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
108 value->value = button->isChecked();
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
109 return value->value;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
110 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
111
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
112 void ui_togglebutton_set(UiInteger *value, int64_t i) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
113 QPushButton *button = (QPushButton*)value->obj;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
114 value->value = i;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
115 if(i != 0) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
116 button->setChecked(true);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
117 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
118 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
119
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
120 static void checkbox_event(UiEvent *event, UiEventWrapper *wrapper) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
121 QPushButton *button = (QPushButton*)wrapper->customdata1;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
122 event->intval = button->isChecked();
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
123 if(wrapper->var) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
124 event->eventdata = wrapper->var->value;
659
d6baaa93f7be add UiEvent eventdatatype
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 597
diff changeset
125 event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
126 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
127 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
128
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
129
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
130 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
131 UiContainerPrivate *ctn = ui_obj_container(obj);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
132 UI_APPLY_LAYOUT(ctn->layout, args);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
133
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
134 QString str = QString::fromUtf8(args->label);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
135 QCheckBox *checkbox = new QCheckBox(str);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
136
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
137 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
138
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
139 if(args->onchange) {
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
140 UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
141 event->var = var;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
142 event->customdata1 = checkbox;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
143 event->prepare_event = checkbox_event;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
144 checkbox->connect(checkbox, SIGNAL(clicked()), event, SLOT(slot()));
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
145 checkbox->connect(checkbox, SIGNAL(destroyed()), event, SLOT(destroy()));
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
146 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
147
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
148 if(var) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
149 UiInteger *i = (UiInteger*)var->value;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
150
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
151 if(i->value) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
152 checkbox->setChecked(true);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
153 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
154
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
155 i->obj = checkbox;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
156 i->get = ui_checkbox_get;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
157 i->set = ui_checkbox_set;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
158 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
159
672
1b08ba076b65 remove fill parameter from Container add method (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
160 ctn->add(checkbox);
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
161
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
162 return checkbox;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
163 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
164
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
165 int64_t ui_checkbox_get(UiInteger *value) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
166 QPushButton *button = (QPushButton*)value->obj;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
167 value->value = button->isChecked();
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
168 return value->value;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
169 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
170
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
171 void ui_checkbox_set(UiInteger *value, int64_t i) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
172 QPushButton *button = (QPushButton*)value->obj;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
173 value->value = i;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
174 if(i != 0) {
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
175 button->setChecked(true);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
176 }
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 520
diff changeset
177 }
550
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
178
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
179
551
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
180 static void radiobutton_event(UiEvent *event, UiEventWrapper *wrapper) {
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
181 if(wrapper->var) {
559
dc5ed4c10d83 fix radio buttons (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
182 UiInteger *value = (UiInteger*)wrapper->var->value;
551
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
183 event->eventdata = value;
659
d6baaa93f7be add UiEvent eventdatatype
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 597
diff changeset
184 event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
559
dc5ed4c10d83 fix radio buttons (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
185 event->intval = value->get(value);
551
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
186 }
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
187 }
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
188
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
189 UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) {
550
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
190 UiContainerPrivate *ctn = ui_obj_container(obj);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
191 UI_APPLY_LAYOUT(ctn->layout, args);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
192
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
193 QString str = QString::fromUtf8(args->label);
550
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
194 QRadioButton *button = new QRadioButton(str);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
195 button->setAutoExclusive(false);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
196
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
197 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
550
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
198 if(var) {
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
199 UiInteger *value = (UiInteger*)var->value;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
200 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
201 if(!buttonGroup) {
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
202 buttonGroup = new QButtonGroup();
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
203 value->obj = buttonGroup;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
204 }
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
205 int id = buttonGroup->buttons().size()+1;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
206 buttonGroup->addButton(button, id);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
207 if(value->value == id) {
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
208 button->setChecked(true);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
209 }
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
210 value->get = ui_radiobutton_get;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
211 value->set = ui_radiobutton_set;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
212 }
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
213
597
fc85ca42a7ce refactore widget args passing (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 560
diff changeset
214 UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
551
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
215 event->var = var;
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
216 event->customdata1 = button;
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
217 event->prepare_event = togglebutton_event;
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
218 button->connect(button, SIGNAL(clicked()), event, SLOT(slot()));
0e543e1d060e handle radiobutton click event (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 550
diff changeset
219 button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
550
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
220
672
1b08ba076b65 remove fill parameter from Container add method (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 659
diff changeset
221 ctn->add(button);
550
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
222
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
223 return button;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
224 }
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
225
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
226 int64_t ui_radiobutton_get(UiInteger *value) {
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
227 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
228 value->value = buttonGroup->checkedId();
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
229 return value->value;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
230 }
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
231
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
232 void ui_radiobutton_set(UiInteger *value, int64_t i) {
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
233 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
234 QAbstractButton *button = buttonGroup->button(i);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
235 if(button) {
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
236 button->setChecked(true);
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
237 value->value = i;
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
238 }
0412c4c1048e implement radiobutton (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
239 }

mercurial