added a "item_activate_func" to the struct and the constructor so we can

2002-02-26  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimpitemlistview.[ch]: added a "item_activate_func"
	to the struct and the constructor so we can distinguish double
	click from right click in the callbacks.

	* app/widgets/gimpvectorslistview.[ch]: added a "item_stroke_func".

	* app/widgets/gimpchannellistview.c: reorder the "To Selection" button.

	* app/gui/dialogs-constructors.c: changed accordingly.

	* app/gui/menus.c: added separators and some new items to the
	vectors menu. Use the SELECTION_REPLACE, _ADD, ... icons for
	the resp. menu items.

	* app/gui/vectors-commands.[ch]: added empty callbacks for the new
	menu items, put the stroke stuff to an own function which is used
	as "item_stroke_func" when creating GimpVectorsListViews.
This commit is contained in:
Michael Natterer 2002-02-26 14:40:30 +00:00 committed by Michael Natterer
parent 52d07c9646
commit 17c27e5ee0
19 changed files with 556 additions and 160 deletions

View File

@ -1,3 +1,23 @@
2002-02-26 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpitemlistview.[ch]: added a "item_activate_func"
to the struct and the constructor so we can distinguish double
click from right click in the callbacks.
* app/widgets/gimpvectorslistview.[ch]: added a "item_stroke_func".
* app/widgets/gimpchannellistview.c: reorder the "To Selection" button.
* app/gui/dialogs-constructors.c: changed accordingly.
* app/gui/menus.c: added separators and some new items to the
vectors menu. Use the SELECTION_REPLACE, _ADD, ... icons for
the resp. menu items.
* app/gui/vectors-commands.[ch]: added empty callbacks for the new
menu items, put the stroke stuff to an own function which is used
as "item_stroke_func" when creating GimpVectorsListViews.
2002-02-26 Michael Natterer <mitch@gimp.org> 2002-02-26 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage-mask-select.[ch]: implemented * app/core/gimpimage-mask-select.[ch]: implemented

View File

@ -229,16 +229,148 @@ void
vectors_stroke_vectors_cmd_callback (GtkWidget *widget, vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
GimpImage *gimage; GimpImage *gimage;
GimpVectors *active_vectors; GimpVectors *active_vectors;
GimpDrawable *active_drawable;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget); gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage) if (! gimage)
return; return;
active_vectors = gimp_image_get_active_vectors (gimage); active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
vectors_stroke_vectors (active_vectors);
}
}
void
vectors_copy_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_paste_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_import_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_export_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_vectors_tool_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
vectors_vectors_tool (active_vectors);
}
}
void
vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
vectors_edit_vectors_query (active_vectors);
}
}
void
vectors_stroke_vectors (GimpVectors *vectors)
{
GimpImage *gimage;
GimpDrawable *active_drawable;
g_return_if_fail (GIMP_IS_VECTORS (vectors));
gimage = gimp_item_get_image (GIMP_ITEM (vectors));
active_drawable = gimp_image_active_drawable (gimage); active_drawable = gimp_image_active_drawable (gimage);
if (! active_drawable) if (! active_drawable)
@ -247,7 +379,7 @@ vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
return; return;
} }
if (active_vectors && active_vectors->strokes) if (vectors && vectors->strokes)
{ {
GimpTool *active_tool; GimpTool *active_tool;
GimpPaintCore *core; GimpPaintCore *core;
@ -284,7 +416,7 @@ vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
gimp_paint_core_stroke_vectors (core, gimp_paint_core_stroke_vectors (core,
active_drawable, active_drawable,
paint_options, paint_options,
active_vectors); vectors);
tool_manager_control_active (gimage->gimp, RESUME, gdisp); tool_manager_control_active (gimage->gimp, RESUME, gdisp);
@ -295,25 +427,33 @@ vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
} }
void void
vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget, vectors_vectors_tool (GimpVectors *vectors)
gpointer data)
{ {
GimpImage *gimage; GimpImage *gimage;
GimpVectors *active_vectors; GimpTool *active_tool;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget); g_return_if_fail (GIMP_IS_VECTORS (vectors));
if (! gimage) gimage = gimp_item_get_image (GIMP_ITEM (vectors));
return;
active_vectors = gimp_image_get_active_vectors (gimage); active_tool = tool_manager_get_active (gimage->gimp);
if (active_vectors) if (! GIMP_IS_VECTOR_TOOL (active_tool))
{ {
vectors_edit_vectors_query (active_vectors); GimpToolInfo *tool_info;
}
}
tool_info = tool_manager_get_info_by_type (gimage->gimp,
GIMP_TYPE_VECTOR_TOOL);
gimp_context_set_tool (gimp_get_current_context (gimage->gimp),
tool_info);
active_tool = tool_manager_get_active (gimage->gimp);
}
gimp_vector_tool_set_vectors (GIMP_VECTOR_TOOL (active_tool),
vectors);
}
/**********************************/ /**********************************/
/* The new vectors query dialog */ /* The new vectors query dialog */
@ -501,29 +641,7 @@ vectors_edit_vectors_query (GimpVectors *vectors)
GtkWidget *table; GtkWidget *table;
GtkWidget *label; GtkWidget *label;
{ g_return_if_fail (GIMP_IS_VECTORS (vectors));
Gimp *gimp;
GimpTool *active_tool;
gimp = GIMP_ITEM (vectors)->gimage->gimp;
active_tool = tool_manager_get_active (gimp);
if (! GIMP_IS_VECTOR_TOOL (active_tool))
{
GimpToolInfo *tool_info;
tool_info = tool_manager_get_info_by_type (gimp, GIMP_TYPE_VECTOR_TOOL);
gimp_context_set_tool (gimp_get_current_context (gimp), tool_info);
active_tool = tool_manager_get_active (gimp);
}
gimp_vector_tool_set_vectors (GIMP_VECTOR_TOOL (active_tool), vectors);
return;
}
options = g_new0 (EditVectorsOptions, 1); options = g_new0 (EditVectorsOptions, 1);
@ -599,6 +717,7 @@ vectors_menu_update (GtkItemFactory *factory,
GimpImage *gimage; GimpImage *gimage;
GimpVectors *vectors; GimpVectors *vectors;
gboolean mask_empty; gboolean mask_empty;
gboolean global_buf;
GList *list; GList *list;
GList *next = NULL; GList *next = NULL;
GList *prev = NULL; GList *prev = NULL;
@ -609,6 +728,8 @@ vectors_menu_update (GtkItemFactory *factory,
mask_empty = gimp_image_mask_is_empty (gimage); mask_empty = gimp_image_mask_is_empty (gimage);
global_buf = FALSE;
for (list = GIMP_LIST (gimage->vectors)->list; for (list = GIMP_LIST (gimage->vectors)->list;
list; list;
list = g_list_next (list)) list = g_list_next (list))
@ -635,6 +756,11 @@ vectors_menu_update (GtkItemFactory *factory,
SET_SENSITIVE ("/Selection to Path", ! mask_empty); SET_SENSITIVE ("/Selection to Path", ! mask_empty);
SET_SENSITIVE ("/Stroke Path", vectors); SET_SENSITIVE ("/Stroke Path", vectors);
SET_SENSITIVE ("/Delete Path", vectors); SET_SENSITIVE ("/Delete Path", vectors);
SET_SENSITIVE ("/Copy Path", vectors);
SET_SENSITIVE ("/Paste Path", global_buf);
SET_SENSITIVE ("/Import Path...", TRUE);
SET_SENSITIVE ("/Export Path...", vectors);
SET_SENSITIVE ("/Path Tool", vectors);
SET_SENSITIVE ("/Edit Path Attributes...", vectors); SET_SENSITIVE ("/Edit Path Attributes...", vectors);
#undef SET_SENSITIVE #undef SET_SENSITIVE

View File

@ -42,9 +42,21 @@ void vectors_sel_to_vectors_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void vectors_stroke_vectors_cmd_callback (GtkWidget *widget, void vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void vectors_copy_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_paste_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_import_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_export_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_vectors_tool_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget, void vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void vectors_stroke_vectors (GimpVectors *vectors);
void vectors_vectors_tool (GimpVectors *vectors);
void vectors_new_vectors_query (GimpImage *gimage, void vectors_new_vectors_query (GimpImage *gimage,
GimpVectors *template); GimpVectors *template);
void vectors_edit_vectors_query (GimpVectors *vectors); void vectors_edit_vectors_query (GimpVectors *vectors);

View File

@ -51,6 +51,7 @@
#include "widgets/gimpdocumentview.h" #include "widgets/gimpdocumentview.h"
#include "widgets/gimplistitem.h" #include "widgets/gimplistitem.h"
#include "widgets/gimppreview.h" #include "widgets/gimppreview.h"
#include "widgets/gimpvectorslistview.h"
#include "about-dialog.h" #include "about-dialog.h"
#include "brush-editor.h" #include "brush-editor.h"
@ -735,6 +736,7 @@ dialogs_layer_list_view_new (GimpDialogFactory *factory,
(GimpConvertItemFunc) gimp_layer_new_from_drawable, (GimpConvertItemFunc) gimp_layer_new_from_drawable,
(GimpNewItemFunc) layers_new_layer_query, (GimpNewItemFunc) layers_new_layer_query,
(GimpEditItemFunc) layers_edit_layer_query, (GimpEditItemFunc) layers_edit_layer_query,
(GimpActivateItemFunc) layers_edit_layer_query,
gimp_item_factory_from_path ("<Layers>")); gimp_item_factory_from_path ("<Layers>"));
dockable = dialogs_dockable_new (view, dockable = dialogs_dockable_new (view,
@ -773,6 +775,7 @@ dialogs_channel_list_view_new (GimpDialogFactory *factory,
(GimpConvertItemFunc) NULL, (GimpConvertItemFunc) NULL,
(GimpNewItemFunc) channels_new_channel_query, (GimpNewItemFunc) channels_new_channel_query,
(GimpEditItemFunc) channels_edit_channel_query, (GimpEditItemFunc) channels_edit_channel_query,
(GimpActivateItemFunc) channels_edit_channel_query,
gimp_item_factory_from_path ("<Channels>")); gimp_item_factory_from_path ("<Channels>"));
dockable = dialogs_dockable_new (view, dockable = dialogs_dockable_new (view,
@ -801,9 +804,10 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
GimpContext *context, GimpContext *context,
gint preview_size) gint preview_size)
{ {
GimpImage *gimage; GimpImage *gimage;
GtkWidget *view; GimpVectorsListView *vectors_view;
GtkWidget *dockable; GtkWidget *view;
GtkWidget *dockable;
gimage = gimp_context_get_image (context); gimage = gimp_context_get_image (context);
@ -822,8 +826,13 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
(GimpConvertItemFunc) NULL, (GimpConvertItemFunc) NULL,
(GimpNewItemFunc) vectors_new_vectors_query, (GimpNewItemFunc) vectors_new_vectors_query,
(GimpEditItemFunc) vectors_edit_vectors_query, (GimpEditItemFunc) vectors_edit_vectors_query,
(GimpActivateItemFunc) vectors_vectors_tool,
gimp_item_factory_from_path ("<Vectors>")); gimp_item_factory_from_path ("<Vectors>"));
vectors_view = GIMP_VECTORS_LIST_VIEW (view);
vectors_view->stroke_item_func = vectors_stroke_vectors;
dockable = dialogs_dockable_new (view, dockable = dialogs_dockable_new (view,
"Paths List", "Paths", "Paths List", "Paths",
NULL, NULL,

View File

@ -51,6 +51,7 @@
#include "widgets/gimpdocumentview.h" #include "widgets/gimpdocumentview.h"
#include "widgets/gimplistitem.h" #include "widgets/gimplistitem.h"
#include "widgets/gimppreview.h" #include "widgets/gimppreview.h"
#include "widgets/gimpvectorslistview.h"
#include "about-dialog.h" #include "about-dialog.h"
#include "brush-editor.h" #include "brush-editor.h"
@ -735,6 +736,7 @@ dialogs_layer_list_view_new (GimpDialogFactory *factory,
(GimpConvertItemFunc) gimp_layer_new_from_drawable, (GimpConvertItemFunc) gimp_layer_new_from_drawable,
(GimpNewItemFunc) layers_new_layer_query, (GimpNewItemFunc) layers_new_layer_query,
(GimpEditItemFunc) layers_edit_layer_query, (GimpEditItemFunc) layers_edit_layer_query,
(GimpActivateItemFunc) layers_edit_layer_query,
gimp_item_factory_from_path ("<Layers>")); gimp_item_factory_from_path ("<Layers>"));
dockable = dialogs_dockable_new (view, dockable = dialogs_dockable_new (view,
@ -773,6 +775,7 @@ dialogs_channel_list_view_new (GimpDialogFactory *factory,
(GimpConvertItemFunc) NULL, (GimpConvertItemFunc) NULL,
(GimpNewItemFunc) channels_new_channel_query, (GimpNewItemFunc) channels_new_channel_query,
(GimpEditItemFunc) channels_edit_channel_query, (GimpEditItemFunc) channels_edit_channel_query,
(GimpActivateItemFunc) channels_edit_channel_query,
gimp_item_factory_from_path ("<Channels>")); gimp_item_factory_from_path ("<Channels>"));
dockable = dialogs_dockable_new (view, dockable = dialogs_dockable_new (view,
@ -801,9 +804,10 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
GimpContext *context, GimpContext *context,
gint preview_size) gint preview_size)
{ {
GimpImage *gimage; GimpImage *gimage;
GtkWidget *view; GimpVectorsListView *vectors_view;
GtkWidget *dockable; GtkWidget *view;
GtkWidget *dockable;
gimage = gimp_context_get_image (context); gimage = gimp_context_get_image (context);
@ -822,8 +826,13 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
(GimpConvertItemFunc) NULL, (GimpConvertItemFunc) NULL,
(GimpNewItemFunc) vectors_new_vectors_query, (GimpNewItemFunc) vectors_new_vectors_query,
(GimpEditItemFunc) vectors_edit_vectors_query, (GimpEditItemFunc) vectors_edit_vectors_query,
(GimpActivateItemFunc) vectors_vectors_tool,
gimp_item_factory_from_path ("<Vectors>")); gimp_item_factory_from_path ("<Vectors>"));
vectors_view = GIMP_VECTORS_LIST_VIEW (view);
vectors_view->stroke_item_func = vectors_stroke_vectors;
dockable = dialogs_dockable_new (view, dockable = dialogs_dockable_new (view,
"Paths List", "Paths", "Paths List", "Paths",
NULL, NULL,

View File

@ -1130,22 +1130,22 @@ static GimpItemFactoryEntry channels_entries[] =
{ { N_("/Channel to Selection"), "<control>S", { { N_("/Channel to Selection"), "<control>S",
channels_channel_to_sel_cmd_callback, 0, channels_channel_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_REPLACE },
NULL, NULL,
"channel_to_selection.html", NULL }, "channel_to_selection.html", NULL },
{ { N_("/Add to Selection"), NULL, { { N_("/Add to Selection"), NULL,
channels_add_channel_to_sel_cmd_callback, 0, channels_add_channel_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_ADD },
NULL, NULL,
"channel_to_selection.html#add", NULL }, "channel_to_selection.html#add", NULL },
{ { N_("/Subtract from Selection"), NULL, { { N_("/Subtract from Selection"), NULL,
channels_sub_channel_from_sel_cmd_callback, 0, channels_sub_channel_from_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_SUBTRACT },
NULL, NULL,
"channel_to_selection.html#subtract", NULL }, "channel_to_selection.html#subtract", NULL },
{ { N_("/Intersect with Selection"), NULL, { { N_("/Intersect with Selection"), NULL,
channels_intersect_channel_with_sel_cmd_callback, 0, channels_intersect_channel_with_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_INTERSECT },
NULL, NULL,
"channel_to_selection.html#intersect", NULL }, "channel_to_selection.html#intersect", NULL },
@ -1191,24 +1191,27 @@ static GimpItemFactoryEntry vectors_entries[] =
"<StockItem>", GIMP_STOCK_DUPLICATE }, "<StockItem>", GIMP_STOCK_DUPLICATE },
NULL, NULL,
"duplicate_path.html", NULL }, "duplicate_path.html", NULL },
SEPARATOR ("/---"),
{ { N_("/Path to Selection"), "<control>S", { { N_("/Path to Selection"), "<control>S",
vectors_vectors_to_sel_cmd_callback, 0, vectors_vectors_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_REPLACE },
NULL, NULL,
"path_to_selection.html", NULL }, "path_to_selection.html", NULL },
{ { N_("/Add to Selection"), NULL, { { N_("/Add to Selection"), NULL,
vectors_add_vectors_to_sel_cmd_callback, 0, vectors_add_vectors_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_ADD },
NULL, NULL,
"path_to_selection.html#add", NULL }, "path_to_selection.html#add", NULL },
{ { N_("/Subtract from Selection"), NULL, { { N_("/Subtract from Selection"), NULL,
vectors_sub_vectors_from_sel_cmd_callback, 0, vectors_sub_vectors_from_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_SUBTRACT },
NULL, NULL,
"path_to_selection.html#subtract", NULL }, "path_to_selection.html#subtract", NULL },
{ { N_("/Intersect with Selection"), NULL, { { N_("/Intersect with Selection"), NULL,
vectors_intersect_vectors_with_sel_cmd_callback, 0, vectors_intersect_vectors_with_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_INTERSECT },
NULL, NULL,
"path_to_selection.html#intersect", NULL }, "path_to_selection.html#intersect", NULL },
@ -1222,6 +1225,32 @@ static GimpItemFactoryEntry vectors_entries[] =
"<StockItem>", GIMP_STOCK_STROKE }, "<StockItem>", GIMP_STOCK_STROKE },
NULL, NULL,
"stroke_path.html", NULL }, "stroke_path.html", NULL },
SEPARATOR ("/---"),
{ { N_("/Copy Path"), "<control>C",
vectors_copy_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_COPY },
NULL,
"copy_path.html", NULL },
{ { N_("/Paste Path"), "<control>V",
vectors_paste_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_PASTE },
NULL,
"paste_path.html", NULL },
{ { N_("/Import Path..."), "<control>I",
vectors_import_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_OPEN },
NULL,
"dialogs/import_path.html", NULL },
{ { N_("/Export Path..."), "<control>E",
vectors_export_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_SAVE },
NULL,
"dialogs/export_path.html", NULL },
SEPARATOR ("/---"),
{ { N_("/Delete Path"), "<control>X", { { N_("/Delete Path"), "<control>X",
vectors_delete_vectors_cmd_callback, 0, vectors_delete_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_DELETE }, "<StockItem>", GTK_STOCK_DELETE },
@ -1230,6 +1259,11 @@ static GimpItemFactoryEntry vectors_entries[] =
SEPARATOR ("/---"), SEPARATOR ("/---"),
{ { N_("/Path Tool"), NULL,
vectors_vectors_tool_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_PATH },
NULL,
"tools/path_tool.html", NULL },
{ { N_("/Edit Path Attributes..."), NULL, { { N_("/Edit Path Attributes..."), NULL,
vectors_edit_vectors_attributes_cmd_callback, 0, vectors_edit_vectors_attributes_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_EDIT }, "<StockItem>", GIMP_STOCK_EDIT },

View File

@ -229,16 +229,148 @@ void
vectors_stroke_vectors_cmd_callback (GtkWidget *widget, vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
GimpImage *gimage; GimpImage *gimage;
GimpVectors *active_vectors; GimpVectors *active_vectors;
GimpDrawable *active_drawable;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget); gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage) if (! gimage)
return; return;
active_vectors = gimp_image_get_active_vectors (gimage); active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
vectors_stroke_vectors (active_vectors);
}
}
void
vectors_copy_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_paste_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_import_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_export_vectors_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
}
}
void
vectors_vectors_tool_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
vectors_vectors_tool (active_vectors);
}
}
void
vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget,
gpointer data)
{
GimpImage *gimage;
GimpVectors *active_vectors;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget);
if (! gimage)
return;
active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
{
vectors_edit_vectors_query (active_vectors);
}
}
void
vectors_stroke_vectors (GimpVectors *vectors)
{
GimpImage *gimage;
GimpDrawable *active_drawable;
g_return_if_fail (GIMP_IS_VECTORS (vectors));
gimage = gimp_item_get_image (GIMP_ITEM (vectors));
active_drawable = gimp_image_active_drawable (gimage); active_drawable = gimp_image_active_drawable (gimage);
if (! active_drawable) if (! active_drawable)
@ -247,7 +379,7 @@ vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
return; return;
} }
if (active_vectors && active_vectors->strokes) if (vectors && vectors->strokes)
{ {
GimpTool *active_tool; GimpTool *active_tool;
GimpPaintCore *core; GimpPaintCore *core;
@ -284,7 +416,7 @@ vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
gimp_paint_core_stroke_vectors (core, gimp_paint_core_stroke_vectors (core,
active_drawable, active_drawable,
paint_options, paint_options,
active_vectors); vectors);
tool_manager_control_active (gimage->gimp, RESUME, gdisp); tool_manager_control_active (gimage->gimp, RESUME, gdisp);
@ -295,25 +427,33 @@ vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
} }
void void
vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget, vectors_vectors_tool (GimpVectors *vectors)
gpointer data)
{ {
GimpImage *gimage; GimpImage *gimage;
GimpVectors *active_vectors; GimpTool *active_tool;
gimage = (GimpImage *) gimp_widget_get_callback_context (widget); g_return_if_fail (GIMP_IS_VECTORS (vectors));
if (! gimage) gimage = gimp_item_get_image (GIMP_ITEM (vectors));
return;
active_vectors = gimp_image_get_active_vectors (gimage); active_tool = tool_manager_get_active (gimage->gimp);
if (active_vectors) if (! GIMP_IS_VECTOR_TOOL (active_tool))
{ {
vectors_edit_vectors_query (active_vectors); GimpToolInfo *tool_info;
}
}
tool_info = tool_manager_get_info_by_type (gimage->gimp,
GIMP_TYPE_VECTOR_TOOL);
gimp_context_set_tool (gimp_get_current_context (gimage->gimp),
tool_info);
active_tool = tool_manager_get_active (gimage->gimp);
}
gimp_vector_tool_set_vectors (GIMP_VECTOR_TOOL (active_tool),
vectors);
}
/**********************************/ /**********************************/
/* The new vectors query dialog */ /* The new vectors query dialog */
@ -501,29 +641,7 @@ vectors_edit_vectors_query (GimpVectors *vectors)
GtkWidget *table; GtkWidget *table;
GtkWidget *label; GtkWidget *label;
{ g_return_if_fail (GIMP_IS_VECTORS (vectors));
Gimp *gimp;
GimpTool *active_tool;
gimp = GIMP_ITEM (vectors)->gimage->gimp;
active_tool = tool_manager_get_active (gimp);
if (! GIMP_IS_VECTOR_TOOL (active_tool))
{
GimpToolInfo *tool_info;
tool_info = tool_manager_get_info_by_type (gimp, GIMP_TYPE_VECTOR_TOOL);
gimp_context_set_tool (gimp_get_current_context (gimp), tool_info);
active_tool = tool_manager_get_active (gimp);
}
gimp_vector_tool_set_vectors (GIMP_VECTOR_TOOL (active_tool), vectors);
return;
}
options = g_new0 (EditVectorsOptions, 1); options = g_new0 (EditVectorsOptions, 1);
@ -599,6 +717,7 @@ vectors_menu_update (GtkItemFactory *factory,
GimpImage *gimage; GimpImage *gimage;
GimpVectors *vectors; GimpVectors *vectors;
gboolean mask_empty; gboolean mask_empty;
gboolean global_buf;
GList *list; GList *list;
GList *next = NULL; GList *next = NULL;
GList *prev = NULL; GList *prev = NULL;
@ -609,6 +728,8 @@ vectors_menu_update (GtkItemFactory *factory,
mask_empty = gimp_image_mask_is_empty (gimage); mask_empty = gimp_image_mask_is_empty (gimage);
global_buf = FALSE;
for (list = GIMP_LIST (gimage->vectors)->list; for (list = GIMP_LIST (gimage->vectors)->list;
list; list;
list = g_list_next (list)) list = g_list_next (list))
@ -635,6 +756,11 @@ vectors_menu_update (GtkItemFactory *factory,
SET_SENSITIVE ("/Selection to Path", ! mask_empty); SET_SENSITIVE ("/Selection to Path", ! mask_empty);
SET_SENSITIVE ("/Stroke Path", vectors); SET_SENSITIVE ("/Stroke Path", vectors);
SET_SENSITIVE ("/Delete Path", vectors); SET_SENSITIVE ("/Delete Path", vectors);
SET_SENSITIVE ("/Copy Path", vectors);
SET_SENSITIVE ("/Paste Path", global_buf);
SET_SENSITIVE ("/Import Path...", TRUE);
SET_SENSITIVE ("/Export Path...", vectors);
SET_SENSITIVE ("/Path Tool", vectors);
SET_SENSITIVE ("/Edit Path Attributes...", vectors); SET_SENSITIVE ("/Edit Path Attributes...", vectors);
#undef SET_SENSITIVE #undef SET_SENSITIVE

View File

@ -42,9 +42,21 @@ void vectors_sel_to_vectors_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void vectors_stroke_vectors_cmd_callback (GtkWidget *widget, void vectors_stroke_vectors_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void vectors_copy_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_paste_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_import_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_export_vectors_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_vectors_tool_cmd_callback (GtkWidget *widget,
gpointer data);
void vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget, void vectors_edit_vectors_attributes_cmd_callback (GtkWidget *widget,
gpointer data); gpointer data);
void vectors_stroke_vectors (GimpVectors *vectors);
void vectors_vectors_tool (GimpVectors *vectors);
void vectors_new_vectors_query (GimpImage *gimage, void vectors_new_vectors_query (GimpImage *gimage,
GimpVectors *template); GimpVectors *template);
void vectors_edit_vectors_query (GimpVectors *vectors); void vectors_edit_vectors_query (GimpVectors *vectors);

View File

@ -1130,22 +1130,22 @@ static GimpItemFactoryEntry channels_entries[] =
{ { N_("/Channel to Selection"), "<control>S", { { N_("/Channel to Selection"), "<control>S",
channels_channel_to_sel_cmd_callback, 0, channels_channel_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_REPLACE },
NULL, NULL,
"channel_to_selection.html", NULL }, "channel_to_selection.html", NULL },
{ { N_("/Add to Selection"), NULL, { { N_("/Add to Selection"), NULL,
channels_add_channel_to_sel_cmd_callback, 0, channels_add_channel_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_ADD },
NULL, NULL,
"channel_to_selection.html#add", NULL }, "channel_to_selection.html#add", NULL },
{ { N_("/Subtract from Selection"), NULL, { { N_("/Subtract from Selection"), NULL,
channels_sub_channel_from_sel_cmd_callback, 0, channels_sub_channel_from_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_SUBTRACT },
NULL, NULL,
"channel_to_selection.html#subtract", NULL }, "channel_to_selection.html#subtract", NULL },
{ { N_("/Intersect with Selection"), NULL, { { N_("/Intersect with Selection"), NULL,
channels_intersect_channel_with_sel_cmd_callback, 0, channels_intersect_channel_with_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_INTERSECT },
NULL, NULL,
"channel_to_selection.html#intersect", NULL }, "channel_to_selection.html#intersect", NULL },
@ -1191,24 +1191,27 @@ static GimpItemFactoryEntry vectors_entries[] =
"<StockItem>", GIMP_STOCK_DUPLICATE }, "<StockItem>", GIMP_STOCK_DUPLICATE },
NULL, NULL,
"duplicate_path.html", NULL }, "duplicate_path.html", NULL },
SEPARATOR ("/---"),
{ { N_("/Path to Selection"), "<control>S", { { N_("/Path to Selection"), "<control>S",
vectors_vectors_to_sel_cmd_callback, 0, vectors_vectors_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_REPLACE },
NULL, NULL,
"path_to_selection.html", NULL }, "path_to_selection.html", NULL },
{ { N_("/Add to Selection"), NULL, { { N_("/Add to Selection"), NULL,
vectors_add_vectors_to_sel_cmd_callback, 0, vectors_add_vectors_to_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_ADD },
NULL, NULL,
"path_to_selection.html#add", NULL }, "path_to_selection.html#add", NULL },
{ { N_("/Subtract from Selection"), NULL, { { N_("/Subtract from Selection"), NULL,
vectors_sub_vectors_from_sel_cmd_callback, 0, vectors_sub_vectors_from_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_SUBTRACT },
NULL, NULL,
"path_to_selection.html#subtract", NULL }, "path_to_selection.html#subtract", NULL },
{ { N_("/Intersect with Selection"), NULL, { { N_("/Intersect with Selection"), NULL,
vectors_intersect_vectors_with_sel_cmd_callback, 0, vectors_intersect_vectors_with_sel_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TO_SELECTION }, "<StockItem>", GIMP_STOCK_SELECTION_INTERSECT },
NULL, NULL,
"path_to_selection.html#intersect", NULL }, "path_to_selection.html#intersect", NULL },
@ -1222,6 +1225,32 @@ static GimpItemFactoryEntry vectors_entries[] =
"<StockItem>", GIMP_STOCK_STROKE }, "<StockItem>", GIMP_STOCK_STROKE },
NULL, NULL,
"stroke_path.html", NULL }, "stroke_path.html", NULL },
SEPARATOR ("/---"),
{ { N_("/Copy Path"), "<control>C",
vectors_copy_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_COPY },
NULL,
"copy_path.html", NULL },
{ { N_("/Paste Path"), "<control>V",
vectors_paste_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_PASTE },
NULL,
"paste_path.html", NULL },
{ { N_("/Import Path..."), "<control>I",
vectors_import_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_OPEN },
NULL,
"dialogs/import_path.html", NULL },
{ { N_("/Export Path..."), "<control>E",
vectors_export_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_SAVE },
NULL,
"dialogs/export_path.html", NULL },
SEPARATOR ("/---"),
{ { N_("/Delete Path"), "<control>X", { { N_("/Delete Path"), "<control>X",
vectors_delete_vectors_cmd_callback, 0, vectors_delete_vectors_cmd_callback, 0,
"<StockItem>", GTK_STOCK_DELETE }, "<StockItem>", GTK_STOCK_DELETE },
@ -1230,6 +1259,11 @@ static GimpItemFactoryEntry vectors_entries[] =
SEPARATOR ("/---"), SEPARATOR ("/---"),
{ { N_("/Path Tool"), NULL,
vectors_vectors_tool_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_TOOL_PATH },
NULL,
"tools/path_tool.html", NULL },
{ { N_("/Edit Path Attributes..."), NULL, { { N_("/Edit Path Attributes..."), NULL,
vectors_edit_vectors_attributes_cmd_callback, 0, vectors_edit_vectors_attributes_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_EDIT }, "<StockItem>", GIMP_STOCK_EDIT },

View File

@ -170,7 +170,7 @@ gimp_channel_list_view_init (GimpChannelListView *view)
view->toselection_button = view->toselection_button =
gimp_container_view_add_button (container_view, gimp_container_view_add_button (container_view,
GIMP_STOCK_TO_SELECTION, GIMP_STOCK_SELECTION_REPLACE,
_("Channel to Selection\n" _("Channel to Selection\n"
"<Shift> Add\n" "<Shift> Add\n"
"<Ctrl> Subtract\n" "<Ctrl> Subtract\n"
@ -179,6 +179,9 @@ gimp_channel_list_view_init (GimpChannelListView *view)
G_CALLBACK (gimp_channel_list_view_toselection_extended_clicked), G_CALLBACK (gimp_channel_list_view_toselection_extended_clicked),
view); view);
gtk_box_reorder_child (GTK_BOX (container_view->button_box),
view->toselection_button, 5);
gimp_container_view_enable_dnd (container_view, gimp_container_view_enable_dnd (container_view,
GTK_BUTTON (view->toselection_button), GTK_BUTTON (view->toselection_button),
GIMP_TYPE_CHANNEL); GIMP_TYPE_CHANNEL);
@ -329,16 +332,7 @@ static void
gimp_channel_list_view_toselection_clicked (GtkWidget *widget, gimp_channel_list_view_toselection_clicked (GtkWidget *widget,
GimpChannelListView *view) GimpChannelListView *view)
{ {
GimpItemListView *item_view; gimp_channel_list_view_toselection_extended_clicked (widget, 0, view);
GimpViewable *viewable;
item_view = GIMP_ITEM_LIST_VIEW (view);
viewable = item_view->get_item_func (item_view->gimage);
if (viewable)
gimp_channel_list_view_to_selection (view, GIMP_CHANNEL (viewable),
CHANNEL_OP_REPLACE);
} }
static void static void

View File

@ -170,7 +170,7 @@ gimp_channel_list_view_init (GimpChannelListView *view)
view->toselection_button = view->toselection_button =
gimp_container_view_add_button (container_view, gimp_container_view_add_button (container_view,
GIMP_STOCK_TO_SELECTION, GIMP_STOCK_SELECTION_REPLACE,
_("Channel to Selection\n" _("Channel to Selection\n"
"<Shift> Add\n" "<Shift> Add\n"
"<Ctrl> Subtract\n" "<Ctrl> Subtract\n"
@ -179,6 +179,9 @@ gimp_channel_list_view_init (GimpChannelListView *view)
G_CALLBACK (gimp_channel_list_view_toselection_extended_clicked), G_CALLBACK (gimp_channel_list_view_toselection_extended_clicked),
view); view);
gtk_box_reorder_child (GTK_BOX (container_view->button_box),
view->toselection_button, 5);
gimp_container_view_enable_dnd (container_view, gimp_container_view_enable_dnd (container_view,
GTK_BUTTON (view->toselection_button), GTK_BUTTON (view->toselection_button),
GIMP_TYPE_CHANNEL); GIMP_TYPE_CHANNEL);
@ -329,16 +332,7 @@ static void
gimp_channel_list_view_toselection_clicked (GtkWidget *widget, gimp_channel_list_view_toselection_clicked (GtkWidget *widget,
GimpChannelListView *view) GimpChannelListView *view)
{ {
GimpItemListView *item_view; gimp_channel_list_view_toselection_extended_clicked (widget, 0, view);
GimpViewable *viewable;
item_view = GIMP_ITEM_LIST_VIEW (view);
viewable = item_view->get_item_func (item_view->gimage);
if (viewable)
gimp_channel_list_view_to_selection (view, GIMP_CHANNEL (viewable),
CHANNEL_OP_REPLACE);
} }
static void static void

View File

@ -285,6 +285,7 @@ gimp_item_list_view_new (gint preview_size,
GimpConvertItemFunc convert_item_func, GimpConvertItemFunc convert_item_func,
GimpNewItemFunc new_item_func, GimpNewItemFunc new_item_func,
GimpEditItemFunc edit_item_func, GimpEditItemFunc edit_item_func,
GimpActivateItemFunc activate_item_func,
GimpItemFactory *item_factory) GimpItemFactory *item_factory)
{ {
GimpItemListView *list_view; GimpItemListView *list_view;
@ -303,6 +304,7 @@ gimp_item_list_view_new (gint preview_size,
/* convert_item_func may be NULL */ /* convert_item_func may be NULL */
g_return_val_if_fail (new_item_func != NULL, NULL); g_return_val_if_fail (new_item_func != NULL, NULL);
g_return_val_if_fail (edit_item_func != NULL, NULL); g_return_val_if_fail (edit_item_func != NULL, NULL);
g_return_val_if_fail (activate_item_func != NULL, NULL);
g_return_val_if_fail (GIMP_IS_ITEM_FACTORY (item_factory), NULL); g_return_val_if_fail (GIMP_IS_ITEM_FACTORY (item_factory), NULL);
if (item_type == GIMP_TYPE_LAYER) if (item_type == GIMP_TYPE_LAYER)
@ -343,6 +345,7 @@ gimp_item_list_view_new (gint preview_size,
list_view->convert_item_func = convert_item_func; list_view->convert_item_func = convert_item_func;
list_view->new_item_func = new_item_func; list_view->new_item_func = new_item_func;
list_view->edit_item_func = edit_item_func; list_view->edit_item_func = edit_item_func;
list_view->activate_item_func = activate_item_func;
list_view->item_factory = item_factory; list_view->item_factory = item_factory;
g_object_ref (G_OBJECT (list_view->item_factory)); g_object_ref (G_OBJECT (list_view->item_factory));
@ -495,12 +498,16 @@ gimp_item_list_view_activate_item (GimpContainerView *view,
GimpViewable *item, GimpViewable *item,
gpointer insert_data) gpointer insert_data)
{ {
GimpItemListView *item_view;
item_view = GIMP_ITEM_LIST_VIEW (view);
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item) if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item)
GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item (view, GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item (view,
item, item,
insert_data); insert_data);
gtk_button_clicked (GTK_BUTTON (GIMP_ITEM_LIST_VIEW (view)->edit_button)); item_view->activate_item_func (item);
} }
static void static void

View File

@ -48,6 +48,7 @@ typedef GimpViewable * (* GimpConvertItemFunc) (GimpViewable *viewable,
typedef void (* GimpNewItemFunc) (GimpImage *gimage, typedef void (* GimpNewItemFunc) (GimpImage *gimage,
GimpViewable *template); GimpViewable *template);
typedef void (* GimpEditItemFunc) (GimpViewable *viewable); typedef void (* GimpEditItemFunc) (GimpViewable *viewable);
typedef void (* GimpActivateItemFunc) (GimpViewable *viewable);
#define GIMP_TYPE_ITEM_LIST_VIEW (gimp_item_list_view_get_type ()) #define GIMP_TYPE_ITEM_LIST_VIEW (gimp_item_list_view_get_type ())
@ -80,6 +81,7 @@ struct _GimpItemListView
GimpNewItemFunc new_item_func; GimpNewItemFunc new_item_func;
GimpEditItemFunc edit_item_func; GimpEditItemFunc edit_item_func;
GimpActivateItemFunc activate_item_func;
GimpItemFactory *item_factory; GimpItemFactory *item_factory;
@ -116,6 +118,7 @@ GtkWidget * gimp_item_list_view_new (gint preview_size,
GimpConvertItemFunc convert_item_func, GimpConvertItemFunc convert_item_func,
GimpNewItemFunc new_item_func, GimpNewItemFunc new_item_func,
GimpEditItemFunc edit_item_func, GimpEditItemFunc edit_item_func,
GimpActivateItemFunc activate_item_func,
GimpItemFactory *item_facotry); GimpItemFactory *item_facotry);
void gimp_item_list_view_set_image (GimpItemListView *view, void gimp_item_list_view_set_image (GimpItemListView *view,

View File

@ -285,6 +285,7 @@ gimp_item_list_view_new (gint preview_size,
GimpConvertItemFunc convert_item_func, GimpConvertItemFunc convert_item_func,
GimpNewItemFunc new_item_func, GimpNewItemFunc new_item_func,
GimpEditItemFunc edit_item_func, GimpEditItemFunc edit_item_func,
GimpActivateItemFunc activate_item_func,
GimpItemFactory *item_factory) GimpItemFactory *item_factory)
{ {
GimpItemListView *list_view; GimpItemListView *list_view;
@ -303,6 +304,7 @@ gimp_item_list_view_new (gint preview_size,
/* convert_item_func may be NULL */ /* convert_item_func may be NULL */
g_return_val_if_fail (new_item_func != NULL, NULL); g_return_val_if_fail (new_item_func != NULL, NULL);
g_return_val_if_fail (edit_item_func != NULL, NULL); g_return_val_if_fail (edit_item_func != NULL, NULL);
g_return_val_if_fail (activate_item_func != NULL, NULL);
g_return_val_if_fail (GIMP_IS_ITEM_FACTORY (item_factory), NULL); g_return_val_if_fail (GIMP_IS_ITEM_FACTORY (item_factory), NULL);
if (item_type == GIMP_TYPE_LAYER) if (item_type == GIMP_TYPE_LAYER)
@ -343,6 +345,7 @@ gimp_item_list_view_new (gint preview_size,
list_view->convert_item_func = convert_item_func; list_view->convert_item_func = convert_item_func;
list_view->new_item_func = new_item_func; list_view->new_item_func = new_item_func;
list_view->edit_item_func = edit_item_func; list_view->edit_item_func = edit_item_func;
list_view->activate_item_func = activate_item_func;
list_view->item_factory = item_factory; list_view->item_factory = item_factory;
g_object_ref (G_OBJECT (list_view->item_factory)); g_object_ref (G_OBJECT (list_view->item_factory));
@ -495,12 +498,16 @@ gimp_item_list_view_activate_item (GimpContainerView *view,
GimpViewable *item, GimpViewable *item,
gpointer insert_data) gpointer insert_data)
{ {
GimpItemListView *item_view;
item_view = GIMP_ITEM_LIST_VIEW (view);
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item) if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item)
GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item (view, GIMP_CONTAINER_VIEW_CLASS (parent_class)->activate_item (view,
item, item,
insert_data); insert_data);
gtk_button_clicked (GTK_BUTTON (GIMP_ITEM_LIST_VIEW (view)->edit_button)); item_view->activate_item_func (item);
} }
static void static void

View File

@ -48,6 +48,7 @@ typedef GimpViewable * (* GimpConvertItemFunc) (GimpViewable *viewable,
typedef void (* GimpNewItemFunc) (GimpImage *gimage, typedef void (* GimpNewItemFunc) (GimpImage *gimage,
GimpViewable *template); GimpViewable *template);
typedef void (* GimpEditItemFunc) (GimpViewable *viewable); typedef void (* GimpEditItemFunc) (GimpViewable *viewable);
typedef void (* GimpActivateItemFunc) (GimpViewable *viewable);
#define GIMP_TYPE_ITEM_LIST_VIEW (gimp_item_list_view_get_type ()) #define GIMP_TYPE_ITEM_LIST_VIEW (gimp_item_list_view_get_type ())
@ -80,6 +81,7 @@ struct _GimpItemListView
GimpNewItemFunc new_item_func; GimpNewItemFunc new_item_func;
GimpEditItemFunc edit_item_func; GimpEditItemFunc edit_item_func;
GimpActivateItemFunc activate_item_func;
GimpItemFactory *item_factory; GimpItemFactory *item_factory;
@ -116,6 +118,7 @@ GtkWidget * gimp_item_list_view_new (gint preview_size,
GimpConvertItemFunc convert_item_func, GimpConvertItemFunc convert_item_func,
GimpNewItemFunc new_item_func, GimpNewItemFunc new_item_func,
GimpEditItemFunc edit_item_func, GimpEditItemFunc edit_item_func,
GimpActivateItemFunc activate_item_func,
GimpItemFactory *item_facotry); GimpItemFactory *item_facotry);
void gimp_item_list_view_set_image (GimpItemListView *view, void gimp_item_list_view_set_image (GimpItemListView *view,

View File

@ -129,7 +129,7 @@ gimp_vectors_list_view_init (GimpVectorsListView *view)
view->toselection_button = view->toselection_button =
gimp_container_view_add_button (container_view, gimp_container_view_add_button (container_view,
GIMP_STOCK_TO_SELECTION, GIMP_STOCK_SELECTION_REPLACE,
_("Path to Selection\n" _("Path to Selection\n"
"<Shift> Add\n" "<Shift> Add\n"
"<Ctrl> Subtract\n" "<Ctrl> Subtract\n"
@ -138,7 +138,6 @@ gimp_vectors_list_view_init (GimpVectorsListView *view)
G_CALLBACK (gimp_vectors_list_view_toselection_extended_clicked), G_CALLBACK (gimp_vectors_list_view_toselection_extended_clicked),
view); view);
view->stroke_button = view->stroke_button =
gimp_container_view_add_button (container_view, gimp_container_view_add_button (container_view,
GIMP_STOCK_STROKE, GIMP_STOCK_STROKE,
@ -147,6 +146,11 @@ gimp_vectors_list_view_init (GimpVectorsListView *view)
NULL, NULL,
view); view);
gtk_box_reorder_child (GTK_BOX (container_view->button_box),
view->toselection_button, 5);
gtk_box_reorder_child (GTK_BOX (container_view->button_box),
view->stroke_button, 6);
gimp_container_view_enable_dnd (container_view, gimp_container_view_enable_dnd (container_view,
GTK_BUTTON (view->toselection_button), GTK_BUTTON (view->toselection_button),
GIMP_TYPE_VECTORS); GIMP_TYPE_VECTORS);
@ -203,16 +207,7 @@ static void
gimp_vectors_list_view_toselection_clicked (GtkWidget *widget, gimp_vectors_list_view_toselection_clicked (GtkWidget *widget,
GimpVectorsListView *view) GimpVectorsListView *view)
{ {
GimpItemListView *item_view; gimp_vectors_list_view_toselection_extended_clicked (widget, 0, view);
GimpViewable *viewable;
item_view = GIMP_ITEM_LIST_VIEW (view);
viewable = item_view->get_item_func (item_view->gimage);
if (viewable)
gimp_vectors_list_view_to_selection (view, GIMP_VECTORS (viewable),
CHANNEL_OP_REPLACE);
} }
static void static void
@ -252,7 +247,10 @@ static void
gimp_vectors_list_view_stroke (GimpVectorsListView *view, gimp_vectors_list_view_stroke (GimpVectorsListView *view,
GimpVectors *vectors) GimpVectors *vectors)
{ {
g_print ("stroke %s\n", GIMP_OBJECT (vectors)->name); if (view->stroke_item_func)
{
view->stroke_item_func (vectors);
}
} }
static void static void

View File

@ -26,6 +26,9 @@
#include "gimpitemlistview.h" #include "gimpitemlistview.h"
typedef void (* GimpStrokeItemFunc) (GimpVectors *vectors);
#define GIMP_TYPE_VECTORS_LIST_VIEW (gimp_vectors_list_view_get_type ()) #define GIMP_TYPE_VECTORS_LIST_VIEW (gimp_vectors_list_view_get_type ())
#define GIMP_VECTORS_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListView)) #define GIMP_VECTORS_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListView))
#define GIMP_VECTORS_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListViewClass)) #define GIMP_VECTORS_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListViewClass))
@ -38,10 +41,12 @@ typedef struct _GimpVectorsListViewClass GimpVectorsListViewClass;
struct _GimpVectorsListView struct _GimpVectorsListView
{ {
GimpItemListView parent_instance; GimpItemListView parent_instance;
GtkWidget *toselection_button; GimpStrokeItemFunc stroke_item_func;
GtkWidget *stroke_button;
GtkWidget *toselection_button;
GtkWidget *stroke_button;
}; };
struct _GimpVectorsListViewClass struct _GimpVectorsListViewClass

View File

@ -129,7 +129,7 @@ gimp_vectors_list_view_init (GimpVectorsListView *view)
view->toselection_button = view->toselection_button =
gimp_container_view_add_button (container_view, gimp_container_view_add_button (container_view,
GIMP_STOCK_TO_SELECTION, GIMP_STOCK_SELECTION_REPLACE,
_("Path to Selection\n" _("Path to Selection\n"
"<Shift> Add\n" "<Shift> Add\n"
"<Ctrl> Subtract\n" "<Ctrl> Subtract\n"
@ -138,7 +138,6 @@ gimp_vectors_list_view_init (GimpVectorsListView *view)
G_CALLBACK (gimp_vectors_list_view_toselection_extended_clicked), G_CALLBACK (gimp_vectors_list_view_toselection_extended_clicked),
view); view);
view->stroke_button = view->stroke_button =
gimp_container_view_add_button (container_view, gimp_container_view_add_button (container_view,
GIMP_STOCK_STROKE, GIMP_STOCK_STROKE,
@ -147,6 +146,11 @@ gimp_vectors_list_view_init (GimpVectorsListView *view)
NULL, NULL,
view); view);
gtk_box_reorder_child (GTK_BOX (container_view->button_box),
view->toselection_button, 5);
gtk_box_reorder_child (GTK_BOX (container_view->button_box),
view->stroke_button, 6);
gimp_container_view_enable_dnd (container_view, gimp_container_view_enable_dnd (container_view,
GTK_BUTTON (view->toselection_button), GTK_BUTTON (view->toselection_button),
GIMP_TYPE_VECTORS); GIMP_TYPE_VECTORS);
@ -203,16 +207,7 @@ static void
gimp_vectors_list_view_toselection_clicked (GtkWidget *widget, gimp_vectors_list_view_toselection_clicked (GtkWidget *widget,
GimpVectorsListView *view) GimpVectorsListView *view)
{ {
GimpItemListView *item_view; gimp_vectors_list_view_toselection_extended_clicked (widget, 0, view);
GimpViewable *viewable;
item_view = GIMP_ITEM_LIST_VIEW (view);
viewable = item_view->get_item_func (item_view->gimage);
if (viewable)
gimp_vectors_list_view_to_selection (view, GIMP_VECTORS (viewable),
CHANNEL_OP_REPLACE);
} }
static void static void
@ -252,7 +247,10 @@ static void
gimp_vectors_list_view_stroke (GimpVectorsListView *view, gimp_vectors_list_view_stroke (GimpVectorsListView *view,
GimpVectors *vectors) GimpVectors *vectors)
{ {
g_print ("stroke %s\n", GIMP_OBJECT (vectors)->name); if (view->stroke_item_func)
{
view->stroke_item_func (vectors);
}
} }
static void static void

View File

@ -26,6 +26,9 @@
#include "gimpitemlistview.h" #include "gimpitemlistview.h"
typedef void (* GimpStrokeItemFunc) (GimpVectors *vectors);
#define GIMP_TYPE_VECTORS_LIST_VIEW (gimp_vectors_list_view_get_type ()) #define GIMP_TYPE_VECTORS_LIST_VIEW (gimp_vectors_list_view_get_type ())
#define GIMP_VECTORS_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListView)) #define GIMP_VECTORS_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListView))
#define GIMP_VECTORS_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListViewClass)) #define GIMP_VECTORS_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_VECTORS_LIST_VIEW, GimpVectorsListViewClass))
@ -38,10 +41,12 @@ typedef struct _GimpVectorsListViewClass GimpVectorsListViewClass;
struct _GimpVectorsListView struct _GimpVectorsListView
{ {
GimpItemListView parent_instance; GimpItemListView parent_instance;
GtkWidget *toselection_button; GimpStrokeItemFunc stroke_item_func;
GtkWidget *stroke_button;
GtkWidget *toselection_button;
GtkWidget *stroke_button;
}; };
struct _GimpVectorsListViewClass struct _GimpVectorsListViewClass