Search in sources :

Example 1 with VType

use of org.diirt.vtype.VType in project yamcs-studio by yamcs.

the class TableValueFilterFunction method calculate.

@Override
public Object calculate(final List<Object> args) {
    VTable table = (VTable) args.get(0);
    VString columnName = (VString) args.get(1);
    VType value = (VType) args.get(2);
    if (columnName == null || columnName.getValue() == null || table == null || value == null) {
        return null;
    }
    VTable result = VTableFactory.tableValueFilter(table, columnName.getValue(), value);
    return result;
}
Also used : VType(org.diirt.vtype.VType) VString(org.diirt.vtype.VString) VTable(org.diirt.vtype.VTable)

Example 2 with VType

use of org.diirt.vtype.VType in project yamcs-studio by yamcs.

the class LocalChannelHandler method write.

@Override
public void write(Object newValue, ChannelWriteCallback callback) {
    try {
        if (VEnum.class.equals(type)) {
            // Handle enum writes
            int newIndex = -1;
            VEnum firstEnum = (VEnum) initialValue;
            List<String> labels = firstEnum.getLabels();
            if (newValue instanceof Number) {
                newIndex = ((Number) newValue).intValue();
            } else if (newValue instanceof String) {
                newIndex = labels.indexOf((String) newValue);
                // parse a number.
                if (newIndex == -1) {
                    String value = (String) newValue;
                    try {
                        newIndex = Double.valueOf(value).intValue();
                    } catch (NumberFormatException ex) {
                    }
                }
            } else {
                throw new IllegalArgumentException("Value" + newValue + " can not be accepted by VEnum.");
            }
            newValue = ValueFactory.newVEnum(newIndex, firstEnum.getLabels(), alarmNone(), timeNow());
        } else if (VString.class.equals(type) && newValue instanceof String) {
            newValue = ValueFactory.newVString((String) newValue, alarmNone(), timeNow());
        } else {
            // If the string can be parsed to a number, do it
            if (newValue instanceof String) {
                String value = (String) newValue;
                try {
                    newValue = Double.valueOf(value);
                } catch (NumberFormatException ex) {
                // Not a double - continue
                }
            }
            // If new value is not a VType, try to convert it
            if (!(newValue instanceof VType)) {
                newValue = checkValue(ValueFactory.toVTypeChecked(newValue));
            }
        }
        processMessage(newValue);
        callback.channelWritten(null);
    } catch (Exception ex) {
        callback.channelWritten(ex);
    }
}
Also used : VType(org.diirt.vtype.VType) VEnum(org.diirt.vtype.VEnum) VString(org.diirt.vtype.VString)

Example 3 with VType

use of org.diirt.vtype.VType in project yamcs-studio by yamcs.

the class PVUtil method getStringArray.

/**
 * Get string array from pv.
 *
 * @param pv
 *            The PV.
 * @return String array. For string array, it's the actual strings. For numeric arrays, the numbers are formatted as
 *         strings. For enum array, the labels are returned. For scalar PVs, an array with a single string is
 *         returned.
 */
public static final String[] getStringArray(IPV pv) {
    final VType value = checkPVValue(pv);
    if (value instanceof VStringArray) {
        final List<String> list = ((VStringArray) value).getData();
        return list.toArray(new String[list.size()]);
    } else if (value instanceof VDoubleArray) {
        final ListNumber list = ((VNumberArray) value).getData();
        final String[] text = new String[list.size()];
        for (int i = 0; i < text.length; ++i) text[i] = Double.toString(list.getDouble(i));
        return text;
    } else if (value instanceof VNumberArray) {
        final ListNumber list = ((VNumberArray) value).getData();
        final String[] text = new String[list.size()];
        for (int i = 0; i < text.length; ++i) text[i] = Long.toString(list.getLong(i));
        return text;
    } else if (value instanceof VEnumArray) {
        final List<String> labels = ((VEnumArray) value).getLabels();
        final ListInt list = ((VEnumArray) value).getIndexes();
        final String[] text = new String[list.size()];
        for (int i = 0; i < text.length; ++i) {
            final int index = list.getInt(i);
            if (index >= 0 && index <= labels.size())
                text[i] = labels.get(index);
            else
                text[i] = "<" + index + ">";
        }
        return text;
    }
    return new String[] { getString(pv) };
}
Also used : VDoubleArray(org.diirt.vtype.VDoubleArray) VNumberArray(org.diirt.vtype.VNumberArray) VEnumArray(org.diirt.vtype.VEnumArray) ListNumber(org.diirt.util.array.ListNumber) ListInt(org.diirt.util.array.ListInt) VType(org.diirt.vtype.VType) List(java.util.List) VStringArray(org.diirt.vtype.VStringArray)

Example 4 with VType

use of org.diirt.vtype.VType in project yamcs-studio by yamcs.

the class ScrollbarEditPart method registerLoadLimitsListener.

/**
 */
private void registerLoadLimitsListener() {
    if (getExecutionMode() == ExecutionMode.RUN_MODE) {
        final ScrollBarModel 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(ScrollBarModel.PROP_MAX, meta.getUpperDisplayLimit());
                                    model.setPropertyValue(ScrollBarModel.PROP_MIN, meta.getLowerDisplayLimit());
                                }
                            }
                        }
                    };
                pv.addListener(pvLoadLimitsListener);
            }
        }
    }
}
Also used : VType(org.diirt.vtype.VType) ScrollBarModel(org.csstudio.opibuilder.widgets.model.ScrollBarModel) IPV(org.csstudio.simplepv.IPV) Display(org.diirt.vtype.Display)

Example 5 with VType

use of org.diirt.vtype.VType in project yamcs-studio by yamcs.

the class ScrollbarEditPart method registerPropertyChangeHandlers.

@Override
protected void registerPropertyChangeHandlers() {
    IWidgetPropertyChangeHandler pvNameHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
            registerLoadLimitsListener();
            return false;
        }
    };
    setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVNAME, pvNameHandler);
    ((ScrollbarFigure) getFigure()).setEnabled(getWidgetModel().isEnabled() && (getExecutionMode() == ExecutionMode.RUN_MODE));
    removeAllPropertyChangeHandlers(AbstractWidgetModel.PROP_ENABLED);
    // enable
    IWidgetPropertyChangeHandler enableHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
            if (getExecutionMode() == ExecutionMode.RUN_MODE)
                figure.setEnabled((Boolean) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(AbstractWidgetModel.PROP_ENABLED, enableHandler);
    // value
    IWidgetPropertyChangeHandler valueHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            if (newValue == null)
                return false;
            ((ScrollbarFigure) refreshableFigure).setValue(VTypeHelper.getDouble((VType) newValue));
            return false;
        }
    };
    setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVVALUE, valueHandler);
    // minimum
    IWidgetPropertyChangeHandler minimumHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setMinimum((Double) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_MIN, minimumHandler);
    // maximum
    IWidgetPropertyChangeHandler maximumHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setMaximum((Double) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_MAX, maximumHandler);
    // page increment
    IWidgetPropertyChangeHandler pageIncrementHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setPageIncrement((Double) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_PAGE_INCREMENT, pageIncrementHandler);
    // step increment
    IWidgetPropertyChangeHandler stepIncrementHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setStepIncrement((Double) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_STEP_INCREMENT, stepIncrementHandler);
    // bar length
    IWidgetPropertyChangeHandler barLengthHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setExtent((Double) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_BAR_LENGTH, barLengthHandler);
    // value tip
    IWidgetPropertyChangeHandler valueTipHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setShowValueTip((Boolean) newValue);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_SHOW_VALUE_TIP, valueTipHandler);
    // horizontal
    IWidgetPropertyChangeHandler horizontalHandler = new IWidgetPropertyChangeHandler() {

        @Override
        public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            ((ScrollbarFigure) refreshableFigure).setHorizontal((Boolean) newValue);
            ScrollBarModel model = getWidgetModel();
            if (// from vertical to horizontal
            (Boolean) newValue)
                model.setLocation(model.getLocation().x - model.getSize().height / 2 + model.getSize().width / 2, model.getLocation().y + model.getSize().height / 2 - model.getSize().width / 2);
            else
                // from horizontal to vertical
                model.setLocation(model.getLocation().x + model.getSize().width / 2 - model.getSize().height / 2, model.getLocation().y - model.getSize().width / 2 + model.getSize().height / 2);
            model.setSize(model.getSize().height, model.getSize().width);
            return false;
        }
    };
    setPropertyChangeHandler(ScrollBarModel.PROP_HORIZONTAL, horizontalHandler);
}
Also used : VType(org.diirt.vtype.VType) ScrollBarModel(org.csstudio.opibuilder.widgets.model.ScrollBarModel) IWidgetPropertyChangeHandler(org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler) IFigure(org.eclipse.draw2d.IFigure) ScrollbarFigure(org.csstudio.swt.widgets.figures.ScrollbarFigure)

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