/* * 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(); }