You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/03/20 19:25:43 UTC

svn commit: r756701 - in /incubator/pivot/trunk: core/src/pivot/util/ demos/src/pivot/demos/dom/ wtk/src/pivot/wtk/ wtk/src/pivot/wtk/skin/ wtk/src/pivot/wtk/skin/terra/

Author: gbrown
Date: Fri Mar 20 18:25:42 2009
New Revision: 756701

URL: http://svn.apache.org/viewvc?rev=756701&view=rev
Log:
Delegate timer creation and destruction to concrete application context classes; modify BrowserApplicationContext.eval() to work with applications running in a shared JVM.

Modified:
    incubator/pivot/trunk/core/src/pivot/util/ListenerList.java
    incubator/pivot/trunk/demos/src/pivot/demos/dom/DOMTest.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/BrowserApplicationContext.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/Component.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/DesktopApplicationContext.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraListButtonSkin.java
    incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraPanoramaSkin.java

Modified: incubator/pivot/trunk/core/src/pivot/util/ListenerList.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/pivot/util/ListenerList.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/pivot/util/ListenerList.java (original)
+++ incubator/pivot/trunk/core/src/pivot/util/ListenerList.java Fri Mar 20 18:25:42 2009
@@ -105,7 +105,7 @@
                 && node.listener != listener) {
                 node.next = new Node(node, null, listener);
             } else {
-                System.out.println("Duplicate listener " + listener + " added to " + this);
+                System.err.println("Duplicate listener " + listener + " added to " + this);
             }
         }
     }
@@ -127,7 +127,7 @@
         }
 
         if (node == null) {
-            System.out.println("Nonexistent listener " + listener + " removed from " + this);
+            System.err.println("Nonexistent listener " + listener + " removed from " + this);
         } else {
             if (node.previous == null) {
                 first = node.next;

Modified: incubator/pivot/trunk/demos/src/pivot/demos/dom/DOMTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/demos/src/pivot/demos/dom/DOMTest.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/demos/src/pivot/demos/dom/DOMTest.java (original)
+++ incubator/pivot/trunk/demos/src/pivot/demos/dom/DOMTest.java Fri Mar 20 18:25:42 2009
@@ -41,7 +41,7 @@
 
         helloButton.getButtonPressListeners().add(new ButtonPressListener() {
             public void buttonPressed(Button button) {
-                BrowserApplicationContext.eval("sayHello(\"Hello from Java!\")");
+                BrowserApplicationContext.eval("sayHello(\"Hello from Java!\")", DOMTest.this);
             }
         });
 

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/ApplicationContext.java Fri Mar 20 18:25:42 2009
@@ -308,7 +308,7 @@
                         }
                     }
                 } catch (RuntimeException exception) {
-                    System.out.println("Exception thrown during paint(): " + exception);
+                    System.err.println("Exception thrown during paint(): " + exception);
                     throw exception;
                 }
             }
@@ -1081,8 +1081,7 @@
     private static HashMap<URL, Object> resourceCache = new HashMap<URL, Object>();
     private static ResourceCacheDictionary resourceCacheDictionary = new ResourceCacheDictionary();
 
-    // TODO Create/destroy this in subclass
-    protected static Timer timer = new Timer();
+    private static Timer timer = null;
 
     private static final String DEFAULT_THEME_CLASS_NAME = "pivot.wtk.skin.terra.TerraTheme";
 
@@ -1098,7 +1097,7 @@
         } catch (Exception exception) {
             // No-op; assume that a custom theme will be installed later
             // by the caller
-            System.out.println("Warning: Unable to load default theme.");
+            System.err.println("Warning: Unable to load default theme.");
         }
     }
 
@@ -1139,7 +1138,7 @@
             Object desktop = getDesktopMethod.invoke(null, (Object[]) null);
             browseMethod.invoke(desktop, location.toURI());
         } catch (Exception exception) {
-            System.out.println("Unable to open URL in default browser.");
+            System.err.println("Unable to open URL in default browser.");
         }
     }
 
@@ -1154,7 +1153,7 @@
      * Schedules a task for one-time execution. The task will be executed on
      * the UI thread.
      *
-     * @param runnable
+     * @param callback
      * The task to execute.
      *
      * @param delay
@@ -1171,7 +1170,7 @@
      * Schedules a task for repeated execution. The task will be executed on the
      * UI thread and will begin executing immediately.
      *
-     * @param runnable
+     * @param callback
      * The task to execute.
      *
      * @param period
@@ -1185,7 +1184,7 @@
      * Schedules a task for repeated execution. The task will be executed on the
      * UI thread.
      *
-     * @param runnable
+     * @param callback
      * The task to execute.
      *
      * @param delay
@@ -1205,36 +1204,45 @@
      * Queues a task to execute after all pending events have been processed and
      * returns without waiting for the task to complete.
      *
-     * @param runnable
-     * The runnable to execute.
+     * @param callback
+     * The task to execute.
      */
-    public static void queueCallback(Runnable runnable) {
-        queueCallback(runnable, false);
+    public static void queueCallback(Runnable callback) {
+        queueCallback(callback, false);
     }
 
     /**
      * Queues a task to execute after all pending events have been processed and
      * optionally waits for the task to complete.
      *
-     * @param runnable
-     * The runnable to execute.
+     * @param callback
+     * The task to execute.
      *
      * @param wait
-     * If <tt>true</tt>, does not return until the runnable has executed.
+     * If <tt>true</tt>, does not return until the task has executed.
      * Otherwise, returns immediately.
      */
-    public static void queueCallback(Runnable runnable, boolean wait) {
+    public static void queueCallback(Runnable callback, boolean wait) {
         if (wait) {
             try {
-                java.awt.EventQueue.invokeAndWait(runnable);
+                java.awt.EventQueue.invokeAndWait(callback);
             } catch (InvocationTargetException exception) {
             } catch (InterruptedException exception) {
             }
         } else {
-            java.awt.EventQueue.invokeLater(runnable);
+            java.awt.EventQueue.invokeLater(callback);
         }
     }
 
+    protected static void createTimer() {
+        timer = new Timer();
+    }
+
+    protected static void destroyTimer() {
+        timer.cancel();
+        timer = null;
+    }
+
     private static DropAction getUserDropAction(InputEvent event) {
         DropAction userDropAction;
 

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/BrowserApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/BrowserApplicationContext.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/BrowserApplicationContext.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/BrowserApplicationContext.java Fri Mar 20 18:25:42 2009
@@ -23,6 +23,7 @@
 
 import netscape.javascript.JSObject;
 
+import pivot.collections.ArrayList;
 import pivot.collections.Dictionary;
 import pivot.collections.HashMap;
 
@@ -70,10 +71,8 @@
                URL codeBase = getCodeBase();
                if (codeBase != null) {
                   try {
-                     System.out.println("Code base: " + codeBase);
                      origin = new URL(codeBase.getProtocol(), codeBase.getHost(),
                         codeBase.getPort(), "");
-                     System.out.println("Origin: " + origin);
                   } catch(Exception exception) {
                      System.out.print("Unable to determine application origin: "
                         + exception);
@@ -106,7 +105,7 @@
                                } catch(UnsupportedEncodingException exception) {
                                }
                            } else {
-                               System.out.println(argument + " is not a valid startup property.");
+                               System.err.println(argument + " is not a valid startup property.");
                            }
                        }
                    }
@@ -138,6 +137,12 @@
                         exception.printStackTrace();
                     }
                 }
+
+                if (hostApplets.getLength() == 0) {
+                    createTimer();
+                }
+
+                hostApplets.add(HostApplet.this);
             }
         }
 
@@ -173,7 +178,11 @@
 
         private class DestroyCallback implements Runnable {
             public void run() {
-                // No-op
+                hostApplets.remove(HostApplet.this);
+
+                if (hostApplets.getLength() == 0) {
+                    destroyTimer();
+                }
             }
         }
 
@@ -186,10 +195,6 @@
 
         private static final long serialVersionUID = 0;
 
-        public HostApplet() {
-            hostApplet = this;
-        }
-
         public Application getApplication() {
             return application;
         }
@@ -244,22 +249,55 @@
         }
     }
 
-    private static HostApplet hostApplet = null;
+    private static ArrayList<HostApplet> hostApplets = new ArrayList<HostApplet>();
 
     /**
-     * Evaluates the specified script in the browser's JavaScript page
-     * context and returns the result.
-     * <p>
-     * NOTE This feature requires that the applet run in its own JVM; see JDK
-     * documentation on the <tt>separate_jvm</tt> applet parameter.
+     * Retrieves a named application.
+     *
+     * @param name
+     * The name of the applet hosting the application.
      */
-    public static Object eval(String script) {
-        if (hostApplet == null) {
-            throw new IllegalStateException("Application is not running in a web browser.");
+    public static Application getApplication(String name) {
+        if (name == null) {
+            throw new IllegalArgumentException("name is null.");
+        }
+
+        Application application = null;
+        for (HostApplet hostApplet : hostApplets) {
+            if (hostApplet.getName().equals(name)) {
+                application = hostApplet.getApplication();
+                break;
+            }
+        }
+
+        return application;
+    }
+
+    /**
+     * Evaluates a script in the page context and returns the result.
+     *
+     * @param script
+     * @param application
+     */
+    public static Object eval(String script, Application application) {
+        if (application == null) {
+            throw new IllegalArgumentException("application is null.");
+        }
+
+        HostApplet applicationHostApplet = null;
+        for (HostApplet hostApplet : hostApplets) {
+            if (hostApplet.getApplication() == application) {
+                applicationHostApplet = hostApplet;
+                break;
+            }
+        }
+
+        if (applicationHostApplet == null) {
+            throw new IllegalArgumentException("No applet is hosting the given application.");
         }
 
         try {
-            JSObject window = JSObject.getWindow(hostApplet);
+            JSObject window = JSObject.getWindow(applicationHostApplet);
             return window.eval(script);
         } catch (Throwable throwable) {
             throw new UnsupportedOperationException(throwable);

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/Component.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/Component.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/Component.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/Component.java Fri Mar 20 18:25:42 2009
@@ -66,7 +66,7 @@
                 customStyles.add(key);
                 componentListeners.styleUpdated(Component.this, key, previousValue);
             } catch(PropertyNotFoundException exception) {
-                System.out.println("\"" + key + "\" is not a valid style for "
+                System.err.println("\"" + key + "\" is not a valid style for "
                     + Component.this);
             }
 

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/DesktopApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/DesktopApplicationContext.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/DesktopApplicationContext.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/DesktopApplicationContext.java Fri Mar 20 18:25:42 2009
@@ -62,6 +62,8 @@
                 case WindowEvent.WINDOW_OPENED: {
                     applicationContext.getDisplayHost().requestFocus();
 
+                    createTimer();
+
                     try {
                         application.startup(applicationContext.getDisplay(),
                             new ImmutableMap<String, String>(properties));
@@ -90,6 +92,8 @@
                     }
 
                     if (shutdown) {
+                        destroyTimer();
+
                         java.awt.Window window = event.getWindow();
                         window.setVisible(false);
                         window.dispose();
@@ -197,7 +201,7 @@
                         properties.put(key, value);
                     }
                 } else {
-                    System.out.println(arg + " is not a valid startup property.");
+                    System.err.println(arg + " is not a valid startup property.");
                 }
             }
         }
@@ -207,7 +211,7 @@
 
         // Load the application
         if (applicationClassName == null) {
-            System.out.println("Application class name is required.");
+            System.err.println("Application class name is required.");
         } else {
             Class<?> applicationClass = Class.forName(applicationClassName);
             application = (Application)applicationClass.newInstance();

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/skin/ScrollPaneSkin.java Fri Mar 20 18:25:42 2009
@@ -665,7 +665,7 @@
 
             if (++i > 4) {
                 // Infinite loop protection
-                System.out.println("Breaking out of potential infinite loop");
+                System.err.println("Breaking out of potential infinite loop");
                 break;
             }
         } while (viewWidth != previousViewWidth

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraListButtonSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraListButtonSkin.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraListButtonSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraListButtonSkin.java Fri Mar 20 18:25:42 2009
@@ -123,7 +123,7 @@
 
     private static final int TRIGGER_WIDTH = 14;
 
-    private static final int CLOSE_TRANSITION_DURATION = 150;
+    private static final int CLOSE_TRANSITION_DURATION = 250;
     private static final int CLOSE_TRANSITION_RATE = 30;
 
     public TerraListButtonSkin() {

Modified: incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraPanoramaSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraPanoramaSkin.java?rev=756701&r1=756700&r2=756701&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraPanoramaSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/pivot/wtk/skin/terra/TerraPanoramaSkin.java Fri Mar 20 18:25:42 2009
@@ -185,7 +185,6 @@
 
                 panorama.setScrollTop(scrollTop);
             } else if (eastButton.isMouseOver()) {
-                System.out.println(eastButton.isVisible());
                 int maxScrollLeft = getMaxScrollLeft();
                 int scrollLeft = Math.min(panorama.getScrollLeft()
                     + (int)scrollDistance, maxScrollLeft);
@@ -195,7 +194,6 @@
                     scheduledScrollCallback = null;
                 }
 
-                System.out.println(scrollLeft + ", " + maxScrollLeft);
                 panorama.setScrollLeft(scrollLeft);
             } else if (westButton.isMouseOver()) {
                 int scrollLeft = Math.max(panorama.getScrollLeft()
@@ -206,7 +204,6 @@
                     scheduledScrollCallback = null;
                 }
 
-                System.out.println(scrollLeft);
                 panorama.setScrollLeft(scrollLeft);
             }