| 28 |
28 |
| 29 #include "button.h" |
29 #include "button.h" |
| 30 #include "container.h" |
30 #include "container.h" |
| 31 #include "toolkit.h" |
31 #include "toolkit.h" |
| 32 |
32 |
| 33 UIWIDGET ui_button(UiObject *obj, char *label, ui_callback f, void *data) { |
33 UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) { |
| 34 QString str = QString::fromUtf8(label); |
34 UiContainerPrivate *ctn = ui_obj_container(obj); |
| |
35 UI_APPLY_LAYOUT(ctn->layout, args); |
| |
36 |
| |
37 QString str = QString::fromUtf8(args.label); |
| 35 QPushButton *button = new QPushButton(str); |
38 QPushButton *button = new QPushButton(str); |
| 36 |
39 |
| 37 if(f) { |
40 if(args.onclick) { |
| 38 UiEventWrapper *event = new UiEventWrapper(obj, f, data); |
41 UiEventWrapper *event = new UiEventWrapper(obj, args.onclick, args.onclickdata); |
| 39 button->connect(button, SIGNAL(clicked()), event, SLOT(slot())); |
42 button->connect(button, SIGNAL(clicked()), event, SLOT(slot())); |
| 40 } |
43 button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy())); |
| 41 |
44 } |
| 42 UiContainer *ct = uic_get_current_container(obj); |
45 |
| 43 ct->add(button, false); |
46 ctn->add(button, false); |
| 44 |
47 |
| 45 return button; |
48 return button; |
| 46 } |
49 } |
| 47 |
50 |
| 48 |
51 static void togglebutton_event(UiEvent *event, UiEventWrapper *wrapper) { |
| 49 |
52 QPushButton *button = (QPushButton*)wrapper->customdata1; |
| 50 // TODO: checkbox |
53 event->intval = button->isChecked(); |
| 51 |
54 if(wrapper->var) { |
| 52 |
55 event->eventdata = wrapper->var->value; |
| 53 UIWIDGET ui_radiobutton(UiObject *obj, char *label, UiInteger *rgroup) { |
56 } |
| 54 QString str = QString::fromUtf8(label); |
57 } |
| |
58 |
| |
59 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) { |
| |
60 UiContainerPrivate *ctn = ui_obj_container(obj); |
| |
61 UI_APPLY_LAYOUT(ctn->layout, args); |
| |
62 |
| |
63 QString str = QString::fromUtf8(args.label); |
| |
64 QPushButton *button = new QPushButton(str); |
| |
65 button->setCheckable(true); |
| |
66 |
| |
67 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); |
| |
68 |
| |
69 if(args.onchange) { |
| |
70 UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata); |
| |
71 event->var = var; |
| |
72 event->customdata1 = button; |
| |
73 event->prepare_event = togglebutton_event; |
| |
74 button->connect(button, SIGNAL(clicked()), event, SLOT(slot())); |
| |
75 button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy())); |
| |
76 } |
| |
77 |
| |
78 if(var) { |
| |
79 UiInteger *i = (UiInteger*)var->value; |
| |
80 |
| |
81 if(i->value) { |
| |
82 button->setChecked(true); |
| |
83 } |
| |
84 |
| |
85 i->obj = button; |
| |
86 i->get = ui_togglebutton_get; |
| |
87 i->set = ui_togglebutton_set; |
| |
88 } |
| |
89 |
| |
90 ctn->add(button, false); |
| |
91 |
| |
92 return button; |
| |
93 } |
| |
94 |
| |
95 int64_t ui_togglebutton_get(UiInteger *value) { |
| |
96 QPushButton *button = (QPushButton*)value->obj; |
| |
97 value->value = button->isChecked(); |
| |
98 return value->value; |
| |
99 } |
| |
100 |
| |
101 void ui_togglebutton_set(UiInteger *value, int64_t i) { |
| |
102 QPushButton *button = (QPushButton*)value->obj; |
| |
103 value->value = i; |
| |
104 if(i != 0) { |
| |
105 button->setChecked(true); |
| |
106 } |
| |
107 } |
| |
108 |
| |
109 static void checkbox_event(UiEvent *event, UiEventWrapper *wrapper) { |
| |
110 QPushButton *button = (QPushButton*)wrapper->customdata1; |
| |
111 event->intval = button->isChecked(); |
| |
112 if(wrapper->var) { |
| |
113 event->eventdata = wrapper->var->value; |
| |
114 } |
| |
115 } |
| |
116 |
| |
117 |
| |
118 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { |
| |
119 UiContainerPrivate *ctn = ui_obj_container(obj); |
| |
120 UI_APPLY_LAYOUT(ctn->layout, args); |
| |
121 |
| |
122 QString str = QString::fromUtf8(args.label); |
| |
123 QCheckBox *checkbox = new QCheckBox(str); |
| |
124 |
| |
125 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); |
| |
126 |
| |
127 if(args.onchange) { |
| |
128 UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata); |
| |
129 event->var = var; |
| |
130 event->customdata1 = checkbox; |
| |
131 event->prepare_event = checkbox_event; |
| |
132 checkbox->connect(checkbox, SIGNAL(clicked()), event, SLOT(slot())); |
| |
133 checkbox->connect(checkbox, SIGNAL(destroyed()), event, SLOT(destroy())); |
| |
134 } |
| |
135 |
| |
136 if(var) { |
| |
137 UiInteger *i = (UiInteger*)var->value; |
| |
138 |
| |
139 if(i->value) { |
| |
140 checkbox->setChecked(true); |
| |
141 } |
| |
142 |
| |
143 i->obj = checkbox; |
| |
144 i->get = ui_checkbox_get; |
| |
145 i->set = ui_checkbox_set; |
| |
146 } |
| |
147 |
| |
148 ctn->add(checkbox, false); |
| |
149 |
| |
150 return checkbox; |
| |
151 } |
| |
152 |
| |
153 int64_t ui_checkbox_get(UiInteger *value) { |
| |
154 QPushButton *button = (QPushButton*)value->obj; |
| |
155 value->value = button->isChecked(); |
| |
156 return value->value; |
| |
157 } |
| |
158 |
| |
159 void ui_checkbox_set(UiInteger *value, int64_t i) { |
| |
160 QPushButton *button = (QPushButton*)value->obj; |
| |
161 value->value = i; |
| |
162 if(i != 0) { |
| |
163 button->setChecked(true); |
| |
164 } |
| |
165 } |
| |
166 |
| |
167 |
| |
168 static void radiobutton_event(UiEvent *event, UiEventWrapper *wrapper) { |
| |
169 if(wrapper->var) { |
| |
170 UiInteger *value = wrapper->var->value; |
| |
171 event->eventdata = value; |
| |
172 event->intval = ui_get(value); |
| |
173 } |
| |
174 } |
| |
175 |
| |
176 UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) { |
| |
177 UiContainerPrivate *ctn = ui_obj_container(obj); |
| |
178 UI_APPLY_LAYOUT(ctn->layout, args); |
| |
179 |
| |
180 QString str = QString::fromUtf8(args.label); |
| 55 QRadioButton *button = new QRadioButton(str); |
181 QRadioButton *button = new QRadioButton(str); |
| 56 button->setAutoExclusive(false); |
182 button->setAutoExclusive(false); |
| 57 |
183 |
| 58 if(rgroup) { |
184 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); |
| 59 QButtonGroup *buttonGroup = (QButtonGroup*)rgroup->obj; |
185 if(var) { |
| |
186 UiInteger *value = (UiInteger*)var->value; |
| |
187 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; |
| 60 if(!buttonGroup) { |
188 if(!buttonGroup) { |
| 61 buttonGroup = new QButtonGroup(); |
189 buttonGroup = new QButtonGroup(); |
| 62 rgroup->obj = buttonGroup; |
190 value->obj = buttonGroup; |
| |
191 } |
| |
192 int id = buttonGroup->buttons().size()+1; |
| |
193 buttonGroup->addButton(button, id); |
| |
194 if(value->value == id) { |
| 63 button->setChecked(true); |
195 button->setChecked(true); |
| 64 } |
196 } |
| 65 buttonGroup->addButton(button, buttonGroup->buttons().size()); |
197 value->get = ui_radiobutton_get; |
| 66 |
198 value->set = ui_radiobutton_set; |
| 67 rgroup->get = ui_radiobutton_get; |
199 } |
| 68 rgroup->set = ui_radiobutton_set; |
200 |
| 69 } |
201 UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata); |
| 70 |
202 event->var = var; |
| 71 UiContainer *ct = uic_get_current_container(obj); |
203 event->customdata1 = button; |
| 72 ct->add(button, false); |
204 event->prepare_event = togglebutton_event; |
| |
205 button->connect(button, SIGNAL(clicked()), event, SLOT(slot())); |
| |
206 button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy())); |
| |
207 |
| |
208 ctn->add(button, false); |
| 73 |
209 |
| 74 return button; |
210 return button; |
| 75 } |
211 } |
| 76 |
212 |
| 77 int ui_radiobutton_get(UiInteger *value) { |
213 int64_t ui_radiobutton_get(UiInteger *value) { |
| 78 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; |
214 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; |
| 79 value->value = buttonGroup->checkedId(); |
215 value->value = buttonGroup->checkedId(); |
| 80 return value->value; |
216 return value->value; |
| 81 } |
217 } |
| 82 |
218 |
| 83 void ui_radiobutton_set(UiInteger *value, int i) { |
219 void ui_radiobutton_set(UiInteger *value, int64_t i) { |
| 84 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; |
220 QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; |
| 85 QAbstractButton *button = buttonGroup->button(i); |
221 QAbstractButton *button = buttonGroup->button(i); |
| 86 if(button) { |
222 if(button) { |
| 87 button->setChecked(true); |
223 button->setChecked(true); |
| 88 value->value = i; |
224 value->value = i; |