From aece390daaa7ea85939d57fd7dfe01be8d0fa6b4 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 16 Jun 2019 09:17:17 +0100 Subject: [PATCH] right-click menu on the search results tab --- .../views/com/muwire/gui/SearchTabView.groovy | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy b/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy index bc00b06c..08c5bb1b 100644 --- a/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy @@ -4,10 +4,13 @@ import griffon.core.artifact.GriffonView import griffon.core.mvc.MVCGroup import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor +import net.i2p.data.Base64 import net.i2p.data.DataHelper import javax.swing.JComponent import javax.swing.JLabel +import javax.swing.JMenuItem +import javax.swing.JPopupMenu import javax.swing.JTable import javax.swing.ListSelectionModel import javax.swing.SwingConstants @@ -17,6 +20,8 @@ import com.muwire.core.util.DataUtil import java.awt.BorderLayout import java.awt.Color +import java.awt.Toolkit +import java.awt.datatransfer.StringSelection import java.awt.event.MouseAdapter import java.awt.event.MouseEvent @@ -99,12 +104,27 @@ class SearchTabView { resultsTable.rowSorter.addRowSorterListener({ evt -> lastSortEvent = evt}) resultsTable.rowSorter.setSortsOnUpdates(true) + + JPopupMenu menu = new JPopupMenu() + JMenuItem download = new JMenuItem("Download") + download.addActionListener({mvcGroup.parentGroup.controller.download()}) + menu.add(download) + JMenuItem copyHashToClipboard = new JMenuItem("Copy hash to clipboard") + copyHashToClipboard.addActionListener({mvcGroup.view.copyHashToClipboard()}) + menu.add(copyHashToClipboard) resultsTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if (e.button == MouseEvent.BUTTON1 && e.clickCount == 2) + if (e.button == MouseEvent.BUTTON3) + showPopupMenu(menu, e) + else if (e.button == MouseEvent.BUTTON1 && e.clickCount == 2) mvcGroup.parentGroup.controller.download() } + @Override + public void mouseReleased(MouseEvent e) { + if (e.button == MouseEvent.BUTTON3) + showPopupMenu(menu, e) + } }) } @@ -114,4 +134,21 @@ class SearchTabView { mvcGroup.parentGroup.model.searchButtonsEnabled = false mvcGroup.destroy() } + + def showPopupMenu(JPopupMenu menu, MouseEvent e) { + println "showing popup menu" + menu.show(e.getComponent(), e.getX(), e.getY()) + } + + def copyHashToClipboard() { + int selected = resultsTable.getSelectedRow() + if (selected < 0) + return + if (lastSortEvent != null) + selected = resultsTable.rowSorter.convertRowIndexToModel(row) + String hash = Base64.encode(model.results[selected].infohash.getRoot()) + StringSelection selection = new StringSelection(hash) + def clipboard = Toolkit.getDefaultToolkit().getSystemClipboard() + clipboard.setContents(selection, null) + } } \ No newline at end of file