package com.limegroup.gnutella.gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Image; import java.awt.Toolkit; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JWindow; /** * Window that displays the splash screen. This loads the splash screen * image, places it on the center of the screen, and allows dynamic * updating of the status text for loading the application. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| public final class SplashWindow extends JWindow { /** * Constant handle to the glass pane that handles drawing text * on top of the splash screen. */ private static final StatusComponent GLASS_PANE = new StatusComponent(StatusComponent.RIGHT); /** * Constant handle to the label that represents the splash image. */ private static final JLabel splashLabel = new JLabel(); /** * The sole instance of the SplashWindow */ private static final SplashWindow INSTANCE = new SplashWindow(); static { GLASS_PANE.add(Box.createVerticalGlue(), 0); GLASS_PANE.add(GUIMediator.getVerticalSeparator()); GLASS_PANE.setBorder( BorderFactory.createEmptyBorder(0, 2, 0, 2) ); } /** * Returns the single instance of the SplashWindow. */ public static SplashWindow instance() { return INSTANCE; } /** * Creates a new SplashWindow, setting its location, size, etc. */ private SplashWindow() { final ImageIcon splashIcon = ResourceManager.getThemeImage("splash"); final Image image = splashIcon.getImage(); final Dimension size = new Dimension(image.getWidth(null) + 2, image.getHeight(null) + 2); this.setSize(size); final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((screenSize.width - size.width) / 2, (screenSize.height - size.height) / 2); splashLabel.setIcon(splashIcon); this.getContentPane().add(splashLabel, BorderLayout.CENTER); this.setGlassPane(GLASS_PANE); this.pack(); } /** * Sets the Splash Window to be visible. */ public void begin() { toFront(); this.setVisible(true); GLASS_PANE.setVisible(true); } /** * Sets the loading status text to display in the splash * screen window. * * @param text the text to display */ public static void setStatusText(final String text) { GUIMediator.safeInvokeLater(new Runnable() { public void run() { GLASS_PANE.setText(text); } }); } /** * Refreshes the image on the SplashWindow based on the current theme. * This method is used primarily during theme change. */ public static void refreshImage() { final ImageIcon splashIcon = ResourceManager.getThemeImage("splash"); splashLabel.setIcon(splashIcon); GLASS_PANE.setVisible(false); INSTANCE.pack(); // force redraw so that splash is drawn before rest of theme changes splashLabel.paintImmediately(0, 0, splashLabel.getWidth(), splashLabel.getHeight()); } }