From f1731986698bfbb4bf708c013c88906099526afb Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Sat, 4 Jun 2005 22:32:31 +0000 Subject: [PATCH] app/widgets/gimpdocked.[ch] moved button-bar API to the GimpDocked 2005-06-05 Sven Neumann * app/widgets/gimpdocked.[ch] * app/widgets/gimpeditor.[ch]: moved button-bar API to the GimpDocked interface. * app/widgets/gimpcontainereditor.c: implement the new interface methods and proxy them to the embedded docked. * app/actions/dockable-actions.c * app/actions/dockable-commands.c: changed accordingly. --- ChangeLog | 12 +++ app/actions/dockable-actions.c | 22 ++-- app/actions/dockable-commands.c | 20 +++- app/widgets/gimpcontainereditor.c | 39 ++++++- app/widgets/gimpdocked.c | 95 ++++++++++++++++- app/widgets/gimpdocked.h | 64 ++++++----- app/widgets/gimpeditor.c | 171 +++++++++--------------------- app/widgets/gimpeditor.h | 5 - 8 files changed, 253 insertions(+), 175 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6f8191767..1bf2d5e566 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2005-06-05 Sven Neumann + + * app/widgets/gimpdocked.[ch] + * app/widgets/gimpeditor.[ch]: moved button-bar API to the + GimpDocked interface. + + * app/widgets/gimpcontainereditor.c: implement the new interface + methods and proxy them to the embedded docked. + + * app/actions/dockable-actions.c + * app/actions/dockable-commands.c: changed accordingly. + 2005-06-04 Manish Singh * libgimp/gimpimagecombobox.h diff --git a/app/actions/dockable-actions.c b/app/actions/dockable-actions.c index 66c9bf0219..622ccf3729 100644 --- a/app/actions/dockable-actions.c +++ b/app/actions/dockable-actions.c @@ -34,7 +34,6 @@ #include "widgets/gimpdockable.h" #include "widgets/gimpdockbook.h" #include "widgets/gimpdocked.h" -#include "widgets/gimpeditor.h" #include "widgets/gimphelp-ids.h" #include "dialogs-actions.h" @@ -167,6 +166,7 @@ dockable_actions_update (GimpActionGroup *group, { GimpDockable *dockable; GimpDockbook *dockbook; + GimpDocked *docked; GimpDialogFactoryEntry *entry; GimpContainerView *view; GimpViewType view_type = -1; @@ -197,6 +197,8 @@ dockable_actions_update (GimpActionGroup *group, return; } + docked = gtk_bin_get_child (GTK_BIN (dockable)); + gimp_dialog_factory_from_widget (GTK_WIDGET (dockable), &entry); if (entry) @@ -291,7 +293,7 @@ dockable_actions_update (GimpActionGroup *group, { GimpDockedInterface *docked_iface; - docked_iface = GIMP_DOCKED_GET_INTERFACE (GTK_BIN (dockable)->child); + docked_iface = GIMP_DOCKED_GET_INTERFACE (docked); if (tab_style == GIMP_TAB_STYLE_ICON) SET_ACTIVE ("dockable-tab-style-icon", TRUE); @@ -324,19 +326,9 @@ dockable_actions_update (GimpActionGroup *group, SET_SENSITIVE ("dockable-view-type-list", list_view_available); } - if (GIMP_IS_EDITOR (GTK_BIN (dockable)->child)) - { - GimpEditor *editor = GIMP_EDITOR (GTK_BIN (dockable)->child); - - SET_VISIBLE ("dockable-show-button-bar", - gimp_editor_has_button_bar (editor)); - SET_ACTIVE ("dockable-show-button-bar", - gimp_editor_get_show_button_bar (editor)); - } - else - { - SET_VISIBLE ("dockable-show-button-bar", FALSE); - } + SET_VISIBLE ("dockable-show-button-bar", gimp_docked_has_button_bar (docked)); + SET_ACTIVE ("dockable-show-button-bar", + gimp_docked_get_show_button_bar (docked)); #undef SET_ACTIVE #undef SET_VISIBLE diff --git a/app/actions/dockable-commands.c b/app/actions/dockable-commands.c index a211f906fc..7b04458199 100644 --- a/app/actions/dockable-commands.c +++ b/app/actions/dockable-commands.c @@ -32,7 +32,7 @@ #include "widgets/gimpdock.h" #include "widgets/gimpdockable.h" #include "widgets/gimpdockbook.h" -#include "widgets/gimpeditor.h" +#include "widgets/gimpdocked.h" #include "widgets/gimpsessioninfo.h" #include "dialogs/dialogs.h" @@ -173,12 +173,23 @@ dockable_toggle_view_cmd_callback (GtkAction *action, preview_size = gimp_container_view_get_preview_size (old_view, NULL); + new_dockable = gimp_dialog_factory_dockable_new (dockbook->dock->dialog_factory, dockbook->dock, identifier, preview_size); + if (new_dockable) + { + GimpDocked *old = GIMP_DOCKED (GTK_BIN (dockable)->child); + GimpDocked *new = GIMP_DOCKED (GTK_BIN (new_dockable)->child); + gboolean show; + + show = gimp_docked_get_show_button_bar (old); + gimp_docked_set_show_button_bar (new, show); + } + /* Maybe gimp_dialog_factory_dockable_new() returned * an already existing singleton dockable, so check * if it already is attached to a dockbook. @@ -283,10 +294,9 @@ dockable_show_button_bar_cmd_callback (GtkAction *action, if (dockable) { - GtkWidget *child = gtk_bin_get_child (GTK_BIN (dockable)); + gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); - if (GIMP_IS_EDITOR (child)) - gimp_editor_set_show_button_bar (GIMP_EDITOR (child), - gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))); + gimp_docked_set_show_button_bar (GIMP_DOCKED (GTK_BIN (dockable)->child), + show); } } diff --git a/app/widgets/gimpcontainereditor.c b/app/widgets/gimpcontainereditor.c index cb3a075846..3284969014 100644 --- a/app/widgets/gimpcontainereditor.c +++ b/app/widgets/gimpcontainereditor.c @@ -69,6 +69,11 @@ static GimpUIManager * gimp_container_editor_get_menu(GimpDocked *docked, const gchar **ui_path, gpointer *popup_data); +static gboolean gimp_container_editor_has_button_bar (GimpDocked *docked); +static void gimp_container_editor_set_show_button_bar (GimpDocked *docked, + gboolean show); +static gboolean gimp_container_editor_get_show_button_bar (GimpDocked *docked); + static GtkVBoxClass *parent_class = NULL; @@ -130,9 +135,12 @@ gimp_container_editor_init (GimpContainerEditor *view) static void gimp_container_editor_docked_iface_init (GimpDockedInterface *docked_iface) { - docked_iface->get_preview = gimp_container_editor_get_preview; - docked_iface->set_context = gimp_container_editor_set_context; - docked_iface->get_menu = gimp_container_editor_get_menu; + docked_iface->get_preview = gimp_container_editor_get_preview; + docked_iface->set_context = gimp_container_editor_set_context; + docked_iface->get_menu = gimp_container_editor_get_menu; + docked_iface->has_button_bar = gimp_container_editor_has_button_bar; + docked_iface->set_show_button_bar = gimp_container_editor_set_show_button_bar; + docked_iface->get_show_button_bar = gimp_container_editor_get_show_button_bar; } gboolean @@ -300,3 +308,28 @@ gimp_container_editor_get_menu (GimpDocked *docked, return gimp_docked_get_menu (GIMP_DOCKED (editor->view), ui_path, popup_data); } + +static gboolean +gimp_container_editor_has_button_bar (GimpDocked *docked) +{ + GimpContainerEditor *editor = GIMP_CONTAINER_EDITOR (docked); + + return gimp_docked_has_button_bar (GIMP_DOCKED (editor->view)); +} + +static void +gimp_container_editor_set_show_button_bar (GimpDocked *docked, + gboolean show) +{ + GimpContainerEditor *editor = GIMP_CONTAINER_EDITOR (docked); + + gimp_docked_set_show_button_bar (GIMP_DOCKED (editor->view), show); +} + +static gboolean +gimp_container_editor_get_show_button_bar (GimpDocked *docked) +{ + GimpContainerEditor *editor = GIMP_CONTAINER_EDITOR (docked); + + return gimp_docked_get_show_button_bar (GIMP_DOCKED (editor->view)); +} diff --git a/app/widgets/gimpdocked.c b/app/widgets/gimpdocked.c index 987cedf01f..ef49e79340 100644 --- a/app/widgets/gimpdocked.c +++ b/app/widgets/gimpdocked.c @@ -21,6 +21,8 @@ #include "config.h" +#include + #include #include "widgets-types.h" @@ -29,6 +31,7 @@ #include "core/gimpmarshal.h" #include "gimpdocked.h" +#include "gimpsessioninfo.h" enum @@ -38,7 +41,12 @@ enum }; -static void gimp_docked_iface_base_init (GimpDockedInterface *docked_iface); +static void gimp_docked_iface_base_init (GimpDockedInterface *docked_iface); + +static void gimp_docked_iface_set_aux_info (GimpDocked *docked, + GList *aux_info); +static GList * gimp_docked_iface_get_aux_info (GimpDocked *docked); + static guint docked_signals[LAST_SIGNAL] = { 0 }; @@ -74,6 +82,12 @@ gimp_docked_iface_base_init (GimpDockedInterface *docked_iface) { static gboolean initialized = FALSE; + if (! docked_iface->get_aux_info) + { + docked_iface->get_aux_info = gimp_docked_iface_get_aux_info; + docked_iface->set_aux_info = gimp_docked_iface_set_aux_info; + } + if (! initialized) { docked_signals[TITLE_CHANGED] = @@ -89,6 +103,41 @@ gimp_docked_iface_base_init (GimpDockedInterface *docked_iface) } } +#define AUX_INFO_SHOW_BUTTON_BAR "show-button-bar" + +static void +gimp_docked_iface_set_aux_info (GimpDocked *docked, + GList *aux_info) +{ + GList *list; + + for (list = aux_info; list; list = g_list_next (list)) + { + GimpSessionInfoAux *aux = list->data; + + if (strcmp (aux->name, AUX_INFO_SHOW_BUTTON_BAR) == 0) + { + gboolean show = g_ascii_strcasecmp (aux->value, "false"); + + gimp_docked_set_show_button_bar (docked, show); + } + } +} + +static GList * +gimp_docked_iface_get_aux_info (GimpDocked *docked) +{ + if (gimp_docked_has_button_bar (docked) && + ! gimp_docked_get_show_button_bar (docked)) + { + return g_list_append (NULL, + gimp_session_info_aux_new (AUX_INFO_SHOW_BUTTON_BAR, + "false")); + } + + return NULL; +} + void gimp_docked_title_changed (GimpDocked *docked) { @@ -191,3 +240,47 @@ gimp_docked_set_context (GimpDocked *docked, if (docked_iface->set_context) docked_iface->set_context (docked, context); } + +gboolean +gimp_docked_has_button_bar (GimpDocked *docked) +{ + GimpDockedInterface *docked_iface; + + g_return_val_if_fail (GIMP_IS_DOCKED (docked), FALSE); + + docked_iface = GIMP_DOCKED_GET_INTERFACE (docked); + + if (docked_iface->has_button_bar) + return docked_iface->has_button_bar (docked); + + return FALSE; +} + +void +gimp_docked_set_show_button_bar (GimpDocked *docked, + gboolean show) +{ + GimpDockedInterface *docked_iface; + + g_return_if_fail (GIMP_IS_DOCKED (docked)); + + docked_iface = GIMP_DOCKED_GET_INTERFACE (docked); + + if (docked_iface->set_show_button_bar) + docked_iface->set_show_button_bar (docked, show ? TRUE : FALSE); +} + +gboolean +gimp_docked_get_show_button_bar (GimpDocked *docked) +{ + GimpDockedInterface *docked_iface; + + g_return_val_if_fail (GIMP_IS_DOCKED (docked), FALSE); + + docked_iface = GIMP_DOCKED_GET_INTERFACE (docked); + + if (docked_iface->get_show_button_bar) + return docked_iface->get_show_button_bar (docked); + + return FALSE; +} diff --git a/app/widgets/gimpdocked.h b/app/widgets/gimpdocked.h index d000a34aef..672b08ff72 100644 --- a/app/widgets/gimpdocked.h +++ b/app/widgets/gimpdocked.h @@ -36,44 +36,54 @@ struct _GimpDockedInterface GTypeInterface base_iface; /* signals */ - void (* title_changed) (GimpDocked *docked); + void (* title_changed) (GimpDocked *docked); /* virtual functions */ - void (* set_aux_info) (GimpDocked *docked, - GList *aux_info); - GList * (* get_aux_info) (GimpDocked *docked); + void (* set_aux_info) (GimpDocked *docked, + GList *aux_info); + GList * (* get_aux_info) (GimpDocked *docked); - GtkWidget * (* get_preview) (GimpDocked *docked, - GimpContext *context, - GtkIconSize size); - GimpUIManager * (* get_menu) (GimpDocked *docked, - const gchar **ui_path, - gpointer *popup_data); - gchar * (* get_title) (GimpDocked *docked); + GtkWidget * (* get_preview) (GimpDocked *docked, + GimpContext *context, + GtkIconSize size); + GimpUIManager * (* get_menu) (GimpDocked *docked, + const gchar **ui_path, + gpointer *popup_data); + gchar * (* get_title) (GimpDocked *docked); - void (* set_context) (GimpDocked *docked, - GimpContext *context); + void (* set_context) (GimpDocked *docked, + GimpContext *context); + + gboolean (* has_button_bar) (GimpDocked *docked); + void (* set_show_button_bar) (GimpDocked *docked, + gboolean show); + gboolean (* get_show_button_bar) (GimpDocked *docked); }; -GType gimp_docked_interface_get_type (void) G_GNUC_CONST; +GType gimp_docked_interface_get_type (void) G_GNUC_CONST; -void gimp_docked_title_changed (GimpDocked *docked); +void gimp_docked_title_changed (GimpDocked *docked); -void gimp_docked_set_aux_info (GimpDocked *docked, - GList *aux_info); -GList * gimp_docked_get_aux_info (GimpDocked *docked); +void gimp_docked_set_aux_info (GimpDocked *docked, + GList *aux_info); +GList * gimp_docked_get_aux_info (GimpDocked *docked); -GtkWidget * gimp_docked_get_preview (GimpDocked *docked, - GimpContext *context, - GtkIconSize size); -GimpUIManager * gimp_docked_get_menu (GimpDocked *docked, - const gchar **ui_path, - gpointer *popup_data); -gchar * gimp_docked_get_title (GimpDocked *docked); +GtkWidget * gimp_docked_get_preview (GimpDocked *docked, + GimpContext *context, + GtkIconSize size); +GimpUIManager * gimp_docked_get_menu (GimpDocked *docked, + const gchar **ui_path, + gpointer *popup_data); +gchar * gimp_docked_get_title (GimpDocked *docked); -void gimp_docked_set_context (GimpDocked *docked, - GimpContext *context); +void gimp_docked_set_context (GimpDocked *docked, + GimpContext *context); + +gboolean gimp_docked_has_button_bar (GimpDocked *docked); +void gimp_docked_set_show_button_bar (GimpDocked *docked, + gboolean show); +gboolean gimp_docked_get_show_button_bar (GimpDocked *docked); #endif /* __GIMP_DOCKED_H__ */ diff --git a/app/widgets/gimpeditor.c b/app/widgets/gimpeditor.c index 112cd672dc..f3783cc8f1 100644 --- a/app/widgets/gimpeditor.c +++ b/app/widgets/gimpeditor.c @@ -21,8 +21,6 @@ #include "config.h" -#include - #include #include "libgimpwidgets/gimpwidgets.h" @@ -33,7 +31,6 @@ #include "gimpeditor.h" #include "gimpdnd.h" #include "gimpmenufactory.h" -#include "gimpsessioninfo.h" #include "gimpuimanager.h" #include "gimpwidgets-utils.h" @@ -53,8 +50,7 @@ enum PROP_UI_PATH, PROP_POPUP_DATA, PROP_SHOW_NAME, - PROP_NAME, - PROP_SHOW_BUTTON_BAR + PROP_NAME }; @@ -77,15 +73,15 @@ static void gimp_editor_destroy (GtkObject *object); static void gimp_editor_style_set (GtkWidget *widget, GtkStyle *prev_style); -static void gimp_editor_set_aux_info (GimpDocked *docked, - GList *aux_info); -static GList * gimp_editor_get_aux_info (GimpDocked *docked); +static GimpUIManager * gimp_editor_get_menu (GimpDocked *docked, + const gchar **ui_path, + gpointer *popup_data); +static gboolean gimp_editor_has_button_bar (GimpDocked *docked); +static void gimp_editor_set_show_button_bar (GimpDocked *docked, + gboolean show); +static gboolean gimp_editor_get_show_button_bar (GimpDocked *docked); -static GimpUIManager * gimp_editor_get_menu (GimpDocked *docked, - const gchar **ui_path, - gpointer *popup_data); - -static GtkIconSize gimp_editor_ensure_button_box (GimpEditor *editor); +static GtkIconSize gimp_editor_ensure_button_box (GimpEditor *editor); static GtkVBoxClass *parent_class = NULL; @@ -186,13 +182,6 @@ gimp_editor_class_init (GimpEditorClass *klass) G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); - g_object_class_install_property (object_class, PROP_SHOW_BUTTON_BAR, - g_param_spec_boolean ("show-button-bar", - NULL, NULL, - TRUE, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT)); - gtk_widget_class_install_style_property (widget_class, g_param_spec_int ("content_spacing", NULL, NULL, @@ -226,6 +215,7 @@ gimp_editor_init (GimpEditor *editor) editor->ui_path = NULL; editor->popup_data = editor; editor->button_box = NULL; + editor->show_button_bar = TRUE; editor->name_label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0, @@ -243,9 +233,10 @@ gimp_editor_docked_iface_init (GimpDockedInterface *docked_iface) { parent_docked_iface = g_type_interface_peek_parent (docked_iface); - docked_iface->set_aux_info = gimp_editor_set_aux_info; - docked_iface->get_aux_info = gimp_editor_get_aux_info; - docked_iface->get_menu = gimp_editor_get_menu; + docked_iface->get_menu = gimp_editor_get_menu; + docked_iface->has_button_bar = gimp_editor_has_button_bar; + docked_iface->set_show_button_bar = gimp_editor_set_show_button_bar; + docked_iface->get_show_button_bar = gimp_editor_get_show_button_bar; } static GObject * @@ -303,9 +294,6 @@ gimp_editor_set_property (GObject *object, case PROP_NAME: gimp_editor_set_name (editor, g_value_get_string (value)); break; - case PROP_SHOW_BUTTON_BAR: - gimp_editor_set_show_button_bar (editor, g_value_get_boolean (value)); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -337,9 +325,6 @@ gimp_editor_get_property (GObject *object, case PROP_SHOW_NAME: g_object_get_property (G_OBJECT (editor->name_label), "visible", value); break; - case PROP_SHOW_BUTTON_BAR: - g_value_set_boolean (value, editor->show_button_bar); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -396,51 +381,6 @@ gimp_editor_style_set (GtkWidget *widget, gimp_editor_set_box_style (editor, GTK_BOX (editor->button_box)); } - -#define AUX_INFO_SHOW_BUTTON_BAR "show-button-bar" - -static void -gimp_editor_set_aux_info (GimpDocked *docked, - GList *aux_info) -{ - GList *list; - - if (parent_docked_iface && parent_docked_iface->set_aux_info) - parent_docked_iface->set_aux_info (docked, aux_info); - - for (list = aux_info; list; list = g_list_next (list)) - { - GimpSessionInfoAux *aux = list->data; - - if (strcmp (aux->name, AUX_INFO_SHOW_BUTTON_BAR) == 0) - { - gboolean show = g_ascii_strcasecmp (aux->value, "false"); - - gimp_editor_set_show_button_bar (GIMP_EDITOR (docked), show); - } - } -} - -static GList * -gimp_editor_get_aux_info (GimpDocked *docked) -{ - GimpEditor *editor = GIMP_EDITOR (docked); - GList *aux_info = NULL; - - if (parent_docked_iface && parent_docked_iface->set_aux_info) - aux_info = parent_docked_iface->get_aux_info (docked); - - if (! editor->show_button_bar) - { - aux_info = - g_list_append (aux_info, - gimp_session_info_aux_new (AUX_INFO_SHOW_BUTTON_BAR, - "false")); - } - - return aux_info; -} - static GimpUIManager * gimp_editor_get_menu (GimpDocked *docked, const gchar **ui_path, @@ -454,14 +394,47 @@ gimp_editor_get_menu (GimpDocked *docked, return editor->ui_manager; } + +static gboolean +gimp_editor_has_button_bar (GimpDocked *docked) +{ + GimpEditor *editor = GIMP_EDITOR (docked); + + return editor->button_box != NULL; +} + +static void +gimp_editor_set_show_button_bar (GimpDocked *docked, + gboolean show) +{ + GimpEditor *editor = GIMP_EDITOR (docked); + + if (show != editor->show_button_bar) + { + editor->show_button_bar = show; + + if (editor->button_box) + { + if (show) + gtk_widget_show (editor->button_box); + else + gtk_widget_hide (editor->button_box); + } + } +} + +static gboolean +gimp_editor_get_show_button_bar (GimpDocked *docked) +{ + GimpEditor *editor = GIMP_EDITOR (docked); + + return editor->show_button_bar; +} + GtkWidget * gimp_editor_new (void) { - GimpEditor *editor; - - editor = g_object_new (GIMP_TYPE_EDITOR, NULL); - - return GTK_WIDGET (editor); + return g_object_new (GIMP_TYPE_EDITOR, NULL); } void @@ -831,46 +804,6 @@ gimp_editor_set_box_style (GimpEditor *editor, g_list_free (children); } -gboolean -gimp_editor_has_button_bar (GimpEditor *editor) -{ - g_return_val_if_fail (GIMP_IS_EDITOR (editor), FALSE); - - return editor->button_box != NULL; -} - -void -gimp_editor_set_show_button_bar (GimpEditor *editor, - gboolean show) -{ - g_return_if_fail (GIMP_IS_EDITOR (editor)); - - show = show ? TRUE : FALSE; - - if (show != editor->show_button_bar) - { - editor->show_button_bar = show; - - if (editor->button_box) - { - if (show) - gtk_widget_show (editor->button_box); - else - gtk_widget_hide (editor->button_box); - } - - g_object_notify (G_OBJECT (editor), "show-button-bar"); - } -} - -gboolean -gimp_editor_get_show_button_bar (GimpEditor *editor) -{ - g_return_val_if_fail (GIMP_IS_EDITOR (editor), FALSE); - - return editor->show_button_bar; -} - /* private functions */ diff --git a/app/widgets/gimpeditor.h b/app/widgets/gimpeditor.h index f56e90acb7..66ff63f7df 100644 --- a/app/widgets/gimpeditor.h +++ b/app/widgets/gimpeditor.h @@ -96,10 +96,5 @@ void gimp_editor_set_name (GimpEditor *editor, void gimp_editor_set_box_style (GimpEditor *editor, GtkBox *box); -gboolean gimp_editor_has_button_bar (GimpEditor *editor); -void gimp_editor_set_show_button_bar (GimpEditor *editor, - gboolean show); -gboolean gimp_editor_get_show_button_bar (GimpEditor *editor); - #endif /* __GIMP_EDITOR_H__ */