Переглянути джерело

Jstree: replace jstree with new filetree

lviguier 2 місяців тому
батько
коміт
5ede334eac

+ 35 - 83
bin/style.css

@@ -2698,92 +2698,9 @@ body.hide-subview .lm_controls {
   outline: none;
   position: relative;
 }
-.jstree .svn {
-  font-family: "FontAwesome";
-  font-size: 0.8em;
-  position: absolute;
-  margin-left: 20px;
-  margin-top: 3px;
-  z-index: 100;
-}
-.jstree .svn-modified:before {
-  font-family: "FontAwesome";
-  font-size: 0.8em;
-  position: absolute;
-  margin-left: 20px;
-  margin-top: 3px;
-  z-index: 100;
-  content: "\f06a";
-  color: #b32020;
-  opacity: 0.7;
-}
-.jstree .svn-versioned:before {
-  font-family: "FontAwesome";
-  font-size: 0.8em;
-  position: absolute;
-  margin-left: 20px;
-  margin-top: 3px;
-  z-index: 100;
-  content: "\f058";
-  color: #258833;
-  opacity: 0.7;
-}
 .jstree .filtered {
   display: none;
 }
-.jstree .editorOnly {
-  color: #02aeda !important;
-}
-.jstree .editorOnly i,
-.jstree .editorOnly a {
-  color: #02aeda;
-}
-.jstree .childSelected > a {
-  outline: 1px solid rgba(114, 180, 255, 0.5);
-  border-radius: 3px;
-}
-.jstree .inGameOnly {
-  color: #daa802 !important;
-}
-.jstree .inGameOnly i,
-.jstree .inGameOnly a {
-  color: #daa802;
-}
-.jstree .hidden {
-  color: #555 !important;
-}
-.jstree .hidden i,
-.jstree .hidden a {
-  color: #555;
-}
-.jstree .disabled a {
-  color: #533 !important;
-  display: inline;
-}
-.jstree .disabled i {
-  color: #533;
-}
-.jstree .inRef {
-  background: #444444 !important;
-}
-.jstree .isOverride {
-  background: #25346d !important;
-}
-.jstree .isOverride.isOverriden > i,
-.jstree .isOverride.isOverriden > a {
-  color: cyan !important;
-}
-.jstree .isOverride.isOverriden.isOverridenNew i,
-.jstree .isOverride.isOverriden.isOverridenNew a {
-  color: #26c726 !important;
-}
-.jstree a.locked {
-  color: #666 !important;
-  font-style: italic;
-}
-.jstree a.locked::after {
-  content: " (locked)";
-}
 .jstree-icon.jstree-ocl {
   opacity: 0.7;
   width: 18px !important;
@@ -5092,6 +5009,34 @@ fancy-tree fancy-scroll fancy-tree-item.hide-search {
 fancy-tree fancy-scroll fancy-tree-item.open > .caret::before {
   transform: rotate(90deg);
 }
+fancy-tree fancy-scroll fancy-tree-item.disabled {
+  color: #ee6666;
+}
+fancy-tree fancy-scroll fancy-tree-item.editorOnly {
+  color: #02aeda;
+}
+fancy-tree fancy-scroll fancy-tree-item.inGameOnly {
+  color: #daa802;
+}
+fancy-tree fancy-scroll fancy-tree-item.hidden {
+  color: #555;
+}
+fancy-tree fancy-scroll fancy-tree-item.locked {
+  color: #666;
+  font-style: italic;
+}
+fancy-tree fancy-scroll fancy-tree-item.inRef {
+  background: #3a3a3a;
+}
+fancy-tree fancy-scroll fancy-tree-item.isOverride {
+  background: #0c2346;
+}
+fancy-tree fancy-scroll fancy-tree-item.isOverride.isOverriden {
+  color: cyan;
+}
+fancy-tree fancy-scroll fancy-tree-item.isOverride.isOverriden.isOverridenNew {
+  color: #26c726;
+}
 fancy-tree fancy-scroll fancy-tree-item:has(fancy-tree-children .selected) > fancy-tree-header fancy-tree-name {
   text-decoration: underline var(--selection);
 }
@@ -5104,6 +5049,13 @@ fancy-tree fancy-scroll fancy-tree-item.selected {
   color: white;
   --background: var(--selection);
 }
+fancy-tree fancy-scroll fancy-tree-item:hover {
+  background-color: var(--hover);
+}
+fancy-tree fancy-scroll fancy-tree-item.selected {
+  color: white;
+  background-color: var(--selection);
+}
 fancy-tree fancy-scroll fancy-tree-item fancy-button.quieter {
   --size: 16px;
   font-size: 12px;

+ 46 - 100
bin/style.less

@@ -3122,105 +3122,9 @@ body.hide-subview {
 	outline: none;
 	position: relative;
 
-	.svn {
-		font-family: "FontAwesome";
-		font-size: 0.8em;
-		position:absolute;
-		margin-left: 20px;
-		margin-top: 3px;
-		z-index: 100;
-	}
-
-	.svn-modified {
-		&:before {
-			.svn;
-			content: "\f06a";
-			color: #b32020;
-			opacity: 0.7;
-		}
-	}
-
-	.svn-versioned {
-		&:before {
-			.svn;
-			content: "\f058";
-			color: #258833;
-			opacity: 0.7;
-		}
-	}
-
 	.filtered {
 		display: none;
 	}
-
-	.editorOnly {
-		color: rgb(2, 174, 218) !important;
-
-		i, a {
-			color: rgb(2, 174, 218);
-		}
-	}
-
-	.childSelected {
-		&>a {
-			outline: 1px solid rgba(114, 180, 255, 0.5);
-			border-radius: 3px;
-		}
-	}
-
-	.inGameOnly {
-		color: rgb(218, 168, 2) !important;
-
-		i, a {
-			color: rgb(218, 168, 2);
-		}
-	}
-
-	.hidden {
-		color: #555 !important;
-
-		i, a {
-			color: #555;
-		}
-	}
-
-	.disabled {
-		a {
-			color: #533 !important;
-			display: inline;
-		}
-		i {
-			color: #533;
-		}
-	}
-
-	.inRef {
-		background: rgb(68, 68, 68) !important;
-	}
-
-	.isOverride {
-		background: #25346d !important;
-	}
-
-	.isOverride.isOverriden {
-		> i, > a {
-			color: cyan !important;
-		}
-	}
-
-	.isOverride.isOverriden.isOverridenNew {
-		i, a {
-			color: rgb(38, 199, 38) !important;
-		}
-	}
-
-	a.locked {
-		color: #666 !important;
-		font-style: italic;
-	}
-	a.locked::after {
-		content: " (locked)";
-	}
 }
 
 .jstree-icon.jstree-ocl {
@@ -6078,6 +5982,43 @@ fancy-tree {
 				transform: rotate(90deg);
 			}
 
+			&.disabled {
+				color: #ee6666;
+			}
+
+			&.editorOnly {
+				color: rgb(2, 174, 218);
+			}
+
+			&.inGameOnly {
+				color: rgb(218, 168, 2);
+			}
+
+			&.hidden {
+				color: #555;
+			}
+
+			&.locked {
+				color: #666;
+				font-style: italic;
+			}
+
+			&.inRef {
+				background: rgb(58, 58, 58);
+			}
+
+			&.isOverride {
+				background: rgb(12, 35, 70);
+			}
+
+			&.isOverride.isOverriden {
+				color: cyan;
+			}
+
+			&.isOverride.isOverriden.isOverridenNew {
+				color: rgb(38, 199, 38);
+			}
+
 			// Select if we have a children that is selected
 			&:has(fancy-tree-children .selected) > fancy-tree-header {
 				fancy-tree-name {
@@ -6085,10 +6026,6 @@ fancy-tree {
 				}
 			}
 
-			// &.current:not(.selected) {
-			// 	//--highlight: 10;
-			// }
-
 			&.current {
 				outline: dashed 1px #AAA;
 				z-index: 10;
@@ -6100,6 +6037,15 @@ fancy-tree {
 				--background: var(--selection);
 			}
 
+			&:hover {
+				background-color: var(--hover);
+			}
+
+			&.selected {
+				color: white;
+				background-color: var(--selection);
+			}
+
 			fancy-button.quieter {
 				--size: 16px;
 				font-size: 12px;

+ 20 - 3
hide/comp/FancyTree.hx

@@ -66,6 +66,11 @@ typedef TreeButton<TreeItem> = {
 	?forceVisiblity : (TreeItem) -> Bool,
 }
 
+typedef Params =  {
+	?saveDisplayKey : String,
+	?quickGoto : Bool
+}
+
 class FancyTree<TreeItem> extends hide.comp.Component {
 	var rootData : Array<TreeItemData<TreeItem>> = [];
 	var itemMap : Map<{}, TreeItemData<TreeItem>> = [];
@@ -77,6 +82,8 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 	var gotoFileLastTime : Float = 0.0;
 	var gotoFileCurrentMatch = "";
 
+	var quickGoto : Bool = true;
+
 	static final gotoFileKeyMaxDelay = 0.5;
 	static final overDragOpenDelaySec = 0.5;
 
@@ -108,8 +115,10 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 	var moveLastDragOverStart: Float = 0;
 
 
-	public function new(parent: Element, ?saveKey: String) {
-		saveDisplayKey = saveKey;
+	public function new(parent: Element, ?params: Params) {
+		saveDisplayKey = params?.saveDisplayKey;
+		quickGoto = params?.quickGoto != null ? params.quickGoto : true;
+
 		var el = new Element('
 			<fancy-tree tabindex="-1">
 				<fancy-closable><fancy-search></fancy-search></fancy-closable>
@@ -185,6 +194,12 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 	public dynamic function onSelectionChanged(enterKey:Bool) {
 	}
 
+	/**
+		Used to change style of an element in the tree
+	**/
+	public dynamic function applyStyle(item: TreeItem, el: js.html.Element) {
+	}
+
 	/**
 		Called when the user double click on an item
 	**/
@@ -290,6 +305,7 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 		if (data != null) {
 			updateData(data);
 			generateChildren(data);
+			applyStyle(item, data.element);
 			queueRefresh(Search);
 			queueRefresh(RegenHeader);
 		}
@@ -448,7 +464,7 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 			return;
 		}
 
-		if (e.key.length == 1) {
+		if (e.key.length == 1 && quickGoto) {
 			if (searchBar.hasFocus())
 				return;
 			e.stopPropagation();
@@ -762,6 +778,7 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 			}
 
 			setupDragAndDrop(data);
+			applyStyle(data.item, element);
 		}
 
 		var fold = element.querySelector(".caret");

Різницю між файлами не показано, бо вона завелика
+ 405 - 425
hide/comp/SceneEditor.hx


+ 48 - 52
hide/view/FXEditor.hx

@@ -151,52 +151,50 @@ private class FXSceneEditor extends hide.comp.SceneEditor {
 		parent.onSelect(elts);
 	}
 
-	override function applyTreeStyle(p: PrefabElement, el: Element, ?pname: String, ?tree: hide.comp.IconTree<PrefabElement>) {
-		super.applyTreeStyle(p, el, pname, tree);
-		if (el == null)
-			return;
-
-		var asCurve = Std.downcast(p, Curve);
-		if (asCurve != null) {
-			if (asCurve.blendMode == Blend || asCurve.blendMode == Reference) {
-				var paramName = asCurve.blendParam;
-				var color = 0xFFFFFF;
-				var missing = false;
-				var icon = "ico-random";
-				if (asCurve.blendMode == Blend) {
-					var fx = Std.downcast(this.parent.data, hrt.prefab.fx.FX);
-					if (fx == null) {
-						return;
-					}
-					var param = fx.parameters.find(function (p) {return p.name == paramName;});
-					missing = param == null;
-					color = param?.color;
-
-				}
-				else {
-					var ref = (cast this.parent.data: hrt.prefab.Prefab).locatePrefab(asCurve.blendParam);
-					if (ref == null) {
-						missing = true;
-					}
-					icon = "ico-link";
-				}
+	override function buildTree(targetTree : hide.comp.SceneEditor.Tree) : hide.comp.FancyTree<hrt.prefab.Prefab> {
+		var tree = super.buildTree(targetTree);
 
-				var colorCode = StringTools.hex(missing ? 0xFF0000 : color, 6);
-				var paramEl = el.find('>a>.fx-parameter');
-				if (paramEl.length == 0 ){
-					var v = new Element('<span class="fx-parameter"><i class="ico $icon"></i><span class="fx-param-name"></span></span>');
-					el.find("a").first().append(v);
-					paramEl = v;
-				}
-				var paramNameEl = paramEl.find(".fx-param-name");
-				paramNameEl.get(0).innerText = '$paramName';
-				paramEl.css("color", '#$colorCode');
-				paramEl.toggleClass("missing", missing);
+		var prev = tree.getButtons;
+		tree.getButtons = (p : hrt.prefab.Prefab) -> {
+			var buttons = prev(p);
+			var curve = Std.downcast(p, Curve);
+			if (curve == null || (curve.blendMode != Blend && curve.blendMode != Reference))
+				return buttons;
+
+			var paramName = curve.blendParam;
+			var color = 0xFFFFFF;
+			var icon = "ico-random";
+			var missing = false;
+
+			if (curve.blendMode == Blend) {
+				var fx = Std.downcast(this.parent.data, hrt.prefab.fx.FX);
+				if (fx == null)
+					return buttons;
+				var param = fx.parameters.find(function (p) {return p.name == paramName;});
+				missing = param == null;
+				color = param?.color;
 			}
 			else {
-				el.find(".fx-parameter").remove();
+				var ref = (cast this.parent.data: hrt.prefab.Prefab).locatePrefab(curve.blendParam);
+				if (ref == null)
+					missing = true;
+				icon = "ico-link";
 			}
+
+			var colorCode = StringTools.hex(missing ? 0xFF0000 : color, 6);
+
+			buttons.insert(0, {
+				getIcon: (p: hrt.prefab.Prefab) ->  {
+					return '<span class="fx-parameter ${missing ? "missing" : ""}" style="color:#$colorCode"><i class="ico $icon"></i><span class="fx-param-name">$paramName</span></span>';
+				},
+				click: (p: hrt.prefab.Prefab) -> {},
+				forceVisiblity: (p: hrt.prefab.Prefab) -> true,
+			});
+
+			return buttons;
 		}
+
+		return tree;
 	}
 
 	override function getNewContextMenu(current: PrefabElement, ?onMake: PrefabElement->Void=null, ?groupByType = true ) {
@@ -451,7 +449,7 @@ class FXEditor extends hide.view.FileView {
 			sceneEditor.is2D = true;
 		}
 
-		element.find(".hide-scenetree").first().append(sceneEditor.tree.element);
+		element.find(".hide-scenetree").first().append(sceneEditor.sceneTree.element);
 		element.find(".render-props-edition").find('.hide-scenetree').append(sceneEditor.renderPropsTree.element);
 		element.find(".hide-scroll").first().append(sceneEditor.properties.element);
 		element.find(".heaps-scene").first().append(sceneEditor.scene.element);
@@ -515,7 +513,7 @@ class FXEditor extends hide.view.FileView {
 		keys.register("playPause", function() { pauseButton.toggle(!pauseButton.isDown()); });
 
 		currentVersion = undo.currentID;
-		sceneEditor.tree.element.addClass("small");
+		sceneEditor.sceneTree.element.addClass("small");
 		sceneEditor.renderPropsTree.element.addClass("small");
 
 		var rpEditionvisible = Ide.inst.currentConfig.get("sceneeditor.renderprops.edit", false);
@@ -673,12 +671,8 @@ class FXEditor extends hide.view.FileView {
 
 			if (pname == "parameters") {
 				var all = p.flatten();
-				for (e in all) {
-					var el = sceneEditor.tree.getElement(e);
-					if (el != null && el.toggleClass != null) {
-						sceneEditor.applyTreeStyle(e, el, pname);
-					}
-				}
+				for (e in all)
+					sceneEditor.applyTreeStyle(e, All);
 			}
 		}
 
@@ -1369,10 +1363,10 @@ class FXEditor extends hide.view.FileView {
 					element.children.push(c);
 			}
 			sceneEditor.queueRebuild(@:privateAccess sceneEditor.sceneData);
-			sceneEditor.queueRebuildCallback(() -> @:privateAccess sceneEditor.refreshTree(() -> sceneEditor.selectElements(!undo ? [for (a in added) a] : [], NoHistory)));
+			sceneEditor.queueRebuildCallback(() -> @:privateAccess sceneEditor.refreshTree(SceneTree, () -> sceneEditor.selectElements(!undo ? [for (a in added) a] : [], NoHistory)));
 		}));
 		sceneEditor.queueRebuild(@:privateAccess sceneEditor.sceneData);
-		sceneEditor.queueRebuildCallback(() -> @:privateAccess sceneEditor.refreshTree(() -> sceneEditor.selectElements([for (a in added) a], NoHistory)));
+		sceneEditor.queueRebuildCallback(() -> @:privateAccess sceneEditor.refreshTree(SceneTree, () -> sceneEditor.selectElements([for (a in added) a], NoHistory)));
 		return added;
 	}
 
@@ -1857,7 +1851,9 @@ class FXEditor extends hide.view.FileView {
 	}
 
 	function get_currentTime():Float {
-		return @:privateAccess this.curveEditor.currentTime;
+		if (this.curveEditor != null)
+			return @:privateAccess this.curveEditor.currentTime;
+		return this.currentTime;
 	}
 }
 

+ 1 - 1
hide/view/FileBrowser.hx

@@ -419,7 +419,7 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 			}
 		}
 
-		fancyTree = new hide.comp.FancyTree<FileEntry>(browserLayout.find(".left"), "fileBrowserTree");
+		fancyTree = new hide.comp.FancyTree<FileEntry>(browserLayout.find(".left"), { saveDisplayKey: "fileBrowserTree" } );
 		fancyTree.getChildren = (file: FileEntry) -> {
 			if (file == null)
 				return [root];

+ 2 - 2
hide/view/Model.hx

@@ -129,13 +129,13 @@ class Model extends FileView {
 			]);
 		});
 
-		element.find(".hide-scene-tree").first().append(sceneEditor.tree.element);
+		element.find(".hide-scene-tree").first().append(sceneEditor.sceneTree.element);
 		element.find(".render-props-edition").find('.hide-scenetree').append(sceneEditor.renderPropsTree.element);
 		element.find(".props").first().append(sceneEditor.properties.element);
 		element.find(".heaps-scene").first().append(sceneEditor.scene.element);
 		sceneEditor.view.keys.register("sceneeditor.focus", {name: "Focus Selection", category: "Scene"},
 			function() {if (lastSelectedObject != null) refreshSelectionHighlight(lastSelectedObject);});
-		sceneEditor.tree.element.addClass("small");
+		sceneEditor.sceneTree.element.addClass("small");
 		sceneEditor.renderPropsTree.element.addClass("small");
 
 		var rpEditionvisible = Ide.inst.currentConfig.get("sceneeditor.renderprops.edit", false);

+ 2 - 43
hide/view/Prefab.hx

@@ -63,10 +63,6 @@ class PrefabSceneEditor extends hide.comp.SceneEditor {
 		parent.onUpdate(dt);
 	}
 
-	override function applyTreeStyle(p: PrefabElement, el: Element, ?pname: String, ?tree: hide.comp.IconTree<PrefabElement>) {
-		super.applyTreeStyle(p, el, pname, tree);
-		parent.applyTreeStyle(p, el, pname);
-	}
 
 	override function applySceneStyle(p:PrefabElement) {
 		parent.applySceneStyle(p);
@@ -326,7 +322,7 @@ class Prefab extends hide.view.FileView {
 		currentVersion = undo.currentID;
 
 		createEditor();
-		element.find(".hide-scenetree").first().append(sceneEditor.tree.element);
+		element.find(".hide-scenetree").first().append(sceneEditor.sceneTree.element);
 		element.find(".render-props-edition").find('.hide-scenetree').append(sceneEditor.renderPropsTree.element);
 		element.find(".hide-scroll").first().append(properties.element);
 		element.find(".heaps-scene").first().append(scene.element);
@@ -336,7 +332,7 @@ class Prefab extends hide.view.FileView {
 		resizablePanel.saveDisplayKey = "treeColumn";
 		resizablePanel.onResize = () -> @:privateAccess if( scene.window != null) scene.window.checkResize();
 
-		sceneEditor.tree.element.addClass("small");
+		sceneEditor.sceneTree.element.addClass("small");
 		sceneEditor.renderPropsTree.element.addClass("small");
 
 		refreshColLayout();
@@ -486,37 +482,6 @@ class Prefab extends hide.view.FileView {
 		toolsDefs.push({id: "showViewportOverlays", title : "Viewport Overlays", icon : "eye", type : Toggle((v) -> { sceneEditor.updateViewportOverlays(); }) });
 		toolsDefs.push({id: "viewportoverlays-menu", title : "", icon: "", type : Popup((e) -> new hide.comp.SceneEditor.ViewportOverlaysPopup(e, sceneEditor))});
 
-		var texContent : Element = null;
-		// toolsDefs.push({id: "sceneInformationToggle", title : "Scene information", icon : "info-circle", type : Toggle((b) -> statusText.visible = b), rightClick: () -> {
-		// 	if( texContent != null ) {
-		// 		texContent.remove();
-		// 		texContent = null;
-		// 	}
-		// 	new hide.comp.ContextMenu([
-		// 		{
-		// 			label : "Show Texture Details",
-		// 			click : function() {
-		// 				var memStats = scene.engine.mem.stats();
-		// 				var texs = @:privateAccess scene.engine.mem.textures;
-		// 				var list = [for(t in texs) {
-		// 					n: '${t.width}x${t.height}  ${t.format}  ${t.name}',
-		// 					size: t.width * t.height
-		// 				}];
-		// 				list.sort((a, b) -> Reflect.compare(b.size, a.size));
-		// 				var content = new Element('<div tabindex="1" class="overlay-info"><h2>Scene info</h2><pre></pre></div>');
-		// 				new Element(element[0].ownerDocument.body).append(content);
-		// 				var pre = content.find("pre");
-		// 				pre.text([for(l in list) l.n].join("\n"));
-		// 				texContent = content;
-		// 				content.blur(function(_) {
-		// 					content.remove();
-		// 					texContent = null;
-		// 				});
-		// 			}
-		// 		}
-		// 	]);
-		// }});
-
 		toolsDefs.push({id: "", title : "", icon : "", type : Separator});
 
 		toolsDefs.push({id: "autoSyncToggle", title : "Auto synchronize", icon : "refresh", type : Toggle((b) -> autoSync = b)});
@@ -557,9 +522,6 @@ class Prefab extends hide.view.FileView {
 
 		toolsDefs.push({id: "", title : "", icon : "", type : Separator});
 
-		//toolsDefs.push({id: "test", title : "Hello", icon : "", type : Popup((e : hide.Element) -> new hide.comp.CameraControllerEditor(sceneEditor, null,e))});
-
-
 		tools.makeToolbar(toolsDefs, config, keys);
 
 		posToolTip = new h2d.Text(hxd.res.DefaultFont.get(), scene.s2d);
@@ -896,9 +858,6 @@ class Prefab extends hide.view.FileView {
 		return content;
 	}
 
-	function applyTreeStyle(p: PrefabElement, el: Element, pname: String) {
-	}
-
 	function onPrefabChange(p: PrefabElement, ?pname: String) {
 
 	}

+ 1 - 0
hrt/prefab/Curve.hx

@@ -511,6 +511,7 @@ class Curve extends Prefab {
 					remapPath = null;
 			}
 			refreshBlend();
+			@:privateAccess ctx.scene.editor.refreshTree(SceneTree);
 			ctx.onChange(this, pname);
 		});
 

+ 2 - 2
hrt/prefab/Model.hx

@@ -148,7 +148,7 @@ class Model extends Object3D {
 				if (toRemove != null && toRemove.source == toRemovePath)
 					change(toRemove, toAddPath, undo);
 
-				@:privateAccess ctx.scene.editor.refreshTree();
+				@:privateAccess ctx.scene.editor.refreshTree(SceneTree);
 			}
 
 			exec(false);
@@ -168,7 +168,7 @@ class Model extends Object3D {
 						change(toRemove, toAddPath, undo);
 				}
 
-				@:privateAccess ctx.scene.editor.refreshTree();
+				@:privateAccess ctx.scene.editor.refreshTree(SceneTree);
 			}
 
 			exec(false);

+ 2 - 2
hrt/prefab/Reference.hx

@@ -412,7 +412,7 @@ class Reference extends Object3D {
 						}
 
 						shared.editor.refreshInteractive(this);
-						@:privateAccess shared.editor.refreshTree();
+						@:privateAccess shared.editor.refreshTree(All);
 					}
 				}
 			}
@@ -520,7 +520,7 @@ class Reference extends Object3D {
 			editor.endRebuild();
 
 			editor.selectElements(newSelection, Nothing);
-			editor.refreshTree();
+			editor.refreshTree(All);
 		}
 
 		exec(false);

Деякі файли не було показано, через те що забагато файлів було змінено