package org.csstudio.sds.components.ui.internal.editparts;
import org.csstudio.sds.components.model.AbstractScaledWidgetModel;
import org.csstudio.sds.components.ui.internal.figures.AbstractScaledWidgetFigure;
import org.csstudio.sds.ui.editparts.AbstractBaseEditPart;
import org.csstudio.sds.ui.editparts.AbstractWidgetEditPart;
import org.csstudio.sds.ui.editparts.IWidgetPropertyChangeHandler;
import org.eclipse.draw2d.IFigure;
/**
* Base editPart controller for a widget based on {@link AbstractScaledWidgetModel}.
*
* @author Xihui Chen
*
*/
public abstract class AbstractScaledWidgetEditPart extends AbstractWidgetEditPart {
/**
* Sets those properties on the figure that are defined in the
* {@link AbstractScaledWidgetFigure} base class. This method is provided for the
* convenience of subclasses, which can call this method in their
* implementation of {@link AbstractBaseEditPart#doCreateFigure()}.
*
* @param figure
* the figure.
* @param model
* the model.
*/
protected void initializeCommonFigureProperties(
final AbstractScaledWidgetFigure figure, final AbstractScaledWidgetModel model) {
figure.setRange(model.getMinimum(), model.getMaximum());
figure.setValue(model.getValue());
figure.setMajorTickMarkStepHint(model.getMajorTickStepHint());
figure.setLogScale(model.isLogScaleEnabled());
figure.setShowScale(model.isShowScale());
figure.setShowMinorTicks(model.isShowMinorTicks());
figure.setTransparent(model.isTransparent());
}
/**
* Registers property change handlers for the properties defined in
* {@link AbstractScaledWidgetModel}. This method is provided for the convenience
* of subclasses, which can call this method in their implementation of
* {@link #registerPropertyChangeHandlers()}.
*/
protected void registerCommonPropertyChangeHandlers() {
setValueHandler();
setMinRangeHandler();
setMaxRangeHandler();
setMajorTickMarkStepHintHandler();
setLogScaleHandler();
setShowScaleHandler();
setShowMinorTicksHandler();
setTransparentHandler();
}
/**
*
*/
private void setTransparentHandler() {
IWidgetPropertyChangeHandler transparentHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setTransparent((Boolean) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_TRANSPARENT, transparentHandler);
}
/**
*
*/
private void setShowMinorTicksHandler() {
IWidgetPropertyChangeHandler showMinorTicksHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setShowMinorTicks((Boolean) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_SHOW_MINOR_TICKS, showMinorTicksHandler);
}
/**
*
*/
private void setShowScaleHandler() {
IWidgetPropertyChangeHandler showScaleHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setShowScale((Boolean) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_SHOW_SCALE, showScaleHandler);
}
/**
*
*/
private void setLogScaleHandler() {
IWidgetPropertyChangeHandler logScaleHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setLogScale((Boolean) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_LOG_SCALE, logScaleHandler);
}
/**
*
*/
private void setMajorTickMarkStepHintHandler() {
IWidgetPropertyChangeHandler majorTickHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setMajorTickMarkStepHint((Double) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_MAJOR_TICK_STEP_HINT, majorTickHandler);
}
/**
*
*/
private void setMaxRangeHandler() {
IWidgetPropertyChangeHandler maximumHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setRange(((AbstractScaledWidgetModel)getModel()).getMinimum(), (Double) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_MAX, maximumHandler);
}
/**
*
*/
private void setMinRangeHandler() {
IWidgetPropertyChangeHandler minimumHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setRange((Double) newValue, ((AbstractScaledWidgetModel)getModel()).getMaximum());
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_MIN, minimumHandler);
}
/**
*
*/
private void setValueHandler() {
IWidgetPropertyChangeHandler valueHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue,
final Object newValue,
final IFigure refreshableFigure) {
AbstractScaledWidgetFigure figure = (AbstractScaledWidgetFigure) refreshableFigure;
figure.setValue((Double) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractScaledWidgetModel.PROP_VALUE, valueHandler);
}
}