Skip to content

Commit 98ed7b0

Browse files
committed
refactoring: move all the file chooser customization into a new
JFileChooserEx class
1 parent 1c37a28 commit 98ed7b0

File tree

2 files changed

+64
-52
lines changed

2 files changed

+64
-52
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package prof7bit.bitcoin.wallettool.ui.swing.core
2+
3+
import java.awt.Dimension
4+
import java.io.File
5+
import javax.swing.JButton
6+
import javax.swing.JCheckBox
7+
import javax.swing.JFileChooser
8+
import javax.swing.JPanel
9+
import net.miginfocom.swing.MigLayout
10+
11+
/**
12+
* this is a file chooser with an accessory panel
13+
* with buttons for showing hidden files and quickly
14+
* navigating to important bitcoin-related and not
15+
* so well known (to the average user) folders.
16+
*/
17+
class JFileChooserEx extends JFileChooser {
18+
new(){
19+
super()
20+
fileHidingEnabled = true
21+
preferredSize = new Dimension(800, 500)
22+
accessory = new JPanel => [panel|
23+
panel.layout = new MigLayout("fillx")
24+
new JCheckBox("show hidden files") => [
25+
panel.add(it, "pushx, growx, wrap")
26+
selected = !fileHidingEnabled
27+
addActionListener [evt|
28+
fileHidingEnabled = !selected
29+
]
30+
]
31+
addDirButton(panel, "home", System.getProperty("user.home"))
32+
addDirButton(panel, "APPDATA", System.getenv("APPDATA"))
33+
addDirButton(panel, "~/Library/Application Support",
34+
System.getProperty("user.home") + "/Library/Application Support"
35+
)
36+
]
37+
}
38+
39+
private def addDirButton(JPanel panel, String label, String path){
40+
val f = getFileOrNull(path)
41+
if (f != null){
42+
new JButton(label) => [
43+
panel.add(it, "pushx, growx, wrap")
44+
addActionListener [
45+
currentDirectory = f
46+
]
47+
]
48+
}
49+
}
50+
51+
private def getFileOrNull(String path){
52+
if (path != null){
53+
val f = new File(path)
54+
if (f.exists){
55+
return f
56+
}
57+
}
58+
return null
59+
}
60+
}

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

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package prof7bit.bitcoin.wallettool.ui.swing.core
22

33
import java.awt.Cursor
4-
import java.awt.Dimension
54
import java.awt.Frame
65
import java.awt.Toolkit
76
import java.awt.datatransfer.StringSelection
7+
import java.awt.event.MouseEvent
88
import java.io.File
99
import javax.swing.JButton
1010
import javax.swing.JFileChooser
@@ -26,13 +26,11 @@ 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.MousePressedOrReleasedListener
2930
import prof7bit.bitcoin.wallettool.ui.swing.listeners.ResizeListener
3031
import prof7bit.bitcoin.wallettool.ui.swing.misc.TableColumnAdjuster
3132

3233
import static extension prof7bit.bitcoin.wallettool.core.Ext.*
33-
import java.awt.event.MouseEvent
34-
import prof7bit.bitcoin.wallettool.ui.swing.listeners.MousePressedOrReleasedListener
35-
import javax.swing.JCheckBox
3634

3735
class WalletPanel extends JPanel{
3836
val log = LoggerFactory.getLogger(this.class)
@@ -172,25 +170,19 @@ class WalletPanel extends JPanel{
172170
adjustColumns
173171
]
174172

175-
val file_open = new JFileChooser => [
176-
fileHidingEnabled = true
173+
val file_open = new JFileChooserEx => [
177174
addChoosableFileFilter(new FileNameExtensionFilter("Blockchain.info backup (*.aes.json)", "json"))
178175
addChoosableFileFilter(new FileNameExtensionFilter("Multibit key export file (*.key)", "key"))
179176
addChoosableFileFilter(new FileNameExtensionFilter("Bitcoin-core 'dumpwallet' file (*.txt)", "txt"))
180177
addChoosableFileFilter(new FileNameExtensionFilter("Bitcoin-core wallet.dat (*.dat)", "dat"))
181178
setFileFilter(new FileNameExtensionFilter("Multibit wallet (*.wallet)", "wallet"))
182-
preferredSize = new Dimension(800, 500)
183-
accessory = createAccessoryPanel(it)
184179
]
185180

186-
val file_save = new JFileChooser => [
187-
fileHidingEnabled = true
181+
val file_save = new JFileChooserEx => [
188182
setAcceptAllFileFilterUsed(false)
189183
addChoosableFileFilter(new FileNameExtensionFilter("Multibit key export file (*.key)", "key"))
190184
addChoosableFileFilter(new FileNameExtensionFilter("Bitcoin-core 'dumpwallet' file (*.txt)", "txt"))
191185
setFileFilter(new FileNameExtensionFilter("Multibit wallet (*.wallet)", "wallet"))
192-
preferredSize = new Dimension(800, 500)
193-
accessory = createAccessoryPanel(it)
194186
]
195187

196188
val status_label = new JLabel("ready")
@@ -205,46 +197,6 @@ class WalletPanel extends JPanel{
205197
add(status_label, "push, grow")
206198
]
207199

208-
def createAccessoryPanel(JFileChooser c){
209-
return new JPanel => [panel|
210-
panel.layout = new MigLayout("fillx")
211-
new JCheckBox("show hidden files") => [
212-
panel.add(it, "pushx, growx, wrap")
213-
selected = !c.fileHidingEnabled
214-
addActionListener [evt|
215-
c.fileHidingEnabled = !selected
216-
]
217-
]
218-
addDirButton(panel, c, "home", System.getProperty("user.home"))
219-
addDirButton(panel, c, "APPDATA", System.getenv("APPDATA"))
220-
addDirButton(panel, c, "~/Library/Application Support",
221-
System.getProperty("user.home") + "/Library/Application Support"
222-
)
223-
]
224-
}
225-
226-
def addDirButton(JPanel panel, JFileChooser c, String label, String path){
227-
val f = getFileOrNull(path)
228-
if (f != null){
229-
new JButton(label) => [
230-
panel.add(it, "pushx, growx, wrap")
231-
addActionListener [
232-
c.currentDirectory = f
233-
]
234-
]
235-
}
236-
}
237-
238-
def getFileOrNull(String path){
239-
if (path != null){
240-
val f = new File(path)
241-
if (f.exists){
242-
return f
243-
}
244-
}
245-
return null
246-
}
247-
248200
new(Frame parentFrame) {
249201
super()
250202
this.parentFrame = parentFrame

0 commit comments

Comments
 (0)