[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55140] trunk/blender/source/blender/ editors/space_outliner: minor edits to r55134 (recursive outliner select).

Campbell Barton ideasman42 at gmail.com
Sat Mar 9 16:51:37 CET 2013


Revision: 55140
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55140
Author:   campbellbarton
Date:     2013-03-09 15:51:36 +0000 (Sat, 09 Mar 2013)
Log Message:
-----------
minor edits to r55134 (recursive outliner select).
- loop over scene bases rather then looping over all objects, then looking up bases.
- shuffle checks so slow ones are last.
- rather then having own behavior for recursive select, do the regular operation,
  then apply the result recursively afterwards.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55134

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_outliner/outliner_edit.c
    trunk/blender/source/blender/editors/space_outliner/outliner_select.c

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_edit.c	2013-03-09 15:39:24 UTC (rev 55139)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_edit.c	2013-03-09 15:51:36 UTC (rev 55140)
@@ -242,18 +242,18 @@
 	SpaceOops *soops = CTX_wm_space_outliner(C);
 	TreeElement *te;
 	float fmval[2];
-	int any_renamed = FALSE;
+	bool change = false;
 	
 	UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], fmval, fmval + 1);
 	
 	for (te = soops->tree.first; te; te = te->next) {
 		if (do_outliner_item_rename(C, ar, soops, te, fmval)) {
-			any_renamed = TRUE;
+			change = true;
 			break;
 		}
 	}
 	
-	return any_renamed ? OPERATOR_FINISHED : OPERATOR_PASS_THROUGH;
+	return change ? OPERATOR_FINISHED : OPERATOR_PASS_THROUGH;
 }
 
 

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_select.c	2013-03-09 15:39:24 UTC (rev 55139)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_select.c	2013-03-09 15:51:36 UTC (rev 55140)
@@ -142,35 +142,25 @@
 	return 0;
 }
 
-/* 
-	Select object tree:
-	CTRL+LMB: Select/Deselect object and all cildren
-	CTRL+SHIFT+LMB: Add/Remove object and all children
-*/
-static void set_select_recursive(bContext *C, Scene *scene, Object *ob_parent, bool select, short extend)
+/**
+ * Select object tree:
+ * CTRL+LMB: Select/Deselect object and all cildren
+ * CTRL+SHIFT+LMB: Add/Remove object and all children
+ */
+static void set_select_recursive(Scene *scene, Object *ob_parent, bool select)
 {
-	Main *bmain = CTX_data_main(C);
-	Object *ob;
-	if(!extend) {
-		BKE_scene_base_deselect_all(scene);
-	}
-	for (ob = bmain->object.first; ob; ob = ob->id.next) {
-		Base *base = BKE_scene_base_find(scene, ob);
-		bool is_visible = !(ob->restrictflag & OB_RESTRICT_VIEW);
-		bool is_child_recursive = BKE_object_is_child_recursive(ob_parent, ob);
-		if ( (is_visible && is_child_recursive) || ob==ob_parent)
-		{
-			if (select) {
-				ED_base_object_select(base, BA_SELECT);
-			}
-			else {
-				ED_base_object_select(base, BA_DESELECT);
-			}
+	Base *base;
+
+	for (base = FIRSTBASE; base; base = base->next) {
+		Object *ob = base->object;
+		if ((((ob->restrictflag & OB_RESTRICT_VIEW) == 0) && BKE_object_is_child_recursive(ob_parent, ob))) {
+			ED_base_object_select(base, select ? BA_SELECT : BA_DESELECT);
 		}
 	}
 }
 
-static int  tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set, int recursive)
+static int  tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops *soops,
+                                           TreeElement *te, int set, bool recursive)
 {
 	TreeStoreElem *tselem = TREESTORE(te);
 	Scene *sce;
@@ -196,16 +186,7 @@
 	base = BKE_scene_base_find(scene, ob);
 
 	if (base) {
-
-		if (recursive) {
-			/* Recursive select/deselect */
-			set_select_recursive(C,
-				scene,
-				ob,
-				(ob->flag & SELECT) == 0,
-				set == 2);
-		}
-		else if (set == 2) {
+		if (set == 2) {
 			/* swap select */
 			if (base->flag & SELECT)
 				ED_base_object_select(base, BA_DESELECT);
@@ -217,6 +198,12 @@
 			BKE_scene_base_deselect_all(scene);
 			ED_base_object_select(base, BA_SELECT);
 		}
+
+		if (recursive) {
+			/* Recursive select/deselect */
+			set_select_recursive(scene, ob, (ob->flag & SELECT) != 0);
+		}
+
 		if (C) {
 			ED_base_object_activate(C, base); /* adds notifier */
 			WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
@@ -759,7 +746,7 @@
 /* ================================================ */
 
 static int do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops,
-                                     TreeElement *te, int extend, int recursive, const float mval[2])
+                                     TreeElement *te, bool extend, bool recursive, const float mval[2])
 {
 	
 	if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) {
@@ -858,8 +845,8 @@
 	SpaceOops *soops = CTX_wm_space_outliner(C);
 	TreeElement *te;
 	float fmval[2];
-	int extend    = RNA_boolean_get(op->ptr, "extend");
-	int recursive = RNA_boolean_get(op->ptr, "recursive");
+	bool extend    = RNA_boolean_get(op->ptr, "extend");
+	bool recursive = RNA_boolean_get(op->ptr, "recursive");
 
 	UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], fmval, fmval + 1);
 
@@ -911,8 +898,8 @@
 	
 	ot->poll = ED_operator_outliner_active;
 	
-	RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection for activation");
-	RNA_def_boolean(ot->srna, "recursive", 1, "Recursive", "Select Objects and their children");
+	RNA_def_boolean(ot->srna, "extend", true, "Extend", "Extend selection for activation");
+	RNA_def_boolean(ot->srna, "recursive", false, "Recursive", "Select Objects and their children");
 }
 
 /* ****************************************************** */




More information about the Bf-blender-cvs mailing list