diff src/layout.c @ 1240:30e207ac22e4

added a status bar button for writting metadata immediately
author nadvornik
date Sun, 11 Jan 2009 18:58:05 +0000
parents ca8ccf0c3e81
children a5c78d3cfea0
line wrap: on
line diff
--- a/src/layout.c	Sun Jan 11 12:13:30 2009 +0000
+++ b/src/layout.c	Sun Jan 11 18:58:05 2009 +0000
@@ -523,6 +523,36 @@
 	return button;
 }
 
+/*
+ *-----------------------------------------------------------------------------
+ * write button
+ *-----------------------------------------------------------------------------
+ */
+
+static void layout_write_button_press_cb(GtkWidget *widget, gpointer data)
+{
+	LayoutWindow *lw = data;
+	metadata_write_queue_confirm(NULL, NULL);
+}
+
+static GtkWidget *layout_write_button(LayoutWindow *lw)
+{
+	GtkWidget *button;
+	GtkWidget *image;
+
+	button = gtk_button_new();
+	image = gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
+	gtk_container_add(GTK_CONTAINER(button), image);
+	gtk_widget_show(image);
+	g_signal_connect(G_OBJECT(button), "clicked",
+			 G_CALLBACK(layout_write_button_press_cb), lw);
+	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+	
+	gtk_widget_set_sensitive(button, metadata_queue_length() > 0);
+	
+	return button;
+}
+
 
 /*
  *-----------------------------------------------------------------------------
@@ -530,6 +560,30 @@
  *-----------------------------------------------------------------------------
  */
 
+void layout_status_update_write(LayoutWindow *lw)
+{
+	if (!layout_valid(&lw)) return;
+	if (!lw->info_write) return;
+
+	gtk_widget_set_sensitive(lw->info_write, metadata_queue_length() > 0);
+	/* FIXME: maybe show also the number of files */
+}
+
+void layout_status_update_write_all(void)
+{
+	GList *work;
+
+	work = layout_window_list;
+	while (work)
+		{
+		LayoutWindow *lw = work->data;
+		work = work->next;
+
+		layout_status_update_write(lw);
+		}
+}
+
+
 void layout_status_update_progress(LayoutWindow *lw, gdouble val, const gchar *text)
 {
 	if (!layout_valid(&lw)) return;
@@ -667,6 +721,7 @@
 	layout_status_update_progress(lw, 0.0, NULL);
 	layout_status_update_info(lw, NULL);
 	layout_status_update_image(lw);
+	layout_status_update_write(lw);
 }
 
 static GtkWidget *layout_status_label(gchar *text, GtkWidget *box, gint start, gint size, gint expand)
@@ -733,7 +788,11 @@
 	lw->info_color = layout_color_button(lw);
 	gtk_widget_show(lw->info_color);
 
+	lw->info_write = layout_write_button(lw);
+	gtk_widget_show(lw->info_write);
+
 	if (small_format) gtk_box_pack_end(GTK_BOX(hbox), lw->info_color, FALSE, FALSE, 0);
+	if (small_format) gtk_box_pack_end(GTK_BOX(hbox), lw->info_write, FALSE, FALSE, 0);
 
 	lw->info_status = layout_status_label(NULL, lw->info_box, TRUE, 0, (!small_format));
 
@@ -749,6 +808,7 @@
 		}
 	lw->info_details = layout_status_label(NULL, hbox, TRUE, 0, TRUE);
 	if (!small_format) gtk_box_pack_start(GTK_BOX(hbox), lw->info_color, FALSE, FALSE, 0);
+	if (!small_format) gtk_box_pack_start(GTK_BOX(hbox), lw->info_write, FALSE, FALSE, 0);
 	lw->info_zoom = layout_status_label(NULL, hbox, FALSE, ZOOM_LABEL_WIDTH, FALSE);
 }