From 62c8166a0cb60bd5597b822ce332827f4105b7eb Mon Sep 17 00:00:00 2001 From: Gareth Lee <60355612+Gir4ffe@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:01:28 +0100 Subject: [PATCH 1/4] Update FileBrowserApp to work with Top Resources Updated to allow the FileBrowserApp to be called from Top Resources with a path. This allows navigation to repositories from Top Resources. --- .../filebrowser/FileBrowserApp.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java index 03bf90f99c..b49b9eca62 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java @@ -2,6 +2,7 @@ import java.io.File; import java.net.URI; +import java.net.URL; import org.phoebus.framework.preferences.AnnotatedPreferences; import org.phoebus.framework.preferences.Preference; @@ -42,14 +43,37 @@ public AppInstance create() { return createWithRoot(default_root); } + // @Override + // public AppInstance create(final URI resource) + // { + // return createWithRoot(new File(resource)); + // } + @Override public AppInstance create(final URI resource) { - return createWithRoot(new File(resource)); + try + { + // Remove query component since File(URI) does not accept it + URI clean = new URI(resource.getScheme(), resource.getSchemeSpecificPart(), null); + return createWithRoot(new File(clean)); + } + catch (Exception ex) + { + // Fallback: try using path string + return createWithRoot(new File(resource.getPath())); + } } + public AppInstance createWithRoot(final File directory) { return new FileBrowser(this, directory); } + + @Override + public URL getIconURL() + { + return FileBrowserApp.class.getResource("/icons/filebrowser.png"); + } } From ba8016cb25c8055965455a527bfa6eb9b72ccc15 Mon Sep 17 00:00:00 2001 From: Gareth Lee <60355612+Gir4ffe@users.noreply.github.com> Date: Mon, 6 Oct 2025 14:40:06 +0100 Subject: [PATCH 2/4] Added File Browser dynamic tab name to show current path Code updated to listen to current path and update on change. --- .../applications/filebrowser/FileBrowser.java | 47 +++++++++++++++---- .../filebrowser/FileBrowserController.java | 16 +++++++ 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java index d83506b943..11ef5a932f 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java @@ -55,19 +55,50 @@ public class FileBrowser implements AppInstance content = new Label("Cannot load UI"); } + // final DockItem tab = new DockItem(this, content); + // DockPane.getActiveDockPane().addTab(tab); + + // if (controller != null && file != null){ + // if(file.isDirectory()){ + // controller.setRoot(file); + // } + // else{ + // controller.setRootAndHighlight(file); + // } + // } + + // tab.addClosedNotification(controller::shutdown); final DockItem tab = new DockItem(this, content); DockPane.getActiveDockPane().addTab(tab); - if (controller != null && file != null){ - if(file.isDirectory()){ - controller.setRoot(file); - } - else{ - controller.setRootAndHighlight(file); - } + // Initial title + if (file != null) + { + String folderName = file.getName().isEmpty() ? file.getPath() : file.getName(); + tab.setLabel(app.getDisplayName() + " \\" + folderName); } - tab.addClosedNotification(controller::shutdown); + // When the user navigates, update the tab name dynamically + if (controller != null) + { + controller.addRootChangeListener(newRoot -> { + if (newRoot != null) + { + String folderName = newRoot.getName().isEmpty() ? newRoot.getPath() : newRoot.getName(); + tab.setLabel(app.getDisplayName() + " \\" + folderName); + } + }); + + if (file != null) + { + if (file.isDirectory()) + controller.setRoot(file); + else + controller.setRootAndHighlight(file); + } + + tab.addClosedNotification(controller::shutdown); + } } @Override diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java index bbf0d1fa73..6f7691504c 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java @@ -43,9 +43,11 @@ import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Level; +import java.util.function.Consumer; import static org.phoebus.applications.filebrowser.FileBrowser.logger; @@ -71,6 +73,19 @@ public class FileBrowserController { private final Menu openWith = new Menu(Messages.OpenWith, ImageCache.getImageView(PhoebusApplication.class, "/icons/fldr_obj.png")); private final ContextMenu contextMenu = new ContextMenu(); + private final List> root_change_listeners = new ArrayList<>(); + + public void addRootChangeListener(Consumer listener) + { + root_change_listeners.add(listener); + } + + private void notifyRootChange(File newRoot) + { + for (Consumer listener : root_change_listeners) + listener.accept(newRoot); + } + private ExpandedCountChangeListener expandedCountChangeListener; public FileBrowserController() { @@ -461,6 +476,7 @@ public void setRoot(final File directory) { monitor.setRoot(directory); path.setText(directory.toString()); treeView.setRoot(new FileTreeItem(monitor, directory)); + notifyRootChange(directory); } /** From 719123d220a1ad619169a3653de13afe6e691cb8 Mon Sep 17 00:00:00 2001 From: Gareth Lee <60355612+Gir4ffe@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:59:21 +0100 Subject: [PATCH 3/4] Removed previous code, added comments. --- .../applications/filebrowser/FileBrowser.java | 13 ------------- .../applications/filebrowser/FileBrowserApp.java | 6 ------ .../filebrowser/FileBrowserController.java | 12 +++++++----- 3 files changed, 7 insertions(+), 24 deletions(-) diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java index 11ef5a932f..469adebeb0 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java @@ -55,19 +55,6 @@ public class FileBrowser implements AppInstance content = new Label("Cannot load UI"); } - // final DockItem tab = new DockItem(this, content); - // DockPane.getActiveDockPane().addTab(tab); - - // if (controller != null && file != null){ - // if(file.isDirectory()){ - // controller.setRoot(file); - // } - // else{ - // controller.setRootAndHighlight(file); - // } - // } - - // tab.addClosedNotification(controller::shutdown); final DockItem tab = new DockItem(this, content); DockPane.getActiveDockPane().addTab(tab); diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java index b49b9eca62..053898261b 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserApp.java @@ -43,12 +43,6 @@ public AppInstance create() { return createWithRoot(default_root); } - // @Override - // public AppInstance create(final URI resource) - // { - // return createWithRoot(new File(resource)); - // } - @Override public AppInstance create(final URI resource) { diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java index 6f7691504c..eb8256a8a1 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java @@ -73,18 +73,20 @@ public class FileBrowserController { private final Menu openWith = new Menu(Messages.OpenWith, ImageCache.getImageView(PhoebusApplication.class, "/icons/fldr_obj.png")); private final ContextMenu contextMenu = new ContextMenu(); + /** + * Create a listener for changes in the selected directory + */ private final List> root_change_listeners = new ArrayList<>(); - - public void addRootChangeListener(Consumer listener) - { + public void addRootChangeListener(Consumer listener) { root_change_listeners.add(listener); } - private void notifyRootChange(File newRoot) - { + private void notifyRootChange(File newRoot) { + // Notify that the directory has changed for (Consumer listener : root_change_listeners) listener.accept(newRoot); } + private ExpandedCountChangeListener expandedCountChangeListener; From a7db90c211c8fc0a972687862ec2e39d7cce0947 Mon Sep 17 00:00:00 2001 From: Gareth Lee <60355612+Gir4ffe@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:59:35 +0100 Subject: [PATCH 4/4] Updated tab name from \foldername to (foldername) --- .../org/phoebus/applications/filebrowser/FileBrowser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java index 469adebeb0..b4ca758044 100644 --- a/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java +++ b/app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowser.java @@ -58,11 +58,11 @@ public class FileBrowser implements AppInstance final DockItem tab = new DockItem(this, content); DockPane.getActiveDockPane().addTab(tab); - // Initial title + // Initial title for the tab if (file != null) { String folderName = file.getName().isEmpty() ? file.getPath() : file.getName(); - tab.setLabel(app.getDisplayName() + " \\" + folderName); + tab.setLabel(app.getDisplayName() + " (" + folderName + ")"); } // When the user navigates, update the tab name dynamically @@ -72,7 +72,7 @@ public class FileBrowser implements AppInstance if (newRoot != null) { String folderName = newRoot.getName().isEmpty() ? newRoot.getPath() : newRoot.getName(); - tab.setLabel(app.getDisplayName() + " \\" + folderName); + tab.setLabel(app.getDisplayName() + " (" + folderName + ")"); } });