package com.limegroup.gnutella.gui;
import java.awt.Frame;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
/**
* This class constructs an <tt>Initializer</tt> instance that constructs
* all of the necessary classes for the application.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
public class Main {
/**
* Creates an <tt>Initializer</tt> instance that constructs the
* necessary classes for the application.
*
* @param args the array of command line arguments
*/
public static void main(String args[]) {
Frame splash = null;
try {
if (isMacOSX()) {
// Register GURL to receive AppleEvents, such as magnet links.
// Use reflection to not slow down non-OSX systems.
// "GURLHandler.getInstance().register();"
Class clazz = Class.forName("com.limegroup.gnutella.gui.GURLHandler");
Method getInstance = clazz.getMethod("getInstance", new Class[0]);
Object gurl = getInstance.invoke(null, new Object[0]);
Method register = gurl.getClass().getMethod("register", new Class[0]);
register.invoke(gurl, new Object[0]);
}
// show initial splash screen only if there are no arguments
if (args == null || args.length == 0)
splash = showInitialSplash();
// load the GUI through reflection so that we don't reference classes here,
// which would slow the speed of class-loading, causing the splash to be
// displayed later.
Class.forName("com.limegroup.gnutella.gui.GUILoader").
getMethod("load", new Class[] { String[].class, Frame.class }).
invoke(null, new Object[] { args, splash });
} catch(Throwable e) {
e.printStackTrace();
System.exit(1);
}
}
public static final String SPLASH_FILE = "410splashfree.png";
/**
* Shows the initial splash window.
*/
private static Frame showInitialSplash() {
Frame splashFrame = null;
Image image = null;
File themeImage = new File(getUserSettingsDir(), SPLASH_FILE);
if (themeImage.exists())
image = Toolkit.getDefaultToolkit().createImage(themeImage.getPath());
else {
URL imageURL = Main.class.getResource("images/default_splash.png");
if (imageURL != null)
image = Toolkit.getDefaultToolkit().createImage(imageURL);
}
if (image != null)
splashFrame = AWTSplashWindow.splash(image);
return splashFrame;
}
/**
* Gets the settings directory without using CommonUtils.
*
* Has the side effect of setting the brushed-metal property if necessary.
*/
private static File getUserSettingsDir() {
File dir = new File(System.getProperty("user.home"));
if(isMacOSX()) {
File f = new File(dir, "/Library/Preferences/LimeWire");
if(new File(f, "useBrushedMetal").exists())
System.setProperty("apple.awt.brushMetalLook", "true");
return f;
} else {
return new File(dir, ".limewire");
}
}
/**
*
*/
private static boolean isMacOSX() {
String os = System.getProperty("os.name").toLowerCase();
return os.startsWith("mac os") && os.endsWith("x"); // Why not indexOf("mac os x") ?
}
}