/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.ui.prefs;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Window;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import org.dlect.controller.MainController;
/**
*
* @author lee
*/
public abstract class PreferencesDialog extends javax.swing.JDialog {
private final MainController c;
private PreferencePanel[] panels;
public PreferencesDialog(Window parent, MainController controller) {
super(parent, ModalityType.APPLICATION_MODAL);
this.c = controller;
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
prefsTabs = new javax.swing.JTabbedPane();
jSeparator1 = new javax.swing.JSeparator();
jPanel1 = new javax.swing.JPanel();
cancelButton = new javax.swing.JButton();
okButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle("Preferences");
setLocationByPlatform(true);
setMinimumSize(new java.awt.Dimension(500, 400));
setModalExclusionType(java.awt.Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
setName("preferences"); // NOI18N
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
getContentPane().setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
getContentPane().add(prefsTabs, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
getContentPane().add(jSeparator1, gridBagConstraints);
jPanel1.setLayout(new java.awt.GridLayout(1, 0));
cancelButton.setMnemonic('c');
cancelButton.setText("Cancel");
cancelButton.setToolTipText("Discard all changes and return to the home screen");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
jPanel1.add(cancelButton);
okButton.setMnemonic('o');
okButton.setText("OK");
okButton.setToolTipText("Confirm the changes made and return to the home screen");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
jPanel1.add(okButton);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.weightx = 1.0;
getContentPane().add(jPanel1, gridBagConstraints);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
initPreferencePanels();
doPreShow();
}//GEN-LAST:event_formWindowOpened
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
if (isModified()) {
int dialoge = JOptionPane.showConfirmDialog(this, "<html>Do you wish to save the changes you made", "Save Changes", JOptionPane.YES_NO_CANCEL_OPTION);
if (dialoge != JOptionPane.CANCEL_OPTION) {
if (dialoge == JOptionPane.YES_OPTION) {
doSave();
}
this.setVisible(false);
}
} else {
this.setVisible(false);
}
}//GEN-LAST:event_formWindowClosing
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
doSave();
this.setVisible(false);
}//GEN-LAST:event_okButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
doCancel();
this.setVisible(false);
}//GEN-LAST:event_cancelButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelButton;
private javax.swing.JPanel jPanel1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JButton okButton;
private javax.swing.JTabbedPane prefsTabs;
// End of variables declaration//GEN-END:variables
private void initPreferencePanels() {
panels = getPreferencePanels();
prefsTabs.removeAll();
for (PreferencePanel preferencePanel : panels) {
String tabName = preferencePanel.getTabName();
String tabToolTip = preferencePanel.getTabTooltip();
JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;
gbc.fill = GridBagConstraints.HORIZONTAL;
p.add(preferencePanel, gbc);
JScrollPane scrollPane = new JScrollPane(p);
prefsTabs.addTab(tabName, null, scrollPane, tabToolTip);
}
}
private boolean isModified() {
for (PreferencePanel preferencePanel : panels) {
if (preferencePanel.isModified()) {
return true;
}
}
return false;
}
private void doCancel() {
for (PreferencePanel pp : panels) {
pp.doCancel();
}
}
private void doSave() {
for (PreferencePanel preferencePanel : panels) {
preferencePanel.doSave();
}
}
private void doPreShow() {
for (PreferencePanel preferencePanel : panels) {
preferencePanel.doPreShow();
}
prefsTabs.invalidate();
}
public void removeCancelButton() {
jPanel1.remove(cancelButton);
}
public void addCancelButton() {
jPanel1.add(cancelButton, 0);
}
public abstract PreferencePanel[] getPreferencePanels();
}