Selaa lähdekoodia

[filebrowser] Deprecated old fileBrowser, feature parity

Clément Espeute 2 kuukautta sitten
vanhempi
commit
f52b0d5a7e
4 muutettua tiedostoa jossa 75 lisäystä ja 26 poistoa
  1. 2 2
      bin/app.html
  2. 15 12
      hide/Ide.hx
  3. 30 9
      hide/comp/FancyTree.hx
  4. 28 3
      hide/view/FileBrowser.hx

+ 2 - 2
bin/app.html

@@ -86,13 +86,13 @@
 		<menu label="Exit" class="exit"></menu>
 	</menu>
 	<menu label="View" class="view">
-		<menu label="Resources" component="hide.view.FileTree" state='{"path":""}'></menu>
-			<menu label="Directory" component="hide.view.FileTree"></menu>
+		<menu label="Resources" component="hide.view.FileBrowser" state='{"savedLayout": "SingleTree"}' position="content_left"></menu>
 		<menu label="File Browser" component="hide.view.FileBrowser" state='{}'></menu>
 		<menu label="Inspector" component="hide.view.Inspector" state='{}'></menu>
 		<separator></separator>
 		<menu label="About" component="hide.view.About"></menu>
 		<menu label="Debug" class="debug"></menu>
+		<menu label="Legacy Resources" component="hide.view.FileTree" state='{"path":""}'></menu>
 		<menu label="Editor Gym" component="hide.view.Gym"></menu>
 	</menu>
 	<menu label="Database" class="database">

+ 15 - 12
hide/Ide.hx

@@ -364,7 +364,7 @@ class Ide extends hide.tools.IdeData {
 			v.onResize();
 	}
 
-	function getOrInitTarget(position: hide.ui.View.DisplayPosition) : golden.ContentItem {
+	public function getOrInitTarget(position: hide.ui.View.DisplayPosition) : golden.ContentItem {
 		if (layout.root == null)
 			return null;
 		var target = layout.root.getItemsById(position)[0];
@@ -569,7 +569,7 @@ class Ide extends hide.tools.IdeData {
 				if( isCDB )
 					open("hide.view.CdbTable",{}, function(v) v.fullScreen = true);
 				else
-					open("hide.view.FileTree",{path:""});
+					open("hide.view.Browser",{savedLayout: "SingleTree"}, Left);
 			}
 			if( firstInit ) {
 				firstInit = false;
@@ -1477,8 +1477,10 @@ class Ide extends hide.tools.IdeData {
 			if( cl == null ) error("Missing component class "+cname);
 			var state = c.attr("state");
 			if( state != null ) try haxe.Json.parse(state) catch( e : Dynamic ) error("Invalid state "+state+" ("+e+")");
+
+			var position : hide.ui.View.DisplayPosition = c.attr("position");
 			c.click(function(_) {
-				open(cname, state == null ? null : haxe.Json.parse(state));
+				open(cname, state == null ? null : haxe.Json.parse(state), position);
 			});
 		}
 
@@ -1670,13 +1672,14 @@ class Ide extends hide.tools.IdeData {
 	}
 
 	public function showFileInResources(path: String) {
-		var filetree = getViews(hide.view.FileTree)[0];
-		if( filetree != null) {
-			if (@:privateAccess filetree.tree == null)
-				filetree.onDisplay();
-			filetree.activate();
-			filetree.revealNode(path);
-		}
+		js.Browser.alert("This feature is momentarely disabled");
+		// var filetree = getViews(hide.view.FileTree)[0];
+		// if( filetree != null) {
+		// 	if (@:privateAccess filetree.tree == null)
+		// 		filetree.onDisplay();
+		// 	filetree.activate();
+		// 	filetree.revealNode(path);
+		// }
 	}
 
 	public static function showFileInExplorer(path : String) {
@@ -1744,7 +1747,7 @@ class Ide extends hide.tools.IdeData {
 		}
 	}
 
-	public function open( component : String, state : Dynamic, ?onCreate : hide.ui.View<Dynamic> -> Void, ?onOpen : hide.ui.View<Dynamic> -> Void ) {
+	public function open( component : String, state : Dynamic, ?onCreate : hide.ui.View<Dynamic> -> Void, ?onOpen : hide.ui.View<Dynamic> -> Void, ?positionOverride: hide.ui.View.DisplayPosition ) {
 		if (layout.root == null)
 			return;
 		if( state == null ) state = {};
@@ -1765,7 +1768,7 @@ class Ide extends hide.tools.IdeData {
 
 		var options = viewConfig.options;
 
-		var target = getOrInitTarget(options.position ?? Center);
+		var target = getOrInitTarget(positionOverride ?? options.position ?? Center);
 
 		var needResize = options.width != null;
 		target.on("componentCreated", function(c) {

+ 30 - 9
hide/comp/FancyTree.hx

@@ -24,7 +24,7 @@ enum FilterFlag {
 
 typedef FilterFlags = haxe.EnumFlags<FilterFlag>;
 
-typedef TreeItemData<TreeItem> = {element: js.html.Element, ?searchRanges: FancySearch.SearchRanges, item: TreeItem, name: String, ?iconCache: String, open: Bool, filterState: FilterFlags, children: Array<TreeItemData<TreeItem>>, parent: TreeItemData<TreeItem>, depth: Int, identifier: String};
+typedef TreeItemData<TreeItem> = {element: js.html.Element, ?searchRanges: FancySearch.SearchRanges, item: TreeItem, name: String, uniqueName: String, ?iconCache: String, filterState: FilterFlags, children: Array<TreeItemData<TreeItem>>, parent: TreeItemData<TreeItem>, depth: Int, identifier: String};
 
 enum DropOperation {
 	Before;
@@ -70,7 +70,8 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 	var moveLastDragOverStart: Float = 0;
 
 
-	public function new(parent: Element) {
+	public function new(parent: Element, ?saveKey: String) {
+		saveDisplayKey = saveKey;
 		var el = new Element('
 			<fancy-tree2 tabindex="-1">
 				<fancy-closable><fancy-search></fancy-search></fancy-closable>
@@ -82,6 +83,8 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 		);
 		super(parent, el);
 
+		loadState();
+
 		searchBarClosable = new FancyClosable(null, element.find("fancy-closable"));
 
 		searchBar = new FancySearch(null, element.find("fancy-search"));
@@ -115,6 +118,7 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 		fancyTree.onclick = (e) -> {
 			currentVisible = false;
 		}
+
  	}
 
 	/**
@@ -255,7 +259,7 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 				var childData : TreeItemData<TreeItem> = hrt.tools.MapUtils.getOrPut(itemMap, cast childItem, {
 					item: childItem,
 					parent: null,
-					open: false,
+					uniqueName: getUniqueName(childItem),
 					filterState: Visible,
 					children: null,
 					depth: 0,
@@ -393,7 +397,6 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 			}
 			else if (currentItem != null && !isOpen(currentItem)) {
 				toggleDataOpen(currentItem, true);
-				//saveState();
 			}
 			return;
 		}
@@ -409,7 +412,6 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 				currentItem = currentItem.parent;
 			} else if(anyChildren && currentItem != null) {
 				toggleDataOpen(currentItem, false);
-				//saveState();
 			}
 			return;
 		}
@@ -595,7 +597,6 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 			var fold = element.querySelector(".caret");
 			fold.addEventListener("click", (e) -> {
 				toggleDataOpen(data);
-				//saveState();
 			});
 
 			var clickHandlerClosure = dataClickHandler.bind(data);
@@ -695,7 +696,6 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 
 						if (time - moveLastDragOverStart > overDragOpenDelaySec && !isOpen(data)) {
 							toggleDataOpen(data, true);
-							//saveState();
 						}
 					}
 
@@ -816,10 +816,31 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 		if (currentSearch.length > 0) {
 			data.filterState.setTo(Open, want);
 		}
-		data.open = want;
+
+		if (want) {
+			openState.set(data.uniqueName, true);
+		} else {
+			openState.remove(data.uniqueName);
+		}
+		saveState();
 		queueRefresh(Flat);
 	}
 
+	function loadState() {
+		var open : Array<String> = getDisplayState("openState");
+		if (open != null) {
+			openState = [];
+			for (item in open) {
+				openState.set(item, true);
+			}
+		}
+	}
+
+	function saveState() {
+		var ser = [for (k => _ in openState) k];
+		saveDisplayState("openState", ser);
+	}
+
 	var refreshQueued : Bool = false;
 	var currentRefreshFlags : RefreshFlags = RefreshFlags.ofInt(0);
 
@@ -879,7 +900,7 @@ class FancyTree<TreeItem> extends hide.comp.Component {
 	}
 
 	function isOpen(data: TreeItemData<TreeItem>) {
-		return data.open || data.filterState.has(Open);
+		return (openState.get(data.uniqueName) ?? false) || data.filterState.has(Open);
 	}
 
 }

+ 28 - 3
hide/view/FileBrowser.hx

@@ -87,6 +87,31 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 			]
 		});
 
+		menu.push({
+			label: "Dock",
+			menu: [{
+				label: "Left",
+				click: () -> {
+					saveState();
+					var newState : FileBrowserState = haxe.Json.parse(haxe.Json.stringify(state));
+					newState.savedLayout = Vertical;
+					close();
+					ide.open("hide.view.FileBrowser", newState, Left);
+				}
+			},
+			{
+				label: "Bottom",
+				click: () -> {
+					saveState();
+					var newState : FileBrowserState = haxe.Json.parse(haxe.Json.stringify(state));
+					newState.savedLayout = Horizontal;
+					close();
+					ide.open("hide.view.FileBrowser", newState, Bottom);
+				}
+			},
+			]
+		});
+
 		return menu;
 	}
 
@@ -287,8 +312,7 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 			}
 		}
 
-		fancyTree = new hide.comp.FancyTree<FileEntry>(browserLayout.find(".left"));
-		fancyTree.saveDisplayKey = "fileBrowserTree";
+		fancyTree = new hide.comp.FancyTree<FileEntry>(browserLayout.find(".left"), "fileBrowserTree");
 		fancyTree.getChildren = (file: FileEntry) -> {
 			if (file == null)
 				return [root];
@@ -306,6 +330,7 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 		};
 		//fancyTree.hasChildren = (file: FileEntry) -> return file.kind == Dir;
 		fancyTree.getName = (file: FileEntry) -> return file?.name;
+		fancyTree.getUniqueName = (file: FileEntry) -> file?.getRelPath();
 
 		fancyTree.getIcon = (item : FileEntry) -> {
 			if (item.kind == Dir)
@@ -542,7 +567,7 @@ class FileBrowser extends hide.ui.View<FileBrowserState> {
 	}
 
 	function renameHandler(item: FileEntry, newName: String) {
-		if (newName.indexOf(".") == -1) {
+		if (newName.indexOf(".") == -1 && item.name.indexOf(".") >= 0) {
 			newName += "." + item.name.split(".").pop();
 		}