diff --git a/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.html b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.html
new file mode 100644
index 0000000..9b36b96
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.html
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.java b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.java
new file mode 100644
index 0000000..9b0b48b
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.java
@@ -0,0 +1,47 @@
+package org.gcube.portlets.user.td.unionwizardwidget.client.custom;
+
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.user.client.Event;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.widget.core.client.Component;
+
+/**
+ *
+ * @author "Giancarlo Panichi"
+ * g.panichi@isti.cnr.it
+ *
+ */
+public class IconButton extends Component implements HasClickHandlers {
+
+ private IconButtonAppearance appearance;
+
+ public IconButton() {
+ this((IconButtonAppearance) GWT.create(IconButtonAppearanceDefault.class));
+ }
+
+ public IconButton(IconButtonAppearance appearance) {
+ this.appearance = appearance;
+
+ SafeHtmlBuilder sb = new SafeHtmlBuilder();
+ this.appearance.render(sb);
+
+ setElement(XDOM.create(sb.toSafeHtml()));
+ sinkEvents(Event.ONCLICK);
+ }
+
+ public HandlerRegistration addClickHandler(ClickHandler handler) {
+ return addDomHandler(handler, ClickEvent.getType());
+ }
+
+
+ public void setIcon(ImageResource icon) {
+ appearance.onUpdateIcon(getElement(), icon);
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonAppearance.java b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonAppearance.java
new file mode 100644
index 0000000..15ea2ce
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonAppearance.java
@@ -0,0 +1,16 @@
+package org.gcube.portlets.user.td.unionwizardwidget.client.custom;
+
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.sencha.gxt.core.client.dom.XElement;
+
+/**
+ *
+ * @author "Giancarlo Panichi"
+ * g.panichi@isti.cnr.it
+ *
+ */
+public interface IconButtonAppearance {
+ void render(SafeHtmlBuilder sb);
+ void onUpdateIcon(XElement parent, ImageResource icon);
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonAppearanceDefault.java b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonAppearanceDefault.java
new file mode 100644
index 0000000..e2cbb4f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonAppearanceDefault.java
@@ -0,0 +1,75 @@
+package org.gcube.portlets.user.td.unionwizardwidget.client.custom;
+
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.user.client.ui.Image;
+import com.sencha.gxt.core.client.XTemplates;
+import com.sencha.gxt.core.client.dom.XElement;
+
+/**
+ *
+ * @author "Giancarlo Panichi"
+ * g.panichi@isti.cnr.it
+ *
+ */
+public class IconButtonAppearanceDefault implements IconButtonAppearance {
+
+ public interface Template extends XTemplates {
+ @XTemplate(source = "IconButton.html")
+ SafeHtml template(IconButtonStyle style);
+ }
+
+ public interface IconButtonStyle extends CssResource {
+ @ClassName("iconButton")
+ public String getIconButton();
+
+ @ClassName("iconButtonImage")
+ public String getIconButtonImage();
+
+ @ClassName("iconButtonRef")
+ public String getIconButtonRef();
+
+ }
+
+ private final IconButtonStyle style;
+ private final Template template;
+
+ public interface IconButtonResources extends ClientBundle {
+ public static final IconButtonResources INSTANCE = GWT.create(IconButtonResources.class);
+
+ @Source("IconButtonStyle.css")
+ IconButtonStyle style();
+ }
+
+ public IconButtonAppearanceDefault() {
+ this(IconButtonResources.INSTANCE);
+ }
+
+ public IconButtonAppearanceDefault(IconButtonResources resources) {
+ this.style = resources.style();
+ this.style.ensureInjected();
+
+ this.template = GWT.create(Template.class);
+ }
+
+
+
+ public void onUpdateIcon(XElement parent, ImageResource icon) {
+ XElement element = parent.selectNode("." + style.getIconButtonImage());
+ Image image=new Image(icon);
+ Element img=image.getElement();
+ img.setClassName(style.getIconButtonRef());
+ element.appendChild(img);
+
+ }
+
+ public void render(SafeHtmlBuilder sb) {
+ sb.append(template.template(style));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonStyle.css b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonStyle.css
new file mode 100644
index 0000000..98ef72c
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonStyle.css
@@ -0,0 +1,17 @@
+@CHARSET "UTF-8";
+
+.iconButton {
+ border: none;
+ font-size: 12px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.iconButton .iconButtonImage {
+ vertical-align: center;
+}
+
+.iconButtonRef {
+ vertical-align: center;
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/src/main/resources/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.html b/src/main/resources/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.html
new file mode 100644
index 0000000..9b36b96
--- /dev/null
+++ b/src/main/resources/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButton.html
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/src/main/resources/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonStyle.css b/src/main/resources/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonStyle.css
new file mode 100644
index 0000000..98ef72c
--- /dev/null
+++ b/src/main/resources/org/gcube/portlets/user/td/unionwizardwidget/client/custom/IconButtonStyle.css
@@ -0,0 +1,17 @@
+@CHARSET "UTF-8";
+
+.iconButton {
+ border: none;
+ font-size: 12px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.iconButton .iconButtonImage {
+ vertical-align: center;
+}
+
+.iconButtonRef {
+ vertical-align: center;
+ cursor: pointer;
+}
\ No newline at end of file