JAL-2473 added improvement to apply default / custom minimum dimension for various...
[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   private int DEFAULT_MIN_WIDTH = 300;
57
58   private int DEFAULT_MIN_HEIGHT = 250;
59
60   public void waitForInput()
61   {
62     if (!block)
63     {
64       new Thread(new Runnable()
65       {
66
67         @Override
68         public void run()
69         {
70           frame.setVisible(true);
71         }
72
73       }).start();
74     }
75     else
76     {
77       frame.setVisible(true);
78     }
79   }
80
81   protected void initDialogFrame(Container content, boolean modal,
82           boolean block, String title, int width, int height)
83   {
84
85     frame = new JDialog(Desktop.instance, modal);
86     frame.setTitle(title);
87     if (Desktop.instance != null)
88     {
89       Rectangle deskr = Desktop.instance.getBounds();
90       frame.setBounds(new Rectangle((int) (deskr.getCenterX() - width / 2),
91               (int) (deskr.getCenterY() - height / 2), width, height));
92     }
93     else
94     {
95       frame.setSize(width, height);
96     }
97     int minWidth = width - 100;
98     int minHeight = height - 100;
99     frame.setMinimumSize(new Dimension(minWidth, minHeight));
100     frame.setContentPane(content);
101     this.block = block;
102
103     ok.setOpaque(false);
104     ok.setText(MessageManager.getString("action.ok"));
105     ok.addActionListener(new ActionListener()
106     {
107       @Override
108       public void actionPerformed(ActionEvent e)
109       {
110         okPressed();
111         closeDialog();
112       }
113     });
114     cancel.setOpaque(false);
115     cancel.setText(MessageManager.getString("action.cancel"));
116     cancel.addActionListener(new ActionListener()
117     {
118       @Override
119       public void actionPerformed(ActionEvent e)
120       {
121         cancelPressed();
122         closeDialog();
123       }
124     });
125     frame.addWindowListener(new WindowListener()
126     {
127
128       @Override
129       public void windowOpened(WindowEvent e)
130       {
131         // TODO Auto-generated method stub
132
133       }
134
135       @Override
136       public void windowIconified(WindowEvent e)
137       {
138         // TODO Auto-generated method stub
139
140       }
141
142       @Override
143       public void windowDeiconified(WindowEvent e)
144       {
145         // TODO Auto-generated method stub
146
147       }
148
149       @Override
150       public void windowDeactivated(WindowEvent e)
151       {
152         // TODO Auto-generated method stub
153
154       }
155
156       @Override
157       public void windowClosing(WindowEvent e)
158       {
159         // user has cancelled the dialog
160         closeDialog();
161       }
162
163       @Override
164       public void windowClosed(WindowEvent e)
165       {
166       }
167
168       @Override
169       public void windowActivated(WindowEvent e)
170       {
171         // TODO Auto-generated method stub
172
173       }
174     });
175   }
176
177   /**
178    * clean up and raise the 'dialog closed' event by calling raiseClosed
179    */
180   protected void closeDialog()
181   {
182     try
183     {
184       frame.dispose();
185       raiseClosed();
186     } catch (Exception ex)
187     {
188     }
189   }
190
191   protected abstract void raiseClosed();
192
193   protected abstract void okPressed();
194
195   protected abstract void cancelPressed();
196
197 }