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);