05f5ffca186fc8e470cd818ddb5ee492f97c6a93
[jalview.git] / src / jalview / gui / JalviewDialog.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.gui;
22
23 import jalview.util.MessageManager;
24
25 import java.awt.Container;
26 import java.awt.Dimension;
27 import java.awt.Rectangle;
28 import java.awt.event.ActionEvent;
29 import java.awt.event.ActionListener;
30 import java.awt.event.WindowEvent;
31 import java.awt.event.WindowListener;
32
33 import javax.swing.JButton;
34 import javax.swing.JDialog;
35 import javax.swing.JPanel;
36
37 /**
38  * Boilerplate dialog class. Implements basic functionality necessary for model
39  * blocking/non-blocking dialogs with an OK and Cancel button ready to add to
40  * the content pane.
41  * 
42  * @author jimp
43  * 
44  */
45 public abstract class JalviewDialog extends JPanel
46 {
47
48   protected JDialog frame;
49
50   protected JButton ok = new JButton();
51
52   protected JButton cancel = new JButton();
53
54   boolean block = false;
55
56   public void waitForInput()
57   {
58     if (!block)
59     {
60       new Thread(new Runnable()
61       {
62
63         @Override
64         public void run()
65         {
66           frame.setVisible(true);
67         }
68
69       }).start();
70     }
71     else
72     {
73       frame.setVisible(true);
74     }
75   }
76
77   protected void initDialogFrame(Container content, boolean modal,
78           boolean block, String title, int width, int height)
79   {
80
81     frame = new JDialog(Desktop.instance, modal);
82     frame.setTitle(title);
83     if (Desktop.instance != null)
84     {
85       Rectangle deskr = Desktop.instance.getBounds();
86       frame.setBounds(new Rectangle((int) (deskr.getCenterX() - width / 2),
87               (int) (deskr.getCenterY() - height / 2), width, height));
88     }
89     else
90     {
91       frame.setSize(width, height);
92     }
93     int minWidth = width - 100;
94     int minHeight = height - 100;
95     frame.setMinimumSize(new Dimension(minWidth, minHeight));
96     frame.setContentPane(content);
97     this.block = block;
98
99     ok.setOpaque(false);
100     ok.setText(MessageManager.getString("action.ok"));
101     ok.addActionListener(new ActionListener()
102     {
103       @Override
104       public void actionPerformed(ActionEvent e)
105       {
106         okPressed();
107         closeDialog();
108       }
109     });
110     cancel.setOpaque(false);
111     cancel.setText(MessageManager.getString("action.cancel"));
112     cancel.addActionListener(new ActionListener()
113     {
114       @Override
115       public void actionPerformed(ActionEvent e)
116       {
117         cancelPressed();
118         closeDialog();
119       }
120     });
121     frame.addWindowListener(new WindowListener()
122     {
123
124       @Override
125       public void windowOpened(WindowEvent e)
126       {
127         // TODO Auto-generated method stub
128
129       }
130
131       @Override
132       public void windowIconified(WindowEvent e)
133       {
134         // TODO Auto-generated method stub
135
136       }
137
138       @Override
139       public void windowDeiconified(WindowEvent e)
140       {
141         // TODO Auto-generated method stub
142
143       }
144
145       @Override
146       public void windowDeactivated(WindowEvent e)
147       {
148         // TODO Auto-generated method stub
149
150       }
151
152       @Override
153       public void windowClosing(WindowEvent e)
154       {
155         // user has cancelled the dialog
156         closeDialog();
157       }
158
159       @Override
160       public void windowClosed(WindowEvent e)
161       {
162       }
163
164       @Override
165       public void windowActivated(WindowEvent e)
166       {
167         // TODO Auto-generated method stub
168
169       }
170     });
171   }
172
173   /**
174    * clean up and raise the 'dialog closed' event by calling raiseClosed
175    */
176   protected void closeDialog()
177   {
178     try
179     {
180       frame.dispose();
181       raiseClosed();
182     } catch (Exception ex)
183     {
184     }
185   }
186
187   protected abstract void raiseClosed();
188
189   protected abstract void okPressed();
190
191   protected abstract void cancelPressed();
192
193 }