curator/src/main/java/zander/ui/album/LibraryPropertyDialog.java

172 lines
6.0 KiB
Java

package zander.ui.album;
import java.awt.Insets;
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.event.KeyEvent;
import java.util.Objects;
import java.awt.Window;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import zander.library.state.LibraryState;
import zander.ui.UIUtils;
import zander.ui.docs.DocumentationViewer;
public class LibraryPropertyDialog extends JDialog {
private static final long serialVersionUID = -4761044964061547045L;
public static final int RESPONSE_CANCEL = 0;
public static final int RESPONSE_SAVE = 1;
private final LibraryState library;
private final JLabel nameLabel;
private final JTextField nameField;
private final JButton nameReset;
private final JLabel licenseLabel;
private final JTextField licenseField;
private final JButton licenseReset;
private final JPanel fieldPanel;
private final JButton cancelButton;
private final JButton helpButton;
private final JButton saveButton;
private final JPanel buttonPanel;
private final JPanel content;
private int response = RESPONSE_CANCEL;
public LibraryPropertyDialog(Window parent, LibraryState library) {
super(parent, "Library Properties");
this.library = library;
nameLabel = new JLabel("Name:");
nameField = new JTextField(20);
nameField.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void insertUpdate(DocumentEvent e) { update(); }
@Override
public void removeUpdate(DocumentEvent e) { update(); }
@Override
public void changedUpdate(DocumentEvent e) { update(); }
private void update() {
nameReset.setEnabled(!resetStringEquals(nameField.getText(), library.getOriginalName()));
}
});
nameReset = new JButton("");
nameField.setText(library.getName());
nameReset.addActionListener((e) -> nameField.setText(library.getOriginalName()));
licenseLabel = new JLabel("License:");
licenseField = new JTextField(20);
licenseField.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void insertUpdate(DocumentEvent e) { update(); }
@Override
public void removeUpdate(DocumentEvent e) { update(); }
@Override
public void changedUpdate(DocumentEvent e) { update(); }
private void update() {
licenseReset.setEnabled(!resetStringEquals(licenseField.getText(), library.getOriginalLicense()));
}
});
licenseReset = new JButton("");
licenseField.setText(library.getLicense());
licenseReset.addActionListener((e) -> licenseField.setText(library.getOriginalLicense()));
fieldPanel = new JPanel(new GridBagLayout());
buildFieldUI();
cancelButton = new JButton("Cancel");
cancelButton.setMnemonic(KeyEvent.VK_C);
cancelButton.addActionListener((e) -> dispose());
helpButton = new JButton("?");
helpButton.addActionListener((e) -> DocumentationViewer.show(this, "Albums/Library Settings"));
saveButton = new JButton("Save");
saveButton.setMnemonic(KeyEvent.VK_S);
saveButton.addActionListener((e) -> {
response = RESPONSE_SAVE;
dispose();
});
buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
buttonPanel.add(cancelButton);
buttonPanel.add(Box.createHorizontalGlue());
buttonPanel.add(helpButton);
buttonPanel.add(saveButton);
content = new JPanel(new BorderLayout());
content.add(fieldPanel, BorderLayout.CENTER);
content.add(buttonPanel, BorderLayout.PAGE_END);
setContentPane(content);
pack();
setAlwaysOnTop(true);
setResizable(false);
setModalityType(JDialog.DEFAULT_MODALITY_TYPE);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
UIUtils.centerWindow(this, parent);
}
private void buildFieldUI() {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.insets = new Insets(1, 1, 1, 1);
gbc.fill = GridBagConstraints.NONE;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.LINE_END;
fieldPanel.add(nameLabel, gbc);
gbc.gridx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.CENTER;
fieldPanel.add(nameField, gbc);
gbc.gridx = 2;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_START;
fieldPanel.add(nameReset, gbc);
gbc.gridy = 1;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
fieldPanel.add(licenseLabel, gbc);
gbc.gridx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.CENTER;
fieldPanel.add(licenseField, gbc);
gbc.gridx = 2;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_START;
fieldPanel.add(licenseReset, gbc);
}
public LibraryState getLibrary() {
return library;
}
public int getResponse() {
return response;
}
public String getLibraryName() {
return nameField.getText();
}
public String getLibraryLicense() {
return licenseField.getText();
}
private static boolean resetStringEquals(String s1, String s2) {
if (s1 != null && s1.isEmpty()) {
s1 = null;
}
if (s2 != null && s2.isEmpty()) {
s2 = null;
}
return Objects.equals(s1, s2);
}
}