[Bf-blender-cvs] [4f8e13f948b] temp-group-collections: Outliner: Support moving objects from/to group internal collections

Dalai Felinto noreply at git.blender.org
Tue Nov 7 02:08:12 CET 2017


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. @@



More information about the Bf-blender-cvs mailing list