Exemple #1
0
    def __init__(self, name=None, value=None, parent=None):
        super().__init__(parent)
        self.setMinimumHeight(40)
        self.setLayout(QHBoxLayout())
        self.attr_name_lineedit = QLineEdit()
        self.attr_value_lineedit = QLineEdit()

        self.array_or_scalar_combo = QComboBox()
        self.array_or_scalar_combo.addItems(["Scalar", "Array"])
        self.array_or_scalar_combo.currentTextChanged.connect(
            self.type_changed)
        self.array_edit_button = QPushButton("Edit Array")
        self.array_edit_button.clicked.connect(self.show_edit_array_dialog)

        self.attr_dtype_combo = QComboBox()
        self.attr_dtype_combo.addItems([*DATASET_TYPE.keys()])
        self.attr_dtype_combo.currentTextChanged.connect(self.dtype_changed)
        self.dtype_changed(self.attr_dtype_combo.currentText())
        self.dialog = ArrayDatasetTableWidget(self.dtype)

        self.layout().addWidget(self.attr_name_lineedit)
        self.layout().addWidget(self.array_or_scalar_combo)
        self.layout().addWidget(self.attr_dtype_combo)
        self.layout().addWidget(self.attr_value_lineedit)
        self.layout().addWidget(self.array_edit_button)

        self.type_changed("Scalar")

        if name is not None and value is not None:
            self.name = name
            self.value = value
Exemple #2
0
    def field_type_changed(self):
        self.edit_dialog = QDialog(parent=self)
        self.edit_dialog.setModal(True)
        self._set_up_value_validator(False)
        self.enable_3d_value_spinbox.emit(not self.field_type_is_scalar())

        if self.field_type == FieldType.scalar_dataset:
            self.set_visibility(True, False, False, True)
        elif self.field_type == FieldType.array_dataset:
            self.set_visibility(False, False, True, True)
            self.table_view = ArrayDatasetTableWidget()
        elif self.field_type == FieldType.kafka_stream:
            self.set_visibility(False,
                                False,
                                True,
                                False,
                                show_name_line_edit=True)
            self.streams_widget = StreamFieldsWidget(
                self.edit_dialog,
                show_only_f142_stream=self._show_only_f142_stream)
        elif self.field_type == FieldType.link:
            self.set_visibility(
                True,
                False,
                False,
                False,
                show_unit_line_edit=False,
                show_attrs_edit=False,
            )
            self._set_up_value_validator(False)
Exemple #3
0
    def __init__(self, attr=None, parent=None):
        super().__init__(parent)
        self.setMinimumHeight(40)
        self.setLayout(QHBoxLayout())
        self.attr_name_lineedit = QLineEdit()
        self.attr_value_lineedit = QLineEdit()

        self.array_or_scalar_combo = QComboBox()
        self.array_or_scalar_combo.addItems([SCALAR, ARRAY])
        self.array_or_scalar_combo.currentTextChanged.connect(
            self.type_changed)
        self.array_edit_button = QPushButton("Edit Array")
        self.array_edit_button.clicked.connect(self.show_edit_array_dialog)

        self.attr_dtype_combo = QComboBox()
        self.attr_dtype_combo.addItems([*VALUE_TYPE_TO_NP.keys()])
        for i, item in enumerate(VALUE_TYPE_TO_NP.keys()):
            if item == ValueTypes.DOUBLE:
                self.attr_dtype_combo.setCurrentIndex(i)
                break
        self.attr_dtype_combo.currentTextChanged.connect(self.dtype_changed)
        self.dtype_changed(self.attr_dtype_combo.currentText())
        self.dialog = ArrayDatasetTableWidget(VALUE_TYPE_TO_NP[self.dtype])

        self.layout().addWidget(self.attr_name_lineedit)
        self.layout().addWidget(self.array_or_scalar_combo)
        self.layout().addWidget(self.attr_dtype_combo)
        self.layout().addWidget(self.attr_value_lineedit)
        self.layout().addWidget(self.array_edit_button)

        self.type_changed(SCALAR)

        if attr is not None:
            self.name = attr.name
            self.value = attr.values
            self.dtype = attr.type
Exemple #4
0
 def field_type_changed(self):
     self.edit_dialog = QDialog(parent=self)
     self._set_up_value_validator(False)
     if self.field_type == FieldType.scalar_dataset:
         self.set_visibility(True, False, False, True)
     elif self.field_type == FieldType.array_dataset:
         self.set_visibility(False, False, True, True)
         self.table_view = ArrayDatasetTableWidget()
     elif self.field_type == FieldType.kafka_stream:
         self.set_visibility(False,
                             False,
                             True,
                             False,
                             show_name_line_edit=True)
         self.streams_widget = StreamFieldsWidget(self.edit_dialog)
     elif self.field_type == FieldType.link:
         self.set_visibility(True, False, False, False)
         self._set_up_value_validator(True)
     elif self.field_type == FieldType.nx_class:
         self.set_visibility(False, True, False, False)
Exemple #5
0
class FieldAttrFrame(QFrame):
    def __init__(self, attr=None, parent=None):
        super().__init__(parent)
        self.setMinimumHeight(40)
        self.setLayout(QHBoxLayout())
        self.attr_name_lineedit = QLineEdit()
        self.attr_value_lineedit = QLineEdit()

        self.array_or_scalar_combo = QComboBox()
        self.array_or_scalar_combo.addItems([SCALAR, ARRAY])
        self.array_or_scalar_combo.currentTextChanged.connect(
            self.type_changed)
        self.array_edit_button = QPushButton("Edit Array")
        self.array_edit_button.clicked.connect(self.show_edit_array_dialog)

        self.attr_dtype_combo = QComboBox()
        self.attr_dtype_combo.addItems([*VALUE_TYPE_TO_NP.keys()])
        for i, item in enumerate(VALUE_TYPE_TO_NP.keys()):
            if item == ValueTypes.DOUBLE:
                self.attr_dtype_combo.setCurrentIndex(i)
                break
        self.attr_dtype_combo.currentTextChanged.connect(self.dtype_changed)
        self.dtype_changed(self.attr_dtype_combo.currentText())
        self.dialog = ArrayDatasetTableWidget(VALUE_TYPE_TO_NP[self.dtype])

        self.layout().addWidget(self.attr_name_lineedit)
        self.layout().addWidget(self.array_or_scalar_combo)
        self.layout().addWidget(self.attr_dtype_combo)
        self.layout().addWidget(self.attr_value_lineedit)
        self.layout().addWidget(self.array_edit_button)

        self.type_changed(SCALAR)

        if attr is not None:
            self.name = attr.name
            self.value = attr.values
            self.dtype = attr.type

    def type_changed(self, item: str):
        self.attr_value_lineedit.setVisible(item == SCALAR)
        self.array_edit_button.setVisible(item == ARRAY)
        self.array_or_scalar_combo.setCurrentText(item)

    def dtype_changed(self, _: str):
        self.attr_value_lineedit.setValidator(
            FieldValueValidator(self.array_or_scalar_combo,
                                self.attr_dtype_combo))
        self.attr_value_lineedit.validator().is_valid.connect(
            partial(
                validate_line_edit,
                self.attr_value_lineedit,
                tooltip_on_accept="Value is cast-able to numpy type.",
                tooltip_on_reject=
                "Value is not cast-able to selected numpy type.",
            ))
        self.attr_value_lineedit.validator().validate(
            self.attr_value_lineedit.text(), 0)

    @property
    def dtype(self) -> str:
        return self.attr_dtype_combo.currentText()

    @dtype.setter
    def dtype(self, new_dtype: str):
        self.attr_dtype_combo.setCurrentText(new_dtype)

    @property
    def is_scalar(self):
        return self.array_or_scalar_combo.currentText() == SCALAR

    def show_edit_array_dialog(self, _):
        self.dialog.show()

    @property
    def name(self):
        return self.attr_name_lineedit.text()

    @name.setter
    def name(self, new_name: str):
        self.attr_name_lineedit.setText(new_name)

    @property
    def value(self) -> Union[np.generic, np.ndarray]:

        if self.is_scalar:
            if self.dtype == VALUE_TYPE_TO_NP[ValueTypes.STRING] or isinstance(
                    self.dtype, str):
                return self.attr_value_lineedit.text()
            return self.dtype(
                VALUE_TYPE_TO_NP[self.attr_value_lineedit.text()])
        return np.squeeze(self.dialog.model.array)

    @value.setter
    def value(self, new_value: np.ndarray):
        # Decode the attribute value if it's in byte form
        if isinstance(new_value, bytes):
            new_value = new_value.decode("utf-8")

        self.attr_dtype_combo.setCurrentText(
            _get_human_readable_type(new_value))
        if np.isscalar(new_value):
            self.type_changed(SCALAR)
            self.attr_value_lineedit.setText(str(new_value))
        else:
            self.type_changed(ARRAY)
            self.dialog.model.array = new_value
            self.dialog.model.update_array_dtype(new_value.dtype)
        self.dtype_changed(None)
class FieldAttrFrame(QFrame):
    def __init__(self, name=None, value=None, parent=None):
        super().__init__(parent)
        self.array = None
        self.setMinimumHeight(40)
        self.setLayout(QHBoxLayout())
        self.attr_name_lineedit = QLineEdit()
        self.attr_value_lineedit = QLineEdit()

        self.array_or_scalar_combo = QComboBox()
        self.array_or_scalar_combo.addItems(["Scalar", "Array"])
        self.array_or_scalar_combo.currentTextChanged.connect(
            self.type_changed)
        self.array_edit_button = QPushButton("Edit Array")
        self.array_edit_button.clicked.connect(self.show_edit_array_dialog)

        self.attr_dtype_combo = QComboBox()
        self.attr_dtype_combo.addItems([*DATASET_TYPE.keys()])
        self.attr_dtype_combo.currentTextChanged.connect(self.dtype_changed)
        self.dtype_changed(self.attr_dtype_combo.currentText())

        self.layout().addWidget(self.attr_name_lineedit)
        self.layout().addWidget(self.array_or_scalar_combo)
        self.layout().addWidget(self.attr_dtype_combo)
        self.layout().addWidget(self.attr_value_lineedit)
        self.layout().addWidget(self.array_edit_button)

        self.type_changed("Scalar")

        if name and value:
            self.value = (name, value)

    def type_changed(self, item: str):
        self.attr_value_lineedit.setVisible(item == "Scalar")
        self.array_edit_button.setVisible(item == "Array")

    def dtype_changed(self, _: str):
        self.attr_value_lineedit.setValidator(
            FieldValueValidator(self.array_or_scalar_combo,
                                self.attr_dtype_combo))
        self.attr_value_lineedit.validator().is_valid.connect(
            partial(
                validate_line_edit,
                self.attr_value_lineedit,
                tooltip_on_accept="Value is cast-able to numpy type.",
                tooltip_on_reject=
                "Value is not cast-able to selected numpy type.",
            ))
        self.attr_value_lineedit.validator().validate(
            self.attr_value_lineedit.text(), 0)

    @property
    def dtype(self):
        return DATASET_TYPE[self.attr_dtype_combo.currentText()]

    @property
    def is_scalar(self):
        return self.array_or_scalar_combo.currentText() == "Scalar"

    def show_edit_array_dialog(self, _):
        self.dialog = ArrayDatasetTableWidget(self.dtype)
        self.dialog.show()

    @property
    def value(self) -> Tuple[str, Union[np.generic, np.ndarray]]:

        if self.is_scalar:
            if self.dtype == DATASET_TYPE["String"] or isinstance(
                    self.dtype, str):
                return self.attr_name_lineedit.text(
                ), self.attr_value_lineedit.text()
            return (
                self.attr_name_lineedit.text(),
                self.dtype(self.attr_value_lineedit.text()),
            )
        return self.attr_name_lineedit.text(), self.dialog.model.array

    @value.setter
    def value(self, name_and_value: Tuple[str, Union[np.generic, np.ndarray]]):
        new_name = name_and_value[0]
        new_value = name_and_value[1]

        # Decode the attribute value if it's in byte form
        if isinstance(new_value, bytes):
            new_value = new_value.decode("utf-8")

        self.attr_name_lineedit.setText(new_name)
        self.attr_dtype_combo.setCurrentText(
            "String" if isinstance(new_value, str) else next(
                key for key, value in DATASET_TYPE.items()
                if value == new_value.dtype))
        if np.isscalar(new_value):
            self.type_changed("Scalar")
            self.attr_value_lineedit.setText(str(new_value))
        else:
            self.type_changed("Array")
            self.array = new_value.data
 def show_edit_array_dialog(self, _):
     self.dialog = ArrayDatasetTableWidget(self.dtype)
     self.dialog.show()
def array_dataset_table_widget(qtbot, template):
    array_dataset_table_widget = ArrayDatasetTableWidget()
    template.ui = array_dataset_table_widget
    qtbot.addWidget(template)
    return array_dataset_table_widget