Add actions and callbacks to toggle "lock-content" on drawables and vectors

This commit is contained in:
Michael Natterer 2009-08-20 21:19:43 +02:00
parent 28061c23f1
commit 35a7052b8d
6 changed files with 108 additions and 16 deletions

View File

@ -69,6 +69,13 @@ static const GimpActionEntry drawable_actions[] =
static const GimpToggleActionEntry drawable_toggle_actions[] =
{
{ "drawable-visible", GIMP_STOCK_VISIBLE,
NC_("drawable-action", "_Visible"), NULL,
NC_("drawable-action", "Toggle visibility"),
G_CALLBACK (drawable_visible_cmd_callback),
FALSE,
GIMP_HELP_LAYER_VISIBLE },
{ "drawable-linked", GIMP_STOCK_LINKED,
NC_("drawable-action", "_Linked"), NULL,
NC_("drawable-action", "Toggle the linked state"),
@ -76,12 +83,13 @@ static const GimpToggleActionEntry drawable_toggle_actions[] =
FALSE,
GIMP_HELP_LAYER_LINKED },
{ "drawable-visible", GIMP_STOCK_VISIBLE,
NC_("drawable-action", "_Visible"), NULL,
NC_("drawable-action", "Toggle visibility"),
G_CALLBACK (drawable_visible_cmd_callback),
{ "drawable-lock-content", NULL /* GIMP_STOCK_LOCK */,
NC_("drawable-action", "L_ock pixels"), NULL,
NC_("drawable-action",
"Keep the pixels on this drawable from being modified"),
G_CALLBACK (drawable_lock_content_cmd_callback),
FALSE,
GIMP_HELP_LAYER_VISIBLE }
NULL, /* GIMP_HELP_LAYER_LOCK_PIXELS */ }
};
static const GimpEnumActionEntry drawable_flip_actions[] =
@ -154,6 +162,7 @@ drawable_actions_update (GimpActionGroup *group,
gboolean is_indexed = FALSE;
gboolean visible = FALSE;
gboolean linked = FALSE;
gboolean locked = FALSE;
gboolean writable = FALSE;
image = action_data_get_image (data);
@ -178,7 +187,8 @@ drawable_actions_update (GimpActionGroup *group,
visible = gimp_item_get_visible (item);
linked = gimp_item_get_linked (item);
writable = ! gimp_item_get_lock_content (item);
locked = gimp_item_get_lock_content (item);
writable = ! locked;
}
}
@ -192,11 +202,13 @@ drawable_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("drawable-levels-stretch", writable && is_rgb);
SET_SENSITIVE ("drawable-offset", writable);
SET_SENSITIVE ("drawable-visible", drawable);
SET_SENSITIVE ("drawable-linked", drawable);
SET_SENSITIVE ("drawable-visible", drawable);
SET_SENSITIVE ("drawable-linked", drawable);
SET_SENSITIVE ("drawable-lock-content", drawable);
SET_ACTIVE ("drawable-visible", visible);
SET_ACTIVE ("drawable-linked", linked);
SET_ACTIVE ("drawable-visible", visible);
SET_ACTIVE ("drawable-linked", linked);
SET_ACTIVE ("drawable-lock-content", locked);
SET_SENSITIVE ("drawable-flip-horizontal", writable);
SET_SENSITIVE ("drawable-flip-vertical", writable);

View File

@ -195,6 +195,41 @@ drawable_visible_cmd_callback (GtkAction *action,
}
}
void
drawable_lock_content_cmd_callback (GtkAction *action,
gpointer data)
{
GimpImage *image;
GimpDrawable *drawable;
gboolean locked;
return_if_no_drawable (image, drawable, data);
locked = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
if (GIMP_IS_LAYER_MASK (drawable))
drawable =
GIMP_DRAWABLE (gimp_layer_mask_get_layer (GIMP_LAYER_MASK (drawable)));
if (locked != gimp_item_get_lock_content (GIMP_ITEM (drawable)))
{
#if 0
GimpUndo *undo;
#endif
gboolean push_undo = TRUE;
#if 0
undo = gimp_image_undo_can_compress (image, GIMP_TYPE_ITEM_UNDO,
GIMP_UNDO_ITEM_VISIBILITY);
if (undo && GIMP_ITEM_UNDO (undo)->item == GIMP_ITEM (drawable))
push_undo = FALSE;
#endif
gimp_item_set_lock_content (GIMP_ITEM (drawable), locked, push_undo);
gimp_image_flush (image);
}
}
void
drawable_flip_cmd_callback (GtkAction *action,

View File

@ -32,6 +32,8 @@ void drawable_linked_cmd_callback (GtkAction *action,
gpointer data);
void drawable_visible_cmd_callback (GtkAction *action,
gpointer data);
void drawable_lock_content_cmd_callback (GtkAction *action,
gpointer data);
void drawable_flip_cmd_callback (GtkAction *action,
gint value,

View File

@ -153,7 +153,13 @@ static const GimpToggleActionEntry vectors_toggle_actions[] =
NC_("vectors-action", "_Linked"), NULL, NULL,
G_CALLBACK (vectors_linked_cmd_callback),
FALSE,
GIMP_HELP_PATH_LINKED }
GIMP_HELP_PATH_LINKED },
{ "vectors-lock-content", NULL /* GIMP_STOCK_LOCK */,
NC_("vectors-action", "L_ock strokes"), NULL, NULL,
G_CALLBACK (vectors_lock_content_cmd_callback),
FALSE,
NULL /* GIMP_HELP_PATH_LOCK_STROKES */ }
};
static const GimpEnumActionEntry vectors_to_selection_actions[] =
@ -244,6 +250,7 @@ vectors_actions_update (GimpActionGroup *group,
gboolean global_buf = FALSE;
gboolean visible = FALSE;
gboolean linked = FALSE;
gboolean locked = FALSE;
gboolean writable = FALSE;
GList *next = NULL;
GList *prev = NULL;
@ -264,7 +271,8 @@ vectors_actions_update (GimpActionGroup *group,
visible = gimp_item_get_visible (item);
linked = gimp_item_get_linked (item);
writable = ! gimp_item_get_lock_content (item);
locked = gimp_item_get_lock_content (item);
writable = ! locked;
vectors_list = gimp_item_get_container_iter (item);
@ -302,11 +310,13 @@ vectors_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("vectors-export", vectors);
SET_SENSITIVE ("vectors-import", image);
SET_SENSITIVE ("vectors-visible", vectors);
SET_SENSITIVE ("vectors-linked", vectors);
SET_SENSITIVE ("vectors-visible", vectors);
SET_SENSITIVE ("vectors-linked", vectors);
SET_SENSITIVE ("vectors-lock-content", vectors);
SET_ACTIVE ("vectors-visible", visible);
SET_ACTIVE ("vectors-linked", linked);
SET_ACTIVE ("vectors-visible", visible);
SET_ACTIVE ("vectors-linked", linked);
SET_ACTIVE ("vectors-lock-content", locked);
SET_SENSITIVE ("vectors-selection-to-vectors", image && !mask_empty);
SET_SENSITIVE ("vectors-selection-to-vectors-short", image && !mask_empty);

View File

@ -614,6 +614,37 @@ vectors_linked_cmd_callback (GtkAction *action,
}
}
void
vectors_lock_content_cmd_callback (GtkAction *action,
gpointer data)
{
GimpImage *image;
GimpVectors *vectors;
gboolean locked;
return_if_no_vectors (image, vectors, data);
locked = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
if (locked != gimp_item_get_lock_content (GIMP_ITEM (vectors)))
{
#if 0
GimpUndo *undo;
#endif
gboolean push_undo = TRUE;
#if 0
undo = gimp_image_undo_can_compress (image, GIMP_TYPE_ITEM_UNDO,
GIMP_UNDO_ITEM_LINKED);
if (undo && GIMP_ITEM_UNDO (undo)->item == GIMP_ITEM (vectors))
push_undo = FALSE;
#endif
gimp_item_set_lock_content (GIMP_ITEM (vectors), locked, push_undo);
gimp_image_flush (image);
}
}
/* private functions */

View File

@ -67,6 +67,8 @@ void vectors_visible_cmd_callback (GtkAction *action,
gpointer data);
void vectors_linked_cmd_callback (GtkAction *action,
gpointer data);
void vectors_lock_content_cmd_callback (GtkAction *action,
gpointer data);
#endif /* __VECTORS_COMMANDS_H__ */