app: add tool-group support to GimpToolEditor

Add tool-group support to GimpToolEditor, used to organize tools in
the Preferences dialog, including creating, rearranging, and
deleting groups.  Also, major cleanup.
This commit is contained in:
Ell 2020-01-29 21:22:05 +02:00
parent 20747e365c
commit d1084c5816
10 changed files with 823 additions and 522 deletions

View File

@ -2150,8 +2150,7 @@ prefs_dialog_new (Gimp *gimp,
/* Tool Editor */
vbox2 = prefs_frame_new (_("Tools Configuration"),
GTK_CONTAINER (vbox), TRUE);
tool_editor = gimp_tool_editor_new (gimp->tool_info_list, gimp->user_context,
gimp_tools_get_default_order (gimp),
tool_editor = gimp_tool_editor_new (gimp->tool_item_list, gimp->user_context,
GIMP_VIEW_SIZE_SMALL, 1);
gtk_box_pack_start (GTK_BOX (vbox2), tool_editor, TRUE, TRUE, 0);

View File

@ -197,9 +197,7 @@ gimp_tools_init (Gimp *gimp)
gimp_operation_tool_register
};
GList *default_order = NULL;
GList *list;
gint i;
gint i;
g_return_if_fail (GIMP_IS_GIMP (gimp));
@ -217,20 +215,6 @@ gimp_tools_init (Gimp *gimp)
gimp_tool_options_manager_init (gimp);
tool_manager_init (gimp);
for (list = gimp_get_tool_info_iter (gimp);
list;
list = g_list_next (list))
{
const gchar *identifier = gimp_object_get_name (list->data);
default_order = g_list_prepend (default_order, g_strdup (identifier));
}
default_order = g_list_reverse (default_order);
g_object_set_data (G_OBJECT (gimp),
"gimp-tools-default-order", default_order);
}
void
@ -633,15 +617,6 @@ gimp_tools_reset (Gimp *gimp,
gimp_container_thaw (container);
}
GList *
gimp_tools_get_default_order (Gimp *gimp)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
return g_object_get_data (G_OBJECT (gimp),
"gimp-tools-default-order");
}
/* private functions */
@ -748,9 +723,6 @@ gimp_tools_register (GType tool_type,
if (tool_type == GIMP_TYPE_OPERATION_TOOL)
tool_info->hidden = TRUE;
g_object_set_data (G_OBJECT (tool_info), "gimp-tool-default-visible",
GINT_TO_POINTER (visible));
g_object_set_data (G_OBJECT (tool_info), "gimp-tool-options-gui-func",
options_gui_func);

View File

@ -19,29 +19,27 @@
#define __GIMP_TOOLS_H__
void gimp_tools_init (Gimp *gimp);
void gimp_tools_exit (Gimp *gimp);
void gimp_tools_init (Gimp *gimp);
void gimp_tools_exit (Gimp *gimp);
void gimp_tools_restore (Gimp *gimp);
void gimp_tools_save (Gimp *gimp,
gboolean save_tool_options,
gboolean always_save);
void gimp_tools_restore (Gimp *gimp);
void gimp_tools_save (Gimp *gimp,
gboolean save_tool_options,
gboolean always_save);
gboolean gimp_tools_clear (Gimp *gimp,
GError **error);
gboolean gimp_tools_clear (Gimp *gimp,
GError **error);
gboolean gimp_tools_serialize (Gimp *gimp,
GimpContainer *container,
GimpConfigWriter *writer);
gboolean gimp_tools_deserialize (Gimp *gimp,
GimpContainer *container,
GScanner *scanner);
gboolean gimp_tools_serialize (Gimp *gimp,
GimpContainer *container,
GimpConfigWriter *writer);
gboolean gimp_tools_deserialize (Gimp *gimp,
GimpContainer *container,
GScanner *scanner);
void gimp_tools_reset (Gimp *gimp,
GimpContainer *container,
gboolean user_toolrc);
GList * gimp_tools_get_default_order (Gimp *gimp);
void gimp_tools_reset (Gimp *gimp,
GimpContainer *container,
gboolean user_toolrc);
#endif /* __GIMP_TOOLS_H__ */

View File

@ -42,7 +42,7 @@
#include "core/gimppalette.h"
#include "core/gimppattern.h"
#include "core/gimptemplate.h"
#include "core/gimptoolinfo.h"
#include "core/gimptoolitem.h"
#include "text/gimpfont.h"
@ -98,168 +98,168 @@ struct _GimpDndDataDef
};
static GtkWidget * gimp_dnd_get_viewable_icon (GtkWidget *widget,
GdkDragContext *context,
GCallback get_viewable_func,
gpointer get_viewable_data);
static GtkWidget * gimp_dnd_get_component_icon (GtkWidget *widget,
GdkDragContext *context,
GCallback get_comp_func,
gpointer get_comp_data);
static GtkWidget * gimp_dnd_get_color_icon (GtkWidget *widget,
GdkDragContext *context,
GCallback get_color_func,
gpointer get_color_data);
static GtkWidget * gimp_dnd_get_viewable_icon (GtkWidget *widget,
GdkDragContext *context,
GCallback get_viewable_func,
gpointer get_viewable_data);
static GtkWidget * gimp_dnd_get_component_icon (GtkWidget *widget,
GdkDragContext *context,
GCallback get_comp_func,
gpointer get_comp_data);
static GtkWidget * gimp_dnd_get_color_icon (GtkWidget *widget,
GdkDragContext *context,
GCallback get_color_func,
gpointer get_color_data);
static void gimp_dnd_get_uri_list_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_uri_list_func,
gpointer get_uri_list_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_uri_list_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_uri_list_func,
gpointer set_uri_list_data,
GtkSelectionData *selection);
static void gimp_dnd_get_uri_list_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_uri_list_func,
gpointer get_uri_list_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_uri_list_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_uri_list_func,
gpointer set_uri_list_data,
GtkSelectionData *selection);
static void gimp_dnd_get_xds_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_image_func,
gpointer get_image_data,
GtkSelectionData *selection);
static void gimp_dnd_get_xds_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_image_func,
gpointer get_image_data,
GtkSelectionData *selection);
static void gimp_dnd_get_color_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_color_func,
gpointer get_color_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_color_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_color_func,
gpointer set_color_data,
GtkSelectionData *selection);
static void gimp_dnd_get_color_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_color_func,
gpointer get_color_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_color_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_color_func,
gpointer set_color_data,
GtkSelectionData *selection);
static void gimp_dnd_get_stream_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_stream_func,
gpointer get_stream_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_stream_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_stream_func,
gpointer set_stream_data,
GtkSelectionData *selection);
static void gimp_dnd_get_stream_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_stream_func,
gpointer get_stream_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_stream_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_stream_func,
gpointer set_stream_data,
GtkSelectionData *selection);
static void gimp_dnd_get_pixbuf_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_pixbuf_func,
gpointer get_pixbuf_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_pixbuf_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_pixbuf_func,
gpointer set_pixbuf_data,
GtkSelectionData *selection);
static void gimp_dnd_get_component_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_comp_func,
gpointer get_comp_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_component_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_comp_func,
gpointer set_comp_data,
GtkSelectionData *selection);
static void gimp_dnd_get_pixbuf_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_pixbuf_func,
gpointer get_pixbuf_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_pixbuf_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_pixbuf_func,
gpointer set_pixbuf_data,
GtkSelectionData *selection);
static void gimp_dnd_get_component_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_comp_func,
gpointer get_comp_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_component_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_comp_func,
gpointer set_comp_data,
GtkSelectionData *selection);
static void gimp_dnd_get_image_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_image_func,
gpointer get_image_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_image_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_image_func,
gpointer set_image_data,
GtkSelectionData *selection);
static void gimp_dnd_get_image_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_image_func,
gpointer get_image_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_image_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_image_func,
gpointer set_image_data,
GtkSelectionData *selection);
static void gimp_dnd_get_item_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_item_func,
gpointer get_item_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_item_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_item_func,
gpointer set_item_data,
GtkSelectionData *selection);
static void gimp_dnd_get_item_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_item_func,
gpointer get_item_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_item_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_item_func,
gpointer set_item_data,
GtkSelectionData *selection);
static void gimp_dnd_get_object_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_object_func,
gpointer get_object_data,
GtkSelectionData *selection);
static void gimp_dnd_get_object_data (GtkWidget *widget,
GdkDragContext *context,
GCallback get_object_func,
gpointer get_object_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_brush_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_brush_func,
gpointer set_brush_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_pattern_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_pattern_func,
gpointer set_pattern_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_gradient_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_gradient_func,
gpointer set_gradient_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_palette_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_palette_func,
gpointer set_palette_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_font_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_font_func,
gpointer set_font_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_buffer_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_buffer_func,
gpointer set_buffer_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_imagefile_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_imagefile_func,
gpointer set_imagefile_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_template_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_template_func,
gpointer set_template_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_tool_info_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_tool_info_func,
gpointer set_tool_info_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_brush_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_brush_func,
gpointer set_brush_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_pattern_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_pattern_func,
gpointer set_pattern_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_gradient_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_gradient_func,
gpointer set_gradient_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_palette_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_palette_func,
gpointer set_palette_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_font_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_font_func,
gpointer set_font_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_buffer_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_buffer_func,
gpointer set_buffer_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_imagefile_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_imagefile_func,
gpointer set_imagefile_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_template_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_template_func,
gpointer set_template_data,
GtkSelectionData *selection);
static gboolean gimp_dnd_set_tool_item_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_tool_item_func,
gpointer set_tool_item_data,
GtkSelectionData *selection);
@ -585,17 +585,17 @@ static const GimpDndDataDef dnd_data_defs[] =
},
{
GIMP_TARGET_TOOL_INFO,
GIMP_TARGET_TOOL_ITEM,
"gimp-dnd-get-tool-info-func",
"gimp-dnd-get-tool-info-data",
"gimp-dnd-get-tool-item-func",
"gimp-dnd-get-tool-item-data",
"gimp-dnd-set-tool-info-func",
"gimp-dnd-set-tool-info-data",
"gimp-dnd-set-tool-item-func",
"gimp-dnd-set-tool-item-data",
gimp_dnd_get_viewable_icon,
gimp_dnd_get_object_data,
gimp_dnd_set_tool_info_data
gimp_dnd_set_tool_item_data
},
{
@ -1923,9 +1923,9 @@ gimp_dnd_data_type_get_by_g_type (GType type)
{
dnd_type = GIMP_DND_TYPE_TEMPLATE;
}
else if (g_type_is_a (type, GIMP_TYPE_TOOL_INFO))
else if (g_type_is_a (type, GIMP_TYPE_TOOL_ITEM))
{
dnd_type = GIMP_DND_TYPE_TOOL_INFO;
dnd_type = GIMP_DND_TYPE_TOOL_ITEM;
}
return dnd_type;
@ -2437,29 +2437,29 @@ gimp_dnd_set_template_data (GtkWidget *widget,
}
/********************************/
/* GimpToolInfo dnd functions */
/********************************/
/*********************************/
/* GimpToolEntry dnd functions */
/*********************************/
static gboolean
gimp_dnd_set_tool_info_data (GtkWidget *widget,
gimp_dnd_set_tool_item_data (GtkWidget *widget,
gint x,
gint y,
GCallback set_tool_info_func,
gpointer set_tool_info_data,
GCallback set_tool_item_func,
gpointer set_tool_item_data,
GtkSelectionData *selection)
{
GimpToolInfo *tool_info = gimp_selection_data_get_tool_info (selection,
GimpToolItem *tool_item = gimp_selection_data_get_tool_item (selection,
the_dnd_gimp);
GIMP_LOG (DND, "tool_info %p", tool_info);
GIMP_LOG (DND, "tool_item %p", tool_item);
if (! tool_info)
if (! tool_item)
return FALSE;
(* (GimpDndDropViewableFunc) set_tool_info_func) (widget, x, y,
GIMP_VIEWABLE (tool_info),
set_tool_info_data);
(* (GimpDndDropViewableFunc) set_tool_item_func) (widget, x, y,
GIMP_VIEWABLE (tool_item),
set_tool_item_data);
return TRUE;
}

View File

@ -88,8 +88,8 @@
#define GIMP_TARGET_TEMPLATE \
{ "application/x-gimp-template-name", GTK_TARGET_SAME_APP, GIMP_DND_TYPE_TEMPLATE }
#define GIMP_TARGET_TOOL_INFO \
{ "application/x-gimp-tool-info-name", GTK_TARGET_SAME_APP, GIMP_DND_TYPE_TOOL_INFO }
#define GIMP_TARGET_TOOL_ITEM \
{ "application/x-gimp-tool-item-name", GTK_TARGET_SAME_APP, GIMP_DND_TYPE_TOOL_ITEM }
#define GIMP_TARGET_NOTEBOOK_TAB \
{ "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, GIMP_DND_TYPE_NOTEBOOK_TAB }

View File

@ -753,17 +753,29 @@ gimp_selection_data_get_template (GtkSelectionData *selection,
NULL);
}
GimpToolInfo *
gimp_selection_data_get_tool_info (GtkSelectionData *selection,
GimpToolItem *
gimp_selection_data_get_tool_item (GtkSelectionData *selection,
Gimp *gimp)
{
GimpToolItem *tool_item;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (selection != NULL, NULL);
return (GimpToolInfo *)
tool_item = (GimpToolItem *)
gimp_selection_data_get_object (selection,
gimp->tool_info_list,
GIMP_OBJECT (gimp_tool_info_get_standard (gimp)));
if (! tool_item)
{
tool_item = (GimpToolItem *)
gimp_selection_data_get_object (selection,
gimp->tool_item_list,
NULL);
}
return tool_item;
}

View File

@ -105,7 +105,7 @@ GimpImagefile * gimp_selection_data_get_imagefile (GtkSelectionData *selection,
Gimp *gimp);
GimpTemplate * gimp_selection_data_get_template (GtkSelectionData *selection,
Gimp *gimp);
GimpToolInfo * gimp_selection_data_get_tool_info (GtkSelectionData *selection,
GimpToolItem * gimp_selection_data_get_tool_item (GtkSelectionData *selection,
Gimp *gimp);

File diff suppressed because it is too large Load Diff

View File

@ -34,16 +34,19 @@
#define GIMP_TOOL_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_TOOL_EDITOR, GimpToolEditorClass))
typedef struct _GimpToolEditorClass GimpToolEditorClass;
typedef struct _GimpToolEditorPrivate GimpToolEditorPrivate;
typedef struct _GimpToolEditorClass GimpToolEditorClass;
struct _GimpToolEditor
{
GimpContainerTreeView parent_instance;
GimpContainerTreeView parent_instance;
GimpToolEditorPrivate *priv;
};
struct _GimpToolEditorClass
{
GimpContainerTreeViewClass parent_class;
GimpContainerTreeViewClass parent_class;
};
@ -51,7 +54,6 @@ GType gimp_tool_editor_get_type (void) G_GNUC_CONST;
GtkWidget * gimp_tool_editor_new (GimpContainer *container,
GimpContext *context,
GList *default_tool_order,
gint view_size,
gint view_border_width);

View File

@ -164,7 +164,7 @@ typedef enum /*< skip >*/
GIMP_DND_TYPE_BUFFER = 20,
GIMP_DND_TYPE_IMAGEFILE = 21,
GIMP_DND_TYPE_TEMPLATE = 22,
GIMP_DND_TYPE_TOOL_INFO = 23,
GIMP_DND_TYPE_TOOL_ITEM = 23,
GIMP_DND_TYPE_NOTEBOOK_TAB = 24,
GIMP_DND_TYPE_LAST = GIMP_DND_TYPE_NOTEBOOK_TAB