/* * 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.MeterModel; import org.csstudio.sds.components.ui.internal.figures.RefreshableMeterFigure; import org.csstudio.sds.ui.editparts.AbstractWidgetEditPart; import org.csstudio.sds.ui.editparts.IWidgetPropertyChangeHandler; import org.eclipse.draw2d.IFigure; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; /** * The controller. * * @author jbercic * */ public final class MeterEditPart extends AbstractWidgetEditPart { /** * Returns the casted model. This is just for convenience. * * @return the casted {@link MeterModel} */ @Override protected MeterModel getCastedModel() { return (MeterModel) getModel(); } /** * {@inheritDoc} */ @Override protected IFigure doCreateFigure() { MeterModel model = getCastedModel(); // create AND initialize the view properly final RefreshableMeterFigure figure = new RefreshableMeterFigure(); figure.setAngle(model.getAngle()); figure.setAliases(model.getAliases()); figure.setInnerAngle(model.getInnerAngle()); figure.setNeedleColor(getModelColor(MeterModel.PROP_NEEDLECOLOR)); figure.setVisibleRadius(model.getVisibleRadius()); figure.setScaleRadius(model.getScaleRadius()); figure.setMinorStep(model.getMinorStep()); figure.setMajorStep(model.getMajorStep()); figure.setMinValue(model.getMinValue()); figure.setMaxValue(model.getMaxValue()); figure.setValue(model.getValue()); figure.setScaleColor(getModelColor(MeterModel.PROP_SCALECOLOR)); figure.setScaleWidth(model.getScaleWidth()); figure.setTextRadius(model.getTextRadius()); figure.setTransparent(model.getTransparent()); figure.setMColor(getModelColor(MeterModel.PROP_MCOLOR)); figure.setLOLOColor(getModelColor(MeterModel.PROP_LOLOCOLOR)); figure.setLOColor(getModelColor(MeterModel.PROP_LOCOLOR)); figure.setHIColor(getModelColor(MeterModel.PROP_HICOLOR)); figure.setHIHIColor(getModelColor(MeterModel.PROP_HIHICOLOR)); figure.setMBound(model.getMBound()); figure.setLOLOBound(model.getLOLOBound()); figure.setLOBound(model.getLOBound()); figure.setHIBound(model.getHIBound()); figure.setHIHIBound(model.getHIHIBound()); figure.setValuesFont(getModelFont(MeterModel.PROP_VALFONT)); figure.setChannelFont(getModelFont(MeterModel.PROP_CHANFONT)); figure.setDecimalPlaces(model.getPrecision()); figure.setChannelName(model.getPrimaryPV()); return figure; } /** * Registers color property change handlers. */ protected void registerColorPropertyHandlers() { // needle setPropertyChangeHandler(MeterModel.PROP_NEEDLECOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setNeedleColor(color); } }); // scale setPropertyChangeHandler(MeterModel.PROP_SCALECOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setScaleColor(color); } }); //M area setPropertyChangeHandler(MeterModel.PROP_MCOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setMColor(color); } }); //LOLO area setPropertyChangeHandler(MeterModel.PROP_LOLOCOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setLOLOColor(color); } }); //LO area setPropertyChangeHandler(MeterModel.PROP_LOCOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setLOColor(color); } }); //HI area setPropertyChangeHandler(MeterModel.PROP_HICOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setHIColor(color); } }); //HIHI area setPropertyChangeHandler(MeterModel.PROP_HIHICOLOR, new ColorChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Color color) { figure.setHIHIColor(color); } }); // precision IWidgetPropertyChangeHandler precisionHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { RefreshableMeterFigure meter = (RefreshableMeterFigure) refreshableFigure; meter.setDecimalPlaces((Integer) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_PRECISION, precisionHandler); // precision IWidgetPropertyChangeHandler channelHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { RefreshableMeterFigure meter = (RefreshableMeterFigure) refreshableFigure; meter.setChannelName((String) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_PRIMARY_PV, channelHandler); } /** * Registers boundary property change handlers for the five levels. */ protected void registerBoundaryPropertyHandlers() { //M IWidgetPropertyChangeHandler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setMBound((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_MBOUND, handle); //LOLO handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setLOLOBound((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_LOLOBOUND, handle); //LO handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setLOBound((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_LOBOUND, handle); //HI handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setHIBound((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_HIBOUND, handle); //HIHI handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setHIHIBound((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_HIHIBOUND, handle); } /** * {@inheritDoc} */ @Override protected void registerPropertyChangeHandlers() { // register handlers to deal with resizes IWidgetPropertyChangeHandler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.invalidateBackground(); meterFigure.invalidateNeedle(); return true; } }; setPropertyChangeHandler(MeterModel.PROP_HEIGHT, handle); setPropertyChangeHandler(MeterModel.PROP_WIDTH, handle); // register a handler that deals with updates of the "angle" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setAngle((Integer) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_ANGLE, handle); // register a handler that deals with updates of the "inner angle" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setInnerAngle((Integer) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_INNANGLE, handle); // register a handler that deals with updates of the "visible radius" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setVisibleRadius((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_RADIUS, handle); // register a handler that deals with updates of the "scale radius" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setScaleRadius((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_SCALERADIUS, handle); // register a handler that deals with updates of the "minor step" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setMinorStep((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_MINSTEP, handle); // register a handler that deals with updates of the "major step" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setMajorStep((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_MAJSTEP, handle); // register a handler that deals with updates of the "minimum value" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setMinValue((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_MINVAL, handle); // register a handler that deals with updates of the "maximum value" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setMaxValue((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_MAXVAL, handle); // register a handler that deals with updates of the "value" property handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setValue((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_VALUE, handle); //scale line width change handler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setScaleWidth((Integer) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_SCALEWIDTH, handle); //scale text area radius change handler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setTextRadius((Double) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_TEXTRADIUS, handle); //transparency change handler handle = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.setTransparent((Boolean) newValue); return true; } }; setPropertyChangeHandler(MeterModel.PROP_TRANSPARENT, handle); //values font change handler setPropertyChangeHandler(MeterModel.PROP_VALFONT, new FontChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Font font) { figure.setValuesFont(font); } }); //channel font change handler setPropertyChangeHandler(MeterModel.PROP_CHANFONT, new FontChangeHandler<RefreshableMeterFigure>(){ @Override protected void doHandle(RefreshableMeterFigure figure, Font font) { figure.setChannelFont(font); } }); IWidgetPropertyChangeHandler borderHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) { RefreshableMeterFigure meterFigure = (RefreshableMeterFigure) figure; meterFigure.refresh(); return true; } }; setPropertyChangeHandler(MeterModel.PROP_BORDER_WIDTH, borderHandler); setPropertyChangeHandler(MeterModel.PROP_BORDER_STYLE, borderHandler); registerColorPropertyHandlers(); registerBoundaryPropertyHandlers(); } }