소스 검색

[filebrowser] Save layout, double click

Clément Espeute 2 달 전
부모
커밋
2f5353b29b
2개의 변경된 파일34개의 추가작업 그리고 17개의 파일을 삭제
  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() {
 	}
 
+	/**
+		Called when the user double click on an item
+	**/
+	public dynamic function onDoubleClick(item: TreeItem) {
+
+	}
+
 	/**
 		Drag and drop interface.
 		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();
 			});
 
-			var closure = dataClickHandler.bind(data);
+			var clickHandlerClosure = dataClickHandler.bind(data);
 			var ctxMenuClosure = contextMenuHandler.bind(data.item);
+			var doubleClickClosure = onDoubleClick.bind(data.item);
 
 			var icon = element.querySelector(".header-icon");
-			icon.onclick = closure;
+			icon.onclick = clickHandlerClosure;
 			icon.oncontextmenu = ctxMenuClosure;
+			icon.ondblclick = doubleClickClosure;
 
 			var name = element.querySelector("fancy-tree-name");
-			name.onclick = closure;
+			name.onclick = clickHandlerClosure;
 			name.oncontextmenu = ctxMenuClosure;
+			name.ondblclick = doubleClickClosure;
 
 			data.element = element;
 

+ 21 - 14
hide/view/FileBrowser.hx

@@ -3,14 +3,14 @@ package hide.view;
 import hide.tools.FileManager;
 import hide.tools.FileManager.FileEntry;
 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> {
@@ -25,17 +25,18 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 
 	function set_layout(newLayout: Layout) : Layout {
 		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").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();
 
@@ -412,6 +413,12 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 		fancyTree.rebuildTree();
 		fancyTree.openItem(root);
 
+		fancyTree.onDoubleClick = (item: FileEntry) -> {
+			if (item.kind == File) {
+				ide.openFile(item.getPath());
+			}
+		}
+
 		var right = browserLayout.find(".right");
 		right.get(0).onkeydown = (e: js.html.KeyboardEvent) -> {
 			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);
 
-		layout = Horizontal;
+		layout = state.savedLayout ?? Horizontal;
 	}
 
 	override function destroy() {