Package com.daikit.daikit4gxt.client.ui.fields

Source Code of com.daikit.daikit4gxt.client.ui.fields.ImageField

/**
* Copyright (C) 2013 DaiKit.com - daikit4gxt module (admin@daikit.com)
*
*         Project home : http://code.daikit.com/daikit4gxt
*
* 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.daikit.daikit4gxt.client.ui.fields;

import com.daikit.commons.shared.utils.DkIdGenerator;
import com.daikit.daikit4gxt.client.log.BaseLogger;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.BorderStyle;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.DOM;
import com.sencha.gxt.widget.core.client.event.TriggerClickEvent;
import com.sencha.gxt.widget.core.client.event.TriggerClickEvent.HasTriggerClickHandlers;
import com.sencha.gxt.widget.core.client.event.TriggerClickEvent.TriggerClickHandler;
import com.sencha.gxt.widget.core.client.form.TriggerField;


public abstract class ImageField extends TriggerField<String> implements HasTriggerClickHandlers
{

  protected BaseLogger log = BaseLogger.getLog(getClass());

  public static final String IMAGE_FIELD_CLASSNAME = "img-field";
  public static final String THUMB_ELEMENT_CLASSNAME = "thumb";

  public static final int DEFAULT_IMAGE_WIDTH = 80;
  public static final int DEFAULT_IMAGE_HEIGHT = 80;

  private Integer imageWidth = null;
  private Integer imageHeight = null;

  private final Element imageElement;

  private final String thumbWrapElementId;

  public ImageField()
  {
    super(new ImageCell());
    this.thumbWrapElementId = DkIdGenerator.generateRandomId(8);
    setElement(DOM.createDiv());
    getElement().setAttribute("role", "presentation");
    final Element divThumbContainerElement = DOM.createDiv();
    final Element divThumbElement = DOM.createDiv();
    imageElement = DOM.createImg();
    getElement().appendChild(divThumbContainerElement);
    divThumbContainerElement.appendChild(divThumbElement);
    divThumbElement.appendChild(imageElement);
    divThumbContainerElement.addClassName(IMAGE_FIELD_CLASSNAME);
    divThumbContainerElement.getStyle().setBorderWidth(1, Unit.PX);
    divThumbContainerElement.getStyle().setBorderStyle(BorderStyle.SOLID);
    divThumbContainerElement.getStyle().setBorderColor("white");
    divThumbElement.addClassName(THUMB_ELEMENT_CLASSNAME);

    addValueChangeHandler(new ValueChangeHandler<String>()
    {
      @Override
      public void onValueChange(final ValueChangeEvent<String> paramValueChangeEvent)
      {
        log.debug("Change value event received. Field value=" + getValue());
        updateImageSrc();
      }
    });
    addTriggerClickHandler(new TriggerClickHandler()
    {
      @Override
      public void onTriggerClick(final TriggerClickEvent event)
      {
        log.debug("On trigger click. Field value=" + getValue());
        onImageClick();
      }
    });
  }

  @Override
  public ImageCell getCell()
  {
    return (ImageCell) super.getCell();
  }

  protected Element getImageEl()
  {
    return getInputEl();
  }

  protected void initialize()
  {
    // nothing done by default
  }

  protected abstract String getEmptyImageSrc();

  protected abstract String getEmptyImageTitle();

  protected abstract String getImageSrc(String imageId);

  protected abstract String getImageTitle();

  protected abstract void onImageClick();

  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
  // GETTERS / SETTERS
  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

  protected void updateImageSrc()
  {
    final String imageId = getValue();
    getImageEl().setAttribute("src", imageId != null ? getImageSrc(imageId) : getEmptyImageSrc());
    addStyleName("x-form-field-wrap"); // TODO voir si ça met pas la classe plusieurs fois.
    getImageEl().setId(getId() + "-img");
    if (getImageHeight() != null)
    {
      getImageEl().setAttribute("height", getImageHeight() + "px");
    }
    if (getImageWidth() != null)
    {
      getImageEl().setAttribute("width", getImageWidth() + "px");
    }
    getImageEl().setAttribute("title", getImageTitle() != null ? getImageTitle() : getEmptyImageTitle());
  }

  public String getThumbWrapElementId()
  {
    return thumbWrapElementId;
  }

  public Integer getImageWidth()
  {
    return imageWidth;
  }

  public void setImageWidth(final Integer imageWidth)
  {
    this.imageWidth = imageWidth;
  }

  public Integer getImageHeight()
  {
    return imageHeight;
  }

  public void setImageHeight(final Integer imageHeight)
  {
    this.imageHeight = imageHeight;
  }
}
TOP

Related Classes of com.daikit.daikit4gxt.client.ui.fields.ImageField

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.