diff options
-rw-r--r-- | source/blender/blenkernel/BKE_collection.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/collection.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/outliner_tree.c | 19 |
3 files changed, 32 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h index 45014b801b5..e090584ad7a 100644 --- a/source/blender/blenkernel/BKE_collection.h +++ b/source/blender/blenkernel/BKE_collection.h @@ -52,6 +52,9 @@ void BKE_collection_object_add_from(struct Scene *scene, struct Object *ob_src, void BKE_collection_object_remove(struct Main *bmain, struct Scene *scene, struct SceneCollection *sc, struct Object *object, const bool free_us); void BKE_collections_object_remove(struct Main *bmain, struct Scene *scene, struct Object *object, const bool free_us); +void BKE_collection_reinsert_after(const struct Scene *scene, struct SceneCollection *sc_reinsert, struct SceneCollection *sc_after); +void BKE_collection_reinsert_into(struct SceneCollection *sc_reinsert, struct SceneCollection *sc_into); + typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data); typedef void (*BKE_scene_collections_Cb)(struct SceneCollection *ob, void *data); diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index 370a5953964..eac0fc7a2fd 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -298,6 +298,18 @@ void BKE_collections_object_remove(Main *bmain, Scene *scene, Object *ob, const FOREACH_SCENE_COLLECTION_END } +void BKE_collection_reinsert_after(const struct Scene *scene, SceneCollection *sc_reinsert, SceneCollection *sc_after) +{ + UNUSED_VARS(scene, sc_reinsert, sc_after); + TODO_LAYER_OPERATORS; +} + +void BKE_collection_reinsert_into(SceneCollection *sc_reinsert, SceneCollection *sc_into) +{ + UNUSED_VARS(sc_reinsert, sc_into); + TODO_LAYER_OPERATORS; +} + /* ---------------------------------------------------------------------- */ /* Iteractors */ /* scene collection iteractor */ diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 0cf76a671a4..afd9610b6bf 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -1287,7 +1287,7 @@ static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops) } } -static void outliner_collections_reorder(const Scene *scene, TreeElement *insert_element, TreeElement *insert_handle, +static void outliner_layer_collections_reorder(const Scene *scene, TreeElement *insert_element, TreeElement *insert_handle, TreeElementInsertType action) { SceneLayer *sl = BKE_scene_layer_render_active(scene); @@ -1302,6 +1302,20 @@ static void outliner_collections_reorder(const Scene *scene, TreeElement *insert } } +static void outliner_scene_collections_reorder(const Scene *scene, TreeElement *insert_element, TreeElement *insert_handle, + TreeElementInsertType action) +{ + SceneCollection *insert_coll = insert_element->directdata; + SceneCollection *insert_handle_coll = insert_handle ? insert_handle->directdata : NULL; + + if (action == TE_INSERT_AFTER) { + BKE_collection_reinsert_after(scene, insert_coll, insert_handle_coll); + } + else if (action == TE_INSERT_INTO) { + BKE_collection_reinsert_into(insert_coll, insert_handle_coll); + } +} + static void outliner_add_layer_collections_recursive(SpaceOops *soops, ListBase *tree, Scene *scene, ListBase *layer_collections, TreeElement *parent_ten, int *io_collection_counter) @@ -1312,7 +1326,7 @@ static void outliner_add_layer_collections_recursive(SpaceOops *soops, ListBase ten->name = collection->scene_collection->name; ten->directdata = collection; - ten->reinsert = outliner_collections_reorder; + ten->reinsert = outliner_layer_collections_reorder; for (LinkData *link = collection->object_bases.first; link; link = link->next) { outliner_add_element(soops, &ten->subtree, ((Base *)link->data)->object, NULL, 0, 0); @@ -1333,6 +1347,7 @@ static void outliner_add_scene_collection_init(TreeElement *te, SceneCollection { te->name = collection->name; te->directdata = collection; + te->reinsert = outliner_scene_collections_reorder; } static void outliner_add_scene_collections_recursive(SpaceOops *soops, ListBase *tree, Scene *scene, |