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

FileTree: fix svn icons disappearing when opening node

lviguier 3 сар өмнө
parent
commit
f13c6e9f6e
1 өөрчлөгдсөн 35 нэмэгдсэн , 7 устгасан
  1. 35 7
      hide/view/FileTree.hx

+ 35 - 7
hide/view/FileTree.hx

@@ -15,6 +15,7 @@ class FileTree extends FileView {
 
 	var tree : hide.comp.IconTree<String>;
 	var ignorePatterns : Array<EReg> = [];
+	var modifiedFiles : Array<String> = [];
 
 	public function new(state) {
 		super(state);
@@ -80,6 +81,7 @@ class FileTree extends FileView {
 		tree.allowRename = true;
 		tree.saveDisplayKey = saveDisplayKey;
 		tree.element.addClass("small");
+		var isSVNAvailable = ide.isSVNAvailable();
 		tree.get = function(path) {
 			if( path == null ) path = "";
 			var basePath = getFilePath(path);
@@ -96,7 +98,7 @@ class FileTree extends FileView {
 					icon : "ico ico-" + (isDir ? "folder" : (ext != null && ext.options.icon != null ? ext.options.icon : "file-text")),
 					children : isDir,
 				});
-				if (!isDir && (ide.ideConfig.svnShowModifiedFiles || ide.ideConfig.svnShowVersionedFiles))
+				if (!isDir && (isSVNAvailable && (ide.ideConfig.svnShowModifiedFiles || ide.ideConfig.svnShowVersionedFiles)))
 					watch(fullPath, function() refreshSVNStatusIcons(), { checkDelete: true });
 			}
 			watch(basePath, function() rebuild(), { checkDelete: true });
@@ -214,20 +216,46 @@ class FileTree extends FileView {
 		tree.onDblClick = onOpenFile;
 		tree.onAllowMove = onAllowMove;
 		tree.onMove = doMove;
-		tree.init(refreshSVNStatusIcons);
+		var svnIcons = ide.isSVNAvailable() && (ide.ideConfig.svnShowModifiedFiles || ide.ideConfig.svnShowVersionedFiles);
+		tree.init(svnIcons ? () -> refreshSVNStatusIcons() : null);
+		if (svnIcons)
+			tree.applyStyle = (e : String, el : Element) -> refreshSVNStatusIcons(false, e, el);
 	}
 
-	function refreshSVNStatusIcons() {
-		if (!ide.isSVNAvailable() || (!ide.ideConfig.svnShowModifiedFiles && !ide.ideConfig.svnShowVersionedFiles))
+	function refreshSVNStatusIcons(rec : Bool = true, ?p : String, ?el : Element) {
+		if (!rec) {
+			var isModified = false;
+			for (f in modifiedFiles) {
+				if (ide.getPath(f).indexOf(p) >= 0) {
+					isModified = true;
+					break;
+				}
+			}
+
+			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");
+			}
 			return;
+		}
+
+		modifiedFiles = Ide.inst.getSVNModifiedFiles();
+		if (el == null)
+			el = tree.element;
 
-		var prevModified = tree.element.find(".svn-modified");
+		var prevModified = el.find(".svn-modified");
 		prevModified.removeClass("sv-modified");
 		if (ide.ideConfig.svnShowVersionedFiles)
-			tree.element.find(".jstree-node").addClass("svn-versioned");
+			el.find(".jstree-node").addClass("svn-versioned");
 
 		if (ide.ideConfig.svnShowModifiedFiles) {
-			for (f in Ide.inst.getSVNModifiedFiles()) {
+			for (f in modifiedFiles) {
 				var relPath = f.substr(f.indexOf("res/") + 4);
 				var p = "";
 				for (sp in relPath.split("/")) {