2
0
Эх сурвалжийг харах

FileTree: do not rebuild tree to apply style for SVN

lviguier 3 сар өмнө
parent
commit
1a4b28559b

+ 3 - 1
hide/comp/IconTree.hx

@@ -121,7 +121,7 @@ class IconTree<T:{}> extends Component {
 		return content;
 	}
 
-	public function init() {
+	public function init(?onReady : Void -> Void) {
 		var inInit = true;
 		(element:Dynamic).jstree({
 			core : {
@@ -212,6 +212,8 @@ class IconTree<T:{}> extends Component {
 				if(item != null)
 					applyStyleInternal(getValue(item), new Element(li));
 			}
+			if (onReady != null)
+				onReady();
 		});
 		element.on('changed.jstree', function (e, data) {
 			var nodes: Array<Dynamic> = data.changed.deselected;

+ 25 - 23
hide/view/FileTree.hx

@@ -97,7 +97,7 @@ class FileTree extends FileView {
 					children : isDir,
 				});
 				if (!isDir && (ide.ideConfig.svnShowModifiedFiles || ide.ideConfig.svnShowVersionedFiles))
-					watch(fullPath, function() rebuild(), { checkDelete: true });
+					watch(fullPath, function() refreshSVNStatusIcons(), { checkDelete: true });
 			}
 			watch(basePath, function() rebuild(), { checkDelete: true });
 			content.sort(function(a,b) { if( a.children != b.children ) return a.children?-1:1; return Reflect.compare(a.text,b.text); });
@@ -214,30 +214,32 @@ class FileTree extends FileView {
 		tree.onDblClick = onOpenFile;
 		tree.onAllowMove = onAllowMove;
 		tree.onMove = doMove;
-		tree.init();
-
-		if (ide.isSVNAvailable() && (ide.ideConfig.svnShowModifiedFiles || ide.ideConfig.svnShowVersionedFiles)) {
-			var svnModifiedFiles = ide.getSVNModifiedFiles();
-			tree.applyStyle = (p, el) -> {
-				var isModified = false;
-				for (f in svnModifiedFiles) {
-					if (ide.getPath(f).indexOf(p) >= 0) {
-						isModified = true;
-						break;
-					}
-				}
+		tree.init(refreshSVNStatusIcons);
+	}
 
-				if (isModified) {
-					if (ide.ideConfig.svnShowModifiedFiles)
-						el.addClass("svn-modified");
-						el.removeClass("svn-versioned");
-				}
-				else {
-					if (ide.ideConfig.svnShowVersionedFiles)
-						el.addClass("svn-versioned");
-					el.removeClass("svn-modified");
+	function refreshSVNStatusIcons() {
+		if (!ide.isSVNAvailable() || (!ide.ideConfig.svnShowModifiedFiles && !ide.ideConfig.svnShowVersionedFiles))
+			return;
+
+		var prevModified = tree.element.find(".svn-modified");
+		prevModified.removeClass("sv-modified");
+		if (ide.ideConfig.svnShowVersionedFiles)
+			tree.element.find(".jstree-node").addClass("svn-versioned");
+
+		if (ide.ideConfig.svnShowModifiedFiles) {
+			for (f in Ide.inst.getSVNModifiedFiles()) {
+				var relPath = f.substr(f.indexOf("res/") + 4);
+				var p = "";
+				for (sp in relPath.split("/")) {
+					p += p.length > 0 ? "/"+sp : sp;
+					var el = tree.getElement(p);
+					if (!(el is hide.Element))
+						continue;
+
+					el.removeClass("svn-versioned");
+					el.addClass("svn-modified");
 				}
-			};
+			}
 		}
 	}