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);
}