/*******************************************************************************
* Copyright (c) 2013, 2014 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.rap.rwt.template;
import org.eclipse.rap.json.JsonObject;
import org.eclipse.rap.rwt.internal.util.ParamCheck;
import org.eclipse.rap.rwt.remote.JsonMapping;
import org.eclipse.swt.graphics.Image;
/**
* Defines a region in a template that displays an image.
*
* @since 2.2
*/
public class ImageCell extends Cell<ImageCell> {
/**
* Represents a method used to scale an image.
*/
public static enum ScaleMode {
/**
* The image is displayed in its original size.
*/
NONE,
/**
* The image is scaled to the maximum size that fits into the cell. The aspect ratio is
* preserved.
*/
FIT,
/**
* The image is scaled to the minimum size required to cover the entire cell. The aspect ratio
* is preserved.
*/
FILL,
/**
* The image is scaled to the exact bounds of the cell. The aspect ratio is not preserved.
*/
STRETCH
}
private static final String TYPE_IMAGE = "image";
private static final String PROPERTY_IMAGE = "image";
private static final String PROPERTY_SCALE_MODE = "scaleMode";
private Image image;
private ScaleMode scaleMode;
/**
* Constructs a new image cell and adds it to the given template.
*
* @param template the parent template, must not be <code>null</code>
*/
public ImageCell( Template template ) {
super( template, TYPE_IMAGE );
}
/**
* Sets the image to be displayed in this cell if the <em>bindingIndex</em> is not set.
* This can be used to display a static image.
*
* @param image an image, or <code>null</code> if no image should be displayed
* @return the cell itself, to enable method chaining
*/
public ImageCell setImage( Image image ) {
this.image = image;
return this;
}
Image getImage() {
return image;
}
/**
* Selects the method used for image scaling. The default is </code>ScaleMode.NONE</code>.
*
* @param scaleMode the scale mode to use, must not be <code>null</code>
* @return the cell itself, to enable method chaining
*/
public ImageCell setScaleMode( ScaleMode scaleMode ) {
ParamCheck.notNull( scaleMode, "scaleMode" );
this.scaleMode = scaleMode;
return this;
}
ScaleMode getScaleMode() {
return scaleMode;
}
@Override
protected JsonObject toJson() {
JsonObject json = super.toJson();
if( image != null ) {
json.add( PROPERTY_IMAGE, JsonMapping.toJson( image ) );
}
if( scaleMode != null ) {
json.add( PROPERTY_SCALE_MODE, scaleMode.name() );
}
return json;
}
}