Add functions for getting lists of all an image's items

* app/core/gimpitemstack.[ch]: add gimp_item_stack_get_item_list()
  which returns a GList of all the stack's items, in depth-first
  order if the stack is in fact a tree.

* app/core/gimpimage.[ch]: add gimp_image_get_layer_list(),
  channel_list(), vectors_list() which use above new function.
This commit is contained in:
Michael Natterer 2009-08-01 21:59:45 +02:00
parent 2f018dfcc2
commit 571d26a198
4 changed files with 67 additions and 0 deletions

View File

@ -2665,6 +2665,30 @@ gimp_image_get_vectors_iter (const GimpImage *image)
return GIMP_LIST (image->vectors)->list;
}
GList *
gimp_image_get_layer_list (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return gimp_item_stack_get_item_list (GIMP_ITEM_STACK (image->layers));
}
GList *
gimp_image_get_channel_list (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return gimp_item_stack_get_item_list (GIMP_ITEM_STACK (image->channels));
}
GList *
gimp_image_get_vectors_list (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return gimp_item_stack_get_item_list (GIMP_ITEM_STACK (image->vectors));
}
GimpDrawable *
gimp_image_get_active_drawable (const GimpImage *image)
{

View File

@ -425,6 +425,10 @@ GList * gimp_image_get_layer_iter (const GimpImage *image);
GList * gimp_image_get_channel_iter (const GimpImage *image);
GList * gimp_image_get_vectors_iter (const GimpImage *image);
GList * gimp_image_get_layer_list (const GimpImage *image);
GList * gimp_image_get_channel_list (const GimpImage *image);
GList * gimp_image_get_vectors_list (const GimpImage *image);
GimpDrawable * gimp_image_get_active_drawable (const GimpImage *image);
GimpLayer * gimp_image_get_active_layer (const GimpImage *image);
GimpChannel * gimp_image_get_active_channel (const GimpImage *image);

View File

@ -114,6 +114,43 @@ gimp_item_stack_new (GType item_type)
NULL);
}
GList *
gimp_item_stack_get_item_list (GimpItemStack *stack)
{
GList *list;
GList *result = NULL;
g_return_val_if_fail (GIMP_IS_ITEM_STACK (stack), NULL);
for (list = GIMP_LIST (stack)->list;
list;
list = g_list_next (list))
{
GimpViewable *viewable = list->data;
GimpContainer *children;
result = g_list_prepend (result, viewable);
children = gimp_viewable_get_children (viewable);
if (children)
{
GList *child_list;
child_list = gimp_item_stack_get_item_list (GIMP_ITEM_STACK (children));
while (child_list)
{
result = g_list_prepend (result, child_list->data);
child_list = g_list_remove (child_list, child_list->data);
}
}
}
return g_list_reverse (result);
}
static void
gimp_item_stack_invalidate_preview (GimpViewable *viewable)
{

View File

@ -47,6 +47,8 @@ struct _GimpItemStackClass
GType gimp_item_stack_get_type (void) G_GNUC_CONST;
GimpContainer * gimp_item_stack_new (GType item_type);
GList * gimp_item_stack_get_item_list (GimpItemStack *stack);
void gimp_item_stack_invalidate_previews (GimpItemStack *stack);