summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java
diff options
context:
space:
mode:
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