2004/01/19 00:16:54
[org.ibex.core.git] / src / org / xwt / Platform.java
index 0d02cd0..8c4df6e 100644 (file)
@@ -47,49 +47,45 @@ public abstract class Platform {
             String os_version = System.getProperty("os.version", "");
             String platform_class = null;
             
-            if (os_name.startsWith("Darwin")) platform_class = "Darwin";
-            else if (vendor.startsWith("Free Software Foundation")) {
+            if (vendor.startsWith("Free Software Foundation")) {
                 if (os_name.startsWith("Window")) platform_class = "Win32";
+                else if (os_name.startsWith("Linux")) platform_class = "Linux";
+                else if (os_name.startsWith("SunOS")) platform_class = "Solaris";
+                else if (os_name.startsWith("Solaris")) platform_class = "Solaris";
                 else platform_class = "X11";
-            } else if (version.startsWith("1.1") && vendor.startsWith("Netscape")) platform_class = "Netscape";
-            else if (version.startsWith("1.1") && vendor.startsWith("Microsoft")) platform_class = "Microsoft";
+            }
             else if (!version.startsWith("1.0") && !version.startsWith("1.1")) platform_class = "Java2";
 
-            // Disable 2d hardware acceleration on Jaguar (do we need this?)
-            // if (os_name.equals("Mac OS X") && os_version.startsWith("10.2")) System.setProperty("com.apple.hwaccel", "false");
-            //System.setProperty("com.apple.hwaccel", "false");
+            if (platform_class == null) {
+                Log.error(Platform.class, "Unable to detect JVM");
+                criticalAbort("Unable to detect JVM");
+            }
 
-            if (platform_class != null)
-                Class.forName("org.xwt.plat." + platform_class).newInstance();
+            if (platform_class != null) Class.forName("org.xwt.plat." + platform_class).newInstance();
 
             String term = Platform.getEnv("TERM");
             Log.color = term != null && term.length() != 0 && !term.equals("cygwin");
             
             try {
                 build = (String)Class.forName("org.xwt.Build").getField("build").get(null);
+                Log.diag(Platform.class, "XWT build: " + build);
             } catch (ClassNotFoundException cnfe) {
+                Log.warn(Platform.class, "XWT build: unknown");
             } catch (Exception e) {
-                if (Log.on) Log.info(Platform.class, "exception while detecting build:");
-                if (Log.on) Log.info(Platform.class, e);
-            }
-            if (Log.on) Log.diag(Platform.class, "XWT build: " + build);
-
-            if (Log.on) Log.diag(Platform.class, "XWT VM detection:   vendor = " + vendor);
-            if (Log.on) Log.diag(Platform.class, "                   version = " + version);
-            if (Log.on) Log.diag(Platform.class, "                        os = " + os_name + " [version " + os_version + "]");
-
-            if (platform_class == null) {
-                if (Log.on) Log.info(Platform.class, "Unable to detect JVM");
-                criticalAbort("Unable to detect JVM");
+                Log.info(Platform.class, "exception while detecting build:");
+                Log.info(Platform.class, e);
             }
 
-            if (Log.on) Log.diag(Platform.class, "                  platform = " + platform.getDescriptiveName());
-            if (Log.on) Log.diag(Platform.class, "                     class = " + platform.getClass().getName());
+            Log.diag(Platform.class, "XWT VM detection:   vendor = " + vendor);
+            Log.diag(Platform.class, "                   version = " + version);
+            Log.diag(Platform.class, "                        os = " + os_name + " [version " + os_version + "]");
+            Log.diag(Platform.class, "                  platform = " + platform.getDescriptiveName());
+            Log.diag(Platform.class, "                     class = " + platform.getClass().getName());
             platform.postInit();
 
         } catch (Exception e) {
-            if (Log.on) Log.info(Platform.class, "Exception while trying to detect JVM");
-            if (Log.on) Log.info(Platform.class, e);
+            Log.error(Platform.class, "Exception while trying to detect JVM");
+            Log.error(Platform.class, e);
             criticalAbort("Unable to detect JVM");
         }
 
@@ -98,12 +94,6 @@ public abstract class Platform {
 
     // Methods to be Overridden ///////////////////////////////////////////////////////////////////
 
-    /** a string describing the VM */
-    protected String getDescriptiveName() { return "Generic Java 1.1 VM"; }
-
-    /** invoked after initialization messages have been printed; useful for additional platform detection log messages */
-    protected void postInit() { }
-
     protected Surface _createSurface(Box b, boolean framed) { return null; }
     protected Picture _createPicture(JS r) { return null; }
     protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) { return null; }
@@ -120,9 +110,20 @@ public abstract class Platform {
             ret.dirty(0, 0, b.width, b.height);
             ret.Refresh();
         }
+        try {
+            if (b.get("titlebar") != null) ret.setTitleBarText((String)b.get("titlebar"));
+        } catch (JSExn e) {
+            Log.warn(Platform.class, e);
+        }
         return ret;
     }
 
+    /** a string describing the VM */
+    protected String getDescriptiveName() { return "Generic Java 1.1 VM"; }
+
+    /** invoked after initialization messages have been printed; useful for additional platform detection log messages */
+    protected void postInit() { }
+
     /** the human-readable name of the key mapped to XWT's 'alt' key */
     public static String altKeyName() { return platform._altKeyName(); }
     protected String _altKeyName() { return "alt"; }
@@ -145,6 +146,11 @@ public abstract class Platform {
 
     /** used to notify the user of very serious failures; usually used when logging is not working or unavailable */
     protected void _criticalAbort(String message) { System.exit(-1); }
+    public static void criticalAbort(String message) {
+        Log.info(Platform.class, "Critical Abort:");
+        Log.info(Platform.class, message);
+        platform._criticalAbort(message);
+    }
 
     /** if true, org.xwt.Surface will generate a Click automatically after a press and a release */
     public static boolean needsAutoClick() { return platform._needsAutoClick(); }
@@ -160,9 +166,7 @@ public abstract class Platform {
 
     /** returns an InputStream to the builtin xwar */
     public static InputStream getBuiltinInputStream() { return platform._getBuiltinInputStream(); }
-    protected InputStream _getBuiltinInputStream() {
-        return this.getClass().getClassLoader().getResourceAsStream("org/xwt/builtin.jar");
-    }
+    protected InputStream _getBuiltinInputStream() {return getClass().getClassLoader().getResourceAsStream("org/xwt/builtin.jar");}
 
     /** returns the value of the environment variable key, or null if no such key exists */
     public static String getEnv(String key) { return platform._getEnv(key); }
@@ -187,8 +191,8 @@ public abstract class Platform {
                 if (s.startsWith(key + "="))
                     return s.substring(key.length() + 1);
         } catch (Exception e) {
-            if (Log.on) Log.info(this, "Exception while reading from environment:");
-            if (Log.on) Log.info(this, e);
+            Log.info(this, "Exception while reading from environment:");
+            Log.info(this, e);
         }
         return null;
     }
@@ -210,38 +214,30 @@ public abstract class Platform {
             Method m = c.getMethod("openURL", new Class[] { String.class });
             m.invoke(null, new String[] { url });
         } catch (Exception e) {
-            Log.info(this, e);
+            Log.warn(this, "exception trying to open a browser window");
+            Log.warn(this, e);
         }
     }
 
     /** opens a new browser window */
     public static void newBrowserWindow(String url) {
         if (!(url.startsWith("https://") || url.startsWith("http://") || url.startsWith("ftp://") || url.startsWith("mailto:"))) {
-            if (Log.on) Log.info(Platform.class, "xwt.newBrowserWindow() only supports http and https urls");
+            Log.info(Platform.class, "xwt.newBrowserWindow() only supports http and https urls");
             return;
         }
-
         // check the URL for well-formedness, as a defense against buffer overflow attacks
         try {
             String u = url;
             if (u.startsWith("https")) u = "http" + u.substring(5);
             new URL(u);
         } catch (MalformedURLException e) {
-            if (Log.on) Log.info(Platform.class, "URL " + url + " is not well-formed");
-            if (Log.on) Log.info(Platform.class, e);
+            Log.info(Platform.class, "URL " + url + " is not well-formed");
+            Log.info(Platform.class, e);
         }
-
-        if (Log.on) Log.info(Platform.class, "newBrowserWindow, url = " + url);
+        Log.info(Platform.class, "newBrowserWindow, url = " + url);
         platform._newBrowserWindow(url);
     }
 
-    /** used to notify the user of very serious failures; usually used when logging is not working or unavailable */
-    public static void criticalAbort(String message) {
-        if (Log.on) Log.info(Platform.class, "Critical Abort:");
-        if (Log.on) Log.info(Platform.class, message);
-        platform._criticalAbort(message);
-    }
-
     /** detects proxy settings */
     protected synchronized org.xwt.HTTP.Proxy _detectProxy() { return null; }
     public static synchronized org.xwt.HTTP.Proxy detectProxy() {
@@ -250,11 +246,11 @@ public abstract class Platform {
         if (alreadyDetectedProxy) return null;
         alreadyDetectedProxy = true;
 
-        if (Log.on) Log.info(Platform.class, "attempting environment-variable DNS proxy detection");
+        Log.info(Platform.class, "attempting environment-variable DNS proxy detection");
         cachedProxyInfo = org.xwt.HTTP.Proxy.detectProxyViaManual();
         if (cachedProxyInfo != null) return cachedProxyInfo;
 
-        if (Log.on) Log.info(Platform.class, "attempting " + platform.getClass().getName() + " proxy detection");
+        Log.info(Platform.class, "attempting " + platform.getClass().getName() + " proxy detection");
         cachedProxyInfo = platform._detectProxy();
         if (cachedProxyInfo != null) return cachedProxyInfo;
 
@@ -283,8 +279,6 @@ public abstract class Platform {
             return p;
         }
     }
-
-
 }