ui/qt/button.cpp

changeset 103
6606616eca9f
parent 0
2483f517c562
child 108
77254bd6dccb
equal deleted inserted replaced
102:64ded9f6a6c6 103:6606616eca9f
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;

mercurial