1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
/*
* Copyright 2017 Jesse Morgan <jesse@jesterpm.net>
*/
package net.jesterpm.podcastuploader.ui;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* UI for gathering podcast metadata.
*
* @author Jesse Morgan <jesse@jesterpm.net>
*/
public class MetadataWindow extends JFrame {
private final JTextField mDate;
private final JTextField mTitle;
private final JTextField mSeries;
private final JTextField mSpeaker;
private File mFile;
private final JTextField mFileField;
private final JButton mFileButton;
private final JButton mConfigButton;
private final JButton mUploadButton;
public MetadataWindow() {
super("Podcast Metadata");
JPanel panel = new JPanel();
panel.setBorder(new EmptyBorder(10, 10, 10, 10));
panel.setLayout(new GridBagLayout());
add(panel);
mDate = new JTextField();
mTitle = new JTextField();
mSeries = new JTextField();
mSpeaker = new JTextField();
mFileField = new JTextField();
mFileField.setEnabled(false);
mFileField.setColumns(40);
mFileButton = new JButton("Browse");
mFileButton.addActionListener(e -> chooseFile());
mConfigButton = new JButton("Configure");
mUploadButton = new JButton("Upload");
mUploadButton.setDefaultCapable(true);
GridBagConstraints labelConstraint = new GridBagConstraints();
labelConstraint.gridx = 0;
labelConstraint.gridy = GridBagConstraints.RELATIVE;
GridBagConstraints fieldConstraint = new GridBagConstraints();
fieldConstraint.gridx = 1;
fieldConstraint.gridy = GridBagConstraints.RELATIVE;
fieldConstraint.fill = GridBagConstraints.HORIZONTAL;
fieldConstraint.weightx = 1;
fieldConstraint.gridwidth = 2;
panel.add(new JLabel("Date:", JLabel.RIGHT), labelConstraint);
panel.add(mDate, fieldConstraint);
panel.add(new JLabel("Title:", JLabel.RIGHT), labelConstraint);
panel.add(mTitle, fieldConstraint);
panel.add(new JLabel("Series:", JLabel.RIGHT), labelConstraint);
panel.add(mSeries, fieldConstraint);
panel.add(new JLabel("Speaker:", JLabel.RIGHT), labelConstraint);
panel.add(mSpeaker, fieldConstraint);
panel.add(new JLabel("File:", JLabel.RIGHT), labelConstraint);
GridBagConstraints fileFieldConstraint = new GridBagConstraints();
fileFieldConstraint.gridx = 1;
fileFieldConstraint.gridy = 4;
fileFieldConstraint.fill = GridBagConstraints.HORIZONTAL;
fileFieldConstraint.weightx = 1;
panel.add(mFileField, fileFieldConstraint);
GridBagConstraints fileButtonConstraint = new GridBagConstraints();
fileButtonConstraint.gridx = 2;
fileButtonConstraint.gridy = 4;
panel.add(mFileButton, fileButtonConstraint);
GridBagConstraints buttonConstraint = new GridBagConstraints();
buttonConstraint.gridx = 0;
buttonConstraint.gridy = 7;
buttonConstraint.gridwidth = 1;
buttonConstraint.anchor = GridBagConstraints.LAST_LINE_END;
panel.add(mConfigButton, buttonConstraint);
buttonConstraint.gridx = 1;
buttonConstraint.gridwidth = 2;
buttonConstraint.gridy = 7;
buttonConstraint.anchor = GridBagConstraints.LAST_LINE_END;
panel.add(mUploadButton, buttonConstraint);
pack();
Dimension d = getPreferredSize();
d.height += 20;
d.width += 50;
setMinimumSize(d);
}
public void setDate(final LocalDate value) {
mDate.setText(value.format(DateTimeFormatter.ISO_DATE));
}
public LocalDate getDate() {
return LocalDate.parse(mDate.getText(), DateTimeFormatter.ISO_DATE);
}
public void setTitle(final String value) {
mTitle.setText(value);
}
public String getTitle() {
return mTitle.getText();
}
public void setSeries(final String value) {
mSeries.setText(value);
}
public String getSeries() {
return mSeries.getText();
}
public void setSpeaker(final String value) {
mSpeaker.setText(value);
}
public File getFile() {
return mFile;
}
public void setFile(final File value) {
mFile = value;
mSpeaker.setText(value.getAbsolutePath());
}
public String getSpeaker() {
return mSpeaker.getText();
}
public void addUploadAction(final Action a) {
mUploadButton.addActionListener(e -> a.onAction());
}
public void addConfigButtonAction(final Action a) {
mConfigButton.addActionListener(e -> a.onAction());
}
public void addCancelAction(final Action a) {
addWindowListener(new WindowAdapter() {
public void windowClosing(final WindowEvent e) {
a.onAction();
}
});
}
private void chooseFile() {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("Audio Files", "mp3", "wav"));
int result = chooser.showDialog(this, "Select");
if (result == JFileChooser.APPROVE_OPTION) {
setFile(chooser.getSelectedFile());
}
}
}
|