Commit: 4f8e13f948b8dcb63e535529ec7cf95fd3ea5c17
Author: Dalai Felinto
Date:   Mon Nov 6 23:06:31 2017 -0200
Branches: temp-group-collections
https://developer.blender.org/rB4f8e13f948b8dcb63e535529ec7cf95fd3ea5c17

Outliner: Support moving objects from/to group internal collections

===================================================================

M       source/blender/blenkernel/BKE_collection.h
M       source/blender/blenkernel/intern/collection.c
M       source/blender/editors/space_outliner/outliner_intern.h
M       source/blender/editors/space_outliner/outliner_ops.c
M       source/blender/editors/space_outliner/outliner_tree.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_collection.h 
b/source/blender/blenkernel/BKE_collection.h
index 6ae98e3456a..ba539f41f86 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -51,6 +51,7 @@ bool BKE_collection_remove(struct ID *id, struct 
SceneCollection *sc);
 void BKE_collection_copy_data(struct SceneCollection *sc_dst, struct 
SceneCollection *sc_src, const int flag);
 struct SceneCollection *BKE_collection_master(const struct Scene *scene);
 struct SceneCollection *BKE_collection_group_master(const struct Group *group);
+struct SceneCollection *BKE_collection_master_from_id(const struct ID *id);
 void BKE_collection_rename(const struct Scene *scene, struct SceneCollection 
*sc, const char *name);
 void BKE_collection_master_free(struct Scene *scene, const bool do_id_user);
 void BKE_collection_master_group_free(struct Group *group);
@@ -58,7 +59,7 @@ bool BKE_collection_object_add(const struct ID *id, struct 
SceneCollection *sc,
 void BKE_collection_object_add_from(struct Scene *scene, struct Object 
*ob_src, struct Object *ob_dst);
 bool BKE_collection_object_remove(struct Main *bmain, struct ID *id, struct 
SceneCollection *sc, struct Object *object, const bool free_us);
 bool BKE_collections_object_remove(struct Main *bmain, struct ID *id, struct 
Object *object, const bool free_us);
-void BKE_collection_object_move(struct Scene *scene, struct SceneCollection 
*sc_dst, struct SceneCollection *sc_src, struct Object *ob);
+void BKE_collection_object_move(struct ID *id, struct SceneCollection *sc_dst, 
struct SceneCollection *sc_src, struct Object *ob);
 
 void BKE_collection_group_set(struct Scene *scene, struct SceneCollection *sc, 
struct Group *group);
 struct Group *BKE_collection_group_create(struct Main *bmain, struct Scene 
*scene, struct LayerCollection *lc);
diff --git a/source/blender/blenkernel/intern/collection.c 
b/source/blender/blenkernel/intern/collection.c
index 99a2a20c0ef..b4fa857b6a4 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -251,6 +251,11 @@ static SceneCollection *master_collection_from_id(const ID 
*id)
        }
 }
 
+SceneCollection *BKE_collection_master_from_id(const ID *id)
+{
+       return master_collection_from_id(id);
+}
+
 struct UniqueNameCheckData {
        ListBase *lb;
        SceneCollection *lookup_sc;
@@ -396,10 +401,10 @@ bool BKE_collection_object_remove(Main *bmain, ID *id, 
SceneCollection *sc, Obje
 /**
  * Move object from a collection into another
  */
-void BKE_collection_object_move(Scene *scene, SceneCollection *sc_dst, 
SceneCollection *sc_src, Object *ob)
+void BKE_collection_object_move(ID *id, SceneCollection *sc_dst, 
SceneCollection *sc_src, Object *ob)
 {
-       BKE_collection_object_add(&scene->id, sc_dst, ob);
-       BKE_collection_object_remove(NULL, &scene->id, sc_src, ob, false);
+       BKE_collection_object_add(id, sc_dst, ob);
+       BKE_collection_object_remove(NULL, id, sc_src, ob, false);
 }
 
 /**
diff --git a/source/blender/editors/space_outliner/outliner_intern.h 
b/source/blender/editors/space_outliner/outliner_intern.h
index 1177514b859..8d7634e1a21 100644
--- a/source/blender/editors/space_outliner/outliner_intern.h
+++ b/source/blender/editors/space_outliner/outliner_intern.h
@@ -67,9 +67,8 @@ typedef enum TreeTraversalAction {
 
 /**
  * Callback type for reinserting elements at a different position, used to 
allow user customizable element order.
- * Passing scene right now, may be better to allow some custom data.
  */
-typedef void (*TreeElementReinsertFunc)(struct Main *bmain, struct ID *id,
+typedef void (*TreeElementReinsertFunc)(struct Main *bmain,
                                         struct TreeElement *insert_element,
                                         struct TreeElement *insert_handle, 
TreeElementInsertType action);
 /**
@@ -77,7 +76,7 @@ typedef void (*TreeElementReinsertFunc)(struct Main *bmain, 
struct ID *id,
  * if reinserting insert_element before/after/into insert_handle would be 
allowed.
  * It's allowed to change the reinsert info here for non const pointers.
  */
-typedef bool (*TreeElementReinsertPollFunc)(const struct ID *id, const struct 
TreeElement *insert_element,
+typedef bool (*TreeElementReinsertPollFunc)(const struct TreeElement 
*insert_element,
                                             struct TreeElement 
**io_insert_handle, TreeElementInsertType *io_action);
 typedef TreeTraversalAction (*TreeTraversalFunc)(struct TreeElement *te, void 
*customdata);
 
diff --git a/source/blender/editors/space_outliner/outliner_ops.c 
b/source/blender/editors/space_outliner/outliner_ops.c
index 102f7e8c9e3..a1eb16386ad 100644
--- a/source/blender/editors/space_outliner/outliner_ops.c
+++ b/source/blender/editors/space_outliner/outliner_ops.c
@@ -139,7 +139,7 @@ static void outliner_item_drag_get_insert_data(
 }
 
 static void outliner_item_drag_handle(
-        const Scene *scene, SpaceOops *soops, ARegion *ar, const wmEvent 
*event, TreeElement *te_dragged)
+        SpaceOops *soops, ARegion *ar, const wmEvent *event, TreeElement 
*te_dragged)
 {
        TreeElement *te_insert_handle;
        TreeElementInsertType insert_type;
@@ -157,7 +157,7 @@ static void outliner_item_drag_handle(
                /* nothing will happen anyway, no need to do poll check */
        }
        else if (!te_dragged->reinsert_poll ||
-                !te_dragged->reinsert_poll(&scene->id, te_dragged, 
&te_insert_handle, &insert_type))
+                !te_dragged->reinsert_poll(te_dragged, &te_insert_handle, 
&insert_type))
        {
                te_insert_handle = NULL;
        }
@@ -165,7 +165,7 @@ static void outliner_item_drag_handle(
        te_dragged->drag_data->insert_handle = te_insert_handle;
 }
 
-static bool outliner_item_drag_drop_apply(Main *bmain, Scene *scene, 
TreeElement *dragged_te)
+static bool outliner_item_drag_drop_apply(Main *bmain, TreeElement *dragged_te)
 {
        TreeElement *insert_handle = dragged_te->drag_data->insert_handle;
        TreeElementInsertType insert_type = dragged_te->drag_data->insert_type;
@@ -174,12 +174,12 @@ static bool outliner_item_drag_drop_apply(Main *bmain, 
Scene *scene, TreeElement
                /* No need to do anything */
        }
        else if (dragged_te->reinsert) {
-               BLI_assert(!dragged_te->reinsert_poll || 
dragged_te->reinsert_poll(&scene->id, dragged_te, &insert_handle,
+               BLI_assert(!dragged_te->reinsert_poll || 
dragged_te->reinsert_poll(dragged_te, &insert_handle,
                                                                                
   &insert_type));
                /* call of assert above should not have changed insert_handle 
and insert_type at this point */
                BLI_assert(dragged_te->drag_data->insert_handle == 
insert_handle &&
                           dragged_te->drag_data->insert_type == insert_type);
-               dragged_te->reinsert(bmain, &scene->id, dragged_te, 
insert_handle, insert_type);
+               dragged_te->reinsert(bmain, dragged_te, insert_handle, 
insert_type);
                return true;
        }
 
@@ -189,7 +189,6 @@ static bool outliner_item_drag_drop_apply(Main *bmain, 
Scene *scene, TreeElement
 static int outliner_item_drag_drop_modal(bContext *C, wmOperator *op, const 
wmEvent *event)
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        ARegion *ar = CTX_wm_region(C);
        SpaceOops *soops = CTX_wm_space_outliner(C);
        TreeElement *te_dragged = op->customdata;
@@ -200,7 +199,7 @@ static int outliner_item_drag_drop_modal(bContext *C, 
wmOperator *op, const wmEv
        switch (event->type) {
                case EVT_MODAL_MAP:
                        if (event->val == OUTLINER_ITEM_DRAG_CONFIRM) {
-                               if (outliner_item_drag_drop_apply(bmain, scene, 
te_dragged)) {
+                               if (outliner_item_drag_drop_apply(bmain, 
te_dragged)) {
                                        skip_rebuild = false;
                                }
                                retval = OPERATOR_FINISHED;
@@ -216,7 +215,7 @@ static int outliner_item_drag_drop_modal(bContext *C, 
wmOperator *op, const wmEv
                        redraw = true;
                        break;
                case MOUSEMOVE:
-                       outliner_item_drag_handle(scene, soops, ar, event, 
te_dragged);
+                       outliner_item_drag_handle(soops, ar, event, te_dragged);
                        redraw = true;
                        break;
        }
diff --git a/source/blender/editors/space_outliner/outliner_tree.c 
b/source/blender/editors/space_outliner/outliner_tree.c
index 36b52991554..94b1605887a 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -394,14 +394,14 @@ static void outliner_add_scene_contents(SpaceOops *soops, 
ListBase *lb, Scene *s
 }
 
 static void outliner_object_reorder(
-        Main *UNUSED(bmain), ID *id,
+        Main *UNUSED(bmain),
         TreeElement *insert_element, TreeElement *insert_handle, 
TreeElementInsertType action)
 {
-       Scene *scene = (Scene *)id;
        TreeStoreElem *tselem_insert = TREESTORE(insert_element);
        Object *ob = (Object *)tselem_insert->id;
        SceneCollection *sc = 
outliner_scene_collection_from_tree_element(insert_handle);
        SceneCollection *sc_ob_parent = NULL;
+       ID *id = insert_handle->store_elem->id;
 
        BLI_assert(action == TE_INSERT_INTO);
        UNUSED_VARS_NDEBUG(action);
@@ -416,13 +416,13 @@ static void outliner_object_reorder(
                }
        }
        else {
-               sc_ob_parent = BKE_collection_master(scene);
+               sc_ob_parent = BKE_collection_master_from_id(id);
        }
-       BKE_collection_object_move(scene, sc, sc_ob_parent, ob);
+       BKE_collection_object_move(id, sc, sc_ob_parent, ob);
 }
 
 static bool outliner_object_reorder_poll(
-        const ID *UNUSED(id), const TreeElement *insert_element,
+        const TreeElement *insert_element,
         TreeElement **io_insert_handle, TreeElementInsertType *io_action)
 {
        TreeStoreElem *tselem_handle = TREESTORE(*io_insert_handle);
@@ -1363,7 +1363,7 @@ static void outliner_add_orphaned_datablocks(Main 
*mainvar, SpaceOops *soops)
 }
 
 static void outliner_layer_collections_reorder(
-        Main *bmain, ID *UNUSED(id),
+        Main *bmain,
         TreeElement *insert_element, TreeElement *insert_handle, 
TreeElementInsertType action)
 {
        LayerCollection *lc_insert = insert_element->directdata;
@@ -1386,7 +1386,7 @@ static void outliner_layer_collections_reorder(
        DEG_relations_tag_update(bmain);
 }
 static bool outliner_layer_collections_reorder_poll(
-        const ID *UNUSED(id), const TreeElement *insert_element,
+        const TreeElement *insert_element,
         TreeElement **io_insert_ha

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to