[gimp] app: in the quit dialog, mention if the image has been exported



commit 9fe3da2bf242be83f2799f71281e27a4dc146baf
Author: Michael Natterer <mitch gimp org>
Date:   Thu Nov 7 11:35:48 2013 +0100

    app: in the quit dialog, mention if the image has been exported
    
    Install a cell_data_func for the dirty image list's text renderer abd
    construct the label manually, using the same string and logic as in
    the close dialog.

 app/dialogs/quit-dialog.c |   82 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 72 insertions(+), 10 deletions(-)
---
diff --git a/app/dialogs/quit-dialog.c b/app/dialogs/quit-dialog.c
index 7874372..5201bb7 100644
--- a/app/dialogs/quit-dialog.c
+++ b/app/dialogs/quit-dialog.c
@@ -31,17 +31,20 @@
 #include "core/gimp.h"
 #include "core/gimpcontainer.h"
 #include "core/gimpcontext.h"
+#include "core/gimpimage.h"
 
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplay-foreach.h"
 #include "display/gimpdisplayshell.h"
 
+#include "widgets/gimpcontainertreestore.h"
 #include "widgets/gimpcontainertreeview.h"
 #include "widgets/gimpcontainerview.h"
 #include "widgets/gimpdnd.h"
 #include "widgets/gimphelp-ids.h"
 #include "widgets/gimpmessagebox.h"
 #include "widgets/gimpmessagedialog.h"
+#include "widgets/gimpviewrenderer.h"
 
 #include "quit-dialog.h"
 
@@ -60,6 +63,11 @@ static void        quit_close_all_dialog_image_activated   (GimpContainerView *v
                                                             GimpImage         *image,
                                                             gpointer           insert_data,
                                                             Gimp              *gimp);
+static void        quit_close_all_dialog_name_cell_func    (GtkTreeViewColumn *tree_column,
+                                                            GtkCellRenderer   *cell,
+                                                            GtkTreeModel      *tree_model,
+                                                            GtkTreeIter       *iter,
+                                                            gpointer           data);
 
 
 /*  public functions  */
@@ -80,16 +88,18 @@ static GtkWidget *
 quit_close_all_dialog_new (Gimp     *gimp,
                            gboolean  do_quit)
 {
-  GimpContainer  *images;
-  GimpContext    *context;
-  GimpMessageBox *box;
-  GtkWidget      *dialog;
-  GtkWidget      *label;
-  GtkWidget      *button;
-  GtkWidget      *view;
-  GtkWidget      *dnd_widget;
-  gint            rows;
-  gint            view_size;
+  GimpContainer         *images;
+  GimpContext           *context;
+  GimpMessageBox        *box;
+  GtkWidget             *dialog;
+  GtkWidget             *label;
+  GtkWidget             *button;
+  GtkWidget             *view;
+  GimpContainerTreeView *tree_view;
+  GtkCellRenderer       *renderer;
+  GtkWidget             *dnd_widget;
+  gint                   rows;
+  gint                   view_size;
 
   g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
 
@@ -145,6 +155,12 @@ quit_close_all_dialog_new (Gimp     *gimp,
   rows      = CLAMP (gimp_container_get_n_children (images), 3, 6);
 
   view = gimp_container_tree_view_new (images, context, view_size, 1);
+  tree_view = GIMP_CONTAINER_TREE_VIEW (view);
+  renderer = gimp_container_tree_view_get_name_cell (tree_view);
+  gtk_tree_view_column_set_cell_data_func (tree_view->main_column,
+                                           renderer,
+                                           quit_close_all_dialog_name_cell_func,
+                                           NULL, NULL);
   gimp_container_box_set_size_request (GIMP_CONTAINER_BOX (view),
                                        -1,
                                        rows * (view_size + 2));
@@ -260,3 +276,49 @@ quit_close_all_dialog_image_activated (GimpContainerView *view,
         gimp_display_shell_present (gimp_display_get_shell (display));
     }
 }
+
+static void
+quit_close_all_dialog_name_cell_func (GtkTreeViewColumn *tree_column,
+                                      GtkCellRenderer   *cell,
+                                      GtkTreeModel      *tree_model,
+                                      GtkTreeIter       *iter,
+                                      gpointer           data)
+{
+  GimpViewRenderer *renderer;
+  GimpImage        *image;
+  gchar            *name;
+
+  gtk_tree_model_get (tree_model, iter,
+                      GIMP_CONTAINER_TREE_STORE_COLUMN_RENDERER, &renderer,
+                      GIMP_CONTAINER_TREE_STORE_COLUMN_NAME,     &name,
+                      -1);
+
+  image = GIMP_IMAGE (renderer->viewable);
+
+  if (gimp_image_is_export_dirty (image))
+    {
+      g_object_set (cell,
+                    "text", name,
+                    NULL);
+    }
+  else
+    {
+      const gchar *exported_uri = gimp_image_get_exported_uri (image);
+      gchar       *text;
+
+      if (! exported_uri)
+        exported_uri = gimp_image_get_imported_uri (image);
+
+      text = g_strdup_printf (_("%s\nThe image has been exported to '%s'"),
+                              name, exported_uri);
+
+      g_object_set (cell,
+                    "text", text,
+                    NULL);
+
+      g_free (text);
+    }
+
+  g_object_unref (renderer);
+  g_free (name);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]