Search in sources :

Example 36 with VType

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;
}
Also used : RuntimePV(org.csstudio.display.builder.runtime.pv.RuntimePV) VType(org.diirt.vtype.VType) CountDownLatch(java.util.concurrent.CountDownLatch) RuntimePVListener(org.csstudio.display.builder.runtime.pv.RuntimePVListener)

Example 37 with VType

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);
}
Also used : PropertyChangeEvent(java.beans.PropertyChangeEvent) VType(org.diirt.vtype.VType) PropertyChangeListener(java.beans.PropertyChangeListener) IWidgetPropertyChangeHandler(org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler) AbstractBoolFigure(org.csstudio.swt.widgets.figures.AbstractBoolFigure) OPIColor(org.csstudio.opibuilder.util.OPIColor) IFigure(org.eclipse.draw2d.IFigure)

Example 38 with VType

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());
        }
    });
}
Also used : PropertyChangeEvent(java.beans.PropertyChangeEvent) VType(org.diirt.vtype.VType) AbstractChoiceFigure(org.csstudio.swt.widgets.figures.AbstractChoiceFigure) PropertyChangeListener(java.beans.PropertyChangeListener) IWidgetPropertyChangeHandler(org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler) List(java.util.List) IFigure(org.eclipse.draw2d.IFigure)

Example 39 with VType

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

Example 40 with VType

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

Aggregations

VType (org.diirt.vtype.VType)76 Test (org.junit.Test)17 IWidgetPropertyChangeHandler (org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler)10 IFigure (org.eclipse.draw2d.IFigure)10 IPV (org.csstudio.simplepv.IPV)9 VEnum (org.diirt.vtype.VEnum)8 ArrayList (java.util.ArrayList)7 Display (org.diirt.vtype.Display)7 ListNumber (org.diirt.util.array.ListNumber)6 VNumberArray (org.diirt.vtype.VNumberArray)6 VString (org.diirt.vtype.VString)6 PropertyChangeEvent (java.beans.PropertyChangeEvent)5 PropertyChangeListener (java.beans.PropertyChangeListener)5 Instant (java.time.Instant)5 List (java.util.List)5 ModelItem (org.csstudio.trends.databrowser3.model.ModelItem)5 RuntimePV (org.csstudio.display.builder.runtime.pv.RuntimePV)4 RuntimePVListener (org.csstudio.display.builder.runtime.pv.RuntimePVListener)4 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)3 ValueIterator (org.csstudio.archive.reader.ValueIterator)3