summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJohannes Dahlström <johannesd@vaadin.com>2014-11-05 15:56:58 +0200
committerVaadin Code Review <review@vaadin.com>2014-11-13 14:21:09 +0000
commit1ac8b6bff007d997bf2cfc69954e69d8fa65e119 (patch)
tree58485a25a59988bbe54638bdf6c3944b3b0c46d1 /server
parenteffe4927119eed370bb7061300123877588c5432 (diff)
downloadvaadin-framework-1ac8b6bff007d997bf2cfc69954e69d8fa65e119.tar.gz
vaadin-framework-1ac8b6bff007d997bf2cfc69954e69d8fa65e119.zip
Make ImageRenderers emit click events (#13334)
Change-Id: I1f98409e9787e1057ffaeebbe37427042a1e3233
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/ui/components/grid/renderers/ButtonRenderer.java92
-rw-r--r--server/src/com/vaadin/ui/components/grid/renderers/ClickableRenderer.java121
-rw-r--r--server/src/com/vaadin/ui/components/grid/renderers/ImageRenderer.java14
3 files changed, 137 insertions, 90 deletions
diff --git a/server/src/com/vaadin/ui/components/grid/renderers/ButtonRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/ButtonRenderer.java
index de63449f81..dece41c7ab 100644
--- a/server/src/com/vaadin/ui/components/grid/renderers/ButtonRenderer.java
+++ b/server/src/com/vaadin/ui/components/grid/renderers/ButtonRenderer.java
@@ -15,16 +15,6 @@
*/
package com.vaadin.ui.components.grid.renderers;
-import java.lang.reflect.Method;
-
-import com.vaadin.event.ConnectorEventListener;
-import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.shared.MouseEventDetails;
-import com.vaadin.shared.ui.grid.renderers.RendererClickRpc;
-import com.vaadin.ui.components.grid.AbstractRenderer;
-import com.vaadin.ui.components.grid.Grid;
-import com.vaadin.util.ReflectTools;
-
/**
* A Renderer that displays a button with a textual caption. The value of the
* corresponding property is used as the caption. Click listeners can be added
@@ -33,97 +23,23 @@ import com.vaadin.util.ReflectTools;
* @since
* @author Vaadin Ltd
*/
-public class ButtonRenderer extends AbstractRenderer<String> {
-
- /**
- * An interface for listening to {@link RendererClickEvent renderer click
- * events}.
- *
- * @see {@link ButtonRenderer#addClickListener(RendererClickListener)}
- */
- public interface RendererClickListener extends ConnectorEventListener {
-
- static final Method CLICK_METHOD = ReflectTools.findMethod(
- RendererClickListener.class, "click", RendererClickEvent.class);
-
- /**
- * Called when a rendered button is clicked.
- *
- * @param event
- * the event representing the click
- */
- void click(RendererClickEvent event);
- }
-
- /**
- * An event fired when a button rendered by a ButtonRenderer is clicked.
- */
- public static class RendererClickEvent extends ClickEvent {
-
- private Object itemId;
-
- protected RendererClickEvent(Grid source, Object itemId,
- MouseEventDetails mouseEventDetails) {
- super(source, mouseEventDetails);
- this.itemId = itemId;
- }
-
- /**
- * Returns the item ID of the row where the click event originated.
- *
- * @return the item ID of the clicked row
- */
- public Object getItemId() {
- return itemId;
- }
- }
+public class ButtonRenderer extends ClickableRenderer<String> {
/**
* Creates a new button renderer.
*/
public ButtonRenderer() {
super(String.class);
- registerRpc(new RendererClickRpc() {
- @Override
- public void click(int row, int column,
- MouseEventDetails mouseDetails) {
-
- Grid grid = (Grid) getParent();
-
- Object itemId = grid.getContainerDatasource().getIdByIndex(row);
-
- fireEvent(new RendererClickEvent(grid, itemId, mouseDetails));
- }
- });
}
/**
* Creates a new button renderer and adds the given click listener to it.
+ *
+ * @param listener
+ * the click listener to register
*/
public ButtonRenderer(RendererClickListener listener) {
this();
addClickListener(listener);
}
-
- /**
- * Adds a click listener to this button renderer. The listener is invoked
- * every time one of the buttons rendered by this renderer is clicked.
- *
- * @param listener
- * the click listener to be added
- */
- public void addClickListener(RendererClickListener listener) {
- addListener(RendererClickEvent.class, listener,
- RendererClickListener.CLICK_METHOD);
- }
-
- /**
- * Removes the given click listener from this renderer.
- *
- * @param listener
- * the click listener to be removed
- */
- public void removeClickListener(RendererClickListener listener) {
- removeListener(RendererClickEvent.class, listener);
- }
}
diff --git a/server/src/com/vaadin/ui/components/grid/renderers/ClickableRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/ClickableRenderer.java
new file mode 100644
index 0000000000..ec2ae7bf67
--- /dev/null
+++ b/server/src/com/vaadin/ui/components/grid/renderers/ClickableRenderer.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.ui.components.grid.renderers;
+
+import java.lang.reflect.Method;
+
+import com.vaadin.event.ConnectorEventListener;
+import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.grid.renderers.RendererClickRpc;
+import com.vaadin.ui.components.grid.AbstractRenderer;
+import com.vaadin.ui.components.grid.Grid;
+import com.vaadin.util.ReflectTools;
+
+/**
+ * An abstract superclass for Renderers that render clickable items. Click
+ * listeners can be added to a renderer to be notified when any of the rendered
+ * items is clicked.
+ *
+ * @param <T>
+ * the type presented by the renderer
+ *
+ * @since
+ * @author Vaadin Ltd
+ */
+public class ClickableRenderer<T> extends AbstractRenderer<T> {
+
+ /**
+ * An interface for listening to {@link RendererClickEvent renderer click
+ * events}.
+ *
+ * @see {@link ButtonRenderer#addClickListener(RendererClickListener)}
+ */
+ public interface RendererClickListener extends ConnectorEventListener {
+
+ static final Method CLICK_METHOD = ReflectTools.findMethod(
+ RendererClickListener.class, "click", RendererClickEvent.class);
+
+ /**
+ * Called when a rendered button is clicked.
+ *
+ * @param event
+ * the event representing the click
+ */
+ void click(RendererClickEvent event);
+ }
+
+ /**
+ * An event fired when a button rendered by a ButtonRenderer is clicked.
+ */
+ public static class RendererClickEvent extends ClickEvent {
+
+ private Object itemId;
+
+ protected RendererClickEvent(Grid source, Object itemId,
+ MouseEventDetails mouseEventDetails) {
+ super(source, mouseEventDetails);
+ this.itemId = itemId;
+ }
+
+ /**
+ * Returns the item ID of the row where the click event originated.
+ *
+ * @return the item ID of the clicked row
+ */
+ public Object getItemId() {
+ return itemId;
+ }
+ }
+
+ protected ClickableRenderer(Class<T> presentationType) {
+ super(presentationType);
+ registerRpc(new RendererClickRpc() {
+ @Override
+ public void click(int row, int column,
+ MouseEventDetails mouseDetails) {
+
+ Grid grid = (Grid) getParent();
+ Object itemId = grid.getContainerDatasource().getIdByIndex(row);
+ // TODO map column index to property ID or send column ID
+ // instead of index from the client
+ fireEvent(new RendererClickEvent(grid, itemId, mouseDetails));
+ }
+ });
+ }
+
+ /**
+ * Adds a click listener to this button renderer. The listener is invoked
+ * every time one of the buttons rendered by this renderer is clicked.
+ *
+ * @param listener
+ * the click listener to be added
+ */
+ public void addClickListener(RendererClickListener listener) {
+ addListener(RendererClickEvent.class, listener,
+ RendererClickListener.CLICK_METHOD);
+ }
+
+ /**
+ * Removes the given click listener from this renderer.
+ *
+ * @param listener
+ * the click listener to be removed
+ */
+ public void removeClickListener(RendererClickListener listener) {
+ removeListener(RendererClickEvent.class, listener);
+ }
+}
diff --git a/server/src/com/vaadin/ui/components/grid/renderers/ImageRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/ImageRenderer.java
index b7134aab01..be57a5ec19 100644
--- a/server/src/com/vaadin/ui/components/grid/renderers/ImageRenderer.java
+++ b/server/src/com/vaadin/ui/components/grid/renderers/ImageRenderer.java
@@ -20,7 +20,6 @@ import com.vaadin.server.Resource;
import com.vaadin.server.ResourceReference;
import com.vaadin.server.ThemeResource;
import com.vaadin.shared.communication.URLReference;
-import com.vaadin.ui.components.grid.AbstractRenderer;
import elemental.json.JsonValue;
@@ -34,7 +33,7 @@ import elemental.json.JsonValue;
* @since
* @author Vaadin Ltd
*/
-public class ImageRenderer extends AbstractRenderer<Resource> {
+public class ImageRenderer extends ClickableRenderer<Resource> {
/**
* Creates a new image renderer.
@@ -43,6 +42,17 @@ public class ImageRenderer extends AbstractRenderer<Resource> {
super(Resource.class);
}
+ /**
+ * Creates a new image renderer and adds the given click listener to it.
+ *
+ * @param listener
+ * the click listener to register
+ */
+ public ImageRenderer(RendererClickListener listener) {
+ this();
+ addClickListener(listener);
+ }
+
@Override
public JsonValue encode(Resource resource) {
if (!(resource instanceof ExternalResource || resource instanceof ThemeResource)) {