diff src/bar.c @ 1317:cd7204a18f14

simplified and improved bar configuration
author nadvornik
date Tue, 24 Feb 2009 20:34:39 +0000
parents 8cca18bce950
children 45bcfcb69f56
line wrap: on
line diff
--- a/src/bar.c	Tue Feb 24 18:00:45 2009 +0000
+++ b/src/bar.c	Tue Feb 24 20:34:39 2009 +0000
@@ -43,6 +43,7 @@
 
 	GList *(*list_func)(gpointer);
 	gpointer list_data;
+	gint width;
 };
 
 static void bar_expander_move(GtkWidget *widget, gpointer data, gboolean up)
@@ -156,7 +157,12 @@
 	bd = g_object_get_data(G_OBJECT(bar), "bar_data");
 	if (!bd) return;
 
-	WRITE_STRING("<bar>\n");
+	WRITE_STRING("<bar\n");
+	indent++;
+	write_bool_option(outstr, indent, "enabled", GTK_WIDGET_VISIBLE(bar));
+	write_uint_option(outstr, indent, "width", bd->width);
+	indent--;
+	WRITE_STRING(">\n");
 
 	list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));	
 	work = list;
@@ -250,7 +256,7 @@
 
 }
 
-void bar_populate_default(GtkWidget *bar)
+static void bar_populate_default(GtkWidget *bar)
 {
 	GtkWidget *widget;
 	widget = bar_pane_histogram_new(_("Histogram"), 80, TRUE);
@@ -269,6 +275,13 @@
 	bar_add(bar, widget);
 }
 
+static void bar_sized(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
+{
+	BarData *bd = data;
+	bd->width = allocation->width;
+}
+
+
 static void bar_width(BarData *bd, gint val)
 {
 	gint size;
@@ -277,7 +290,6 @@
 	size = CLAMP(size + val, BAR_SIZE_INCREMENT * 2, BAR_SIZE_INCREMENT * 16);
 
 	gtk_widget_set_size_request(bd->widget, size, -1);
-	options->layout.panels.info.width = bd->widget->allocation.width;
 }
 
 static void bar_larger(GtkWidget *widget, gpointer data)
@@ -329,6 +341,12 @@
 	g_signal_connect(G_OBJECT(bd->widget), "destroy",
 			 G_CALLBACK(bar_destroy), bd);
 
+	g_signal_connect(G_OBJECT(bd->widget), "size_allocate",
+			 G_CALLBACK(bar_sized), bd);
+
+	bd->width = PANEL_DEFAULT_WIDTH;
+	gtk_widget_set_size_request(bd->widget, bd->width, -1);
+
 	box = gtk_hbox_new(FALSE, 0);
 
 	sizer = sizer_new(bd->widget, bounding_widget, SIZER_POS_LEFT);
@@ -388,5 +406,40 @@
 	return bd->widget;
 }
 
+GtkWidget *bar_new_default(GtkWidget *bounding_widget)
+{
+	GtkWidget *bar = bar_new(bounding_widget);
+	
+	bar_populate_default(bar);
+	
+	gtk_widget_show(bar);
+	
+	return bar;
+}
+
+GtkWidget *bar_new_from_config(GtkWidget *bounding_widget, const gchar **attribute_names, const gchar **attribute_values)
+{
+	GtkWidget *bar = bar_new(bounding_widget);
+	
+	gboolean enabled = TRUE;
+	gint width = PANEL_DEFAULT_WIDTH;
+
+	while (*attribute_names)
+		{
+		const gchar *option = *attribute_names++;
+		const gchar *value = *attribute_values++;
+
+		if (READ_BOOL_FULL("enabled", enabled)) continue;
+		if (READ_INT_FULL("width", width)) continue;
+		
+
+		DEBUG_1("unknown attribute %s = %s", option, value);
+		}
+	
+	gtk_widget_set_size_request(bar, width, -1);
+	if (enabled) gtk_widget_show(bar);
+	return bar;
+}
+
 
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */