aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/ui/renderer/ClickableRenderer.java
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2014-12-11 13:42:06 +0200
committerVaadin Code Review <review@vaadin.com>2014-12-11 12:37:20 +0000
commit66e07930b9749046e65434eb7d5dc8125a1f761c (patch)
tree6cafdd48a660bc347955d7b22e3a2ab2506a9587 /server/src/com/vaadin/ui/renderer/ClickableRenderer.java
parentea0be1f8dcff35ea8c652d69cd286d952c09ae5a (diff)
downloadvaadin-framework-66e07930b9749046e65434eb7d5dc8125a1f761c.tar.gz
vaadin-framework-66e07930b9749046e65434eb7d5dc8125a1f761c.zip
Move Renderers to com.vaadin.ui.renderer package (#13334)
Change-Id: I80370f05cfa8123d64728abd5ede9642931e0cd8
Diffstat (limited to 'server/src/com/vaadin/ui/renderer/ClickableRenderer.java')
-rw-r--r--server/src/com/vaadin/ui/renderer/ClickableRenderer.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/renderer/ClickableRenderer.java b/server/src/com/vaadin/ui/renderer/ClickableRenderer.java
new file mode 100644
index 0000000000..0d745ab29e
--- /dev/null
+++ b/server/src/com/vaadin/ui/renderer/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.renderer;
+
+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.Grid;
+import com.vaadin.ui.Grid.AbstractRenderer;
+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);
+ }
+}