[gimp] app: remove all class variables from GimpFilterToolClass



commit 3aeebfa178b7774af4cd85e1815c482d8558408d
Author: Michael Natterer <mitch gimp org>
Date:   Sat Mar 25 11:32:17 2017 +0100

    app: remove all class variables from GimpFilterToolClass
    
    and add them as return values to GimpFilterToool::get_operation(), so
    the tools is configured entirely per-instance now.
    
    This makes get_operations()'s signature more evil, but helps making
    GimpOperationTool less conplicated and convoluted.

 app/tools/gimpbrightnesscontrasttool.c |   34 ++++++++-----
 app/tools/gimpcolorbalancetool.c       |   30 +++++++----
 app/tools/gimpcolorizetool.c           |   30 +++++++----
 app/tools/gimpcurvestool.c             |   44 +++++++++------
 app/tools/gimpfiltertool-settings.c    |   11 ++--
 app/tools/gimpfiltertool.c             |   74 ++++++++++++++++++++------
 app/tools/gimpfiltertool.h             |   17 ++++--
 app/tools/gimphuesaturationtool.c      |   32 +++++++----
 app/tools/gimplevelstool.c             |   40 +++++++++------
 app/tools/gimpoperationtool.c          |   89 ++++++++++---------------------
 app/tools/gimpthresholdtool.c          |   32 +++++++----
 11 files changed, 250 insertions(+), 183 deletions(-)
---
diff --git a/app/tools/gimpbrightnesscontrasttool.c b/app/tools/gimpbrightnesscontrasttool.c
index 3e623bb..cd78dd2 100644
--- a/app/tools/gimpbrightnesscontrasttool.c
+++ b/app/tools/gimpbrightnesscontrasttool.c
@@ -77,7 +77,11 @@ static gchar *
                                                             gchar                **description,
                                                             gchar                **undo_desc,
                                                             gchar                **icon_name,
-                                                            gchar                **help_id);
+                                                            gchar                **help_id,
+                                                            gboolean              *has_settings,
+                                                            gchar                **settings_folder,
+                                                            gchar                **import_dialog_title,
+                                                            gchar                **export_dialog_title);
 static void   gimp_brightness_contrast_tool_dialog         (GimpFilterTool        *filter_tool);
 
 static void   brightness_contrast_to_levels_callback       (GtkWidget             *widget,
@@ -112,17 +116,13 @@ gimp_brightness_contrast_tool_class_init (GimpBrightnessContrastToolClass *klass
   GimpToolClass       *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  tool_class->initialize                 = gimp_brightness_contrast_tool_initialize;
-  tool_class->button_press               = gimp_brightness_contrast_tool_button_press;
-  tool_class->button_release             = gimp_brightness_contrast_tool_button_release;
-  tool_class->motion                     = gimp_brightness_contrast_tool_motion;
+  tool_class->initialize           = gimp_brightness_contrast_tool_initialize;
+  tool_class->button_press         = gimp_brightness_contrast_tool_button_press;
+  tool_class->button_release       = gimp_brightness_contrast_tool_button_release;
+  tool_class->motion               = gimp_brightness_contrast_tool_motion;
 
-  filter_tool_class->settings_name       = "brightness-contrast";
-  filter_tool_class->import_dialog_title = _("Import Brightness-Contrast settings");
-  filter_tool_class->export_dialog_title = _("Export Brightness-Contrast settings");
-
-  filter_tool_class->get_operation       = gimp_brightness_contrast_tool_get_operation;
-  filter_tool_class->dialog              = gimp_brightness_contrast_tool_dialog;
+  filter_tool_class->get_operation = gimp_brightness_contrast_tool_get_operation;
+  filter_tool_class->dialog        = gimp_brightness_contrast_tool_dialog;
 }
 
 static void
@@ -168,9 +168,17 @@ gimp_brightness_contrast_tool_get_operation (GimpFilterTool  *filter_tool,
                                              gchar          **description,
                                              gchar          **undo_desc,
                                              gchar          **icon_name,
-                                             gchar          **help_id)
+                                             gchar          **help_id,
+                                             gboolean        *has_settings,
+                                             gchar          **settings_folder,
+                                             gchar          **import_dialog_title,
+                                             gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Adjust Brightness and Contrast"));
+  *description         = g_strdup (_("Adjust Brightness and Contrast"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("brightness-contrast");
+  *import_dialog_title = g_strdup (_("Import Brightness-Contrast settings"));
+  *export_dialog_title = g_strdup (_("Export Brightness-Contrast settings"));
 
   return g_strdup ("gimp:brightness-contrast");
 }
diff --git a/app/tools/gimpcolorbalancetool.c b/app/tools/gimpcolorbalancetool.c
index 0b4dcb0..234559c 100644
--- a/app/tools/gimpcolorbalancetool.c
+++ b/app/tools/gimpcolorbalancetool.c
@@ -56,7 +56,11 @@ static gchar    * gimp_color_balance_tool_get_operation (GimpFilterTool  *filter
                                                          gchar          **description,
                                                          gchar          **undo_desc,
                                                          gchar          **icon_name,
-                                                         gchar          **help_id);
+                                                         gchar          **help_id,
+                                                         gboolean        *has_settings,
+                                                         gchar          **settings_folder,
+                                                         gchar          **import_dialog_title,
+                                                         gchar          **export_dialog_title);
 static void       gimp_color_balance_tool_dialog        (GimpFilterTool  *filter_tool);
 static void       gimp_color_balance_tool_reset         (GimpFilterTool  *filter_tool);
 
@@ -92,15 +96,11 @@ gimp_color_balance_tool_class_init (GimpColorBalanceToolClass *klass)
   GimpToolClass       *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  tool_class->initialize                 = gimp_color_balance_tool_initialize;
+  tool_class->initialize           = gimp_color_balance_tool_initialize;
 
-  filter_tool_class->settings_name       = "color-balance";
-  filter_tool_class->import_dialog_title = _("Import Color Balance Settings");
-  filter_tool_class->export_dialog_title = _("Export Color Balance Settings");
-
-  filter_tool_class->get_operation       = gimp_color_balance_tool_get_operation;
-  filter_tool_class->dialog              = gimp_color_balance_tool_dialog;
-  filter_tool_class->reset               = gimp_color_balance_tool_reset;
+  filter_tool_class->get_operation = gimp_color_balance_tool_get_operation;
+  filter_tool_class->dialog        = gimp_color_balance_tool_dialog;
+  filter_tool_class->reset         = gimp_color_balance_tool_reset;
 }
 
 static void
@@ -135,9 +135,17 @@ gimp_color_balance_tool_get_operation (GimpFilterTool  *filter_tool,
                                        gchar          **description,
                                        gchar          **undo_desc,
                                        gchar          **icon_name,
-                                       gchar          **help_id)
+                                       gchar          **help_id,
+                                       gboolean        *has_settings,
+                                       gchar          **settings_folder,
+                                       gchar          **import_dialog_title,
+                                       gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Adjust Color Balance"));
+  *description         = g_strdup (_("Adjust Color Balance"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("color-balance");
+  *import_dialog_title = g_strdup (_("Import Color Balance Settings"));
+  *export_dialog_title = g_strdup (_("Export Color Balance Settings"));
 
   return g_strdup ("gimp:color-balance");
 }
diff --git a/app/tools/gimpcolorizetool.c b/app/tools/gimpcolorizetool.c
index 08405d9..6a2817a 100644
--- a/app/tools/gimpcolorizetool.c
+++ b/app/tools/gimpcolorizetool.c
@@ -55,7 +55,11 @@ static gchar    * gimp_colorize_tool_get_operation (GimpFilterTool  *filter_tool
                                                     gchar          **description,
                                                     gchar          **undo_desc,
                                                     gchar          **icon_name,
-                                                    gchar          **help_id);
+                                                    gchar          **help_id,
+                                                    gboolean        *has_settings,
+                                                    gchar          **settings_folder,
+                                                    gchar          **import_dialog_title,
+                                                    gchar          **export_dialog_title);
 static void       gimp_colorize_tool_dialog        (GimpFilterTool  *filter_tool);
 static void       gimp_colorize_tool_color_picked  (GimpFilterTool  *filter_tool,
                                                     gpointer         identifier,
@@ -93,15 +97,11 @@ gimp_colorize_tool_class_init (GimpColorizeToolClass *klass)
   GimpToolClass         *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass   *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  tool_class->initialize                 = gimp_colorize_tool_initialize;
+  tool_class->initialize           = gimp_colorize_tool_initialize;
 
-  filter_tool_class->settings_name       = "colorize";
-  filter_tool_class->import_dialog_title = _("Import Colorize Settings");
-  filter_tool_class->export_dialog_title = _("Export Colorize Settings");
-
-  filter_tool_class->get_operation       = gimp_colorize_tool_get_operation;
-  filter_tool_class->dialog              = gimp_colorize_tool_dialog;
-  filter_tool_class->color_picked        = gimp_colorize_tool_color_picked;
+  filter_tool_class->get_operation = gimp_colorize_tool_get_operation;
+  filter_tool_class->dialog        = gimp_colorize_tool_dialog;
+  filter_tool_class->color_picked  = gimp_colorize_tool_color_picked;
 }
 
 static void
@@ -136,9 +136,17 @@ gimp_colorize_tool_get_operation (GimpFilterTool  *filter_tool,
                                   gchar          **description,
                                   gchar          **undo_desc,
                                   gchar          **icon_name,
-                                  gchar          **help_id)
+                                  gchar          **help_id,
+                                  gboolean        *has_settings,
+                                  gchar          **settings_folder,
+                                  gchar          **import_dialog_title,
+                                  gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Colorize the Image"));
+  *description         = g_strdup (_("Colorize the Image"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("colorize");
+  *import_dialog_title = g_strdup (_("Import Colorize Settings"));
+  *export_dialog_title = g_strdup (_("Export Colorize Settings"));
 
   return g_strdup ("gimp:colorize");
 }
diff --git a/app/tools/gimpcurvestool.c b/app/tools/gimpcurvestool.c
index 2703a36..a62b216 100644
--- a/app/tools/gimpcurvestool.c
+++ b/app/tools/gimpcurvestool.c
@@ -95,7 +95,11 @@ static gchar    * gimp_curves_tool_get_operation   (GimpFilterTool       *filter
                                                     gchar               **description,
                                                     gchar               **undo_desc,
                                                     gchar               **icon_name,
-                                                    gchar               **help_id);
+                                                    gchar               **help_id,
+                                                    gboolean             *has_settings,
+                                                    gchar               **settings_folder,
+                                                    gchar               **import_dialog_title,
+                                                    gchar               **export_dialog_title);
 static void       gimp_curves_tool_dialog          (GimpFilterTool       *filter_tool);
 static void       gimp_curves_tool_reset           (GimpFilterTool       *filter_tool);
 static gboolean   gimp_curves_tool_settings_import (GimpFilterTool       *filter_tool,
@@ -165,24 +169,20 @@ gimp_curves_tool_class_init (GimpCurvesToolClass *klass)
   GimpColorToolClass  *color_tool_class  = GIMP_COLOR_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  object_class->constructed              = gimp_curves_tool_constructed;
+  object_class->constructed          = gimp_curves_tool_constructed;
 
-  tool_class->initialize                 = gimp_curves_tool_initialize;
-  tool_class->button_release             = gimp_curves_tool_button_release;
-  tool_class->key_press                  = gimp_curves_tool_key_press;
-  tool_class->oper_update                = gimp_curves_tool_oper_update;
+  tool_class->initialize             = gimp_curves_tool_initialize;
+  tool_class->button_release         = gimp_curves_tool_button_release;
+  tool_class->key_press              = gimp_curves_tool_key_press;
+  tool_class->oper_update            = gimp_curves_tool_oper_update;
 
-  color_tool_class->picked               = gimp_curves_tool_color_picked;
+  color_tool_class->picked           = gimp_curves_tool_color_picked;
 
-  filter_tool_class->settings_name       = "curves";
-  filter_tool_class->import_dialog_title = _("Import Curves");
-  filter_tool_class->export_dialog_title = _("Export Curves");
-
-  filter_tool_class->get_operation       = gimp_curves_tool_get_operation;
-  filter_tool_class->dialog              = gimp_curves_tool_dialog;
-  filter_tool_class->reset               = gimp_curves_tool_reset;
-  filter_tool_class->settings_import     = gimp_curves_tool_settings_import;
-  filter_tool_class->settings_export     = gimp_curves_tool_settings_export;
+  filter_tool_class->get_operation   = gimp_curves_tool_get_operation;
+  filter_tool_class->dialog          = gimp_curves_tool_dialog;
+  filter_tool_class->reset           = gimp_curves_tool_reset;
+  filter_tool_class->settings_import = gimp_curves_tool_settings_import;
+  filter_tool_class->settings_export = gimp_curves_tool_settings_export;
 }
 
 static void
@@ -405,9 +405,17 @@ gimp_curves_tool_get_operation (GimpFilterTool  *filter_tool,
                                 gchar          **description,
                                 gchar          **undo_desc,
                                 gchar          **icon_name,
-                                gchar          **help_id)
+                                gchar          **help_id,
+                                gboolean        *has_settings,
+                                gchar          **settings_folder,
+                                gchar          **import_dialog_title,
+                                gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Adjust Color Curves"));
+  *description         = g_strdup (_("Adjust Color Curves"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("curves");
+  *import_dialog_title = g_strdup (_("Import Curves"));
+  *export_dialog_title = g_strdup (_("Export Curves"));
 
   return g_strdup ("gimp:curves");
 }
diff --git a/app/tools/gimpfiltertool-settings.c b/app/tools/gimpfiltertool-settings.c
index 0ea9037..dcd4a61 100644
--- a/app/tools/gimpfiltertool-settings.c
+++ b/app/tools/gimpfiltertool-settings.c
@@ -121,13 +121,12 @@ gimp_filter_tool_real_settings_export (GimpFilterTool  *filter_tool,
                                        GOutputStream   *output,
                                        GError         **error)
 {
-  GimpFilterToolClass *klass = GIMP_FILTER_TOOL_GET_CLASS (filter_tool);
-  gchar               *header;
-  gchar               *footer;
-  gboolean             success;
+  gchar    *header;
+  gchar    *footer;
+  gboolean  success;
 
-  header = g_strdup_printf ("GIMP %s tool settings",   klass->settings_name);
-  footer = g_strdup_printf ("end of %s tool settings", klass->settings_name);
+  header = g_strdup_printf ("GIMP '%s' settings",   filter_tool->title);
+  footer = g_strdup_printf ("end of '%s' settings", filter_tool->title);
 
   success = gimp_config_serialize_to_stream (GIMP_CONFIG (filter_tool->config),
                                              output,
diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c
index 85e07f8..d358b2e 100644
--- a/app/tools/gimpfiltertool.c
+++ b/app/tools/gimpfiltertool.c
@@ -184,10 +184,6 @@ gimp_filter_tool_class_init (GimpFilterToolClass *klass)
   color_tool_class->pick     = gimp_filter_tool_pick_color;
   color_tool_class->picked   = gimp_filter_tool_color_picked;
 
-  klass->settings_name       = NULL;
-  klass->import_dialog_title = NULL;
-  klass->export_dialog_title = NULL;
-
   klass->get_operation       = NULL;
   klass->dialog              = NULL;
   klass->reset               = gimp_filter_tool_real_reset;
@@ -273,6 +269,24 @@ gimp_filter_tool_finalize (GObject *object)
       filter_tool->help_id = NULL;
     }
 
+  if (filter_tool->settings_folder)
+    {
+      g_free (filter_tool->settings_folder);
+      filter_tool->settings_folder = NULL;
+    }
+
+  if (filter_tool->import_dialog_title)
+    {
+      g_free (filter_tool->import_dialog_title);
+      filter_tool->import_dialog_title = NULL;
+    }
+
+  if (filter_tool->export_dialog_title)
+    {
+      g_free (filter_tool->export_dialog_title);
+      filter_tool->export_dialog_title = NULL;
+    }
+
   if (filter_tool->gui)
     {
       g_object_unref (filter_tool->gui);
@@ -332,15 +346,14 @@ gimp_filter_tool_initialize (GimpTool     *tool,
 
   if (! filter_tool->gui)
     {
-      GimpFilterToolClass *klass = GIMP_FILTER_TOOL_GET_CLASS (filter_tool);
-      GtkWidget           *vbox;
-      GtkWidget           *hbox;
-      GtkWidget           *toggle;
-      GtkWidget           *expander;
-      GtkWidget           *frame;
-      GtkWidget           *vbox2;
-      GtkWidget           *combo;
-      gchar               *operation_name;
+      GtkWidget *vbox;
+      GtkWidget *hbox;
+      GtkWidget *toggle;
+      GtkWidget *expander;
+      GtkWidget *frame;
+      GtkWidget *vbox2;
+      GtkWidget *combo;
+      gchar     *operation_name;
 
       /*  disabled for at least GIMP 2.8  */
       filter_tool->overlay = FALSE;
@@ -375,7 +388,7 @@ gimp_filter_tool_initialize (GimpTool     *tool,
                                G_CALLBACK (gimp_filter_tool_response),
                                G_OBJECT (filter_tool), 0);
 
-      if (filter_tool->config && klass->settings_name)
+      if (filter_tool->config && filter_tool->has_settings)
         {
           GtkWidget *settings_ui;
 
@@ -971,12 +984,15 @@ gimp_filter_tool_get_settings_ui (GimpFilterTool *filter_tool)
                                          type,
                                          (GCompareFunc) gimp_settings_compare);
 
-  default_folder = gimp_directory_file (klass->settings_name, NULL);
+  if (filter_tool->settings_folder)
+    default_folder = gimp_directory_file (filter_tool->settings_folder, NULL);
+  else
+    default_folder = NULL;
 
   settings_ui = klass->get_settings_ui (filter_tool,
                                         settings,
-                                        klass->import_dialog_title,
-                                        klass->export_dialog_title,
+                                        filter_tool->import_dialog_title,
+                                        filter_tool->export_dialog_title,
                                         filter_tool->help_id,
                                         default_folder,
                                         &filter_tool->settings_box);
@@ -1292,12 +1308,34 @@ gimp_filter_tool_get_operation (GimpFilterTool *filter_tool)
       filter_tool->help_id = NULL;
     }
 
+  if (filter_tool->settings_folder)
+    {
+      g_free (filter_tool->settings_folder);
+      filter_tool->settings_folder = NULL;
+    }
+
+  if (filter_tool->import_dialog_title)
+    {
+      g_free (filter_tool->import_dialog_title);
+      filter_tool->import_dialog_title = NULL;
+    }
+
+  if (filter_tool->export_dialog_title)
+    {
+      g_free (filter_tool->export_dialog_title);
+      filter_tool->export_dialog_title = NULL;
+    }
+
   operation_name = klass->get_operation (filter_tool,
                                          &filter_tool->title,
                                          &filter_tool->description,
                                          &filter_tool->undo_desc,
                                          &filter_tool->icon_name,
-                                         &filter_tool->help_id);
+                                         &filter_tool->help_id,
+                                         &filter_tool->has_settings,
+                                         &filter_tool->settings_folder,
+                                         &filter_tool->import_dialog_title,
+                                         &filter_tool->export_dialog_title);
 
   if (! operation_name)
     operation_name = g_strdup ("gegl:nop");
diff --git a/app/tools/gimpfiltertool.h b/app/tools/gimpfiltertool.h
index 091d7be..f3f0dac 100644
--- a/app/tools/gimpfiltertool.h
+++ b/app/tools/gimpfiltertool.h
@@ -50,6 +50,11 @@ struct _GimpFilterTool
   gchar                 *icon_name;
   gchar                 *help_id;
 
+  gboolean               has_settings;
+  gchar                 *settings_folder;
+  gchar                 *import_dialog_title;
+  gchar                 *export_dialog_title;
+
   GimpDrawableFilter    *filter;
 
   GimpGuide             *percent_guide;
@@ -66,17 +71,17 @@ struct _GimpFilterToolClass
 {
   GimpColorToolClass  parent_class;
 
-  const gchar        *settings_name;
-  const gchar        *import_dialog_title;
-  const gchar        *export_dialog_title;
-
   /* virtual functions */
   gchar     * (* get_operation)   (GimpFilterTool    *filter_tool,
                                    gchar            **title,
                                    gchar            **description,
                                    gchar            **undo_desc,
                                    gchar            **icon_name,
-                                   gchar            **help_id);
+                                   gchar            **help_id,
+                                   gboolean          *has_settings,
+                                   gchar            **settings_folder,
+                                   gchar            **import_dialog_title,
+                                   gchar            **export_dialog_title);
   void        (* dialog)          (GimpFilterTool    *filter_tool);
   void        (* reset)           (GimpFilterTool    *filter_tool);
 
@@ -84,7 +89,7 @@ struct _GimpFilterToolClass
                                    GimpContainer     *settings,
                                    const gchar       *import_dialog_title,
                                    const gchar       *export_dialog_title,
-                                   const gchar       *file_dialog_help_id,
+                                   const gchar       *help_id,
                                    GFile             *default_folder,
                                    GtkWidget        **settings_box);
 
diff --git a/app/tools/gimphuesaturationtool.c b/app/tools/gimphuesaturationtool.c
index 921de82..b7e4de0 100644
--- a/app/tools/gimphuesaturationtool.c
+++ b/app/tools/gimphuesaturationtool.c
@@ -63,7 +63,11 @@ static gchar    * gimp_hue_saturation_tool_get_operation (GimpFilterTool  *filte
                                                           gchar          **description,
                                                           gchar          **undo_desc,
                                                           gchar          **icon_name,
-                                                          gchar          **help_id);
+                                                          gchar          **help_id,
+                                                          gboolean        *has_settings,
+                                                          gchar          **settings_folder,
+                                                          gchar          **import_dialog_title,
+                                                          gchar          **export_dialog_title);
 static void       gimp_hue_saturation_tool_dialog        (GimpFilterTool  *filter_tool);
 static void       gimp_hue_saturation_tool_reset         (GimpFilterTool  *filter_tool);
 
@@ -108,17 +112,13 @@ gimp_hue_saturation_tool_class_init (GimpHueSaturationToolClass *klass)
   GimpToolClass       *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  object_class->constructed              = gimp_hue_saturation_tool_constructed;
+  object_class->constructed        = gimp_hue_saturation_tool_constructed;
 
-  tool_class->initialize                 = gimp_hue_saturation_tool_initialize;
+  tool_class->initialize           = gimp_hue_saturation_tool_initialize;
 
-  filter_tool_class->settings_name       = "hue-saturation";
-  filter_tool_class->import_dialog_title = _("Import Hue-Saturation Settings");
-  filter_tool_class->export_dialog_title = _("Export Hue-Saturation Settings");
-
-  filter_tool_class->get_operation       = gimp_hue_saturation_tool_get_operation;
-  filter_tool_class->dialog              = gimp_hue_saturation_tool_dialog;
-  filter_tool_class->reset               = gimp_hue_saturation_tool_reset;
+  filter_tool_class->get_operation = gimp_hue_saturation_tool_get_operation;
+  filter_tool_class->dialog        = gimp_hue_saturation_tool_dialog;
+  filter_tool_class->reset         = gimp_hue_saturation_tool_reset;
 }
 
 static void
@@ -163,9 +163,17 @@ gimp_hue_saturation_tool_get_operation (GimpFilterTool  *filter_tool,
                                         gchar          **description,
                                         gchar          **undo_desc,
                                         gchar          **icon_name,
-                                        gchar          **help_id)
+                                        gchar          **help_id,
+                                        gboolean        *has_settings,
+                                        gchar          **settings_folder,
+                                        gchar          **import_dialog_title,
+                                        gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Adjust Hue / Lightness / Saturation"));
+  *description         = g_strdup (_("Adjust Hue / Lightness / Saturation"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("hue-saturation");
+  *import_dialog_title = g_strdup (_("Import Hue-Saturation Settings"));
+  *export_dialog_title = g_strdup (_("Export Hue-Saturation Settings"));
 
   return g_strdup ("gimp:hue-saturation");
 }
diff --git a/app/tools/gimplevelstool.c b/app/tools/gimplevelstool.c
index 8c4afa9..e1be971 100644
--- a/app/tools/gimplevelstool.c
+++ b/app/tools/gimplevelstool.c
@@ -77,7 +77,11 @@ static gchar    * gimp_levels_tool_get_operation  (GimpFilterTool   *filter_tool
                                                    gchar           **description,
                                                    gchar           **undo_desc,
                                                    gchar           **icon_name,
-                                                   gchar           **help_id);
+                                                   gchar           **help_id,
+                                                   gboolean         *has_settings,
+                                                   gchar           **settings_folder,
+                                                   gchar           **import_dialog_title,
+                                                   gchar           **export_dialog_title);
 static void       gimp_levels_tool_dialog         (GimpFilterTool   *filter_tool);
 static void       gimp_levels_tool_reset          (GimpFilterTool   *filter_tool);
 static gboolean   gimp_levels_tool_settings_import(GimpFilterTool   *filter_tool,
@@ -149,21 +153,17 @@ gimp_levels_tool_class_init (GimpLevelsToolClass *klass)
   GimpToolClass       *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  object_class->constructed              = gimp_levels_tool_constructed;
-  object_class->finalize                 = gimp_levels_tool_finalize;
+  object_class->constructed          = gimp_levels_tool_constructed;
+  object_class->finalize             = gimp_levels_tool_finalize;
 
-  tool_class->initialize                 = gimp_levels_tool_initialize;
+  tool_class->initialize             = gimp_levels_tool_initialize;
 
-  filter_tool_class->settings_name       = "levels";
-  filter_tool_class->import_dialog_title = _("Import Levels");
-  filter_tool_class->export_dialog_title = _("Export Levels");
-
-  filter_tool_class->get_operation       = gimp_levels_tool_get_operation;
-  filter_tool_class->dialog              = gimp_levels_tool_dialog;
-  filter_tool_class->reset               = gimp_levels_tool_reset;
-  filter_tool_class->settings_import     = gimp_levels_tool_settings_import;
-  filter_tool_class->settings_export     = gimp_levels_tool_settings_export;
-  filter_tool_class->color_picked        = gimp_levels_tool_color_picked;
+  filter_tool_class->get_operation   = gimp_levels_tool_get_operation;
+  filter_tool_class->dialog          = gimp_levels_tool_dialog;
+  filter_tool_class->reset           = gimp_levels_tool_reset;
+  filter_tool_class->settings_import = gimp_levels_tool_settings_import;
+  filter_tool_class->settings_export = gimp_levels_tool_settings_export;
+  filter_tool_class->color_picked    = gimp_levels_tool_color_picked;
 }
 
 static void
@@ -259,9 +259,17 @@ gimp_levels_tool_get_operation (GimpFilterTool  *filter_tool,
                                 gchar          **description,
                                 gchar          **undo_desc,
                                 gchar          **icon_name,
-                                gchar          **help_id)
+                                gchar          **help_id,
+                                gboolean        *has_settings,
+                                gchar          **settings_folder,
+                                gchar          **import_dialog_title,
+                                gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Adjust Color Levels"));
+  *description         = g_strdup (_("Adjust Color Levels"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("levels");
+  *import_dialog_title = g_strdup (_("Import Levels"));
+  *export_dialog_title = g_strdup (_("Export Levels"));
 
   return g_strdup ("gimp:levels");
 }
diff --git a/app/tools/gimpoperationtool.c b/app/tools/gimpoperationtool.c
index 7720bd7..690e739 100644
--- a/app/tools/gimpoperationtool.c
+++ b/app/tools/gimpoperationtool.c
@@ -83,16 +83,13 @@ static gchar     * gimp_operation_tool_get_operation   (GimpFilterTool    *filte
                                                         gchar            **description,
                                                         gchar            **undo_desc,
                                                         gchar            **icon_name,
-                                                        gchar            **help_id);
+                                                        gchar            **help_id,
+                                                        gboolean          *has_settings,
+                                                        gchar            **settings_folder,
+                                                        gchar            **import_dialog_title,
+                                                        gchar            **export_dialog_title);
 static void        gimp_operation_tool_dialog          (GimpFilterTool    *filter_tool);
 static void        gimp_operation_tool_reset           (GimpFilterTool    *filter_tool);
-static GtkWidget * gimp_operation_tool_get_settings_ui (GimpFilterTool    *filter_tool,
-                                                        GimpContainer     *settings,
-                                                        const gchar       *import_dialog_title,
-                                                        const gchar       *export_dialog_title,
-                                                        const gchar       *file_dialog_help_id,
-                                                        GFile             *default_folder,
-                                                        GtkWidget        **settings_box);
 static void        gimp_operation_tool_color_picked    (GimpFilterTool    *filter_tool,
                                                         gpointer           identifier,
                                                         gdouble            x,
@@ -142,22 +139,20 @@ gimp_operation_tool_class_init (GimpOperationToolClass *klass)
   GimpToolClass       *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  object_class->finalize             = gimp_operation_tool_finalize;
+  object_class->finalize           = gimp_operation_tool_finalize;
 
-  tool_class->initialize             = gimp_operation_tool_initialize;
-  tool_class->control                = gimp_operation_tool_control;
+  tool_class->initialize           = gimp_operation_tool_initialize;
+  tool_class->control              = gimp_operation_tool_control;
 
-  filter_tool_class->get_operation   = gimp_operation_tool_get_operation;
-  filter_tool_class->dialog          = gimp_operation_tool_dialog;
-  filter_tool_class->reset           = gimp_operation_tool_reset;
-  filter_tool_class->get_settings_ui = gimp_operation_tool_get_settings_ui;
-  filter_tool_class->color_picked    = gimp_operation_tool_color_picked;
+  filter_tool_class->get_operation = gimp_operation_tool_get_operation;
+  filter_tool_class->dialog        = gimp_operation_tool_dialog;
+  filter_tool_class->reset         = gimp_operation_tool_reset;
+  filter_tool_class->color_picked  = gimp_operation_tool_color_picked;
 }
 
 static void
 gimp_operation_tool_init (GimpOperationTool *tool)
 {
-  GIMP_FILTER_TOOL_GET_CLASS (tool)->settings_name = NULL; /* XXX hack */
 }
 
 static void
@@ -260,15 +255,24 @@ gimp_operation_tool_get_operation (GimpFilterTool  *filter_tool,
                                    gchar          **description,
                                    gchar          **undo_desc,
                                    gchar          **icon_name,
-                                   gchar          **help_id)
+                                   gchar          **help_id,
+                                   gboolean        *has_settings,
+                                   gchar          **settings_folder,
+                                   gchar          **import_dialog_title,
+                                   gchar          **export_dialog_title)
 {
   GimpOperationTool *tool = GIMP_OPERATION_TOOL (filter_tool);
 
-  *title       = g_strdup (tool->title);
-  *description = g_strdup (tool->description);
-  *undo_desc   = g_strdup (tool->undo_desc);
-  *icon_name   = g_strdup (tool->icon_name);
-  *help_id     = g_strdup (tool->help_id);
+  *title               = g_strdup (tool->title);
+  *description         = g_strdup (tool->description);
+  *undo_desc           = g_strdup (tool->undo_desc);
+  *icon_name           = g_strdup (tool->icon_name);
+  *help_id             = g_strdup (tool->help_id);
+  *has_settings        = FALSE;
+  *import_dialog_title = g_strdup_printf (_("Import '%s' Settings"),
+                                          tool->title);
+  *export_dialog_title = g_strdup_printf (_("Export '%s' Settings"),
+                                          tool->title);
 
   return g_strdup (tool->operation);
 }
@@ -316,38 +320,6 @@ gimp_operation_tool_reset (GimpFilterTool *filter_tool)
     gimp_operation_tool_sync_op (tool, GIMP_TOOL (tool)->drawable);
 }
 
-static GtkWidget *
-gimp_operation_tool_get_settings_ui (GimpFilterTool  *filter_tool,
-                                     GimpContainer   *settings,
-                                     const gchar     *import_dialog_title,
-                                     const gchar     *export_dialog_title,
-                                     const gchar     *file_dialog_help_id,
-                                     GFile           *default_folder,
-                                     GtkWidget      **settings_box)
-{
-  GimpOperationTool *tool = GIMP_OPERATION_TOOL (filter_tool);
-  GtkWidget         *widget;
-  gchar             *import_title;
-  gchar             *export_title;
-
-  import_title = g_strdup_printf (_("Import '%s' Settings"), tool->title);
-  export_title = g_strdup_printf (_("Export '%s' Settings"), tool->title);
-
-  widget =
-    GIMP_FILTER_TOOL_CLASS (parent_class)->get_settings_ui (filter_tool,
-                                                            settings,
-                                                            import_title,
-                                                            export_title,
-                                                            file_dialog_help_id,
-                                                            NULL, /* sic */
-                                                            settings_box);
-
-  g_free (import_title);
-  g_free (export_title);
-
-  return widget;
-}
-
 static void
 gimp_operation_tool_color_picked (GimpFilterTool  *filter_tool,
                                   gpointer         identifier,
@@ -653,11 +625,6 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
 
   gimp_filter_tool_get_operation (filter_tool);
 
-  if (undo_desc)
-    GIMP_FILTER_TOOL_GET_CLASS (tool)->settings_name = "yes"; /* XXX hack */
-  else
-    GIMP_FILTER_TOOL_GET_CLASS (tool)->settings_name = NULL; /* XXX hack */
-
   if (tool->options_gui)
     {
       gtk_widget_destroy (tool->options_gui);
@@ -744,6 +711,8 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
                            (GimpCreatePickerFunc) gimp_filter_tool_add_color_picker,
                            tool);
 
+      filter_tool->has_settings = ! GTK_IS_LABEL (tool->options_gui); /* HACK */
+
       if (tool->options_box)
         {
           gtk_box_pack_start (GTK_BOX (tool->options_box), tool->options_gui,
diff --git a/app/tools/gimpthresholdtool.c b/app/tools/gimpthresholdtool.c
index 0af3ab1..853251e 100644
--- a/app/tools/gimpthresholdtool.c
+++ b/app/tools/gimpthresholdtool.c
@@ -57,7 +57,11 @@ static gchar    * gimp_threshold_tool_get_operation   (GimpFilterTool    *filter
                                                        gchar            **description,
                                                        gchar            **undo_desc,
                                                        gchar            **icon_name,
-                                                       gchar            **help_id);
+                                                       gchar            **help_id,
+                                                       gboolean          *has_settings,
+                                                       gchar            **settings_folder,
+                                                       gchar            **import_dialog_title,
+                                                       gchar            **export_dialog_title);
 static void       gimp_threshold_tool_dialog          (GimpFilterTool    *filter_tool);
 
 static void       gimp_threshold_tool_config_notify   (GObject           *object,
@@ -105,17 +109,13 @@ gimp_threshold_tool_class_init (GimpThresholdToolClass *klass)
   GimpToolClass       *tool_class        = GIMP_TOOL_CLASS (klass);
   GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
 
-  object_class->constructed              = gimp_threshold_tool_constructed;
-  object_class->finalize                 = gimp_threshold_tool_finalize;
+  object_class->constructed        = gimp_threshold_tool_constructed;
+  object_class->finalize           = gimp_threshold_tool_finalize;
 
-  tool_class->initialize                 = gimp_threshold_tool_initialize;
+  tool_class->initialize           = gimp_threshold_tool_initialize;
 
-  filter_tool_class->settings_name       = "threshold";
-  filter_tool_class->import_dialog_title = _("Import Threshold Settings");
-  filter_tool_class->export_dialog_title = _("Export Threshold Settings");
-
-  filter_tool_class->get_operation       = gimp_threshold_tool_get_operation;
-  filter_tool_class->dialog              = gimp_threshold_tool_dialog;
+  filter_tool_class->get_operation = gimp_threshold_tool_get_operation;
+  filter_tool_class->dialog        = gimp_threshold_tool_dialog;
 }
 
 static void
@@ -175,9 +175,17 @@ gimp_threshold_tool_get_operation (GimpFilterTool  *filter_tool,
                                    gchar          **description,
                                    gchar          **undo_desc,
                                    gchar          **icon_name,
-                                   gchar          **help_id)
+                                   gchar          **help_id,
+                                   gboolean        *has_settings,
+                                   gchar          **settings_folder,
+                                   gchar          **import_dialog_title,
+                                   gchar          **export_dialog_title)
 {
-  *description = g_strdup (_("Apply Threshold"));
+  *description         = g_strdup (_("Apply Threshold"));
+  *has_settings        = TRUE;
+  *settings_folder     = g_strdup ("threshold");
+  *import_dialog_title = g_strdup (_("Import Threshold Settings"));
+  *export_dialog_title = g_strdup (_("Export Threshold Settings"));
 
   return g_strdup ("gimp:threshold");
 }



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