diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2012-06-13 17:46:09 +0300 |
---|---|---|
committer | Johannes Dahlström <johannesd@vaadin.com> | 2012-06-13 17:46:09 +0300 |
commit | 52d06a13b9e20cb752a21413e15adc250daa5e1c (patch) | |
tree | ac0e5878490d802960d9463354721ce1820b4aa8 /src/com/vaadin/ui | |
parent | de5fd8e0aefa0c43e2b0fe724102bca92eeaaf96 (diff) | |
parent | adcf03c1b5f05b38cda25819b732745c1a4859fc (diff) | |
download | vaadin-framework-52d06a13b9e20cb752a21413e15adc250daa5e1c.tar.gz vaadin-framework-52d06a13b9e20cb752a21413e15adc250daa5e1c.zip |
Merge remote-tracking branch 'origin/master'
Conflicts:
src/com/vaadin/terminal/gwt/server/DragAndDropService.java
Diffstat (limited to 'src/com/vaadin/ui')
-rw-r--r-- | src/com/vaadin/ui/AbstractJavascriptComponent.java | 19 | ||||
-rw-r--r-- | src/com/vaadin/ui/DirtyConnectorTracker.java | 2 | ||||
-rw-r--r-- | src/com/vaadin/ui/JavascriptCallback.java | 14 | ||||
-rw-r--r-- | src/com/vaadin/ui/JavascriptManager.java | 58 | ||||
-rw-r--r-- | src/com/vaadin/ui/Root.java | 12 | ||||
-rw-r--r-- | src/com/vaadin/ui/Table.java | 8 |
6 files changed, 112 insertions, 1 deletions
diff --git a/src/com/vaadin/ui/AbstractJavascriptComponent.java b/src/com/vaadin/ui/AbstractJavascriptComponent.java new file mode 100644 index 0000000000..0a26c10239 --- /dev/null +++ b/src/com/vaadin/ui/AbstractJavascriptComponent.java @@ -0,0 +1,19 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.ui; + +import com.vaadin.terminal.JavascriptRpcHelper; + +public class AbstractJavascriptComponent extends AbstractComponent { + private JavascriptRpcHelper rpcHelper = new JavascriptRpcHelper(this); + + protected void registerCallback(String functionName, + JavascriptCallback javascriptCallback) { + rpcHelper.registerCallback(functionName, javascriptCallback); + } + + protected void invokeCallback(String name, Object... arguments) { + rpcHelper.invokeCallback(name, arguments); + } +} diff --git a/src/com/vaadin/ui/DirtyConnectorTracker.java b/src/com/vaadin/ui/DirtyConnectorTracker.java index dae334fe4c..ae47d87eae 100644 --- a/src/com/vaadin/ui/DirtyConnectorTracker.java +++ b/src/com/vaadin/ui/DirtyConnectorTracker.java @@ -101,7 +101,7 @@ public class DirtyConnectorTracker implements Serializable { } markDirty(c); for (ClientConnector child : AbstractClientConnector - .getAllChildrenIteratable(c)) { + .getAllChildrenIterable(c)) { markConnectorsDirtyRecursively(child); } } diff --git a/src/com/vaadin/ui/JavascriptCallback.java b/src/com/vaadin/ui/JavascriptCallback.java new file mode 100644 index 0000000000..89700b3faf --- /dev/null +++ b/src/com/vaadin/ui/JavascriptCallback.java @@ -0,0 +1,14 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.ui; + +import java.io.Serializable; + +import com.vaadin.external.json.JSONArray; +import com.vaadin.external.json.JSONException; + +public interface JavascriptCallback extends Serializable { + public void call(JSONArray arguments) throws JSONException; +} diff --git a/src/com/vaadin/ui/JavascriptManager.java b/src/com/vaadin/ui/JavascriptManager.java new file mode 100644 index 0000000000..72295dce2b --- /dev/null +++ b/src/com/vaadin/ui/JavascriptManager.java @@ -0,0 +1,58 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.ui; + +import java.util.HashMap; +import java.util.Map; + +import com.vaadin.external.json.JSONArray; +import com.vaadin.external.json.JSONException; +import com.vaadin.terminal.AbstractExtension; +import com.vaadin.terminal.gwt.client.communication.ServerRpc; +import com.vaadin.terminal.gwt.client.extensions.javascriptmanager.JavascriptManagerState; + +public class JavascriptManager extends AbstractExtension { + private Map<String, JavascriptCallback> callbacks = new HashMap<String, JavascriptCallback>(); + + // Can not be defined in client package as this JSONArray is not available + // in GWT + public interface JavascriptCallbackRpc extends ServerRpc { + public void call(String name, JSONArray arguments); + } + + public JavascriptManager() { + registerRpc(new JavascriptCallbackRpc() { + public void call(String name, JSONArray arguments) { + JavascriptCallback callback = callbacks.get(name); + // TODO handle situation if name is not registered + try { + callback.call(arguments); + } catch (JSONException e) { + throw new IllegalArgumentException(e); + } + } + }); + } + + @Override + public JavascriptManagerState getState() { + return (JavascriptManagerState) super.getState(); + } + + public void addCallback(String name, JavascriptCallback javascriptCallback) { + callbacks.put(name, javascriptCallback); + if (getState().getNames().add(name)) { + requestRepaint(); + } + } + + public void removeCallback(String name) { + callbacks.remove(name); + if (getState().getNames().remove(name)) { + requestRepaint(); + } + } + +} diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java index 8792bf1912..9814084cbc 100644 --- a/src/com/vaadin/ui/Root.java +++ b/src/com/vaadin/ui/Root.java @@ -408,6 +408,8 @@ public abstract class Root extends AbstractComponentContainer implements private DirtyConnectorTracker dirtyConnectorTracker = new DirtyConnectorTracker( this); + private JavascriptManager javascriptManager; + private RootServerRpc rpc = new RootServerRpc() { public void click(MouseEventDetails mouseDetails) { fireEvent(new ClickEvent(Root.this, mouseDetails)); @@ -1590,4 +1592,14 @@ public abstract class Root extends AbstractComponentContainer implements return dirtyConnectorTracker; } + public JavascriptManager getJavascriptManager() { + if (javascriptManager == null) { + // Create and attach on first use + javascriptManager = new JavascriptManager(); + addExtension(javascriptManager); + } + + return javascriptManager; + } + } diff --git a/src/com/vaadin/ui/Table.java b/src/com/vaadin/ui/Table.java index 3b12c097de..a83c9bd87a 100644 --- a/src/com/vaadin/ui/Table.java +++ b/src/com/vaadin/ui/Table.java @@ -1653,6 +1653,14 @@ public class Table extends AbstractSelect implements Action.Container, super.requestRepaint(); } + @Override + public void requestRepaintAll() { + super.requestRepaintAll(); + + // Avoid sending a partial repaint (#8714) + refreshRowCache(); + } + private void removeRowsFromCacheAndFillBottom(int firstIndex, int rows) { int totalCachedRows = pageBuffer[CELL_ITEMID].length; int totalRows = size(); |