Forráskód Böngészése

[fileTree] allow multiple selections for move/delete operations

Clément Espeute 11 hónapja
szülő
commit
9ad8325f6d
1 módosított fájl, 24 hozzáadás és 19 törlés
  1. 24 19
      hide/view/FileTree.hx

+ 24 - 19
hide/view/FileTree.hx

@@ -105,56 +105,61 @@ class FileTree extends FileView {
 		tree.onRename = doRename;
 		tree.onRename = doRename;
 
 
 		element.contextmenu(function(e) {
 		element.contextmenu(function(e) {
-			var current = tree.getCurrentOver();
-			if( current != null )
-				tree.setSelection([current]);
+			var over = tree.getCurrentOver();
+			if( over != null && !tree.getSelection().contains(over))
+				tree.setSelection([over]);
+			var selection = tree.getSelection();
 			e.preventDefault();
 			e.preventDefault();
 			var allowedNew : Array<String> = config.get("filetree.allowednew");
 			var allowedNew : Array<String> = config.get("filetree.allowednew");
 			function allowed( ext : String ) return allowedNew.indexOf(ext) >= 0 || allowedNew.indexOf("*") >= 0;
 			function allowed( ext : String ) return allowedNew.indexOf(ext) >= 0 || allowedNew.indexOf("*") >= 0;
 			var newMenu = [for( e in EXTENSIONS ) if( e.options.createNew != null && Lambda.exists(e.extensions, allowed) ) {
 			var newMenu = [for( e in EXTENSIONS ) if( e.options.createNew != null && Lambda.exists(e.extensions, allowed) ) {
 				label : e.options.createNew,
 				label : e.options.createNew,
-				click : createNew.bind(current, e),
+				click : createNew.bind(selection[0], e),
 				icon : e.options.icon,
 				icon : e.options.icon,
 			}];
 			}];
 			if( allowed("dir") )
 			if( allowed("dir") )
 				newMenu.unshift({
 				newMenu.unshift({
 					label : "Directory",
 					label : "Directory",
-					click : createNew.bind(current, { options : { createNew : "Directory" }, extensions : null, component : null }),
+					click : createNew.bind(selection[0], { options : { createNew : "Directory" }, extensions : null, component : null }),
 					icon : "folder",
 					icon : "folder",
 				});
 				});
 			new hide.comp.ContextMenu([
 			new hide.comp.ContextMenu([
-				{ label : "New..", menu:newMenu },
+				{ label : "New...", menu:newMenu },
 				{ label : "Collapse", click : tree.collapseAll },
 				{ label : "Collapse", click : tree.collapseAll },
 				{ label : "", isSeparator: true },
 				{ label : "", isSeparator: true },
-				{ label : "Copy Path", enabled : current != null, click : function() { ide.setClipboard(current); } },
-				{ label : "Copy Absolute Path", enabled : current != null, click : function() { ide.setClipboard(Ide.inst.getPath(current)); } },
-				{ label : "Open in Explorer", enabled : current != null, click : function() { onExploreFile(current); } },
-				{ label : "Find References", enabled : current != null, click : onFindPathRef.bind(current)},
+				{ label : "Copy Path", enabled : selection.length == 1, click : function() { ide.setClipboard(selection[0]); } },
+				{ label : "Copy Absolute Path", enabled : selection.length == 1, click : function() { ide.setClipboard(Ide.inst.getPath(selection[0])); } },
+				{ label : "Open in Explorer", enabled : selection.length == 1, click : function() { onExploreFile(selection[0]); } },
+				{ label : "Find References", enabled : selection.length == 1, click : onFindPathRef.bind(selection[0])},
 				{ label : "", isSeparator: true },
 				{ label : "", isSeparator: true },
-				{ label : "Clone", enabled : current != null, click : function() {
+				{ label : "Clone", enabled : selection.length == 1, click : function() {
 						try {
 						try {
-							if (onCloneFile(current)) {
+							if (onCloneFile(selection[0])) {
 								tree.refresh();
 								tree.refresh();
 							}
 							}
 						} catch (e : Dynamic) {
 						} catch (e : Dynamic) {
 							js.Browser.window.alert(e);
 							js.Browser.window.alert(e);
 						}
 						}
 					} },
 					} },
-				{ label : "Rename", enabled : current != null, click : function() {
+				{ label : "Rename", enabled : selection.length == 1, click : function() {
 					try {
 					try {
-						onRenameFile(current);
+						onRenameFile(selection[0]);
 					} catch (e : Dynamic) {
 					} catch (e : Dynamic) {
 						js.Browser.window.alert(e);
 						js.Browser.window.alert(e);
 					}
 					}
 					} },
 					} },
-				{ label : "Move", enabled : current != null, click : function() {
+				{ label : "Move", enabled : selection.length > 0, click : function() {
 					ide.chooseDirectory(function(dir) {
 					ide.chooseDirectory(function(dir) {
-						doRename(current, "/"+dir+"/"+current.split("/").pop());
+						for (current in selection) {
+							doRename(current, "/"+dir+"/"+current.split("/").pop());
+						}
 					});
 					});
 				}},
 				}},
-				{ label : "Delete", enabled : current != null, click : function() {
-					if( js.Browser.window.confirm("Delete " + current + "?") ) {
-						onDeleteFile(current);
+				{ label : "Delete", enabled : selection.length > 0, click : function() {
+					if( js.Browser.window.confirm("Delete " + selection.join(", ") + "?") ) {
+						for (current in selection) {
+							onDeleteFile(current);
+						}
 						tree.refresh();
 						tree.refresh();
 					}
 					}
 				}},
 				}},