package org.csstudio.sds.components.ui.internal.editparts; import org.csstudio.sds.components.model.KnobModel; import org.csstudio.sds.components.ui.internal.figures.KnobFigure; 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 knob widget. The controller mediates between * {@link KnobModel} and {@link KnobFigure}. * * @author Xihui Chen * */ public final class KnobEditPart extends AbstractMarkedWidgetEditPart { /** * {@inheritDoc} */ @Override protected IFigure doCreateFigure() { final KnobModel model = (KnobModel) getWidgetModel(); KnobFigure knob = new KnobFigure(); initializeCommonFigureProperties(knob, model); knob.setBulbColor(getModelColor(KnobModel.PROP_KNOB_COLOR)); knob.setEffect3D(model.isEffect3D()); knob.setThumbColor(getModelColor(KnobModel.PROP_THUMB_COLOR)); knob.setValueLabelVisibility(model.isShowValueLabel()); knob.setGradient(model.isRampGradient()); knob.setIncrement(model.getIncrement()); knob.addKnobListener(new KnobFigure.IKnobListener() { @Override public void knobValueChanged(final double newValue) { if (getExecutionMode() == ExecutionMode.RUN_MODE) { model.setPropertyManualValue(KnobModel.PROP_VALUE, newValue); } } }); return knob; } /** * {@inheritDoc} */ @Override protected void registerPropertyChangeHandlers() { registerCommonPropertyChangeHandlers(); //knob color setPropertyChangeHandler(KnobModel.PROP_KNOB_COLOR, new ColorChangeHandler<KnobFigure>(){ @Override protected void doHandle(KnobFigure figure, Color color) { figure.setBulbColor(color); } }); //thumbColor setPropertyChangeHandler(KnobModel.PROP_THUMB_COLOR, new ColorChangeHandler<KnobFigure>(){ @Override protected void doHandle(KnobFigure 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) { KnobFigure knob = (KnobFigure) refreshableFigure; knob.setEffect3D((Boolean) newValue); return true; } }; setPropertyChangeHandler(KnobModel.PROP_EFFECT3D, effect3DHandler); //show value label IWidgetPropertyChangeHandler valueLabelHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { KnobFigure knob = (KnobFigure) refreshableFigure; knob.setValueLabelVisibility((Boolean) newValue); return true; } }; setPropertyChangeHandler(KnobModel.PROP_SHOW_VALUE_LABEL, valueLabelHandler); //Ramp gradient IWidgetPropertyChangeHandler gradientHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { KnobFigure knob = (KnobFigure) refreshableFigure; knob.setGradient((Boolean) newValue); return true; } }; setPropertyChangeHandler(KnobModel.PROP_RAMP_GRADIENT, gradientHandler); //enabled. WidgetBaseEditPart will force the widget as disabled in edit model, //which is not the case for the knob IWidgetPropertyChangeHandler enableHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { KnobFigure knob = (KnobFigure) refreshableFigure; // knob.setEnabled((Boolean) newValue); // 2009-07-21 KM: Changed to mkae the ScaledSlider only editable when the user has the permission for it knob.setEnabled(getWidgetModel().isAccesible()); return true; } }; setPropertyChangeHandler(KnobModel.PROP_ENABLED, enableHandler); //increment IWidgetPropertyChangeHandler incrementHandler = new IWidgetPropertyChangeHandler() { @Override public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) { KnobFigure knob = (KnobFigure) refreshableFigure; knob.setIncrement((Double)newValue); return true; } }; setPropertyChangeHandler(KnobModel.PROP_INCREMENT, incrementHandler); } }