use of org.diirt.vtype.VType in project org.csstudio.display.builder by kasemir.
the class PVUtil method createPV.
/**
* Create a PV.
*
* <p>Ideally, scripts use the PVs of widgets or the script 'input' PVs,
* where the display runtime handles the PV connection.
* In rare cases it might be necessary to create a PV in a script,
* in which case the script <b>must</b> then also release the PV.
*
* @param pv_name Mame of the PV
* @param timeout Connection timeout in milliseconds
* @return PV
* @throws Exception on error
* @see #releasePV(RuntimePV)
*/
public static RuntimePV createPV(final String pv_name, final int timeout_ms) throws Exception {
final CountDownLatch connected = new CountDownLatch(1);
final RuntimePVListener await_connection = new RuntimePVListener() {
@Override
public void valueChanged(final RuntimePV pv, final VType value) {
if (value != null)
connected.countDown();
}
};
final RuntimePV pv = PVFactory.getPV(pv_name);
pv.addListener(await_connection);
try {
if (!connected.await(timeout_ms, TimeUnit.MILLISECONDS)) {
PVFactory.releasePV(pv);
throw new Exception("Failed to connect to '" + pv_name + "' within " + timeout_ms + " ms");
}
} finally {
pv.removeListener(await_connection);
}
return pv;
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class AbstractBoolEditPart method registerCommonPropertyChangeHandlers.
/**
* Registers property change handlers for the properties defined in
* {@link AbstractBoolWidgetModel}. This method is provided for the convenience
* of subclasses, which can call this method in their implementation of
* {@link #registerPropertyChangeHandlers()}.
*/
protected void registerCommonPropertyChangeHandlers() {
// value
IWidgetPropertyChangeHandler handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
if (newValue == null || !(newValue instanceof VType))
return false;
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
switch(VTypeHelper.getBasicDataType((VType) newValue)) {
case SHORT:
figure.setTotalBits(TotalBits.BITS_16);
break;
case INT:
case ENUM:
figure.setTotalBits(TotalBits.BITS_32);
break;
default:
break;
}
updateFromValue((VType) newValue, figure);
return true;
}
};
setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVVALUE, handler);
// bit
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
if (getWidgetModel().getDataType() != 0)
return false;
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setBit((Integer) newValue);
updateFromValue(getPVValue(AbstractPVWidgetModel.PROP_PVNAME), figure);
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_BIT, handler);
// data type
final IWidgetPropertyChangeHandler dataTypeHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
if ((Integer) newValue == 0)
figure.setBit(getWidgetModel().getBit());
else
figure.setBit(-1);
updateFromValue(getPVValue(AbstractPVWidgetModel.PROP_PVNAME), figure);
updatePropSheet((Integer) newValue);
return true;
}
};
getWidgetModel().getProperty(AbstractBoolWidgetModel.PROP_DATA_TYPE).addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
dataTypeHandler.handleChange(evt.getOldValue(), evt.getNewValue(), getFigure());
}
});
// on state
handler = new IWidgetPropertyChangeHandler() {
public boolean handleChange(Object oldValue, Object newValue, IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
updateFromValue(getPVValue(AbstractPVWidgetModel.PROP_PVNAME), figure);
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_ON_STATE, handler);
// show bool label
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setShowBooleanLabel((Boolean) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_SHOW_BOOL_LABEL, handler);
// bool label position
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setBoolLabelPosition(BoolLabelPosition.values()[(Integer) newValue]);
return false;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_BOOL_LABEL_POS, handler);
// on label
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setOnLabel((String) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_ON_LABEL, handler);
// off label
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setOffLabel((String) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_OFF_LABEL, handler);
// on color
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setOnColor(((OPIColor) newValue).getSWTColor());
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_ON_COLOR, handler);
// off color
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
AbstractBoolFigure figure = (AbstractBoolFigure) refreshableFigure;
figure.setOffColor(((OPIColor) newValue).getSWTColor());
return true;
}
};
setPropertyChangeHandler(AbstractBoolWidgetModel.PROP_OFF_COLOR, handler);
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class AbstractChoiceEditPart method registerPropertyChangeHandlers.
/**
* {@inheritDoc}
*/
@Override
protected void registerPropertyChangeHandlers() {
IWidgetPropertyChangeHandler pvNameHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
registerLoadItemsListener();
return false;
}
};
setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVNAME, pvNameHandler);
// PV_Value
IWidgetPropertyChangeHandler pvhandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
if (newValue != null && newValue instanceof VType) {
String stringValue = VTypeHelper.getString((VType) newValue);
((AbstractChoiceFigure) refreshableFigure).setState(stringValue);
}
return false;
}
};
setPropertyChangeHandler(AbstractChoiceModel.PROP_PVVALUE, pvhandler);
// Items
IWidgetPropertyChangeHandler itemsHandler = new IWidgetPropertyChangeHandler() {
@SuppressWarnings("unchecked")
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
if (newValue != null && newValue instanceof List) {
((AbstractChoiceFigure) refreshableFigure).setStates(((List<String>) newValue));
if (getWidgetModel().isItemsFromPV())
((AbstractChoiceFigure) refreshableFigure).setState(VTypeHelper.getString(getPVValue(AbstractPVWidgetModel.PROP_PVNAME)));
}
return true;
}
};
setPropertyChangeHandler(AbstractChoiceModel.PROP_ITEMS, itemsHandler);
IWidgetPropertyChangeHandler selectedColorHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
((AbstractChoiceFigure) figure).setSelectedColor(((OPIColor) newValue).getSWTColor());
return false;
}
};
setPropertyChangeHandler(ChoiceButtonModel.PROP_SELECTED_COLOR, selectedColorHandler);
IWidgetPropertyChangeHandler horizontalHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
((AbstractChoiceFigure) figure).setHorizontal((Boolean) newValue);
return true;
}
};
setPropertyChangeHandler(AbstractChoiceModel.PROP_HORIZONTAL, horizontalHandler);
final IWidgetPropertyChangeHandler handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
if (!(Boolean) newValue)
((AbstractChoiceFigure) refreshableFigure).setStates((getWidgetModel().getItems()));
updatePropSheet((Boolean) newValue);
return false;
}
};
getWidgetModel().getProperty(AbstractChoiceModel.PROP_ITEMS_FROM_PV).addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
handler.handleChange(evt.getOldValue(), evt.getNewValue(), getFigure());
}
});
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class AbstractChoiceEditPart method registerLoadItemsListener.
/**
*/
private void registerLoadItemsListener() {
// load items from PV
if (getExecutionMode() == ExecutionMode.RUN_MODE) {
if (getWidgetModel().isItemsFromPV()) {
IPV pv = getPV(AbstractPVWidgetModel.PROP_PVNAME);
if (pv != null) {
if (loadItemsFromPVListener == null)
loadItemsFromPVListener = new IPVListener.Stub() {
@Override
public void valueChanged(IPV pv) {
VType value = pv.getValue();
if (value != null && value instanceof VEnum) {
List<String> new_meta = ((VEnum) value).getLabels();
getWidgetModel().setPropertyValue(AbstractChoiceModel.PROP_ITEMS, new_meta);
}
}
};
pv.addListener(loadItemsFromPVListener);
}
}
}
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class AbstractMarkedWidgetEditPart method registerLoadLimitsListener.
/**
*/
private void registerLoadLimitsListener() {
if (getExecutionMode() == ExecutionMode.RUN_MODE) {
final AbstractMarkedWidgetModel model = (AbstractMarkedWidgetModel) getModel();
if (model.isLimitsFromPV()) {
IPV pv = getPV(AbstractPVWidgetModel.PROP_PVNAME);
if (pv != null) {
if (pvLoadLimitsListener == null)
pvLoadLimitsListener = new IPVListener.Stub() {
@Override
public void valueChanged(IPV pv) {
VType value = pv.getValue();
if (value != null && VTypeHelper.getDisplayInfo(value) != null) {
Display new_meta = VTypeHelper.getDisplayInfo(value);
if (meta == null || !meta.equals(new_meta)) {
meta = new_meta;
Double upperLimit;
Double lowerLimit;
if (model.isControlWidget()) {
// DRVH / DRVL
upperLimit = meta.getUpperCtrlLimit();
lowerLimit = meta.getLowerCtrlLimit();
} else {
// HOPR / LOPR
upperLimit = meta.getUpperDisplayLimit();
lowerLimit = meta.getLowerDisplayLimit();
}
if (!Double.isNaN(upperLimit)) {
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_MAX, upperLimit);
}
if (!Double.isNaN(lowerLimit)) {
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_MIN, lowerLimit);
}
if (Double.isNaN(meta.getUpperWarningLimit()))
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_HI, false);
else {
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_HI, true);
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_HI_LEVEL, meta.getUpperWarningLimit());
}
if (Double.isNaN(meta.getUpperAlarmLimit()))
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_HIHI, false);
else {
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_HIHI, true);
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_HIHI_LEVEL, meta.getUpperAlarmLimit());
}
if (Double.isNaN(meta.getLowerWarningLimit()))
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_LO, false);
else {
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_LO, true);
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_LO_LEVEL, meta.getLowerWarningLimit());
}
if (Double.isNaN(meta.getLowerAlarmLimit()))
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_LOLO, false);
else {
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_SHOW_LOLO, true);
model.setPropertyValue(AbstractMarkedWidgetModel.PROP_LOLO_LEVEL, meta.getLowerAlarmLimit());
}
}
}
}
};
pv.addListener(pvLoadLimitsListener);
}
}
}
}
Aggregations