001 /* PAVLOV -- Multiple Choice Study System
002 * Copyright (C) 2000 - 2004 T.J. Willis
003 *
004 * This program is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU General Public License
006 * as published by the Free Software Foundation; either version 2
007 * of the License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017 *
018 * $Header: /cvsroot/pavlov/net/sourceforge/pavlov/startup/StartupWindow.java,v 1.5 2004/06/11 06:17:34 tj_willis Exp $
019 */
020 package net.sourceforge.pavlov.startup;
021 import javax.swing.*;
022 import java.awt.*;
023 import java.awt.event.*;
024 import net.sourceforge.pavlov.randommedia.*;
025 import org.apache.log4j.*;
026
027
028 /**
029 * Shows an unbordered window with an image that closes itself when the main
030 * application becomes visible.
031 * @author <a href="mailto:tj_willis@users.sourceforge.net"></a>
032 * @version $Revision: 1.5 $
033 */
034 public class StartupWindow
035 extends Window
036 implements AbstractStartupWindow, WindowListener
037 {
038 /** Image to show.*/
039 private ImageIcon aboutImage;
040 /** JLabel to show image in. */
041 private JLabel label;
042 private JFrame mainapp;
043 /**
044 * Progress status message text.
045 *
046 */
047 protected String text = "Starting PAVLOV.";
048 /**
049 * Describe variable <code>pbar</code> here.
050 *
051 */
052 protected JProgressBar pbar;
053 /**
054 * Describe variable <code>progress</code> here.
055 *
056 */
057 protected int progress = 0;
058
059
060 /**
061 * Describe <code>setText</code> method here.
062 *
063 * @param msg a <code>String</code> value
064 * FIXME: should be protected
065 */
066 public void setText(String msg) {
067 pbar.setStringPainted(true);
068 pbar.setString(msg);
069 }
070
071 /**
072 * Sets the progress bar value to i.
073 *
074 * @param i an <code>int</code> value
075 */
076 public void setProgress(int i) {
077 pbar.setValue(i);
078 //pbar.repaint();
079 }
080 /**
081 * Sets progress bar value and message.
082 *
083 * @param i an <code>int</code> value
084 * @param msg a <code>String</code> value
085 */
086 public void setStatus(int i,String msg) {
087 setProgress(i);
088 setText(msg);
089 }
090
091 /**
092 * Increments progress bar value by i and sets message.
093 *
094 * @param i an <code>int</code> value
095 * @param msg a <code>String</code> value
096 */
097 public void incrementStatus(int i,String msg) {
098 progress+=i;
099 setProgress(i);
100 }
101
102 /**
103 * Creates a new <code>StartupWindow</code> instance.
104 *
105 * @param imageURL a <code>String</code> value
106 * @param who a <code>Frame</code> value
107 */
108 public StartupWindow(String imageURL, JFrame who)
109 {
110 super(who);
111 setMainApp(who);
112 //Box bx = Box.createVerticalBox();
113 JPanel bx = new JPanel();
114 BorderLayout b = new BorderLayout();
115 bx.setLayout(b);
116 b.setHgap(0);
117 b.setVgap(0);
118
119 aboutImage = ImageIconUtilities.getNamedImageIcon(imageURL);
120 label = new JLabel(aboutImage);
121 bx.add(label);
122
123 pbar = new JProgressBar(0,100);
124 pbar.setBackground(java.awt.Color.blue);
125 setText(text);
126
127 Dimension psize = new Dimension(aboutImage.getIconWidth(),24);
128 pbar.setPreferredSize( psize );
129 pbar.setMaximumSize( psize );
130
131 bx.add(pbar,BorderLayout.SOUTH );
132
133 add(bx);
134 pack();
135
136 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
137
138 setBounds(
139 screenSize.width/2 - getWidth()/2,
140 screenSize.height/2 - getHeight()/2,
141 bx.getWidth(),
142 bx.getHeight());
143 setVisible(true);
144
145 }
146
147 /**
148 * Describe <code>setMainApp</code> method here.
149 *
150 * @param mainApp a <code>JFrame</code> value
151 */
152 public void setMainApp(JFrame mainApp)
153 {
154 //Quit this app when the big window closes.
155 mainApp.addWindowListener(this);
156 mainapp = mainApp;
157 }
158
159
160
161 // /**
162 // * Describe <code>main</code> method here.
163 // *
164 // * @param args[] a <code>String</code> value
165 // * @deprecated tests my functionality
166 // */
167 // public static void main(String args[])
168 // {
169 // JFrame la = new JFrame();
170 // StartupWindow tst = new StartupWindow("file:resources/AboutPavlov.jpg",la);
171 // tst.setMainApp(la);
172 // tst.setStatus(10,"Now");
173 // tst.setStatus(20,"is");
174 // tst.setStatus(30,"the");
175 // tst.setStatus(40,"time");
176
177 // tst.setVisible(true);
178 // la.pack();
179 // la.setVisible(true);
180 // }
181
182 /**
183 * Close the window and free up my resources.
184 *
185 */
186 public void killme()
187 {
188 if(mainapp!=null)mainapp.removeWindowListener(this);
189 //System.out.println("Window closing");
190 setVisible(false);
191 //hide();
192 //finalize();
193 dispose();
194 }
195
196
197 /**
198 * Called when main application is activated. I call die().
199 *
200 * @param e a <code>WindowEvent</code> value
201 */
202 public void windowActivated(WindowEvent e) {killme();}
203
204
205 /**
206 * Describe <code>windowClosed</code> method here.
207 *
208 * @param e a <code>WindowEvent</code> value
209 */
210 public void windowClosed(WindowEvent e) {}
211
212
213 /**
214 * Describe <code>windowClosing</code> method here.
215 *
216 * @param e a <code>WindowEvent</code> value
217 */
218 public void windowClosing(WindowEvent e) {}
219
220
221 /**
222 * Describe <code>windowDeactivated</code> method here.
223 *
224 * @param e a <code>WindowEvent</code> value
225 */
226 public void windowDeactivated(WindowEvent e) {}
227
228
229 /**
230 * Describe <code>windowDeiconified</code> method here.
231 *
232 * @param e a <code>WindowEvent</code> value
233 */
234 public void windowDeiconified(WindowEvent e) {}
235
236
237 /**
238 * Describe <code>windowIconified</code> method here.
239 *
240 * @param e a <code>WindowEvent</code> value
241 */
242 public void windowIconified(WindowEvent e) {}
243
244
245 /**
246 * Called when main application is opened. I call die().
247 *
248 * @param e a <code>WindowEvent</code> value
249 */
250 public void windowOpened(WindowEvent e) {killme();}
251
252 }
253
254
255
256