[gimp] app: use a GimpToolGui in GimpImageMapTool
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: use a GimpToolGui in GimpImageMapTool
- Date: Fri, 7 Jun 2013 08:29:55 +0000 (UTC)
commit 7abbd38a256757a9e7c25fda8602768316587277
Author: Michael Natterer <mitch gimp org>
Date: Fri Jun 7 10:28:41 2013 +0200
app: use a GimpToolGui in GimpImageMapTool
instead of implementing both dialog types manually.
app/tools/gimpimagemaptool-settings.c | 6 +-
app/tools/gimpimagemaptool.c | 176 +++++++++-----------------------
app/tools/gimpimagemaptool.h | 3 +-
app/tools/gimpoperationtool.c | 6 +-
4 files changed, 58 insertions(+), 133 deletions(-)
---
diff --git a/app/tools/gimpimagemaptool-settings.c b/app/tools/gimpimagemaptool-settings.c
index cee147f..2e191f8 100644
--- a/app/tools/gimpimagemaptool-settings.c
+++ b/app/tools/gimpimagemaptool-settings.c
@@ -38,6 +38,8 @@
#include "widgets/gimpsettingsbox.h"
+#include "display/gimptoolgui.h"
+
#include "gimpimagemapoptions.h"
#include "gimpimagemaptool.h"
#include "gimpimagemaptool-settings.h"
@@ -170,7 +172,7 @@ gimp_image_map_tool_settings_import (GimpSettingsBox *box,
if (! tool_class->settings_import (tool, filename, &error))
{
gimp_message_literal (GIMP_TOOL (tool)->tool_info->gimp,
- G_OBJECT (tool->dialog),
+ G_OBJECT (gimp_tool_gui_get_dialog (tool->gui)),
GIMP_MESSAGE_ERROR, error->message);
g_clear_error (&error);
@@ -200,7 +202,7 @@ gimp_image_map_tool_settings_export (GimpSettingsBox *box,
if (! tool_class->settings_export (tool, filename, &error))
{
gimp_message_literal (GIMP_TOOL (tool)->tool_info->gimp,
- G_OBJECT (tool->dialog),
+ G_OBJECT (gimp_tool_gui_get_dialog (tool->gui)),
GIMP_MESSAGE_ERROR, error->message);
g_clear_error (&error);
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index 9a5538b..4dd4b5e 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -51,15 +51,12 @@
#include "core/gimpsettings.h"
#include "core/gimptoolinfo.h"
-#include "widgets/gimpdialogfactory.h"
-#include "widgets/gimpoverlaybox.h"
-#include "widgets/gimpoverlaydialog.h"
#include "widgets/gimpsettingsbox.h"
#include "widgets/gimpwidgets-utils.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplayshell.h"
-#include "display/gimptooldialog.h"
+#include "display/gimptoolgui.h"
#include "gimpcoloroptions.h"
#include "gimpimagemaptool.h"
@@ -124,9 +121,6 @@ static void gimp_image_map_tool_response (GtkWidget *widget,
gint response_id,
GimpImageMapTool *im_tool);
-static void gimp_image_map_tool_dialog_hide (GimpImageMapTool *im_tool);
-static void gimp_image_map_tool_dialog_destroy (GimpImageMapTool *im_tool);
-
static GimpColorToolClass *parent_class = NULL;
@@ -256,8 +250,18 @@ gimp_image_map_tool_finalize (GObject *object)
image_map_tool->undo_desc = NULL;
}
- if (image_map_tool->dialog)
- gimp_image_map_tool_dialog_destroy (image_map_tool);
+ if (image_map_tool->label_group)
+ {
+ g_object_unref (image_map_tool->label_group);
+ image_map_tool->label_group = NULL;
+ }
+
+ if (image_map_tool->gui)
+ {
+ g_object_unref (image_map_tool->gui);
+ image_map_tool->gui = NULL;
+ image_map_tool->settings_box = NULL;
+ }
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -303,14 +307,13 @@ gimp_image_map_tool_initialize (GimpTool *tool,
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (image_map_tool->active_picker),
FALSE);
-
/* set display so the dialog can be hidden on display destruction */
tool->display = display;
if (image_map_tool->config)
gimp_config_reset (GIMP_CONFIG (image_map_tool->config));
- if (! image_map_tool->dialog)
+ if (! image_map_tool->gui)
{
GimpImageMapToolClass *klass;
GtkWidget *dialog;
@@ -322,52 +325,29 @@ gimp_image_map_tool_initialize (GimpTool *tool,
/* disabled for at least GIMP 2.8 */
image_map_tool->overlay = FALSE;
- if (image_map_tool->overlay)
- {
- image_map_tool->dialog = dialog =
- gimp_overlay_dialog_new (tool_info,
- klass->dialog_desc,
+ image_map_tool->gui =
+ gimp_tool_gui_new (tool_info,
+ display_shell,
+ klass->dialog_desc,
+ image_map_tool->overlay,
- GIMP_STOCK_RESET, RESPONSE_RESET,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
+ GIMP_STOCK_RESET, RESPONSE_RESET,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
+ NULL);
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
+ /* FIXME */
+#if 0
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
+ RESPONSE_RESET,
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
+#endif
- gimp_overlay_box_add_child (GIMP_OVERLAY_BOX (display_shell->canvas),
- dialog, 1.0, 1.0);
- gimp_overlay_box_set_child_angle (GIMP_OVERLAY_BOX (display_shell->canvas),
- dialog, 0.0);
-
- image_map_tool->main_vbox = vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_add (GTK_CONTAINER (dialog), vbox);
- }
- else
- {
- image_map_tool->dialog = dialog =
- gimp_tool_dialog_new (tool_info,
- display_shell,
- klass->dialog_desc,
-
- GIMP_STOCK_RESET, RESPONSE_RESET,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
-
- NULL);
-
- gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
- RESPONSE_RESET,
- GTK_RESPONSE_OK,
- GTK_RESPONSE_CANCEL,
- -1);
-
- image_map_tool->main_vbox = vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- vbox, TRUE, TRUE, 0);
- }
+ dialog = gimp_tool_gui_get_dialog (image_map_tool->gui);
+ vbox = gimp_tool_gui_get_vbox (image_map_tool->gui);
g_signal_connect_object (dialog, "response",
G_CALLBACK (gimp_image_map_tool_response),
@@ -397,8 +377,7 @@ gimp_image_map_tool_initialize (GimpTool *tool,
g_free (settings_filename);
g_free (default_folder);
- gtk_box_pack_start (GTK_BOX (image_map_tool->main_vbox), settings_ui,
- FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), settings_ui, FALSE, FALSE, 0);
gtk_widget_show (settings_ui);
}
@@ -407,35 +386,17 @@ gimp_image_map_tool_initialize (GimpTool *tool,
"preview",
_("_Preview"));
- gtk_box_pack_end (GTK_BOX (image_map_tool->main_vbox), toggle,
- FALSE, FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
gtk_widget_show (toggle);
/* Fill in subclass widgets */
gimp_image_map_tool_dialog (image_map_tool);
-
- gtk_widget_show (vbox);
}
- if (GIMP_IS_VIEWABLE_DIALOG (image_map_tool->dialog))
- {
- gimp_viewable_dialog_set_viewable (GIMP_VIEWABLE_DIALOG (image_map_tool->dialog),
- GIMP_VIEWABLE (drawable),
- GIMP_CONTEXT (tool_info->tool_options));
- gimp_tool_dialog_set_shell (GIMP_TOOL_DIALOG (image_map_tool->dialog),
- display_shell);
- }
- else if (GIMP_IS_OVERLAY_DIALOG (image_map_tool->dialog))
- {
- if (! gtk_widget_get_parent (image_map_tool->dialog))
- {
- gimp_overlay_box_add_child (GIMP_OVERLAY_BOX (display_shell->canvas),
- image_map_tool->dialog, 1.0, 1.0);
- g_object_unref (image_map_tool->dialog);
- }
- }
+ gimp_tool_gui_set_shell (image_map_tool->gui, display_shell);
+ gimp_tool_gui_set_viewable (image_map_tool->gui, GIMP_VIEWABLE (drawable));
- gtk_widget_show (image_map_tool->dialog);
+ gimp_tool_gui_show (image_map_tool->gui);
image_map_tool->drawable = drawable;
@@ -459,7 +420,8 @@ gimp_image_map_tool_control (GimpTool *tool,
break;
case GIMP_TOOL_ACTION_HALT:
- gimp_image_map_tool_dialog_hide (image_map_tool);
+ if (image_map_tool->gui)
+ gimp_tool_gui_hide (image_map_tool->gui);
if (image_map_tool->image_map)
{
@@ -486,26 +448,28 @@ gimp_image_map_tool_key_press (GimpTool *tool,
{
GimpImageMapTool *image_map_tool = GIMP_IMAGE_MAP_TOOL (tool);
- if (image_map_tool->dialog && display == tool->display)
+ if (image_map_tool->gui && display == tool->display)
{
+ GtkWidget *dialog = gimp_tool_gui_get_dialog (image_map_tool->gui);
+
switch (kevent->keyval)
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
case GDK_KEY_ISO_Enter:
- gimp_image_map_tool_response (image_map_tool->dialog,
+ gimp_image_map_tool_response (dialog,
GTK_RESPONSE_OK,
image_map_tool);
return TRUE;
case GDK_KEY_BackSpace:
- gimp_image_map_tool_response (image_map_tool->dialog,
+ gimp_image_map_tool_response (dialog,
RESPONSE_RESET,
image_map_tool);
return TRUE;
case GDK_KEY_Escape:
- gimp_image_map_tool_response (image_map_tool->dialog,
+ gimp_image_map_tool_response (dialog,
GTK_RESPONSE_CANCEL,
image_map_tool);
return TRUE;
@@ -607,7 +571,7 @@ gimp_image_map_tool_dialog (GimpImageMapTool *tool)
{
GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->dialog (tool);
- g_signal_connect (tool->dialog, "unmap",
+ g_signal_connect (gimp_tool_gui_get_dialog (tool->gui), "unmap",
G_CALLBACK (gimp_image_map_tool_dialog_unmap),
tool);
}
@@ -703,7 +667,8 @@ gimp_image_map_tool_response (GtkWidget *widget,
break;
case GTK_RESPONSE_OK:
- gimp_image_map_tool_dialog_hide (image_map_tool);
+ if (image_map_tool->gui)
+ gimp_tool_gui_hide (image_map_tool->gui);
if (image_map_tool->image_map)
{
@@ -738,47 +703,6 @@ gimp_image_map_tool_response (GtkWidget *widget,
}
}
-static void
-gimp_image_map_tool_dialog_hide (GimpImageMapTool *image_map_tool)
-{
- GtkWidget *dialog = image_map_tool->dialog;
-
- if (GTK_IS_DIALOG (dialog))
- {
- gimp_dialog_factory_hide_dialog (dialog);
- }
- else if (GIMP_IS_OVERLAY_DIALOG (dialog))
- {
- if (gtk_widget_get_parent (dialog))
- {
- g_object_ref (dialog);
- gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (dialog)),
- dialog);
- gtk_widget_hide (dialog);
- }
- }
-}
-
-static void
-gimp_image_map_tool_dialog_destroy (GimpImageMapTool *image_map_tool)
-{
- if (image_map_tool->label_group)
- {
- g_object_unref (image_map_tool->label_group);
- image_map_tool->label_group = NULL;
- }
-
- if (GTK_IS_DIALOG (image_map_tool->dialog) ||
- gtk_widget_get_parent (image_map_tool->dialog))
- gtk_widget_destroy (image_map_tool->dialog);
- else
- g_object_unref (image_map_tool->dialog);
-
- image_map_tool->dialog = NULL;
- image_map_tool->main_vbox = NULL;
- image_map_tool->settings_box = NULL;
-}
-
void
gimp_image_map_tool_get_operation (GimpImageMapTool *image_map_tool)
{
@@ -892,7 +816,7 @@ gimp_image_map_tool_dialog_get_vbox (GimpImageMapTool *tool)
{
g_return_val_if_fail (GIMP_IS_IMAGE_MAP_TOOL (tool), NULL);
- return tool->main_vbox;
+ return gimp_tool_gui_get_vbox (tool->gui);
}
GtkSizeGroup *
diff --git a/app/tools/gimpimagemaptool.h b/app/tools/gimpimagemaptool.h
index 4b8ef8b..96f010d 100644
--- a/app/tools/gimpimagemaptool.h
+++ b/app/tools/gimpimagemaptool.h
@@ -49,8 +49,7 @@ struct _GimpImageMapTool
/* dialog */
gboolean overlay;
- GtkWidget *dialog;
- GtkWidget *main_vbox;
+ GimpToolGui *gui;
GtkWidget *settings_box;
GtkSizeGroup *label_group;
GtkWidget *active_picker;
diff --git a/app/tools/gimpoperationtool.c b/app/tools/gimpoperationtool.c
index 822cfed..902d87b 100644
--- a/app/tools/gimpoperationtool.c
+++ b/app/tools/gimpoperationtool.c
@@ -202,7 +202,7 @@ gimp_operation_tool_dialog (GimpImageMapTool *image_map_tool)
}
if (tool->undo_desc)
- g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->dialog,
+ g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->gui,
"description", tool->undo_desc,
NULL);
}
@@ -447,8 +447,8 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
}
}
- if (undo_desc && GIMP_IMAGE_MAP_TOOL (tool)->dialog)
- g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->dialog,
+ if (undo_desc && GIMP_IMAGE_MAP_TOOL (tool)->gui)
+ g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->gui,
"description", undo_desc,
NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]