comparison src/bar.c @ 1469:607c60506863

added a possibility to update existing bars from config
author nadvornik
date Fri, 20 Mar 2009 21:28:31 +0000
parents 1b3751ac4743
children 65a5c27823c2
comparison
equal deleted inserted replaced
1468:e9f9d3da3f43 1469:607c60506863
149 } 149 }
150 g_list_free(list); 150 g_list_free(list);
151 return ret; 151 return ret;
152 } 152 }
153 153
154 GtkWidget *bar_find_pane_by_id(GtkWidget *bar, PaneType type, const gchar *id)
155 {
156 BarData *bd;
157 GList *list, *work;
158 GtkWidget *ret = NULL;
159
160 if (!id || !id[0]) return NULL;
161
162 bd = g_object_get_data(G_OBJECT(bar), "bar_data");
163 if (!bd) return NULL;
164
165 list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
166
167 work = list;
168 while (work)
169 {
170 GtkWidget *widget = gtk_bin_get_child(GTK_BIN(work->data));
171 PaneData *pd = g_object_get_data(G_OBJECT(widget), "pane_data");
172 if (!pd) continue;
173
174 if (type == pd->type && strcmp(id, pd->id) == 0)
175 {
176 ret = widget;
177 break;
178 }
179 work = work->next;
180 }
181 g_list_free(list);
182 return ret;
183 }
184
185 void bar_clear(GtkWidget *bar)
186 {
187 BarData *bd;
188 GList *list, *work;
189
190 bd = g_object_get_data(G_OBJECT(bar), "bar_data");
191 if (!bd) return;
192
193 list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
194
195 work = list;
196 while (work)
197 {
198 GtkWidget *widget = work->data;
199 gtk_widget_destroy(widget);
200 work = work->next;
201 }
202 g_list_free(list);
203 }
204
154 void bar_write_config(GtkWidget *bar, GString *outstr, gint indent) 205 void bar_write_config(GtkWidget *bar, GString *outstr, gint indent)
155 { 206 {
156 BarData *bd; 207 BarData *bd;
157 GList *list, *work; 208 GList *list, *work;
158 209
163 214
164 WRITE_NL(); WRITE_STRING("<bar "); 215 WRITE_NL(); WRITE_STRING("<bar ");
165 write_bool_option(outstr, indent, "enabled", GTK_WIDGET_VISIBLE(bar)); 216 write_bool_option(outstr, indent, "enabled", GTK_WIDGET_VISIBLE(bar));
166 write_uint_option(outstr, indent, "width", bd->width); 217 write_uint_option(outstr, indent, "width", bd->width);
167 WRITE_STRING(">"); 218 WRITE_STRING(">");
219
220 indent++;
221 WRITE_NL(); WRITE_STRING("<clear/>");
168 222
169 list = gtk_container_get_children(GTK_CONTAINER(bd->vbox)); 223 list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
170 work = list; 224 work = list;
171 while (work) 225 while (work)
172 { 226 {
176 if (!pd) continue; 230 if (!pd) continue;
177 231
178 pd->expanded = gtk_expander_get_expanded(GTK_EXPANDER(expander)); 232 pd->expanded = gtk_expander_get_expanded(GTK_EXPANDER(expander));
179 233
180 if (pd->pane_write_config) 234 if (pd->pane_write_config)
181 pd->pane_write_config(widget, outstr, indent + 1); 235 pd->pane_write_config(widget, outstr, indent);
182 236
183 work = work->next; 237 work = work->next;
184 } 238 }
185 g_list_free(list); 239 g_list_free(list);
186 240 indent--;
187 WRITE_NL(); WRITE_STRING("</bar>"); 241 WRITE_NL(); WRITE_STRING("</bar>");
188 } 242 }
189 243
244 void bar_update_expander(GtkWidget *pane)
245 {
246 PaneData *pd = g_object_get_data(G_OBJECT(pane), "pane_data");
247 GtkWidget *expander;
248
249 if (!pd) return;
250
251 expander = pane->parent;
252
253 gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded);
254 }
190 255
191 void bar_add(GtkWidget *bar, GtkWidget *pane) 256 void bar_add(GtkWidget *bar, GtkWidget *pane)
192 { 257 {
193 GtkWidget *expander; 258 GtkWidget *expander;
194 BarData *bd = g_object_get_data(G_OBJECT(bar), "bar_data"); 259 BarData *bd = g_object_get_data(G_OBJECT(bar), "bar_data");
222 287
223 static void bar_populate_default(GtkWidget *bar) 288 static void bar_populate_default(GtkWidget *bar)
224 { 289 {
225 GtkWidget *widget; 290 GtkWidget *widget;
226 291
227 widget = bar_pane_histogram_new(_("Histogram"), 80, TRUE, HCHAN_RGB, 0); 292 widget = bar_pane_histogram_new("histogram", _("Histogram"), 80, TRUE, HCHAN_RGB, 0);
228 bar_add(bar, widget); 293 bar_add(bar, widget);
229 294
230 widget = bar_pane_comment_new(_("Title"), "Xmp.dc.title", TRUE, 40); 295 widget = bar_pane_comment_new("title", _("Title"), "Xmp.dc.title", TRUE, 40);
231 bar_add(bar, widget); 296 bar_add(bar, widget);
232 297
233 widget = bar_pane_keywords_new(_("Keywords"), KEYWORD_KEY, TRUE); 298 widget = bar_pane_keywords_new("keywords", _("Keywords"), KEYWORD_KEY, TRUE);
234 bar_add(bar, widget); 299 bar_add(bar, widget);
235 300
236 widget = bar_pane_comment_new(_("Comment"), "Xmp.dc.description", TRUE, 150); 301 widget = bar_pane_comment_new("comment", _("Comment"), "Xmp.dc.description", TRUE, 150);
237 bar_add(bar, widget); 302 bar_add(bar, widget);
238 303
239 widget = bar_pane_exif_new(_("Exif"), TRUE, TRUE); 304 widget = bar_pane_exif_new("exif", _("Exif"), TRUE, TRUE);
240 bar_add(bar, widget); 305 bar_add(bar, widget);
241 } 306 }
242 307
243 static void bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation, gpointer data) 308 static void bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
244 { 309 {
333 gtk_widget_show(bar); 398 gtk_widget_show(bar);
334 399
335 return bar; 400 return bar;
336 } 401 }
337 402
338 GtkWidget *bar_new_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values) 403 GtkWidget *bar_update_from_config(GtkWidget *bar, const gchar **attribute_names, const gchar **attribute_values)
339 { 404 {
340 GtkWidget *bar = bar_new(lw);
341
342 gboolean enabled = TRUE; 405 gboolean enabled = TRUE;
343 gint width = SIDEBAR_DEFAULT_WIDTH; 406 gint width = SIDEBAR_DEFAULT_WIDTH;
344 407
345 while (*attribute_names) 408 while (*attribute_names)
346 { 409 {
353 416
354 log_printf("unknown attribute %s = %s\n", option, value); 417 log_printf("unknown attribute %s = %s\n", option, value);
355 } 418 }
356 419
357 gtk_widget_set_size_request(bar, width, -1); 420 gtk_widget_set_size_request(bar, width, -1);
358 if (enabled) gtk_widget_show(bar); 421 if (enabled)
422 {
423 gtk_widget_show(bar);
424 }
425 else
426 {
427 gtk_widget_hide(bar);
428 }
359 return bar; 429 return bar;
430 }
431
432 GtkWidget *bar_new_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values)
433 {
434 GtkWidget *bar = bar_new(lw);
435 return bar_update_from_config(bar, attribute_names, attribute_values);
360 } 436 }
361 437
362 GtkWidget *bar_pane_expander_title(const gchar *title) 438 GtkWidget *bar_pane_expander_title(const gchar *title)
363 { 439 {
364 GtkWidget *widget = gtk_label_new(title); 440 GtkWidget *widget = gtk_label_new(title);