use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class ComboEditPart 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> items = ((VEnum) value).getLabels();
getWidgetModel().setPropertyValue(ComboModel.PROP_ITEMS, items);
}
}
};
pv.addListener(loadItemsFromPVListener);
}
}
}
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class MenuButtonEditPart method registerLoadActionsListener.
private void registerLoadActionsListener() {
if (getExecutionMode() == ExecutionMode.RUN_MODE) {
if (getWidgetModel().isActionsFromPV()) {
IPV pv = getPV(AbstractPVWidgetModel.PROP_PVNAME);
if (pv != null) {
if (loadActionsFromPVListener == null)
loadActionsFromPVListener = 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();
if (meta == null || !meta.equals(new_meta)) {
meta = new_meta;
ActionsInput actionsInput = new ActionsInput();
for (String writeValue : meta) {
WritePVAction action = new WritePVAction();
action.setPropertyValue(WritePVAction.PROP_PVNAME, getWidgetModel().getPVName());
action.setPropertyValue(WritePVAction.PROP_VALUE, writeValue);
action.setPropertyValue(WritePVAction.PROP_DESCRIPTION, writeValue);
actionsInput.getActionsList().add(action);
}
getWidgetModel().setPropertyValue(AbstractWidgetModel.PROP_ACTIONS, actionsInput);
}
}
}
};
pv.addListener(loadActionsFromPVListener);
}
}
}
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class ThumbWheelEditPart method registerLoadLimitsListener.
/**
*/
private void registerLoadLimitsListener() {
if (getExecutionMode() == ExecutionMode.RUN_MODE) {
final ThumbWheelModel model = getWidgetModel();
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();
Display displayInfo = VTypeHelper.getDisplayInfo(value);
if (value != null && displayInfo != null) {
Display new_meta = displayInfo;
if (meta == null || !meta.equals(new_meta)) {
meta = new_meta;
model.setPropertyValue(ThumbWheelModel.PROP_MAX, meta.getUpperDisplayLimit());
model.setPropertyValue(ThumbWheelModel.PROP_MIN, meta.getLowerDisplayLimit());
}
}
}
};
pv.addListener(pvLoadLimitsListener);
}
}
}
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class AbstractBaseEditPart method activate.
@Override
public void activate() {
if (!isActive()) {
super.activate();
initFigure(getFigure());
// add listener to all properties.
for (String id : getWidgetModel().getAllPropertyIDs()) {
AbstractWidgetProperty property = getWidgetModel().getProperty(id);
if (property != null) {
WidgetPropertyChangeListener listener = new WidgetPropertyChangeListener(this, property);
property.addPropertyChangeListener(listener);
propertyListenerMap.put(id, listener);
property.setExecutionMode(executionMode);
property.setWidgetModel(getWidgetModel());
}
}
registerBasePropertyChangeHandlers();
registerPropertyChangeHandlers();
if (executionMode == ExecutionMode.RUN_MODE) {
// hook open display action
Set<String> allPropIds = getWidgetModel().getAllPropertyIDs();
if (allPropIds.contains(AbstractWidgetModel.PROP_ACTIONS) && allPropIds.contains(AbstractWidgetModel.PROP_ENABLED)) {
hookMouseClickAction();
}
// script and rules execution
ScriptsInput scriptsInput = getWidgetModel().getScriptsInput();
scriptDataList = new ArrayList<>(scriptsInput.getScriptList());
for (RuleData rd : getWidgetModel().getRulesInput().getRuleDataList()) {
scriptDataList.add(rd.convertToScriptData());
}
for (final ScriptData scriptData : scriptDataList) {
final IPV[] pvArray = new IPV[scriptData.getPVList().size()];
int i = 0;
for (PVTuple pvTuple : scriptData.getPVList()) {
String pvName = pvTuple.pvName;
if (pvMap.containsKey(pvName)) {
pvArray[i] = pvMap.get(pvName);
} else {
try {
IPV pv = BOYPVFactory.createPV(pvName, false, 2);
pvMap.put(pvName, pv);
addToConnectionHandler(pvName, pv);
pvArray[i] = pv;
} catch (Exception e) {
String message = NLS.bind("Unable to connect to PV: {0}! \n" + "This may cause error when executing the script.", pvName);
OPIBuilderPlugin.getLogger().log(Level.WARNING, message, e);
ConsoleService.getInstance().writeError(message);
pvArray[i] = null;
}
}
i++;
}
ScriptService.getInstance().registerScript(scriptData, AbstractBaseEditPart.this, pvArray);
UIBundlingThread.getInstance().addRunnable(new Runnable() {
@Override
public void run() {
if (!isActive()) {
// already deactivated
return;
}
hasStartedPVs = true;
for (IPV pv : pvArray) if (pv != null && !pv.isStarted())
try {
pv.start();
} catch (Exception e) {
OPIBuilderPlugin.getLogger().log(Level.WARNING, "Unable to start PV " + pv.getName(), // $NON-NLS-1$
e);
}
}
});
}
}
doActivate();
}
// Rap specified code
displayDisposeListener = new Runnable() {
@Override
public void run() {
deactivate();
}
};
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class ConnectionHandler method widgetConnectionRecovered.
/**
*Update the widget when a PV' connection is recovered.
* @param pvName the name of the PV whose connection is recovered.
* @param valueChangedFromNull true if this is called because value changed from null value.
*/
protected void widgetConnectionRecovered(IPV pv, boolean valueChangedFromNull) {
if (connected && !valueChangedFromNull)
return;
boolean allConnected = true;
hasNullValue = false;
for (IPV pv2 : pvMap.values()) {
allConnected &= pv2.isConnected();
hasNullValue |= (pv2.getValue() == null);
}
refreshModelTooltip();
if (allConnected) {
connected = true;
UIBundlingThread.getInstance().addRunnable(display, new Runnable() {
@Override
public void run() {
if (hasNullValue)
figure.setBorder(AlarmRepresentationScheme.getInvalidBorder(BorderStyle.DOTTED));
else
figure.setBorder(editPart.calculateBorder());
}
});
}
}
Aggregations