package com.jbidwatcher.ui;
/*
* Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved.
*
* Developed by mrs (Morgan Schweers)
*/
import com.jbidwatcher.util.queue.MQFactory;
import com.jbidwatcher.util.queue.MessageQueue;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
public class JSplashScreen extends Window implements MessageQueue.Listener {
JProgressBar statusBar;
public JSplashScreen(ImageIcon coolPicture) {
super(new Frame());
MQFactory.getConcrete("splash").registerListener(this);
// Create a JPanel so we can use a BevelBorder
JPanel panelForBorder=new JPanel(new BorderLayout());
panelForBorder.setLayout(new BorderLayout());
panelForBorder.add(new JLabel(coolPicture), BorderLayout.CENTER);
panelForBorder.add(statusBar = new JProgressBar(0, 100), BorderLayout.SOUTH);
panelForBorder.setBorder(new BevelBorder(BevelBorder.RAISED));
add(panelForBorder);
pack();
// Plonk it on center of screen
Dimension WindowSize=getSize(), ScreenSize=Toolkit.getDefaultToolkit().getScreenSize();
setBounds((ScreenSize.width-WindowSize.width)/2,
(ScreenSize.height-WindowSize.height)/2, WindowSize.width,
WindowSize.height);
setVisible(true);
}
public void showStatus(int currentStatus) {
// Update Splash-Screen's status bar in AWT thread
statusBar.setValue(currentStatus);
}
public void setWidth(int maxCount) {
statusBar.setMaximum(maxCount);
}
public void setWidthValue(int maxCount, int currentStatus) {
statusBar.setMaximum(maxCount);
statusBar.setValue(currentStatus);
}
public void close() {
// Close and dispose Window in AWT thread
SwingUtilities.invokeLater(new CloseJNSplash());
}
class CloseJNSplash implements Runnable {
public synchronized void run() {
setVisible(false);
dispose();
}
}
private int parseInt(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException nfe) {
// don't really do anything, since this isn't critical.
}
return 0;
}
public void message(String msg) {
if (msg.equals("OFF")) {
statusBar.setStringPainted(false);
statusBar.setString("");
} else {
statusBar.setStringPainted(true);
statusBar.setString(msg);
}
}
public void messageAction(Object deQ) {
String msg = (String) deQ;
if(msg.startsWith("SET ")) {
int amount = parseInt(msg.substring(4));
showStatus(amount);
} else if(msg.startsWith("WIDTH ")) {
int width = parseInt(msg.substring(6));
setWidth(width);
} else if(msg.equals("CLOSE")) {
close();
} else if(msg.equals("MESSAGE")) {
message(msg.substring(8));
}
}
}