/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Mathew A. Nelson
* - Initial API and implementation
* Flemming N. Larsen
* - Code cleanup
* - Changed to render the Robocode logo instead of using a bitmap image
* - Replaced isPainted() and painted field with wait/notify
*******************************************************************************/
package net.sf.robocode.ui.dialog;
import net.sf.robocode.ui.gfx.RobocodeLogo;
import net.sf.robocode.version.IVersionManager;
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
/**
* The splash screen.
*
* @author Mathew A. Nelson (original)
* @author Flemming N. Larsen (contributor)
*/
@SuppressWarnings("serial")
public class RcSplashScreen extends JWindow {
private final static Color LABEL_COLOR = Color.WHITE;
private JLabel splashLabel;
private JPanel splashPanel;
private JPanel splashScreenContentPane;
private Image splashImage;
private final String version;
private final transient WindowListener eventHandler = new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (e.getSource() == RcSplashScreen.this) {
RcSplashScreen.this.dispose();
}
}
};
public RcSplashScreen(IVersionManager versionManager) {
super();
this.version = versionManager.getVersion();
initialize();
}
public JLabel getSplashLabel() {
if (splashLabel == null) {
splashLabel = new JLabel();
splashLabel.setText("");
splashLabel.setForeground(LABEL_COLOR);
splashLabel.setOpaque(false);
}
return splashLabel;
}
private JPanel getSplashPanel() {
if (splashPanel == null) {
splashPanel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
g.drawImage(splashImage, 0, 0, null);
g.setColor(LABEL_COLOR);
g.setFont(new Font("Arial", 1, 12));
FontMetrics fm = g.getFontMetrics();
g.drawString("Version: " + version,
splashImage.getWidth(null) - fm.stringWidth("Version: " + version),
splashImage.getHeight(null) - 4);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(splashImage.getWidth(null), splashImage.getHeight(null));
}
};
splashPanel.setLayout(new BorderLayout());
splashPanel.add(getSplashLabel(), BorderLayout.NORTH);
}
return splashPanel;
}
private JPanel getSplashScreenContentPane() {
if (splashScreenContentPane == null) {
splashScreenContentPane = new JPanel();
splashScreenContentPane.setBorder(new EtchedBorder());
splashScreenContentPane.setLayout(new BorderLayout());
splashScreenContentPane.add(getSplashPanel(), "Center");
}
return splashScreenContentPane;
}
private void initialize() {
splashImage = new BufferedImage(RobocodeLogo.WIDTH, RobocodeLogo.HEIGHT, BufferedImage.TYPE_INT_RGB);
new RobocodeLogo().paintLogoWithTanks(splashImage.getGraphics());
setContentPane(getSplashScreenContentPane());
addWindowListener(eventHandler);
}
@Override
public void paint(Graphics g) {
super.paint(g);
}
}