Mercurial > geeqie
diff 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 |
line wrap: on
line diff
--- a/src/bar.c Fri Mar 20 17:02:00 2009 +0000 +++ b/src/bar.c Fri Mar 20 21:28:31 2009 +0000 @@ -151,6 +151,57 @@ return ret; } +GtkWidget *bar_find_pane_by_id(GtkWidget *bar, PaneType type, const gchar *id) +{ + BarData *bd; + GList *list, *work; + GtkWidget *ret = NULL; + + if (!id || !id[0]) return NULL; + + bd = g_object_get_data(G_OBJECT(bar), "bar_data"); + if (!bd) return NULL; + + list = gtk_container_get_children(GTK_CONTAINER(bd->vbox)); + + work = list; + while (work) + { + GtkWidget *widget = gtk_bin_get_child(GTK_BIN(work->data)); + PaneData *pd = g_object_get_data(G_OBJECT(widget), "pane_data"); + if (!pd) continue; + + if (type == pd->type && strcmp(id, pd->id) == 0) + { + ret = widget; + break; + } + work = work->next; + } + g_list_free(list); + return ret; +} + +void bar_clear(GtkWidget *bar) +{ + BarData *bd; + GList *list, *work; + + bd = g_object_get_data(G_OBJECT(bar), "bar_data"); + if (!bd) return; + + list = gtk_container_get_children(GTK_CONTAINER(bd->vbox)); + + work = list; + while (work) + { + GtkWidget *widget = work->data; + gtk_widget_destroy(widget); + work = work->next; + } + g_list_free(list); +} + void bar_write_config(GtkWidget *bar, GString *outstr, gint indent) { BarData *bd; @@ -165,6 +216,9 @@ write_bool_option(outstr, indent, "enabled", GTK_WIDGET_VISIBLE(bar)); write_uint_option(outstr, indent, "width", bd->width); WRITE_STRING(">"); + + indent++; + WRITE_NL(); WRITE_STRING("<clear/>"); list = gtk_container_get_children(GTK_CONTAINER(bd->vbox)); work = list; @@ -178,15 +232,26 @@ pd->expanded = gtk_expander_get_expanded(GTK_EXPANDER(expander)); if (pd->pane_write_config) - pd->pane_write_config(widget, outstr, indent + 1); + pd->pane_write_config(widget, outstr, indent); work = work->next; } g_list_free(list); - + indent--; WRITE_NL(); WRITE_STRING("</bar>"); } +void bar_update_expander(GtkWidget *pane) +{ + PaneData *pd = g_object_get_data(G_OBJECT(pane), "pane_data"); + GtkWidget *expander; + + if (!pd) return; + + expander = pane->parent; + + gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded); +} void bar_add(GtkWidget *bar, GtkWidget *pane) { @@ -224,19 +289,19 @@ { GtkWidget *widget; - widget = bar_pane_histogram_new(_("Histogram"), 80, TRUE, HCHAN_RGB, 0); + widget = bar_pane_histogram_new("histogram", _("Histogram"), 80, TRUE, HCHAN_RGB, 0); bar_add(bar, widget); - widget = bar_pane_comment_new(_("Title"), "Xmp.dc.title", TRUE, 40); + widget = bar_pane_comment_new("title", _("Title"), "Xmp.dc.title", TRUE, 40); bar_add(bar, widget); - widget = bar_pane_keywords_new(_("Keywords"), KEYWORD_KEY, TRUE); + widget = bar_pane_keywords_new("keywords", _("Keywords"), KEYWORD_KEY, TRUE); bar_add(bar, widget); - widget = bar_pane_comment_new(_("Comment"), "Xmp.dc.description", TRUE, 150); + widget = bar_pane_comment_new("comment", _("Comment"), "Xmp.dc.description", TRUE, 150); bar_add(bar, widget); - widget = bar_pane_exif_new(_("Exif"), TRUE, TRUE); + widget = bar_pane_exif_new("exif", _("Exif"), TRUE, TRUE); bar_add(bar, widget); } @@ -335,10 +400,8 @@ return bar; } -GtkWidget *bar_new_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values) +GtkWidget *bar_update_from_config(GtkWidget *bar, const gchar **attribute_names, const gchar **attribute_values) { - GtkWidget *bar = bar_new(lw); - gboolean enabled = TRUE; gint width = SIDEBAR_DEFAULT_WIDTH; @@ -355,10 +418,23 @@ } gtk_widget_set_size_request(bar, width, -1); - if (enabled) gtk_widget_show(bar); + if (enabled) + { + gtk_widget_show(bar); + } + else + { + gtk_widget_hide(bar); + } return bar; } +GtkWidget *bar_new_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values) +{ + GtkWidget *bar = bar_new(lw); + return bar_update_from_config(bar, attribute_names, attribute_values); +} + GtkWidget *bar_pane_expander_title(const gchar *title) { GtkWidget *widget = gtk_label_new(title);