ui/gtk/display.c

branch
newapi
changeset 319
050ceb8ecf44
parent 298
c5e207d01ff2
equal deleted inserted replaced
318:8d8a31d55dd5 319:050ceb8ecf44
117 return widget; 117 return widget;
118 } 118 }
119 119
120 /* ------------------------- progress bar ------------------------- */ 120 /* ------------------------- progress bar ------------------------- */
121 121
122 typedef struct UiProgressBarRange {
123 double min;
124 double max;
125 } UiProgressBarRange;
126
122 UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) { 127 UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
123 UiObject* current = uic_current_obj(obj); 128 UiObject* current = uic_current_obj(obj);
124 129
125 GtkWidget *progressbar = gtk_progress_bar_new(); 130 GtkWidget *progressbar = gtk_progress_bar_new();
131 if(args.max > args.min) {
132 UiProgressBarRange *range = malloc(sizeof(UiProgressBarRange));
133 range->min = args.min;
134 range->max = args.max;
135 g_signal_connect(
136 progressbar,
137 "destroy",
138 G_CALLBACK(ui_destroy_userdata),
139 range);
140 g_object_set_data(G_OBJECT(progressbar), "ui_range", range);
141 }
142
126 143
127 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_DOUBLE); 144 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_DOUBLE);
128 if(var && var->value) { 145 if(var && var->value) {
129 UiDouble *value = var->value; 146 UiDouble *value = var->value;
130 value->get = ui_progressbar_get; 147 value->get = ui_progressbar_get;
131 value->set = ui_progressbar_set; 148 value->set = ui_progressbar_set;
132 value->obj = progressbar; 149 value->obj = progressbar;
133 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar), 0.5); 150 ui_progressbar_set(value, value->value);
134 } 151 }
135 152
136 UI_APPLY_LAYOUT1(current, args); 153 UI_APPLY_LAYOUT1(current, args);
137 current->container->add(current->container, progressbar, FALSE); 154 current->container->add(current->container, progressbar, FALSE);
138 155
139 return progressbar; 156 return progressbar;
140 } 157 }
141 158
142 double ui_progressbar_get(UiDouble *d) { 159 double ui_progressbar_get(UiDouble *d) {
143 d->value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(d->obj)); 160 UiProgressBarRange *range = g_object_get_data(d->obj, "ui_range");
161 double fraction = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(d->obj));
162 if(range) {
163 fraction = range->min + (range->max - range->min) * fraction;
164 }
165 d->value = fraction;
144 return d->value; 166 return d->value;
145 } 167 }
146 168
147 void ui_progressbar_set(UiDouble *d, double value) { 169 void ui_progressbar_set(UiDouble *d, double value) {
170 d->value = value;
171 UiProgressBarRange *range = g_object_get_data(d->obj, "ui_range");
172 if(range) {
173 value = (value - range->min) / (range->max - range->min);
174 }
148 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(d->obj), value); 175 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(d->obj), value);
149 d->value = value;
150 } 176 }
151 177
152 178
153 /* ------------------------- progress spinner ------------------------- */ 179 /* ------------------------- progress spinner ------------------------- */
154 180

mercurial