Search in sources :

Example 11 with IPV

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);
            }
        }
    }
}
Also used : VType(org.diirt.vtype.VType) VEnum(org.diirt.vtype.VEnum) IPV(org.csstudio.simplepv.IPV)

Example 12 with IPV

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);
            }
        }
    }
}
Also used : VType(org.diirt.vtype.VType) ActionsInput(org.csstudio.opibuilder.widgetActions.ActionsInput) WritePVAction(org.csstudio.opibuilder.widgetActions.WritePVAction) VEnum(org.diirt.vtype.VEnum) IPV(org.csstudio.simplepv.IPV)

Example 13 with IPV

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);
            }
        }
    }
}
Also used : ThumbWheelModel(org.csstudio.opibuilder.widgets.model.ThumbWheelModel) VType(org.diirt.vtype.VType) IPV(org.csstudio.simplepv.IPV) Display(org.diirt.vtype.Display)

Example 14 with IPV

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();
        }
    };
}
Also used : AbstractWidgetProperty(org.csstudio.opibuilder.properties.AbstractWidgetProperty) ScriptData(org.csstudio.opibuilder.script.ScriptData) PVTuple(org.csstudio.opibuilder.script.PVTuple) WidgetPropertyChangeListener(org.csstudio.opibuilder.properties.WidgetPropertyChangeListener) IPV(org.csstudio.simplepv.IPV) Point(org.eclipse.draw2d.geometry.Point) RuleData(org.csstudio.opibuilder.script.RuleData) ScriptsInput(org.csstudio.opibuilder.script.ScriptsInput)

Example 15 with IPV

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());
            }
        });
    }
}
Also used : IPV(org.csstudio.simplepv.IPV)

Aggregations

IPV (org.csstudio.simplepv.IPV)21 VType (org.diirt.vtype.VType)9 Display (org.diirt.vtype.Display)4 VEnum (org.diirt.vtype.VEnum)3 StringProperty (org.csstudio.opibuilder.properties.StringProperty)2 ScriptData (org.csstudio.opibuilder.script.ScriptData)2 ActionsInput (org.csstudio.opibuilder.widgetActions.ActionsInput)2 PropertyChangeEvent (java.beans.PropertyChangeEvent)1 PropertyChangeListener (java.beans.PropertyChangeListener)1 FileNotFoundException (java.io.FileNotFoundException)1 InputStream (java.io.InputStream)1 AbstractBaseEditPart (org.csstudio.opibuilder.editparts.AbstractBaseEditPart)1 AbstractLinkingContainerModel (org.csstudio.opibuilder.model.AbstractLinkingContainerModel)1 AbstractWidgetModel (org.csstudio.opibuilder.model.AbstractWidgetModel)1 DisplayModel (org.csstudio.opibuilder.model.DisplayModel)1 AbstractWidgetProperty (org.csstudio.opibuilder.properties.AbstractWidgetProperty)1 IWidgetPropertyChangeHandler (org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler)1 PVValueProperty (org.csstudio.opibuilder.properties.PVValueProperty)1 WidgetPropertyChangeListener (org.csstudio.opibuilder.properties.WidgetPropertyChangeListener)1 PVTuple (org.csstudio.opibuilder.script.PVTuple)1