[gimp] app: move the GimpData delete confirm dialog to its own files



commit 920d1a42e91d76e8acb662c0cc8456bd2a5992cc
Author: Michael Natterer <mitch gimp org>
Date:   Thu Mar 24 21:46:40 2011 +0100

    app: move the GimpData delete confirm dialog to its own files

 app/actions/data-commands.c      |  107 ++------------------------
 app/dialogs/Makefile.am          |    2 +
 app/dialogs/data-delete-dialog.c |  158 ++++++++++++++++++++++++++++++++++++++
 app/dialogs/data-delete-dialog.h |   28 +++++++
 po/POTFILES.in                   |    1 +
 5 files changed, 196 insertions(+), 100 deletions(-)
---
diff --git a/app/actions/data-commands.c b/app/actions/data-commands.c
index d5b0f1e..c8ae9ee 100644
--- a/app/actions/data-commands.c
+++ b/app/actions/data-commands.c
@@ -40,29 +40,14 @@
 #include "widgets/gimpmessagebox.h"
 #include "widgets/gimpmessagedialog.h"
 
+#include "dialogs/data-delete-dialog.h"
+
 #include "actions.h"
 #include "data-commands.h"
 
 #include "gimp-intl.h"
 
 
-typedef struct _GimpDataDeleteData GimpDataDeleteData;
-
-struct _GimpDataDeleteData
-{
-  GimpContext         *context;
-  GimpDataFactoryView *view;
-  GimpData            *data;
-};
-
-
-/*  local function prototypes  */
-
-static void  data_delete_confirm_response (GtkWidget          *dialog,
-                                           gint                response_id,
-                                           GimpDataDeleteData *delete_data);
-
-
 /*  public functions  */
 
 void
@@ -225,45 +210,13 @@ data_delete_cmd_callback (GtkAction *action,
       gimp_data_factory_view_have (view,
                                    GIMP_OBJECT (data)))
     {
-      GimpDataDeleteData *delete_data;
-      GtkWidget          *dialog;
-
-      delete_data = g_slice_new0 (GimpDataDeleteData);
-
-      delete_data->context = context;
-      delete_data->view    = view;
-      delete_data->data    = data;
-
-      dialog = gimp_message_dialog_new (_("Delete Object"), GTK_STOCK_DELETE,
-                                        GTK_WIDGET (view), 0,
-                                        gimp_standard_help_func, NULL,
-
-                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                                        GTK_STOCK_DELETE, GTK_RESPONSE_OK,
-
-                                        NULL);
-
-      gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
-                                               GTK_RESPONSE_OK,
-                                               GTK_RESPONSE_CANCEL,
-                                               -1);
-
-      g_signal_connect_object (data, "disconnect",
-                               G_CALLBACK (gtk_widget_destroy),
-                               dialog, G_CONNECT_SWAPPED);
-
-      g_signal_connect (dialog, "response",
-                        G_CALLBACK (data_delete_confirm_response),
-                        delete_data);
+      GimpDataFactory *factory;
+      GtkWidget       *dialog;
 
-      gimp_message_box_set_primary_text (GIMP_MESSAGE_DIALOG (dialog)->box,
-                                         _("Delete '%s'?"),
-                                         gimp_object_get_name (data));
-      gimp_message_box_set_text(GIMP_MESSAGE_DIALOG (dialog)->box,
-                                _("Are you sure you want to remove '%s' "
-                                  "from the list and delete it on disk?"),
-                                gimp_object_get_name (data));
+      factory = gimp_data_factory_view_get_data_factory (view);
 
+      dialog = data_delete_dialog_new (factory, data, context,
+                                       GTK_WIDGET (view));
       gtk_widget_show (dialog);
     }
 }
@@ -310,49 +263,3 @@ data_edit_cmd_callback (GtkAction   *action,
                                  data);
     }
 }
-
-
-/*  private functions  */
-
-static void
-data_delete_confirm_response (GtkWidget          *dialog,
-                              gint                response_id,
-                              GimpDataDeleteData *delete_data)
-{
-  gtk_widget_destroy (dialog);
-
-  if (response_id == GTK_RESPONSE_OK)
-    {
-      GimpDataFactory *factory;
-      GimpContainer   *container;
-      GimpData        *data       = delete_data->data;
-      GimpObject      *new_active = NULL;
-      GError          *error      = NULL;
-
-      factory    = gimp_data_factory_view_get_data_factory (delete_data->view);
-      container  = gimp_data_factory_get_container (factory);
-
-      if (GIMP_OBJECT (data) ==
-          gimp_context_get_by_type (delete_data->context,
-                                    gimp_container_get_children_type (container)))
-        {
-          new_active = gimp_container_get_neighbor_of (container,
-                                                       GIMP_OBJECT (data));
-        }
-
-      if (! gimp_data_factory_data_delete (factory, data, TRUE, &error))
-        {
-          gimp_message (gimp_data_factory_get_gimp (factory),
-                        G_OBJECT (delete_data->view), GIMP_MESSAGE_ERROR,
-                        "%s", error->message);
-          g_clear_error (&error);
-        }
-
-      if (new_active)
-        gimp_context_set_by_type (delete_data->context,
-                                  gimp_container_get_children_type (gimp_data_factory_get_container (factory)),
-                                  new_active);
-    }
-
-  g_slice_free (GimpDataDeleteData, delete_data);
-}
diff --git a/app/dialogs/Makefile.am b/app/dialogs/Makefile.am
index 3bada42..6f6dc16 100644
--- a/app/dialogs/Makefile.am
+++ b/app/dialogs/Makefile.am
@@ -27,6 +27,8 @@ libappdialogs_a_sources = \
 	channel-options-dialog.h	\
 	convert-dialog.c		\
 	convert-dialog.h		\
+	data-delete-dialog.c		\
+	data-delete-dialog.h		\
 	fade-dialog.c			\
 	fade-dialog.h			\
 	file-open-dialog.c		\
diff --git a/app/dialogs/data-delete-dialog.c b/app/dialogs/data-delete-dialog.c
new file mode 100644
index 0000000..f231fa6
--- /dev/null
+++ b/app/dialogs/data-delete-dialog.c
@@ -0,0 +1,158 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+
+#include "libgimpwidgets/gimpwidgets.h"
+
+#include "dialogs-types.h"
+
+#include "core/gimp.h"
+#include "core/gimpcontainer.h"
+#include "core/gimpcontext.h"
+#include "core/gimpdata.h"
+#include "core/gimpdatafactory.h"
+
+#include "widgets/gimpmessagebox.h"
+#include "widgets/gimpmessagedialog.h"
+
+#include "data-delete-dialog.h"
+
+#include "gimp-intl.h"
+
+
+typedef struct _DataDeleteDialog DataDeleteDialog;
+
+struct _DataDeleteDialog
+{
+  GimpDataFactory *factory;
+  GimpData        *data;
+  GimpContext     *context;
+  GtkWidget       *parent;
+};
+
+
+/*  local function prototypes  */
+
+static void  data_delete_dialog_response (GtkWidget        *dialog,
+                                          gint              response_id,
+                                          DataDeleteDialog *delete_data);
+
+
+/*  public functions  */
+
+GtkWidget *
+data_delete_dialog_new (GimpDataFactory *factory,
+                        GimpData        *data,
+                        GimpContext     *context,
+                        GtkWidget       *parent)
+{
+  DataDeleteDialog *delete_data;
+  GtkWidget        *dialog;
+
+  g_return_val_if_fail (GIMP_IS_DATA_FACTORY (factory), NULL);
+  g_return_val_if_fail (GIMP_IS_DATA (data), NULL);
+  g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
+  g_return_val_if_fail (GTK_IS_WIDGET (parent), NULL);
+
+  delete_data = g_slice_new0 (DataDeleteDialog);
+
+  delete_data->factory = factory;
+  delete_data->data    = data;
+  delete_data->context = context;
+  delete_data->parent  = parent;
+
+  dialog = gimp_message_dialog_new (_("Delete Object"), GTK_STOCK_DELETE,
+                                    gtk_widget_get_toplevel (parent), 0,
+                                    gimp_standard_help_func, NULL,
+
+                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                    GTK_STOCK_DELETE, GTK_RESPONSE_OK,
+
+                                    NULL);
+
+  gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
+                                           GTK_RESPONSE_OK,
+                                           GTK_RESPONSE_CANCEL,
+                                           -1);
+
+  g_signal_connect_object (data, "disconnect",
+                           G_CALLBACK (gtk_widget_destroy),
+                           dialog, G_CONNECT_SWAPPED);
+
+  g_signal_connect (dialog, "response",
+                    G_CALLBACK (data_delete_dialog_response),
+                    delete_data);
+
+  gimp_message_box_set_primary_text (GIMP_MESSAGE_DIALOG (dialog)->box,
+                                     _("Delete '%s'?"),
+                                     gimp_object_get_name (data));
+  gimp_message_box_set_text (GIMP_MESSAGE_DIALOG (dialog)->box,
+                             _("Are you sure you want to remove '%s' "
+                               "from the list and delete it on disk?"),
+                             gimp_object_get_name (data));
+
+  return dialog;
+}
+
+
+/*  private functions  */
+
+static void
+data_delete_dialog_response (GtkWidget        *dialog,
+                             gint              response_id,
+                             DataDeleteDialog *delete_data)
+{
+  gtk_widget_destroy (dialog);
+
+  if (response_id == GTK_RESPONSE_OK)
+    {
+      GimpDataFactory *factory    = delete_data->factory;
+      GimpData        *data       = delete_data->data;
+      GimpContainer   *container;
+      GimpObject      *new_active = NULL;
+      GError          *error      = NULL;
+
+      container = gimp_data_factory_get_container (factory);
+
+      if (delete_data->context &&
+          GIMP_OBJECT (data) ==
+          gimp_context_get_by_type (delete_data->context,
+                                    gimp_container_get_children_type (container)))
+        {
+          new_active = gimp_container_get_neighbor_of (container,
+                                                       GIMP_OBJECT (data));
+        }
+
+      if (! gimp_data_factory_data_delete (factory, data, TRUE, &error))
+        {
+          gimp_message (gimp_data_factory_get_gimp (factory),
+                        G_OBJECT (delete_data->parent), GIMP_MESSAGE_ERROR,
+                        "%s", error->message);
+          g_clear_error (&error);
+        }
+
+      if (new_active)
+        gimp_context_set_by_type (delete_data->context,
+                                  gimp_container_get_children_type (gimp_data_factory_get_container (factory)),
+                                  new_active);
+    }
+
+  g_slice_free (DataDeleteDialog, delete_data);
+}
diff --git a/app/dialogs/data-delete-dialog.h b/app/dialogs/data-delete-dialog.h
new file mode 100644
index 0000000..2adae0e
--- /dev/null
+++ b/app/dialogs/data-delete-dialog.h
@@ -0,0 +1,28 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __DATA_DELETE_DIALOG_H__
+#define __DATA_DELETE_DIALOG_H__
+
+
+GtkWidget * data_delete_dialog_new (GimpDataFactory *factory,
+                                    GimpData        *data,
+                                    GimpContext     *context,
+                                    GtkWidget       *parent);
+
+
+#endif /* __DATA_DELETE_DIALOG_H__ */
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 95778b7..f2d8d66 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -176,6 +176,7 @@ app/core/gimpunit.c
 app/dialogs/about-dialog.c
 app/dialogs/channel-options-dialog.c
 app/dialogs/convert-dialog.c
+app/dialogs/data-delete-dialog.c
 app/dialogs/dialogs-constructors.c
 app/dialogs/dialogs.c
 app/dialogs/fade-dialog.c



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