From d39f184a445c00723243c2f83625086069d99121 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 10 Oct 2021 20:47:59 +0100 Subject: [PATCH] display an icon if a file is available locally in tree views GitHub issue #72 --- .../models/com/muwire/gui/BrowseModel.groovy | 2 -- gui/griffon-app/resources/yes.png | Bin 0 -> 278 bytes .../views/com/muwire/gui/BrowseView.groovy | 1 + .../views/com/muwire/gui/SearchTabView.groovy | 1 + .../main/groovy/com/muwire/gui/ResultTree.groovy | 7 ++++++- .../com/muwire/gui/ResultTreeRenderer.groovy | 14 +++++++++++--- 6 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 gui/griffon-app/resources/yes.png diff --git a/gui/griffon-app/models/com/muwire/gui/BrowseModel.groovy b/gui/griffon-app/models/com/muwire/gui/BrowseModel.groovy index 379ae016..736c0011 100644 --- a/gui/griffon-app/models/com/muwire/gui/BrowseModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/BrowseModel.groovy @@ -14,8 +14,6 @@ import com.muwire.core.search.BrowseStatus import javax.annotation.Nonnull import javax.swing.SwingWorker import javax.swing.tree.DefaultMutableTreeNode -import javax.swing.tree.DefaultTreeModel -import javax.swing.tree.TreeModel @ArtifactProviderFor(GriffonModel) class BrowseModel { diff --git a/gui/griffon-app/resources/yes.png b/gui/griffon-app/resources/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..d889332cfec380816f760564c0ebbe19a145f576 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_qJzX3_ zEPAg_+|AeIAmDmFAi(1&yQFZWaA0!sjd+!b5sf*_t^NLojGCqYZHX@!>K6D~URGm^ zdHp2)M?lVD%Ye?VGlGeC{;WLLm9mj>-L|dK6`U~)GLEacZ2V|u1_JZm0T6`8}?u1 Zoum`UF;{c)9-y}vJYD@<);T3K0RUlKZs!01 literal 0 HcmV?d00001 diff --git a/gui/griffon-app/views/com/muwire/gui/BrowseView.groovy b/gui/griffon-app/views/com/muwire/gui/BrowseView.groovy index 254b2188..df8cba94 100644 --- a/gui/griffon-app/views/com/muwire/gui/BrowseView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/BrowseView.groovy @@ -122,6 +122,7 @@ class BrowseView { } // results tree + resultsTree.setSharedPredicate(controller.core.fileManager::isShared) resultsTree.addTreeExpansionListener(treeExpansions) resultsTree.addMouseListener(mouseListener) resultsTree.addTreeSelectionListener({ diff --git a/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy b/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy index 5fed31e5..0bcaf111 100644 --- a/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy @@ -345,6 +345,7 @@ class SearchTabView { } // results tree + resultTree.setSharedPredicate(model.core.fileManager::isShared) resultTree.addMouseListener(resultsMouseListener) resultTree.addTreeSelectionListener { model.downloadActionEnabled = false diff --git a/gui/src/main/groovy/com/muwire/gui/ResultTree.groovy b/gui/src/main/groovy/com/muwire/gui/ResultTree.groovy index fe3f90c4..c92b6ef4 100644 --- a/gui/src/main/groovy/com/muwire/gui/ResultTree.groovy +++ b/gui/src/main/groovy/com/muwire/gui/ResultTree.groovy @@ -1,21 +1,26 @@ package com.muwire.gui +import com.muwire.core.InfoHash import com.muwire.core.search.UIResultEvent import javax.swing.JTree import javax.swing.tree.TreeModel import javax.swing.tree.TreePath +import java.util.function.Predicate class ResultTree extends JTree{ ResultTree(TreeModel model) { super(model) - setCellRenderer(new ResultTreeRenderer()) setRootVisible(false) setLargeModel(true) setExpandsSelectedPaths(true) } + void setSharedPredicate(Predicate predicate) { + setCellRenderer(new ResultTreeRenderer(predicate)) + } + List decorateResults(List results) { List rv = new ArrayList<>() TreePath[] paths = getSelectionPaths() diff --git a/gui/src/main/groovy/com/muwire/gui/ResultTreeRenderer.groovy b/gui/src/main/groovy/com/muwire/gui/ResultTreeRenderer.groovy index 23aa399b..8b19cc5b 100644 --- a/gui/src/main/groovy/com/muwire/gui/ResultTreeRenderer.groovy +++ b/gui/src/main/groovy/com/muwire/gui/ResultTreeRenderer.groovy @@ -1,8 +1,11 @@ package com.muwire.gui +import com.muwire.core.InfoHash import com.muwire.core.search.UIResultEvent import com.muwire.core.util.DataUtil +import java.util.function.Predicate + import static com.muwire.gui.Translator.trans import javax.swing.ImageIcon @@ -11,13 +14,16 @@ import javax.swing.tree.DefaultTreeCellRenderer import java.awt.Component class ResultTreeRenderer extends DefaultTreeCellRenderer { - private final ImageIcon commentIcon + private final ImageIcon commentIcon, sharedIcon private final String bShort private final StringBuffer sb = new StringBuffer() + private final Predicate sharedPredicate - ResultTreeRenderer() { + ResultTreeRenderer(Predicate sharedPredicate) { commentIcon = new ImageIcon((URL) PathTreeRenderer.class.getResource("/comment.png")) + sharedIcon = new ImageIcon((URL) PathTreeRenderer.class.getResource("/yes.png")) bShort = trans("BYTES_SHORT") + this.sharedPredicate = sharedPredicate } Component getTreeCellRendererComponent(JTree tree, Object value, @@ -38,7 +44,9 @@ class ResultTreeRenderer extends DefaultTreeCellRenderer { setText(HTMLSanitizer.sanitize("$result.name (${sb.toString()})")) setEnabled(true) - if (result.comment) + if (sharedPredicate.test(result.infohash)) + setIcon(sharedIcon) + else if (result.comment) setIcon(commentIcon) this