package com.airlock.iam.plugin.configeditor.ui.components;

import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.server.Resource;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.shared.ui.ContentMode;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;

public class IconWithLabel extends VerticalLayout {
   private final Embedded icon;
   private final Resource iconImage;
   private final Resource disabledIconImage;
   private final Label caption;

   public IconWithLabel(Resource iconImage, Resource disabledIconImage, String xhtmlCaption, String description, LayoutClickListener layoutClickListener) {
      this.icon = new Embedded(null, iconImage);
      this.iconImage = iconImage;
      this.disabledIconImage = disabledIconImage;
      this.icon.setDescription(description, ContentMode.HTML);
      this.icon.addStyleName("with-hand");
      this.icon.setWidth(24.0F, Unit.PIXELS);
      this.icon.setHeight(24.0F, Unit.PIXELS);
      this.addComponent(this.icon);
      this.setComponentAlignment(this.icon, Alignment.TOP_CENTER);
      this.caption = new Label(xhtmlCaption);
      this.caption.setContentMode(ContentMode.HTML);
      this.addComponent(this.caption);
      this.setComponentAlignment(this.caption, Alignment.BOTTOM_CENTER);
      this.addLayoutClickListener(layoutClickListener);
      this.addStyleName("icon-with-label");
      this.setSpacing(false);
      this.setMargin(false);
   }

   public void setIconImage(Resource iconImage) {
      this.icon.setSource(iconImage);
   }

   public Resource getIconImage() {
      return this.icon.getSource();
   }

   public void setIconDescription(String description) {
      this.icon.setDescription(description, ContentMode.HTML);
   }

   public void setVisible(boolean visible) {
      this.icon.setVisible(visible);
      this.caption.setVisible(visible);
      super.setVisible(visible);
   }

   public void enable() {
      this.setEnabled(true);
      this.icon.setSource(this.iconImage);
   }

   public void disable() {
      this.setEnabled(false);
      this.icon.setSource(this.disabledIconImage);
   }
}
