Merge branch 'releases/Release_2_11_4_Branch'
[jalview.git] / gui / JalviewDialog.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
3  * Copyright (C) 2014 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.Rectangle;
27 import java.awt.event.ActionEvent;
28 import java.awt.event.ActionListener;
29 import java.awt.event.WindowEvent;
30 import java.awt.event.WindowListener;
31
32 import javax.swing.JButton;
33 import javax.swing.JDialog;
34 import javax.swing.JPanel;
35
36 /**
37  * Boilerplate dialog class. Implements basic functionality necessary for model
38  * blocking/non-blocking dialogs with an OK and Cancel button ready to add to
39  * the content pane.
40  * 
41  * @author jimp
42  * 
43  */
44 public abstract class JalviewDialog extends JPanel
45 {
46
47   protected JDialog frame;
48
49   protected JButton ok = new JButton();
50
51   protected JButton cancel = new JButton();
52
53   boolean block = false;
54
55   public void waitForInput()
56   {
57     if (!block)
58     {
59       new Thread(new Runnable()
60       {
61
62         public void run()
63         {
64           frame.setVisible(true);
65         }
66
67       }).start();
68     }
69     else
70     {
71       frame.setVisible(true);
72     }
73   }
74
75   protected void initDialogFrame(Container content, boolean modal,
76           boolean block, String title, int width, int height)
77   {
78
79     frame = new JDialog(Desktop.instance, modal);
80     frame.setTitle(title);
81     if (Desktop.instance != null)
82     {
83       Rectangle deskr = Desktop.instance.getBounds();
84       frame.setBounds(new Rectangle((int) (deskr.getCenterX() - width / 2),
85               (int) (deskr.getCenterY() - height / 2), width, height));
86     }
87     else
88     {
89       frame.setSize(width, height);
90     }
91     frame.setContentPane(content);
92     this.block = block;
93
94     ok.setOpaque(false);
95     ok.setText(MessageManager.getString("action.ok"));
96     ok.addActionListener(new ActionListener()
97     {
98       public void actionPerformed(ActionEvent e)
99       {
100         okPressed();
101         closeDialog();
102       }
103     });
104     cancel.setOpaque(false);
105     cancel.setText(MessageManager.getString("action.cancel"));
106     cancel.addActionListener(new ActionListener()
107     {
108       public void actionPerformed(ActionEvent e)
109       {
110         cancelPressed();
111         closeDialog();
112       }
113     });
114     frame.addWindowListener(new WindowListener()
115     {
116
117       @Override
118       public void windowOpened(WindowEvent e)
119       {
120         // TODO Auto-generated method stub
121
122       }
123
124       @Override
125       public void windowIconified(WindowEvent e)
126       {
127         // TODO Auto-generated method stub
128
129       }
130
131       @Override
132       public void windowDeiconified(WindowEvent e)
133       {
134         // TODO Auto-generated method stub
135
136       }
137
138       @Override
139       public void windowDeactivated(WindowEvent e)
140       {
141         // TODO Auto-generated method stub
142
143       }
144
145       @Override
146       public void windowClosing(WindowEvent e)
147       {
148         // user has cancelled the dialog
149         closeDialog();
150       }
151
152       @Override
153       public void windowClosed(WindowEvent e)
154       {
155       }
156
157       @Override
158       public void windowActivated(WindowEvent e)
159       {
160         // TODO Auto-generated method stub
161
162       }
163     });
164   }
165
166   /**
167    * clean up and raise the 'dialog closed' event by calling raiseClosed
168    */
169   protected void closeDialog()
170   {
171     try
172     {
173       frame.dispose();
174       raiseClosed();
175     } catch (Exception ex)
176     {
177     }
178   }
179
180   protected abstract void raiseClosed();
181
182   protected abstract void okPressed();
183
184   protected abstract void cancelPressed();
185
186 }