Browse Source

[filebrowser] Save layout, double click

Clément Espeute 2 tháng trước cách đây
mục cha
commit
2f5353b29b
2 tập tin đã thay đổi với 34 bổ sung17 xóa
  1. 13 3
      hide/comp/FancyTree.hx
  2. 21 14
      hide/view/FileBrowser.hx

+ 13 - 3
hide/comp/FancyTree.hx

@@ -137,6 +137,13 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 	public dynamic function onSelectionChanged() {
 	public dynamic function onSelectionChanged() {
 	}
 	}
 
 
+	/**
+		Called when the user double click on an item
+	**/
+	public dynamic function onDoubleClick(item: TreeItem) {
+
+	}
+
 	/**
 	/**
 		Drag and drop interface.
 		Drag and drop interface.
 		Set this struct with all of it's function callback to handle drag and drop inside your tree.
 		Set this struct with all of it's function callback to handle drag and drop inside your tree.
@@ -563,16 +570,19 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 				//saveState();
 				//saveState();
 			});
 			});
 
 
-			var closure = dataClickHandler.bind(data);
+			var clickHandlerClosure = dataClickHandler.bind(data);
 			var ctxMenuClosure = contextMenuHandler.bind(data.item);
 			var ctxMenuClosure = contextMenuHandler.bind(data.item);
+			var doubleClickClosure = onDoubleClick.bind(data.item);
 
 
 			var icon = element.querySelector(".header-icon");
 			var icon = element.querySelector(".header-icon");
-			icon.onclick = closure;
+			icon.onclick = clickHandlerClosure;
 			icon.oncontextmenu = ctxMenuClosure;
 			icon.oncontextmenu = ctxMenuClosure;
+			icon.ondblclick = doubleClickClosure;
 
 
 			var name = element.querySelector("fancy-tree-name");
 			var name = element.querySelector("fancy-tree-name");
-			name.onclick = closure;
+			name.onclick = clickHandlerClosure;
 			name.oncontextmenu = ctxMenuClosure;
 			name.oncontextmenu = ctxMenuClosure;
+			name.ondblclick = doubleClickClosure;
 
 
 			data.element = element;
 			data.element = element;
 
 

+ 21 - 14
hide/view/FileBrowser.hx

@@ -3,14 +3,14 @@ package hide.view;
 import hide.tools.FileManager;
 import hide.tools.FileManager;
 import hide.tools.FileManager.FileEntry;
 import hide.tools.FileManager.FileEntry;
 typedef FileBrowserState = {
 typedef FileBrowserState = {
-
+	savedLayout: Layout,
 }
 }
 
 
-enum Layout {
-	SingleTree;
-	SingleMiniature;
-	Vertical;
-	Horizontal;
+enum abstract Layout(String) {
+	var SingleTree;
+	var SingleMiniature;
+	var Vertical;
+	var Horizontal;
 }
 }
 
 
 class FileBrowser extends hide.ui.View<FileBrowserState> {
 class FileBrowser extends hide.ui.View<FileBrowserState> {
@@ -25,17 +25,18 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 
 
 	function set_layout(newLayout: Layout) : Layout {
 	function set_layout(newLayout: Layout) : Layout {
 		layout = newLayout;
 		layout = newLayout;
+		state.savedLayout = layout;
+		saveState();
 
 
-		element.find("file-browser").toggleClass("vertical", layout.match(Vertical));
-		element.find("file-browser").toggleClass("single", layout.match(SingleTree));
+		element.find("file-browser").toggleClass("vertical", layout == Vertical);
+		element.find("file-browser").toggleClass("single", layout == SingleTree);
 
 
 		element.find(".left").width(layout == Horizontal ? "300px" : "auto");  // reset splitter width
 		element.find(".left").width(layout == Horizontal ? "300px" : "auto");  // reset splitter width
 		element.find(".left").height(layout == Vertical ? "300px" : "");  // reset splitter height
 		element.find(".left").height(layout == Vertical ? "300px" : "");  // reset splitter height
-		element.find(".left").toggle(!layout.match(SingleMiniature));
-		element.find(".right").toggle(!layout.match(SingleTree));
-		element.find(".splitter").toggle(!layout.match(SingleTree | SingleMiniature));
-		if (layout.match(Horizontal | Vertical))
-			resize.layoutDirection = layout == Horizontal ? Horizontal : Vertical;
+		element.find(".left").toggle(layout != SingleMiniature);
+		element.find(".right").toggle(layout != SingleTree);
+		element.find(".splitter").toggle(layout != SingleTree && layout != SingleMiniature);
+		resize.layoutDirection = layout == Horizontal ? Horizontal : Vertical;
 
 
 		fullRefresh();
 		fullRefresh();
 
 
@@ -412,6 +413,12 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 		fancyTree.rebuildTree();
 		fancyTree.rebuildTree();
 		fancyTree.openItem(root);
 		fancyTree.openItem(root);
 
 
+		fancyTree.onDoubleClick = (item: FileEntry) -> {
+			if (item.kind == File) {
+				ide.openFile(item.getPath());
+			}
+		}
+
 		var right = browserLayout.find(".right");
 		var right = browserLayout.find(".right");
 		right.get(0).onkeydown = (e: js.html.KeyboardEvent) -> {
 		right.get(0).onkeydown = (e: js.html.KeyboardEvent) -> {
 			if (hide.ui.Keys.matchJsEvent("search", e, ide.currentConfig)) {
 			if (hide.ui.Keys.matchJsEvent("search", e, ide.currentConfig)) {
@@ -557,7 +564,7 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 
 
 		FileManager.inst.onFileChangeHandlers.push(onFileChange);
 		FileManager.inst.onFileChangeHandlers.push(onFileChange);
 
 
-		layout = Horizontal;
+		layout = state.savedLayout ?? Horizontal;
 	}
 	}
 
 
 	override function destroy() {
 	override function destroy() {