package org.csstudio.sds.components.ui.internal.editparts; import org.csstudio.sds.components.model.ScaledSliderModel; import org.csstudio.sds.components.ui.internal.figures.ScaledSliderFigure; import org.csstudio.sds.ui.editparts.ExecutionMode; import org.csstudio.sds.ui.editparts.IWidgetPropertyChangeHandler; import org.eclipse.draw2d.IFigure; import org.eclipse.swt.graphics.Color; /** * EditPart controller for the scaled slider widget. The controller mediates * between {@link ScaledSliderModel} and {@link ScaledSliderFigure}. * * @author Xihui Chen * */ public final class ScaledSliderEditPart extends AbstractMarkedWidgetEditPart { /** * {@inheritDoc} */ @Override protected IFigure doCreateFigure() { final ScaledSliderModel model = (ScaledSliderModel) getWidgetModel(); ScaledSliderFigure slider = new ScaledSliderFigure(); initializeCommonFigureProperties(slider, model); slider.setFillColor(getModelColor(ScaledSliderModel.PROP_FILL_COLOR)); slider.setEffect3D(model.isEffect3D()); slider.setFillBackgroundColor(getModelColor(ScaledSliderModel.PROP_FILLBACKGROUND_COLOR)); slider.setThumbColor(getModelColor(ScaledSliderModel.PROP_THUMB_COLOR)); slider.setHorizontal(model.isHorizontal()); slider.setIncrement(model.getIncrement()); slider.addSliderListener(new ScaledSliderFigure.IScaledSliderListener() { @Override public void sliderValueChanged(final double newValue) { if (getExecutionMode() == ExecutionMode.RUN_MODE) { model.setPropertyManualValue(ScaledSliderModel.PROP_VALUE, newValue); } } }); return slider; } /** * {@inheritDoc} */ @Override protected void registerPropertyChangeHandlers() { registerCommonPropertyChangeHandlers(); // fillColor setPropertyChangeHandler(ScaledSliderModel.PROP_FILL_COLOR, new ColorChangeHandler<ScaledSliderFigure>() { @Override protected void doHandle(ScaledSliderFigure figure, Color color) { figure.setFillColor(color); } }); // fillBackgroundColor setPropertyChangeHandler(ScaledSliderModel.PROP_FILLBACKGROUND_COLOR, new ColorChangeHandler<ScaledSliderFigure>() { @Override protected void doHandle(ScaledSliderFigure figure, Color color) { figure.setFillBackgroundColor(color); } }); // thumbColor setPropertyChangeHandler(ScaledSliderModel.PROP_THUMB_COLOR, new ColorChangeHandler<ScaledSliderFigure>() { @Override protected void doHandle(ScaledSliderFigure figure, Color color) { figure.setThumbColor(color); } }); // effect 3D IWidgetPropertyChangeHandler effect3DHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { ScaledSliderFigure slider = (ScaledSliderFigure) refreshableFigure; slider.setEffect3D((Boolean) newValue); return true; } }; setPropertyChangeHandler(ScaledSliderModel.PROP_EFFECT3D, effect3DHandler); // horizontal IWidgetPropertyChangeHandler horizontalHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { ScaledSliderFigure slider = (ScaledSliderFigure) refreshableFigure; slider.setHorizontal((Boolean) newValue); ScaledSliderModel model = (ScaledSliderModel) getModel(); if ((Boolean) newValue) // from vertical to horizontal model.setLocation(model.getX() - model.getHeight() / 2 + model.getWidth() / 2, model.getY() + model.getHeight() / 2 - model.getWidth() / 2); else // from horizontal to vertical model.setLocation(model.getX() + model.getWidth() / 2 - model.getHeight() / 2, model.getY() - model.getWidth() / 2 + model.getHeight() / 2); model.setSize(model.getHeight(), model.getWidth()); return true; } }; setPropertyChangeHandler(ScaledSliderModel.PROP_HORIZONTAL, horizontalHandler); // enabled. WidgetBaseEditPart will force the widget as disabled in edit // model, // which is not the case for the scaled slider IWidgetPropertyChangeHandler enableHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { ScaledSliderFigure slider = (ScaledSliderFigure) refreshableFigure; // slider.setEnabled((Boolean) newValue); // 2009-07-21 KM: Changed to mkae the ScaledSlider only editable // when the user has the permission for it slider.setEnabled(getWidgetModel().isAccesible()); return true; } }; setPropertyChangeHandler(ScaledSliderModel.PROP_ENABLED, enableHandler); IWidgetPropertyChangeHandler incrementHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { ScaledSliderFigure slider = (ScaledSliderFigure) refreshableFigure; slider.setIncrement((Double) newValue); return true; } }; setPropertyChangeHandler(ScaledSliderModel.PROP_INCREMENT, incrementHandler); } }