172 lines
6.0 KiB
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);
|
|
}
|
|
}
|