summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/WEB-INF/web.xml32
-rwxr-xr-xbuild/bin/compile-gwt-components4
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/ColorPicker.java51
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/ColorPickerApplication.java50
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/gwt/WidgetSet.gwt.xml11
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/gwt/client/WidgetSet.java26
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/ClientColorPicker.java74
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/OriginalColorPicker.java88
-rw-r--r--src/com/itmill/toolkit/demo/colorpicker/gwt/public/colorpicker/styles.css13
9 files changed, 348 insertions, 1 deletions
diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml
index 1ddc6ac9c4..6b13d8943e 100644
--- a/WebContent/WEB-INF/web.xml
+++ b/WebContent/WEB-INF/web.xml
@@ -193,6 +193,28 @@
</init-param>
</servlet>
+ <servlet>
+ <servlet-name>CustomGwtComponentDemo</servlet-name>
+ <servlet-class>com.itmill.toolkit.terminal.gwt.server.ApplicationServlet</servlet-class>
+ <init-param>
+ <param-name>application</param-name>
+ <param-value>com.itmill.toolkit.demo.CustomGwtComponentDemo</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet>
+ <servlet-name>ColorPickerApplication</servlet-name>
+ <servlet-class>com.itmill.toolkit.terminal.gwt.server.ApplicationServlet</servlet-class>
+ <init-param>
+ <param-name>application</param-name>
+ <param-value>com.itmill.toolkit.demo.colorpicker.ColorPickerApplication</param-value>
+ </init-param>
+ <init-param>
+ <param-name>widgetset</param-name>
+ <param-value>com.itmill.toolkit.demo.colorpicker.gwt.WidgetSet</param-value>
+ </init-param>
+ </servlet>
+
<servlet-mapping>
<servlet-name>Reservr</servlet-name>
<url-pattern>/Reservr/*</url-pattern>
@@ -288,6 +310,16 @@
<url-pattern>/KeyboardShortcut/*</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>CustomGwtComponentDemo</servlet-name>
+ <url-pattern>/customgwt/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>ColorPickerApplication</servlet-name>
+ <url-pattern>/colorpicker/*</url-pattern>
+ </servlet-mapping>
+
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
diff --git a/build/bin/compile-gwt-components b/build/bin/compile-gwt-components
index 3fb5f9c8f4..e450f42993 100755
--- a/build/bin/compile-gwt-components
+++ b/build/bin/compile-gwt-components
@@ -14,4 +14,6 @@ else
fi
rm -r ../../WebContent/ITK-INF/widgetsets/com.itmill.toolkit.terminal.gwt.DefaultWidgetSet/*
-java $JVMVARS -cp "../../src:../gwt/gwt/gwt-user.jar:../gwt/gwt/gwt-dev-$PLATFORM.jar" com.google.gwt.dev.GWTCompiler -out "../../WebContent/ITK-INF/widgetsets" "$@" com.itmill.toolkit.terminal.gwt.DefaultWidgetSet -style DETAILED;
+#java $JVMVARS -cp "../../src:../gwt/gwt/gwt-user.jar:../gwt/gwt/gwt-dev-$PLATFORM.jar" com.google.gwt.dev.GWTCompiler -out "../../WebContent/ITK-INF/widgetsets" "$@" com.itmill.toolkit.terminal.gwt.DefaultWidgetSet -style DETAILED;
+java $JVMVARS -cp "../../src:../gwt/gwt/gwt-user.jar:../gwt/gwt/gwt-dev-$PLATFORM.jar" com.google.gwt.dev.GWTCompiler -out "../../WebContent/ITK-INF/widgetsets" "$@" com.itmill.toolkit.demo.colorpicker.gwt.WidgetSet -style DETAILED;
+#java $JVMVARS -cp "../../src:../gwt/gwt/gwt-user.jar:../../lib/reservr/googlemaps_gwt.jar:../gwt/gwt/gwt-dev-$PLATFORM.jar" com.google.gwt.dev.GWTCompiler -out "../../WebContent/ITK-INF/widgetsets" "$@" com.itmill.toolkit.demo.reservation.gwt.WidgetSet -style DETAILED;
diff --git a/src/com/itmill/toolkit/demo/colorpicker/ColorPicker.java b/src/com/itmill/toolkit/demo/colorpicker/ColorPicker.java
new file mode 100644
index 0000000000..f21e73ac80
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/ColorPicker.java
@@ -0,0 +1,51 @@
+package com.itmill.toolkit.demo.colorpicker;
+
+import java.util.Map;
+import com.itmill.toolkit.terminal.PaintException;
+import com.itmill.toolkit.terminal.PaintTarget;
+import com.itmill.toolkit.ui.*;
+
+public class ColorPicker extends AbstractField {
+
+ public ColorPicker() {
+ super();
+ setValue(new String("white"));
+ }
+
+ /** The property value of the field is an Integer. */
+ public Class getType() {
+ return String.class;
+ }
+
+ /** Tag is the UIDL element name for client-server communications. */
+ public String getTag() {
+ return "colorpicker";
+ }
+
+ /** Encode the property value of the field from RGB components. */
+ public void setColor(String newcolor) {
+ setValue(new String(newcolor));
+ }
+
+ /** Decode the property value of the field to RGB components. */
+ public String getColor() {
+ return (String) getValue();
+ }
+
+ /* Paint (serialize) the component for the client. */
+ public void paintContent(PaintTarget target) throws PaintException {
+ // Superclass writes any common attributes in the paint target.
+ super.paintContent(target);
+
+ // Set any values as variables of the paint target.
+ target.addVariable(this, "colorname", getColor());
+ }
+
+ public void changeVariables(Object source, Map variables) {
+ // Sets the currently selected color
+ if (variables.containsKey("colorname") && !isReadOnly()) {
+ String newValue = (String) variables.get("colorname");
+ setValue(newValue,true);
+ }
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/colorpicker/ColorPickerApplication.java b/src/com/itmill/toolkit/demo/colorpicker/ColorPickerApplication.java
new file mode 100644
index 0000000000..80475b7534
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/ColorPickerApplication.java
@@ -0,0 +1,50 @@
+package com.itmill.toolkit.demo.colorpicker;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.ui.*;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+/**
+ * Demonstration application that shows how to use a simple
+ * custom client-side GWT component, the ColorPicker.
+ *
+ * @author magi
+ */
+public class ColorPickerApplication extends com.itmill.toolkit.Application {
+ Window main = new Window("Color Picker Demo");
+
+ /* The custom component. */
+ ColorPicker colorselector = new ColorPicker();
+
+ /* Another component. */
+ Label colorname;
+
+ public void init() {
+ setMainWindow(main);
+ setTheme("demo");
+
+ // Listen for value change events in the custom component,
+ // triggered when user clicks a button to select another color.
+ colorselector.addListener(new ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ // Provide some server-side feedback
+ colorname.setValue("Selected color: " + colorselector.getColor());
+ }
+ });
+ main.addComponent(colorselector);
+
+ // Add another component to give feedback from server-side code
+ colorname = new Label("Selected color: "+colorselector.getColor());
+ main.addComponent(colorname);
+
+ // Server-side manipulation of the component state
+ Button button = new Button("Set to white");
+ button.addListener(new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ colorselector.setColor("white");
+ }
+ });
+ main.addComponent(button);
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/colorpicker/gwt/WidgetSet.gwt.xml b/src/com/itmill/toolkit/demo/colorpicker/gwt/WidgetSet.gwt.xml
new file mode 100644
index 0000000000..b38b30ae21
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/gwt/WidgetSet.gwt.xml
@@ -0,0 +1,11 @@
+<module>
+ <!-- Inherit the NoEntry version to avoid multiple entrypoints -->
+ <inherits name="com.itmill.toolkit.terminal.gwt.DefaultWidgetSetNoEntry" />
+
+ <!-- WidgetSet default theme -->
+ <stylesheet src="colorpicker/styles.css"/>
+
+ <!-- Entry point -->
+ <entry-point class="com.itmill.toolkit.demo.colorpicker.gwt.client.WidgetSet"/>
+
+</module>
diff --git a/src/com/itmill/toolkit/demo/colorpicker/gwt/client/WidgetSet.java b/src/com/itmill/toolkit/demo/colorpicker/gwt/client/WidgetSet.java
new file mode 100644
index 0000000000..d00e7db74a
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/gwt/client/WidgetSet.java
@@ -0,0 +1,26 @@
+package com.itmill.toolkit.demo.colorpicker.gwt.client;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Widget;
+import com.itmill.toolkit.demo.colorpicker.gwt.client.ui.ClientColorPicker;
+import com.itmill.toolkit.terminal.gwt.client.DefaultWidgetSet;
+import com.itmill.toolkit.terminal.gwt.client.UIDL;
+
+public class WidgetSet extends DefaultWidgetSet {
+ public Widget createWidget(UIDL uidl) {
+ String className = resolveWidgetTypeName(uidl);
+ if ("com.itmill.toolkit.demo.colorpicker.gwt.client.ui.ClientColorPicker"
+ .equals(className))
+ return new ClientColorPicker();
+
+ return super.createWidget(uidl);
+ }
+
+ protected String resolveWidgetTypeName(UIDL uidl) {
+ String tag = uidl.getTag();
+ if ("colorpicker".equals(tag))
+ return "com.itmill.toolkit.demo.colorpicker.gwt.client.ui.ClientColorPicker";
+
+ return super.resolveWidgetTypeName(uidl);
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/ClientColorPicker.java b/src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/ClientColorPicker.java
new file mode 100644
index 0000000000..8d82f3ed8b
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/ClientColorPicker.java
@@ -0,0 +1,74 @@
+package com.itmill.toolkit.demo.colorpicker.gwt.client.ui;
+
+import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
+import com.itmill.toolkit.terminal.gwt.client.Paintable;
+import com.itmill.toolkit.terminal.gwt.client.UIDL;
+
+public class ClientColorPicker extends OriginalColorPicker implements Paintable {
+
+ /** Set the CSS class name to allow styling. */
+ public static final String CLASSNAME = "example-colorpicker";
+
+ /** Component identifier in UIDL communications. */
+ String uidl_id;
+
+ /** Reference to the server connection object. */
+ ApplicationConnection client;
+
+ /**
+ * The constructor should first call super() to initialize the component
+ * and then handle any initialization relevant to IT Mill Toolkit.
+ **/
+ public ClientColorPicker() {
+ // The superclass has a lot of relevant initialization
+ super();
+
+ // This method call of the Paintable interface sets the component
+ // style name in DOM tree
+ setStyleName(CLASSNAME);
+ }
+
+ /**
+ * This method must be implemented to update the client-side component from
+ * UIDL data received from server.
+ *
+ * This method is called when the page is loaded for the first time, and
+ * every time UI changes in the component are received from the server.
+ */
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
+ // This call should be made first. Ensure correct implementation,
+ // but don't let container manage caption etc.
+ if (client.updateComponent(this, uidl, false))
+ return;
+
+ // Save reference to server connection object to be able to send
+ // user interaction later
+ this.client = client;
+
+ // Save the UIDL identifier for the component
+ uidl_id = uidl.getId();
+
+ // Get value received from server and actualize it in the GWT component
+ setColor(uidl.getStringVariable("colorname"));
+ }
+
+ /** Override the method to communicate the new value to server. */
+ public void setColor(String newcolor) {
+ // Ignore if no change
+ if (newcolor.equals(currentcolor.getText()))
+ return;
+
+ // Let the original implementation to do whatever it needs to do
+ super.setColor(newcolor);
+
+ // Updating the state to the server can not be done before
+ // the server connection is known, i.e., before updateFromUIDL()
+ // has been called.
+ if (uidl_id == null || client == null)
+ return;
+
+ // Communicate the user interaction parameters to server. This call will
+ // initiate an AJAX request to the server.
+ client.updateVariable(uidl_id, "colorname", newcolor, true);
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/OriginalColorPicker.java b/src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/OriginalColorPicker.java
new file mode 100644
index 0000000000..0c110a86b2
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/gwt/client/ui/OriginalColorPicker.java
@@ -0,0 +1,88 @@
+package com.itmill.toolkit.demo.colorpicker.gwt.client.ui;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.ui.*;
+
+/**
+ * A regular GWT component without integration with IT Mill Toolkit.
+ **/
+public class OriginalColorPicker extends Composite implements ClickListener {
+
+ /** Currently selected color name to give client-side feedback to the user. */
+ protected Label currentcolor = new Label();
+
+ public OriginalColorPicker() {
+ // Create a 4x4 grid of buttons with names for 16 colors
+ Grid grid = new Grid(4,4);
+ String[] colors = new String[] {"aqua", "black", "blue", "fuchsia",
+ "gray", "green", "lime", "maroon", "navy", "olive",
+ "purple", "red", "silver", "teal", "white", "yellow"};
+ int colornum = 0;
+ for (int i=0; i<4; i++)
+ for (int j=0; j<4; j++, colornum++) {
+ // Create a button for each color
+ Button button = new Button(colors[colornum]);
+ button.addClickListener(this);
+
+ // Set the button colors
+ if ("black navy maroon blue purple".indexOf(colors[colornum]) != -1)
+ DOM.setStyleAttribute(button.getElement(), "color", "white");
+ DOM.setStyleAttribute(button.getElement(), "background", colors[colornum]);
+
+ // These style settings could be left for CSS
+ DOM.setStyleAttribute(button.getElement(), "width", "60px");
+ DOM.setStyleAttribute(button.getElement(), "height", "60px");
+ DOM.setStyleAttribute(button.getElement(), "border", "none");
+ DOM.setStyleAttribute(button.getElement(), "padding", "0px");
+
+ // Put the button in the Grid layout
+ grid.setWidget(i, j, button);
+ }
+
+ // Create a panel with the color grid and currently selected color indicator
+ HorizontalPanel panel = new HorizontalPanel();
+ panel.add(grid);
+ panel.add(currentcolor);
+
+ // Format the current color feedback box. These could be set in the CSS
+ // as well. We need to obtain the DOM element for the current color
+ // label. This assumes that the <td> element of the HorizontalPanel is
+ // the parent of the label element.
+ Element cell = DOM.getParent(currentcolor.getElement());
+ DOM.setStyleAttribute(cell, "width", "240px");
+ DOM.setStyleAttribute(cell, "textAlign", "center");
+ DOM.setStyleAttribute(cell, "verticalAlign", "middle");
+
+ // Set initial color. This will be overridden with the value read from server.
+ setColor("white");
+
+ // Composite GWT widgets must call initWidget().
+ initWidget(panel);
+ }
+
+ /** Handles click on a color button. */
+ public void onClick(Widget sender) {
+ // Use the button label as the color name to set
+ setColor(((Button) sender).getText());
+ }
+
+ /** Sets the currently selected color. */
+ public void setColor(String newcolor) {
+ // Give client-side feedback by changing the color name in the label
+ currentcolor.setText(newcolor);
+
+ // Obtain the DOM elements. This assumes that the <td> element
+ // of the HorizontalPanel is the parent of the label element.
+ Element nameelement = currentcolor.getElement();
+ Element cell = DOM.getParent(nameelement);
+
+ // Give feedback by changing the background color
+ DOM.setStyleAttribute(cell, "background", newcolor);
+ DOM.setStyleAttribute(nameelement, "background", newcolor);
+ if ("black navy maroon blue purple".indexOf(newcolor) != -1)
+ DOM.setStyleAttribute(nameelement, "color", "white");
+ else
+ DOM.setStyleAttribute(nameelement, "color", "black");
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/colorpicker/gwt/public/colorpicker/styles.css b/src/com/itmill/toolkit/demo/colorpicker/gwt/public/colorpicker/styles.css
new file mode 100644
index 0000000000..2737c77864
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/colorpicker/gwt/public/colorpicker/styles.css
@@ -0,0 +1,13 @@
+td.example-colorpicker {
+ height: 100px;
+ width: 100px;
+ border: none;
+ padding: 0px;
+}
+
+table.example-colorpicker {
+ height: 100px;
+ width: 100px;
+ border: none;
+ padding: 0px;
+}