Mercurial > cgi-bin > hgweb.cgi > JpegWasher
annotate src/name/blackcap/exifwasher/WashDialog.kt @ 13:a59d84674fb0
Make it seamlessly work on IPTC and XMP metadata, too.
author | David Barts <davidb@stashtea.com> |
---|---|
date | Sat, 11 Apr 2020 09:14:31 -0700 |
parents | e52fd1a575de |
children | 841f711c40bd |
rev | line source |
---|---|
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
1 /* |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
2 * The dialog that controls washing a single file. |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
3 */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
4 package name.blackcap.exifwasher |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
5 |
9
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
6 import java.awt.Color |
5 | 7 import java.awt.Dimension |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
8 import java.awt.event.ActionEvent |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
9 import java.awt.event.ActionListener |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
10 import java.io.File |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
11 import java.io.FileInputStream |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
12 import java.io.FileOutputStream |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
13 import java.io.IOException |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
14 import java.util.logging.Level |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
15 import java.util.logging.Logger |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
16 import javax.swing.* |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
17 import javax.swing.table.DefaultTableModel |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
18 import javax.swing.table.TableColumn |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
19 import javax.swing.table.TableColumnModel |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
20 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
21 import name.blackcap.exifwasher.exiv2.* |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
22 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
23 class WashDialog : JDialog(Application.mainFrame) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
24 private val BW = 9 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
25 private val BW2 = BW * 2 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
26 private val WIDTH = 640 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
27 private val HEIGHT = 480 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
28 |
7
65d14d44bc3f
Works, but the column layout numbers are WEIRD.
David Barts <n5jrn@me.com>
parents:
5
diff
changeset
|
29 private val COLUMN_NAMES = arrayOf<String>("Delete?", "Key", "Type", "Value") |
65d14d44bc3f
Works, but the column layout numbers are WEIRD.
David Barts <n5jrn@me.com>
parents:
5
diff
changeset
|
30 private val myTable = JTable(arrayOf<Array<Any>>(), COLUMN_NAMES).apply { |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
31 autoCreateRowSorter = false |
9
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
32 border = BorderFactory.createLineBorder(Color.GRAY) |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
33 gridColor = Color.GRAY |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
34 rowSorter = null |
9
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
35 setShowGrid(true) |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
36 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
37 |
9
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
38 val impliedDeletions = mutableSetOf<String>() |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
39 private val selectAll = JCheckBox("Select all for deletion", false).also { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
40 it.addActionListener(ActionListener { _ -> |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
41 val limit = myTable.rowCount - 1 |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
42 if (it.isSelected()) { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
43 impliedDeletions.clear() |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
44 for (i in 0 .. limit) { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
45 if(!(myTable.getValueAt(i, 0) as Boolean)) { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
46 impliedDeletions.add(myTable.getValueAt(i, 1) as String) |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
47 myTable.setValueAt(true, i, 0) |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
48 } |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
49 } |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
50 } else { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
51 for (i in 0 .. limit) { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
52 if (impliedDeletions.contains(myTable.getValueAt(i, 1) as String)) { |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
53 myTable.setValueAt(false, i, 0) |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
54 } |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
55 } |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
56 } |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
57 }) |
0a106e9b91b4
Fix table layout; fix "select all for deletion" feature.
David Barts <n5jrn@me.com>
parents:
8
diff
changeset
|
58 } |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
59 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
60 private val resetButton = JButton("Reset").also { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
61 it.addActionListener(ActionListener { doReset() }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
62 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
63 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
64 private val cancelButton = JButton("Cancel").also { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
65 it.addActionListener(ActionListener { close() }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
66 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
67 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
68 /* deliberately not the default action, because it changes a file */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
69 private val washButton = JButton("Wash").also { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
70 it.addActionListener(ActionListener { doWash() }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
71 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
72 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
73 private lateinit var washing: File |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
74 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
75 /* initiates the washing of the Exif data */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
76 fun wash(dirty: File) { |
5 | 77 title = "Washing: ${dirty.name}" |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
78 selectAll.setSelected(false) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
79 washing = dirty |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
80 useWaitCursor() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
81 swingWorker<Array<Array<Any>>?> { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
82 inBackground { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
83 try { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
84 val image = Image(dirty.canonicalPath) |
5 | 85 val meta = image.metadata |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
86 val keys = meta.keys |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
87 keys.sort() |
5 | 88 Array<Array<Any>>(keys.size) { |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
89 val key = keys[it] |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
90 val value = meta[key] |
5 | 91 arrayOf( |
92 !Application.settingsDialog.whitelist.contains(key), | |
93 key, value.type, value.value) | |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
94 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
95 } catch (e: Exiv2Exception) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
96 LOGGER.log(Level.SEVERE, "unable to read metadata", e) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
97 null |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
98 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
99 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
100 whenDone { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
101 useNormalCursor() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
102 val tableData = get() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
103 if (tableData == null) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
104 JOptionPane.showMessageDialog(Application.mainFrame, |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
105 "Unable to read metadata.", |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
106 "Error", JOptionPane.ERROR_MESSAGE) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
107 } else { |
7
65d14d44bc3f
Works, but the column layout numbers are WEIRD.
David Barts <n5jrn@me.com>
parents:
5
diff
changeset
|
108 myTable.run { |
65d14d44bc3f
Works, but the column layout numbers are WEIRD.
David Barts <n5jrn@me.com>
parents:
5
diff
changeset
|
109 model = MyTableModel(tableData, COLUMN_NAMES) |
8
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
110 autoResizeMode = JTable.AUTO_RESIZE_OFF |
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
111 setColWidth(0, 0, COLUMN_NAMES[0]) |
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
112 setColWidth(1, 180, null) |
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
113 setColWidth(2, 72, "Undefined") |
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
114 setColWidth(3, 720, null) |
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
115 setOverallWidth() |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
116 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
117 setVisible(true) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
118 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
119 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
120 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
121 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
122 |
5 | 123 private class MyTableModel(tData: Array<Array<Any>>, cNames: Array<String>) : DefaultTableModel(tData, cNames) { |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
124 override fun isCellEditable(row: Int, col: Int) = col == 0 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
125 override fun getColumnClass(col: Int) = if (col == 0) { |
7
65d14d44bc3f
Works, but the column layout numbers are WEIRD.
David Barts <n5jrn@me.com>
parents:
5
diff
changeset
|
126 java.lang.Boolean::class.java |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
127 } else { |
7
65d14d44bc3f
Works, but the column layout numbers are WEIRD.
David Barts <n5jrn@me.com>
parents:
5
diff
changeset
|
128 java.lang.String::class.java |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
129 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
130 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
131 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
132 private fun doReset() { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
133 myTable.model.run { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
134 for (i in 0 .. rowCount - 1) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
135 val key = getValueAt(i, 1) as String |
5 | 136 setValueAt(!Application.settingsDialog.whitelist.contains(key), i, 0) |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
137 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
138 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
139 myTable.validate() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
140 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
141 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
142 private fun doWash() { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
143 setVisible(false) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
144 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
145 /* get path to the directory we create */ |
5 | 146 val outDir = if (Application.settingsDialog.outputToInputDir) { |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
147 washing.canonicalFile.parent |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
148 } else { |
5 | 149 Application.settingsDialog.outputTo |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
150 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
151 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
152 /* get new file name */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
153 val (name, ext) = splitext(washing.name) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
154 var newFile = File(outDir, "${name}_washed${ext}") |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
155 |
11 | 156 /* warn (and allow user to back out) if overwriting */ |
157 if (newFile.exists()) { | |
158 val answer = JOptionPane.showConfirmDialog(Application.mainFrame, | |
159 "File ${newFile.name} already exists. Overwrite?", | |
160 "Confirm overwriting file", | |
161 JOptionPane.YES_NO_OPTION, | |
162 JOptionPane.WARNING_MESSAGE) | |
163 if (answer != JOptionPane.YES_OPTION) { | |
164 close() | |
165 return | |
166 } | |
167 } | |
168 | |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
169 /* copy the file, then edit the Exif in the copy */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
170 useWaitCursor() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
171 swingWorker<Boolean> { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
172 inBackground { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
173 try { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
174 FileInputStream(washing).use { source -> |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
175 FileOutputStream(newFile).use { target -> |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
176 source.copyTo(target) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
177 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
178 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
179 val image = Image(newFile.canonicalPath) |
5 | 180 val meta = image.metadata |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
181 meta.keys.forEach { |
5 | 182 if (!Application.settingsDialog.whitelist.contains(it)) { |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
183 meta.erase(it) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
184 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
185 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
186 image.store() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
187 true |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
188 } catch (e: IOException) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
189 LOGGER.log(Level.SEVERE, "unable to copy input", e) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
190 false |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
191 } catch (e: Exiv2Exception) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
192 LOGGER.log(Level.SEVERE, "unable to edit metadata", e) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
193 false |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
194 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
195 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
196 whenDone { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
197 useNormalCursor() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
198 close() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
199 /* if all went well, show the Exif in the new file */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
200 if (get()) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
201 ShowDialog().show(newFile) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
202 } else { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
203 try { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
204 if (newFile.exists()) { newFile.delete() } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
205 } catch (e: IOException) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
206 LOGGER.log(Level.SEVERE, "unable to delete", e) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
207 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
208 JOptionPane.showMessageDialog(Application.mainFrame, |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
209 "Error\nUnable to wash: ${washing.canonicalPath}\nTo: ${newFile.canonicalPath}", |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
210 "Error", JOptionPane.ERROR_MESSAGE) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
211 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
212 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
213 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
214 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
215 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
216 private fun splitext(s: String): Pair<String, String> { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
217 val pos = s.lastIndexOf('.') |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
218 if (pos == -1) { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
219 return Pair(s, "") |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
220 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
221 return Pair(s.substring(0, pos), s.substring(pos)) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
222 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
223 |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
224 init { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
225 defaultCloseOperation = JDialog.DISPOSE_ON_CLOSE /* delete if reusing */ |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
226 title = "Untitled" |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
227 contentPane.apply { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
228 layout = BoxLayout(this, BoxLayout.Y_AXIS) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
229 add(Box(BoxLayout.Y_AXIS).apply { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
230 alignmentX = Box.CENTER_ALIGNMENT |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
231 border = BorderFactory.createEmptyBorder(BW, BW, BW, BW) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
232 add(JScrollPane(myTable).apply { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
233 alignmentX = JScrollPane.LEFT_ALIGNMENT |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
234 border = BorderFactory.createEmptyBorder(BW, BW, BW, BW) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
235 verticalScrollBarPolicy = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS |
8
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
236 horizontalScrollBarPolicy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
237 preferredSize = Dimension(WIDTH, HEIGHT) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
238 background = Application.mainFrame.background |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
239 }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
240 add(selectAll.apply { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
241 alignmentX = JCheckBox.LEFT_ALIGNMENT |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
242 border = BorderFactory.createEmptyBorder(BW, BW, 0, BW) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
243 }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
244 }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
245 add(Box(BoxLayout.X_AXIS).apply { |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
246 alignmentX = Box.CENTER_ALIGNMENT |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
247 border = BorderFactory.createEmptyBorder(BW, BW, BW2, BW) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
248 add(resetButton) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
249 add(Box.createHorizontalGlue()) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
250 add(cancelButton) |
8
88d02fa97d78
Got WasherDialog table laying out somewhat sanely.
David Barts <n5jrn@me.com>
parents:
7
diff
changeset
|
251 add(Box.createHorizontalStrut(BW2)) |
3
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
252 add(washButton) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
253 }) |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
254 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
255 pack() |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
256 } |
19c381c536ec
Code to make it a proper Mac GUI app. Untested!
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
257 } |