Skip to content

Commit 5289741

Browse files
committed
fixes prof7bit#17: popup menu does not work on windows
Task-Url: http://github.com/prof7bit/wallet-key-tool/issues/issue/17
1 parent 2991009 commit 5289741

File tree

2 files changed

+90
-74
lines changed

2 files changed

+90
-74
lines changed

src/main/java/prof7bit/bitcoin/wallettool/ui/swing/core/WalletPanel.xtend

Lines changed: 85 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ import prof7bit.bitcoin.wallettool.core.WalletKeyTool
2626
import prof7bit.bitcoin.wallettool.fileformats.AbstractImportExportHandler
2727
import prof7bit.bitcoin.wallettool.fileformats.MultibitHandler
2828
import prof7bit.bitcoin.wallettool.fileformats.WalletDumpHandler
29-
import prof7bit.bitcoin.wallettool.ui.swing.listeners.MouseDownListener
3029
import prof7bit.bitcoin.wallettool.ui.swing.listeners.ResizeListener
3130
import prof7bit.bitcoin.wallettool.ui.swing.misc.TableColumnAdjuster
3231

3332
import static extension prof7bit.bitcoin.wallettool.core.Ext.*
33+
import java.awt.event.MouseEvent
34+
import prof7bit.bitcoin.wallettool.ui.swing.listeners.MousePressedOrReleasedListener
3435

3536
class WalletPanel extends JPanel{
3637
val log = LoggerFactory.getLogger(this.class)
@@ -57,98 +58,110 @@ class WalletPanel extends JPanel{
5758
]
5859
]
5960

61+
var boolean table_clicked_inside
62+
6063
val JTable table = new JTable => [
6164
model = new WalletTableModel(keyTool)
6265
autoResizeMode = JTable.AUTO_RESIZE_ALL_COLUMNS
6366
addComponentListener(new ResizeListener [
6467
columnAdjuster.adjustColumns
6568
])
66-
addMouseListener(new MouseDownListener[evt|
67-
if (evt.popupTrigger) {
68-
val row = rowAtPoint(evt.point)
69-
val inside = (row >= 0 && row < model.rowCount)
70-
new JPopupMenu => [popup|
71-
if (inside){
69+
addMouseListener(new MousePressedOrReleasedListener[evt|
70+
if (SwingUtilities.isRightMouseButton(evt)){
71+
72+
// select immediately on mouse down
73+
// before we do anything else
74+
if (evt.ID == MouseEvent.MOUSE_PRESSED){
75+
val row = rowAtPoint(evt.point)
76+
if (row >= 0 && row < model.rowCount){
7277
selectionModel.setSelectionInterval(row, row)
73-
new JMenuItem("copy address to clipboard") => [
74-
popup.add(it)
75-
addActionListener [
76-
copyToClipboard(row, 0)
77-
]
78-
]
79-
new JMenuItem("copy private key to clipboard") => [
80-
popup.add(it)
81-
addActionListener [
82-
copyToClipboard(row, 1)
78+
table_clicked_inside = true
79+
} else {
80+
table_clicked_inside = false
81+
}
82+
}
83+
84+
// popup also on mouse down (some platforms)
85+
// or on mouse up (some other platforms)
86+
if (evt.popupTrigger) {
87+
val row = selectedRow
88+
new JPopupMenu => [popup|
89+
if (table_clicked_inside) {
90+
new JMenuItem("copy address to clipboard") => [
91+
popup.add(it)
92+
addActionListener [
93+
copyToClipboard(row, 0)
94+
]
8395
]
84-
]
85-
new JMenuItem("copy selected key to " + otherName) => [
86-
popup.add(it)
87-
addActionListener [
88-
if (otherKeyTool.params == null){
89-
otherKeyTool.params = keyTool.params
90-
}
91-
otherKeyTool.addKeyFromOtherInstance(keyTool, row)
96+
new JMenuItem("copy private key to clipboard") => [
97+
popup.add(it)
98+
addActionListener [
99+
copyToClipboard(row, 1)
100+
]
92101
]
93-
]
94-
new JMenuItem("move selected key to " + otherName) => [
95-
popup.add(it)
96-
addActionListener [
97-
if (otherKeyTool.params == null){
98-
otherKeyTool.params = keyTool.params
99-
}
100-
otherKeyTool.addKeyFromOtherInstance(keyTool, row)
101-
keyTool.remove(row)
102+
new JMenuItem("copy selected key to " + otherName) => [
103+
popup.add(it)
104+
addActionListener [
105+
if (otherKeyTool.params == null){
106+
otherKeyTool.params = keyTool.params
107+
}
108+
otherKeyTool.addKeyFromOtherInstance(keyTool, row)
109+
]
102110
]
103-
]
104-
new JMenuItem("Remove selected key") => [
105-
popup.add(it)
106-
addActionListener [
107-
keyTool.remove(row)
111+
new JMenuItem("move selected key to " + otherName) => [
112+
popup.add(it)
113+
addActionListener [
114+
if (otherKeyTool.params == null){
115+
otherKeyTool.params = keyTool.params
116+
}
117+
otherKeyTool.addKeyFromOtherInstance(keyTool, row)
118+
keyTool.remove(row)
119+
]
108120
]
109-
]
110-
new JMenuItem("Fetch balance and creation date from blockchain.info") => [
111-
popup.add(it)
112-
addActionListener [
113-
keyTool.doRemoteFetchBalance(row)
114-
keyTool.doRemoteFetchCreationDate(row)
121+
new JMenuItem("Remove selected key") => [
122+
popup.add(it)
123+
addActionListener [
124+
keyTool.remove(row)
125+
]
115126
]
116-
]
117-
val key = keyTool.get(row)
118-
var compOtherTxt = "compressed"
119-
if (key.hasPrivKey){
120-
if (key.compressed){
121-
compOtherTxt = "uncompressed"
122-
}
123-
new JMenuItem("Add " + compOtherTxt + " version of this key") => [
127+
new JMenuItem("Fetch balance and creation date from blockchain.info") => [
124128
popup.add(it)
125129
addActionListener [
126-
keyTool.addOtherCompressedVersion(row)
130+
keyTool.doRemoteFetchBalance(row)
131+
keyTool.doRemoteFetchCreationDate(row)
127132
]
128133
]
134+
val key = keyTool.get(row)
135+
var compOtherTxt = "compressed"
136+
if (key.hasPrivKey){
137+
if (key.compressed){
138+
compOtherTxt = "uncompressed"
139+
}
140+
new JMenuItem("Add " + compOtherTxt + " version of this key") => [
141+
popup.add(it)
142+
addActionListener [
143+
keyTool.addOtherCompressedVersion(row)
144+
]
145+
]
146+
}
129147
}
130-
// new JMenuItem("Fetch all data for all keys from blockchain.info") => [
131-
// popup.add(it)
132-
// addActionListener [
133-
// keyTool.doRemoteUpdateAll
134-
// ]
135-
// ]
136-
}
137-
new JMenuItem("Add new key") => [
138-
popup.add(it)
139-
addActionListener [
140-
new AddKeyDialog(parentFrame, keyTool)
148+
new JMenuItem("Add new key") => [
149+
popup.add(it)
150+
addActionListener [
151+
new AddKeyDialog(parentFrame, keyTool)
152+
]
141153
]
142-
]
143-
new JMenuItem("Clear list") => [
144-
popup.add(it)
145-
addActionListener [
146-
keyTool.clear
154+
new JMenuItem("Clear list") => [
155+
popup.add(it)
156+
addActionListener [
157+
keyTool.clear
158+
]
147159
]
160+
popup.show(table, evt.x, evt.y)
148161
]
149-
popup.show(table, evt.x, evt.y)
150-
]
162+
}
151163
}
164+
152165
])
153166
]
154167

src/main/java/prof7bit/bitcoin/wallettool/ui/swing/listeners/MouseDownListener.xtend renamed to src/main/java/prof7bit/bitcoin/wallettool/ui/swing/listeners/MousePressedOrReleasedListener.xtend

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package prof7bit.bitcoin.wallettool.ui.swing.listeners
33
import java.awt.event.MouseEvent
44
import java.awt.event.MouseListener
55

6-
class MouseDownListener implements MouseListener {
6+
class MousePressedOrReleasedListener implements MouseListener {
77

88
var (MouseEvent)=>void listener
99

@@ -15,8 +15,11 @@ class MouseDownListener implements MouseListener {
1515
this.listener.apply(e)
1616
}
1717

18+
override mouseReleased(MouseEvent e) {
19+
this.listener.apply(e)
20+
}
21+
1822
override mouseClicked(MouseEvent e) {}
1923
override mouseEntered(MouseEvent e) {}
2024
override mouseExited(MouseEvent e) {}
21-
override mouseReleased(MouseEvent e) {}
2225
}

0 commit comments

Comments
 (0)