package com.qksnap.www.snap.gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Method; import java.net.ServerSocket; import java.net.URL; import java.util.Iterator; import java.util.Scanner; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.event.IIOReadProgressListener; import javax.imageio.stream.ImageInputStream; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JWindow; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.WindowConstants; import com.qksnap.www.snap.autoupdater.Updater; import com.qksnap.www.snap.settings.UserSettings; import com.qksnap.www.snap.util.Logger; import com.qksnap.www.snap.util.Logger.Level; import java.awt.EventQueue; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.image.BufferedImage; public class SplashScreen extends JWindow { /** * Splash screen duration (milliseconds). */ private static SplashScreen singleton; public static void setSingleton(SplashScreen singleton) { if (SplashScreen.singleton != null) { throw new IllegalStateException("Singleton already set!"); } SplashScreen.singleton = singleton; } /** * Gets the server singleton object. * * @return the singleton */ public static SplashScreen getSingleton() { return singleton; } private int splashDuration = 1500; /** Progress Bar **/ private JProgressBar progressBar; /** Description Lbl **/ private JLabel descLbl; /** static instances **/ public MainFrame mainframe; public MainFrame getMainFrame(){ return mainframe; } public UserSettings usersettings; public UserSettings getUserSettings(){ return usersettings; } public void showTos() { SwingUtilities.invokeLater(new Runnable() { public void run() { // Here, we can safely update the GUI // because we'll be called from the // event dispatch thread usersettings = new UserSettings(); try { mainframe = new MainFrame(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } /** Create Splash Screen **/ public void createSplash(){ JPanel content = (JPanel) getContentPane(); /** Background Image **/ Image img = new ImageIcon(getClass().getResource("/splashbg.png")).getImage(); int width = img.getWidth(null); int height = img.getHeight(null); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); int x = (screen.width - width) / 2; int y = (screen.height - height) / 2; setBounds(x, y, width, height); JLabel label = new JLabel(new ImageIcon(getClass().getResource("/splashbg.png"))); JLabel logo = new JLabel(new ImageIcon(getClass().getResource("/logotext.png"))); JLabel progressBarBg = new JLabel(new ImageIcon(getClass().getResource("/progressbarplaceholder.png"))); progressBarBg.setBounds(82, 175, 422, 40); logo.setBounds(165,60,241,55); label.setOpaque(false); /** Some Progress Bar editting **/ progressBar = new JProgressBar(); progressBar.setValue(0); UIManager.put("ProgressBar.selectionForeground", Color.white); UIManager.put("ProgressBar.selectionBackground", Color.white); progressBar.setUI(new com.qksnap.www.snap.gui.tabpane.componet.ProgressBar()); progressBar.setStringPainted(true); progressBar.setForeground(Color.white); progressBar.setFont(new Font("Tahoma", Font.PLAIN, 10).deriveFont(Font.BOLD)); progressBar.setOpaque(false); progressBar.setBorderPainted(false); progressBar.setBackground(Color.black); progressBar.setBounds(82,175, 422, 49); /** DescLbl **/ descLbl = new JLabel("Loading Gui Elements"); descLbl.setForeground(Color.white); content.setOpaque(false); descLbl.setFont(new Font("Tahoma", Font.PLAIN, 10).deriveFont(Font.BOLD)); descLbl.setBounds(245, 215, 512, 32); content.add(descLbl); content.add(progressBar); content.add(logo); content.add(progressBarBg); content.add(label, BorderLayout.CENTER); } /** Update our progress bar **/ public void drawText(int i, String string) { getSingleton().getProgressBar().setValue(i); getSingleton().getDescLbl().setText(string); getSingleton().validate(); getSingleton().repaint(); } public void showSplash() { createSplash(); setVisible(true); getProgressBar().setValue(100); repaint(); validate(); // Check for Update Logger.writeLog(Level.INFORMATION, "Preparing to check for update."); drawText(0,"Preparing to check for updates."); //new Updater(); // Load sqlite settings Logger.writeLog(Level.INFORMATION, "Preparing to load local settings."); drawText(0,"Preparing to load local settings."); usersettings = new UserSettings(); // Load saved images try { drawText(0,"Preparing to load saved images."); mainframe = new MainFrame(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Logger.writeLog(Level.INFORMATION, "Preparing to load saved images."); // load qwiksnap Logger.writeLog(Level.INFORMATION, "Starting QwikSnap..."); drawText(0,"Starting QwikSnap..."); try { Thread.sleep(splashDuration); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } drawText(100,"Starting QwikSnap..."); setVisible(false); getSingleton().getMainFrame().setVisible(true); } public static void main(String[] args) { //Launcher splash = new Launcher(); try { if(System.getProperty("os.name").startsWith("Win")) System.setProperty("sun.java2d.d3d","true"); else System.setProperty("sun.java2d.opengl", "true"); ServerSocket ss = new ServerSocket(8000); setSingleton(new SplashScreen()); getSingleton().showSplash(); } catch (IOException e) { JOptionPane.showMessageDialog(null, "You already have a instance of Qwiksnap running!", "Error 0", JOptionPane.ERROR_MESSAGE); System.exit(4); return; } } public JProgressBar getProgressBar() { return progressBar; } public JLabel getDescLbl() { return descLbl; } public void setProgressBar(JProgressBar progressBar) { this.progressBar = progressBar; } public void setDescLbl(JLabel descLbl) { this.descLbl = descLbl; } }