Bläddra i källkod

Filtree: fix prefab focus that close the filtree

lviguier 2 månader sedan
förälder
incheckning
815a65fb44
1 ändrade filer med 27 tillägg och 4 borttagningar
  1. 27 4
      hide/comp/SceneEditor.hx

+ 27 - 4
hide/comp/SceneEditor.hx

@@ -1516,6 +1516,17 @@ class SceneEditor {
 	}
 	}
 
 
 	function focusSelection() {
 	function focusSelection() {
+		function is(p : hrt.prefab.Prefab, filter : (p : hrt.prefab.Prefab) -> Bool) {
+			var res = filter(p);
+			var parent = p.parent;
+			while (parent != null) {
+				res = res && filter(parent);
+				parent = parent.parent;
+			}
+
+			return res;
+		}
+
 		var arr = [];
 		var arr = [];
 		for (pref in sceneTree.getSelectedItems()) {
 		for (pref in sceneTree.getSelectedItems()) {
 			var local3d = pref.getLocal3d();
 			var local3d = pref.getLocal3d();
@@ -1524,11 +1535,23 @@ class SceneEditor {
 				local3d = @:privateAccess mat.previewSphere;
 				local3d = @:privateAccess mat.previewSphere;
 			if (local3d != null) {
 			if (local3d != null) {
 				arr.push(local3d);
 				arr.push(local3d);
+				var isRevealed = true;
+				var p = pref.parent;
+				while (p != null) {
+					var data = @:privateAccess sceneTree.itemMap.get(p);
+					if (data == null)
+						break;
 
 
-				var parent = pref.parent;
-				while(parent != null) {
-					sceneTree.openItem(parent);
-					parent = parent.parent;
+					isRevealed = isRevealed && @:privateAccess sceneTree.isOpen(data);
+					p = p.parent;
+				}
+
+				if (!isRevealed) {
+					var parent = pref.parent;
+					while(parent != null) {
+						sceneTree.openItem(parent, true);
+						parent = parent.parent;
+					}
 				}
 				}
 			}
 			}
 		}
 		}