added a status bar button for writting metadata immediately
authorVladimir Nadvornik <nadvornik@suse.cz>
Sun, 11 Jan 2009 18:58:05 +0000 (18:58 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sun, 11 Jan 2009 18:58:05 +0000 (18:58 +0000)
src/layout.c
src/layout.h
src/metadata.c
src/metadata.h
src/typedefs.h

index af050ec..dc86a42 100644 (file)
@@ -523,6 +523,36 @@ static GtkWidget *layout_color_button(LayoutWindow *lw)
        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 @@ static GtkWidget *layout_color_button(LayoutWindow *lw)
  *-----------------------------------------------------------------------------
  */
 
+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 @@ void layout_status_update_all(LayoutWindow *lw)
        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 @@ static void layout_status_setup(LayoutWindow *lw, GtkWidget *box, gint small_for
        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 @@ static void layout_status_setup(LayoutWindow *lw, GtkWidget *box, gint small_for
                }
        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);
 }
 
index b2fad09..b26574b 100644 (file)
@@ -36,8 +36,11 @@ gint layout_set_fd(LayoutWindow *lw, FileData *fd);
 void layout_status_update_progress(LayoutWindow *lw, gdouble val, const gchar *text);
 void layout_status_update_info(LayoutWindow *lw, const gchar *text);
 void layout_status_update_image(LayoutWindow *lw);
+void layout_status_update_write(LayoutWindow *lw);
 void layout_status_update_all(LayoutWindow *lw);
 
+void layout_status_update_write_all(void);
+
 GList *layout_list(LayoutWindow *lw);
 guint layout_list_count(LayoutWindow *lw, gint64 *bytes);
 FileData *layout_list_get_fd(LayoutWindow *lw, gint index);
index dd41639..b75f37c 100644 (file)
@@ -53,6 +53,8 @@ static void metadata_write_queue_add(FileData *fd)
                {
                metadata_write_queue = g_list_prepend(metadata_write_queue, fd);
                file_data_ref(fd);
+               
+               layout_status_update_write_all();
                }
 
        if (metadata_write_idle_id != -1) 
@@ -79,6 +81,8 @@ gboolean metadata_write_queue_remove(FileData *fd)
        file_data_send_notification(fd, NOTIFY_TYPE_REREAD);
 
        file_data_unref(fd);
+
+       layout_status_update_write_all();
        return TRUE;
 }
 
@@ -157,6 +161,11 @@ gboolean metadata_write_perform(FileData *fd)
        return success;
 }
 
+gint metadata_queue_length(void)
+{
+       return g_list_length(metadata_write_queue);
+}
+
 static gboolean metadata_check_key(const gchar *keys[], const gchar *key)
 {
        const gchar **k = keys;
index 35adee4..fbe75e8 100644 (file)
@@ -22,7 +22,7 @@ gboolean metadata_write_queue_remove_list(GList *list);
 gboolean metadata_write_perform(FileData *fd);
 gboolean metadata_write_queue_confirm(FileUtilDoneFunc done_func, gpointer done_data);
 
-
+gint metadata_queue_length(void);
 
 gboolean metadata_write_list(FileData *fd, const gchar *key, const GList *values);
 gboolean metadata_write_string(FileData *fd, const gchar *key, const char *value);
index e01e884..96e4d31 100644 (file)
@@ -533,6 +533,7 @@ struct _LayoutWindow
        GtkWidget *info_status;
        GtkWidget *info_details;
        GtkWidget *info_zoom;
+       GtkWidget *info_write;
 
        /* slide show */