summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2025-09-24 17:40:17 -0400
committerBenjamin Culkin <scorpress@gmail.com>2025-09-24 17:40:17 -0400
commit35cc451a5c53b23531a46eb2bff901cd63e4df09 (patch)
tree0bb1e1d17604aae16d34a5bc255a472a320966c4 /base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java
parent16ca6878d9ff246e7f742f1268482b8a51665892 (diff)
Add a JBrowser component + example
This adds a JBrowser Swing component that is intended to work similarly to how the NSBrowser component in Swing works
Diffstat (limited to 'base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java')
-rw-r--r--base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java b/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java
new file mode 100644
index 0000000..d95badc
--- /dev/null
+++ b/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java
@@ -0,0 +1,36 @@
+package bjc.utils.gui.browser;
+
+/** Data model for JBrowser (hierarchical, like TreeModel but simpler). */
+public interface JBrowserModel {
+ Object getRoot();
+
+ int getChildCount(Object parent);
+
+ Object getChild(Object parent, int index);
+
+ default int indexOfChild(Object parent, Object child) {
+ int n = getChildCount(parent);
+ for (int i = 0; i < n; i++)
+ if (getChild(parent, i).equals(child))
+ return i;
+ return -1;
+ }
+
+ boolean isLeaf(Object node);
+
+ /** Display text for nodes (used by default renderer & default filter). */
+ default String getText(Object node) {
+ return String.valueOf(node);
+ }
+
+ /** True if node can expand (used by default renderer). */
+ default boolean isExpandable(Object node) {
+ return !isLeaf(node);
+ }
+
+ /** Header text for the column that is showing the children of parentNode. */
+ default String getColumnHeader(Object parentNode, int depthFromRoot) {
+ String t = getText(parentNode);
+ return (t == null || t.isEmpty()) ? "(root)" : t;
+ }
+} \ No newline at end of file