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 00000000..d889332c Binary files /dev/null and b/gui/griffon-app/resources/yes.png differ 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