| 33 #include "../common/object.h" |
33 #include "../common/object.h" |
| 34 #include "container.h" |
34 #include "container.h" |
| 35 #include "entry.h" |
35 #include "entry.h" |
| 36 |
36 |
| 37 |
37 |
| 38 UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args) { |
38 UIWIDGET ui_spinbox_create(UiObject *obj, UiSpinBoxArgs *args) { |
| 39 double min = 0; |
39 double min = args->min; |
| 40 double max = 1000; |
40 double max = args->max != 0 ? args->max : 1000; |
| 41 |
41 |
| 42 UiObject* current = uic_current_obj(obj); |
42 UiObject* current = uic_current_obj(obj); |
| 43 |
43 |
| 44 UiVar *var = NULL; |
44 UiVar *var = NULL; |
| |
45 UiVarType vartype = 0; |
| 45 if(args->varname) { |
46 if(args->varname) { |
| 46 var = uic_get_var(obj->ctx, args->varname); |
47 var = uic_get_var(obj->ctx, args->varname); |
| |
48 if(var) { |
| |
49 vartype = var->type; |
| |
50 } else { |
| |
51 var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, args->varname, UI_VAR_RANGE); |
| |
52 vartype = UI_VAR_RANGE; |
| |
53 } |
| 47 } |
54 } |
| 48 |
55 |
| 49 if(!var) { |
56 if(!var) { |
| 50 if(args->intvalue) { |
57 if(args->intvalue) { |
| 51 var = uic_widget_var(obj->ctx, current->ctx, args->intvalue, NULL, UI_VAR_INTEGER); |
58 var = uic_widget_var(obj->ctx, current->ctx, args->intvalue, NULL, UI_VAR_INTEGER); |
| |
59 vartype = UI_VAR_INTEGER; |
| 52 } else if(args->doublevalue) { |
60 } else if(args->doublevalue) { |
| 53 var = uic_widget_var(obj->ctx, current->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE); |
61 var = uic_widget_var(obj->ctx, current->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE); |
| |
62 vartype = UI_VAR_DOUBLE; |
| 54 } else if(args->rangevalue) { |
63 } else if(args->rangevalue) { |
| 55 var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, NULL, UI_VAR_RANGE); |
64 var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, NULL, UI_VAR_RANGE); |
| |
65 vartype = UI_VAR_RANGE; |
| 56 } |
66 } |
| 57 } |
67 } |
| 58 |
68 |
| 59 if(var && var->type == UI_VAR_RANGE) { |
69 if(vartype == UI_VAR_RANGE) { |
| 60 UiRange *r = var->value; |
70 UiRange *r = var->value; |
| 61 min = r->min; |
71 min = r->min; |
| 62 max = r->max; |
72 max = r->max; |
| 63 } |
73 } |
| 64 if(args->step == 0) { |
74 if(args->step == 0) { |
| 70 } |
80 } |
| 71 #endif |
81 #endif |
| 72 GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args->step); |
82 GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args->step); |
| 73 ui_set_name_and_style(spin, args->name, args->style_class); |
83 ui_set_name_and_style(spin, args->name, args->style_class); |
| 74 ui_set_widget_groups(obj->ctx, spin, args->groups); |
84 ui_set_widget_groups(obj->ctx, spin, args->groups); |
| |
85 |
| |
86 if(args->width > 0) { |
| |
87 gtk_widget_set_size_request(spin, args->width, -1); |
| |
88 } |
| |
89 |
| 75 gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->digits); |
90 gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->digits); |
| 76 UiObserver **obs = NULL; |
91 UiObserver **obs = NULL; |
| 77 if(var) { |
92 if(var) { |
| 78 double value = 0; |
93 double value = 0; |
| 79 switch(var->type) { |
94 switch(vartype) { |
| 80 default: break; |
95 default: break; |
| 81 case UI_VAR_INTEGER: { |
96 case UI_VAR_INTEGER: { |
| 82 UiInteger *i = var->value; |
97 UiInteger *i = var->value; |
| 83 i->get = ui_spinbutton_getint; |
98 i->get = ui_spinbutton_getint; |
| 84 i->set = ui_spinbutton_setint; |
99 i->set = ui_spinbutton_setint; |