/[schmitzm]/trunk/src/skrueger/swing/CancellableDialogAdapter.java
ViewVC logotype

Diff of /trunk/src/skrueger/swing/CancellableDialogAdapter.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

branches/1.0-gt2-2.6/src/skrueger/swing/CancellableDialogAdapter.java revision 420 by alfonx, Thu Oct 1 20:22:48 2009 UTC trunk/src/skrueger/swing/CancellableDialogAdapter.java revision 685 by alfonx, Wed Feb 10 15:04:02 2010 UTC
# Line 1  Line 1 
1  package skrueger.swing;  package skrueger.swing;
2    
3  import java.awt.Window;  import java.awt.Component;
4  import java.awt.event.WindowAdapter;  import java.awt.Dialog;
5  import java.awt.event.WindowEvent;  import java.awt.event.ActionEvent;
6    import java.util.Locale;
7    
8    import javax.swing.AbstractAction;
9  import javax.swing.JDialog;  import javax.swing.JDialog;
10  import javax.swing.JOptionPane;  import javax.swing.JOptionPane;
11    
12  public abstract class CancellableDialogAdapter extends JDialog implements  import schmitzm.lang.LangUtil;
13    import schmitzm.lang.ResourceProvider;
14    import schmitzm.swing.SwingUtil;
15    
16    /**
17     * An abstract {@link JDialog} that implements a basic structure of how
18     * cancellable {@link JDialog}s work. The {@link JDialog} is designed to work on
19     * the real object and restore it's state when the user cancels the
20     * {@link JDialog}.
21     *
22     * Pressing ESC or clicking the "Close X" results in asking the user whether to Save/Cancel/Abort .  
23     */
24    public abstract class CancellableDialogAdapter extends AtlasDialog implements
25                  CancellableDialog {                  CancellableDialog {
26            
27            protected static ResourceProvider RESOURCE = new ResourceProvider(LangUtil
28                            .extendPackagePath(SwingUtil.class,
29                                            "resource.locales.SwingResourceBundle"), Locale.ENGLISH);
30    
31    
32            /** Has this dialog been canceled ?**/
33          protected boolean cancelled = false;          protected boolean cancelled = false;
34    
35            private OkButton okButton;
36            private CancelButton cancelButton;
37            
38            public CancellableDialogAdapter(Component parentWindow) {
39                    super(parentWindow);
40            }
41    
42            public CancellableDialogAdapter(Component parentWindow, String title) {
43                    super(parentWindow, title);
44            }
45    
46          @Override          @Override
47          public boolean isCancelled() {          public boolean isCancelled() {
48                  return cancelled;                  return cancelled;
49          }          }
50    
51          public CancellableDialogAdapter(final Window parentWindow) {          /**
52                  super(parentWindow);           * Allows to close the {@link JDialog} from "outside". The user will be
53                  initDialog();           * asked and she may cancel the close process.
54             */
55            public boolean close() {
56                    int showConfirmDialog = JOptionPane.showConfirmDialog(
57                                    CancellableDialogAdapter.this,
58                                    RESOURCE.getString("CancellableDialogAdapter.close.save.msg",getTitle()), RESOURCE.getString("CancellableDialogAdapter.close.save.title"), JOptionPane.YES_NO_CANCEL_OPTION);
59    
60                    if (showConfirmDialog == JOptionPane.YES_OPTION) {
61                            return okClose();
62                    }
63                    else if (showConfirmDialog == JOptionPane.NO_OPTION) {
64                            cancelClose();
65                            return true;
66                    }
67                    
68                    return false;
69          }          }
70            
71    
72          private void initDialog() {          /**
73             * This method can be called from "outside" to force a close of this
74                  setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);           * {@link Dialog}. The user can't cancel the process. He may only decide to
75             * save possible changes.
76                  addWindowListener(new WindowAdapter() {           */
77            public void forceClose() {
                         @Override  
                         public void windowClosing(WindowEvent e) {  
                                 setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);  
                                   
                                 int showConfirmDialog = JOptionPane.showConfirmDialog(  
                                                 CancellableDialogAdapter.this, "Speichern?",  
                                                 "Ă„nderungen speichern?", JOptionPane.YES_NO_CANCEL_OPTION); // i8n  
   
                                 if (showConfirmDialog == JOptionPane.YES_OPTION)  
                                         okClose();  
                                 else if (showConfirmDialog == JOptionPane.NO_OPTION)  
                                         cancelClose();  
                         }  
   
                 });  
         }  
78    
79          public CancellableDialogAdapter(final Window parentWindow, String title) {                  int res = JOptionPane.showConfirmDialog(
80                  super(parentWindow, title);                                  CancellableDialogAdapter.this,
81                  initDialog();                                  RESOURCE.getString("CancellableDialogAdapter.forceClose.save.msg",getTitle()), RESOURCE.getString("CancellableDialogAdapter.close.save.title"), JOptionPane.YES_NO_OPTION);
82                    
83                    if (res == JOptionPane.YES_OPTION) {
84                            okClose();
85                    } else {
86                            cancelClose();
87                    }
88          }          }
89            
90    
91            /**
92             * Default implementation that calls {@link #cancel()} and
93             * {@link #dispose()}.
94             */
95          @Override          @Override
96          public void cancelClose() {          public void cancelClose() {
97                  cancel();                  cancel();
# Line 62  public abstract class CancellableDialogA Line 104  public abstract class CancellableDialogA
104          /**          /**
105           * This method is called when the dialog is closed and not canceled. Can be           * This method is called when the dialog is closed and not canceled. Can be
106           * overwritten to do anything when the dialog has been accepted. For example           * overwritten to do anything when the dialog has been accepted. For example
107           * cheking for any {@link Checkable} components. Returns false, if the ok           * checking for any {@link Checkable} components. <br/>
108           * has been vetoed.           *
109             * @Return <code>false</code>, if the ok has been vetoed.
110             */
111            public boolean okClose() {
112                    dispose();
113                    return true;
114            }
115    
116            /**
117             * @return a default OkButton that will call {@link #okClose()}
118           */           */
119          public abstract boolean okClose();          protected OkButton getOkButton() {
120                    if (okButton == null) {
121                            okButton = new OkButton(new AbstractAction() {
122                                    
123                                    @Override
124                                    public void actionPerformed(ActionEvent e) {
125                                            okClose();
126                                    }
127                            });
128                    }
129                    return okButton;
130            }
131            
132    
133            /**
134             * @return a default CancelButton that will call {@link #cancelClose()}
135             */
136            protected CancelButton getCancelButton() {
137                    if (cancelButton == null) {
138                            cancelButton = new CancelButton(new AbstractAction() {
139                                    
140                                    @Override
141                                    public void actionPerformed(ActionEvent e) {
142                                            cancelClose();
143                                    }
144                            });
145                    }
146                    return cancelButton;
147            }
148    
149  }  }

Legend:
Removed from v.420  
changed lines
  Added in v.685

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26