/* * Copyright (c) 2008 Stiftung Deutsches Elektronen-Synchrotron, * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. * * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM */ package org.csstudio.sds.components.ui.internal.editparts; import org.csstudio.sds.components.model.ImageModel; import org.csstudio.sds.components.ui.internal.figures.RefreshableImageFigure; import org.csstudio.sds.ui.editparts.AbstractWidgetEditPart; import org.csstudio.sds.ui.editparts.IWidgetPropertyChangeHandler; import org.eclipse.core.runtime.IPath; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Dimension; /** * EditPart controller for the image widget. * * @author jbercic, Xihui Chen * */ public final class ImageEditPart extends AbstractWidgetEditPart { /** * Returns the casted model. This is just for convenience. * * @return the casted {@link ImageModel} */ @Override protected ImageModel getCastedModel() { return (ImageModel) getModel(); } /** * {@inheritDoc} */ @Override protected IFigure doCreateFigure() { ImageModel model = getCastedModel(); // create AND initialize the view properly final RefreshableImageFigure figure = new RefreshableImageFigure(); figure.setFilePath(model.getFilename()); figure.setTopCrop(model.getTopCrop()); figure.setBottomCrop(model.getBottomCrop()); figure.setLeftCrop(model.getLeftCrop()); figure.setRightCrop(model.getRightCrop()); figure.setStretch(model.getStretch()); figure.setAutoSize(model.isAutoSize()); figure.setStopAnimation(model.isStopAnimation()); return figure; } @Override public void activate() { super.activate(); if(((ImageModel)getModel()).isVisible() && !((ImageModel)getModel()).isStopAnimation()) ((RefreshableImageFigure) getFigure()).startAnimation(); } /** * Register change handlers for the four crop properties. */ protected void registerCropPropertyHandlers() { // top IWidgetPropertyChangeHandler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setTopCrop((Integer)newValue); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_TOPCROP, handle); // bottom handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setBottomCrop((Integer)newValue); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_BOTTOMCROP, handle); // left handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setLeftCrop((Integer)newValue); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_LEFTCROP, handle); // right handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setRightCrop((Integer)newValue); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_RIGHTCROP, handle); } /** * {@inheritDoc} */ @Override protected void registerPropertyChangeHandlers() { // changes to the filename property IWidgetPropertyChangeHandler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setFilePath((IPath)newValue); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_FILENAME, handle); // changes to the stretch property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setStretch((Boolean)newValue); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_STRETCH, handle); // changes to the autosize property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setAutoSize((Boolean)newValue); ImageModel model = (ImageModel)getModel(); Dimension d = imageFigure.getAutoSizedDimension(); if((Boolean) newValue && !model.getStretch() && d != null) model.setSize(d.width, d.height); return true; } }; setPropertyChangeHandler(ImageModel.PROP_AUTOSIZE, handle); // changes to the stop animation property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.setStopAnimation((Boolean)newValue); return true; } }; setPropertyChangeHandler(ImageModel.PROP_STOP_ANIMATION, handle); // changes to the border width property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.resizeImage(); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_BORDER_WIDTH, handle); setPropertyChangeHandler(ImageModel.PROP_BORDER_STYLE, handle); //size change handlers - so we can stretch accordingly handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableImageFigure imageFigure = (RefreshableImageFigure) figure; imageFigure.resizeImage(); autoSizeWidget(imageFigure); return true; } }; setPropertyChangeHandler(ImageModel.PROP_HEIGHT, handle); setPropertyChangeHandler(ImageModel.PROP_WIDTH, handle); registerCropPropertyHandlers(); } @Override public void deactivate() { super.deactivate(); ((RefreshableImageFigure) getFigure()).stopAnimation(); ((RefreshableImageFigure) getFigure()).dispose(); } private void autoSizeWidget(RefreshableImageFigure imageFigure) { ImageModel model = (ImageModel)getModel(); imageFigure.setAutoSize(model.isAutoSize()); Dimension d = imageFigure.getAutoSizedDimension(); if(model.isAutoSize() && !model.getStretch() && d != null) model.setSize(d.width, d.height); } }