Ejemplo n.º 1
0
    def __init__(self, parent, obj):
        super(PropertiesWidget, self).__init__()
        self.obj = obj
        self.parent = parent
        self.grid = QGridLayout()
        self.grid.setSizeConstraint(self.grid.SetMinAndMaxSize)

        title = Label("Propriété : " + self.obj.type_, 16)
        title.setMaximumHeight(80)
        title.setMinimumHeight(80)
        title.setAlignment(Qt.AlignHCenter)
        self.grid.addWidget(title, 0, 0, 1, 2)
        self.grid.setRowStretch(0, 1)

        nb = 1
        for p in get_properties(self.obj.type_):
            label = Label(p[0], 12)
            label.setMaximumHeight(50)
            label.setMinimumHeight(50)
            self.grid.addWidget(label, nb, 0)

            if p[1] == "str":
                widget = QLineEdit()
                if p[0] == "Nom":
                    widget.setText(self.obj.name)
                else:
                    widget.setText(self.obj.properties.get(p[0], ""))
                widget.textChanged.connect(
                    lambda text="", prop=p[0]: self.set_text_for(text, prop))
            elif p[1] == "bool":
                widget = QCheckBox()
                if self.obj.properties.get(p[0], False):
                    widget.setChecked(True)
                widget.stateChanged.connect(
                    lambda state=0, prop=p[0]: self.set_bool_for(state, prop))
            elif p[1] == "int":
                widget = QSpinBox()
                widget.setMaximum(3000)
                widget.setMinimum(-3000)
                widget.setValue(self.obj.properties.get(p[0], 0))
                widget.valueChanged.connect(
                    lambda value=0, prop=p[0]: self.set_int_for(value, prop))
            elif "|" in p[1] and p[1].split("|")[0] == "list":
                widget = QComboBox()
                for i in p[1].split("|")[1].split(", "):
                    widget.addItem(i)
                widget.setCurrentText(
                    self.obj.properties.get(p[0],
                                            p[1].split("|")[1].split(", ")[0]))
                widget.currentTextChanged.connect(
                    lambda value="", prop=p[0]: self.set_text_for(value, prop))
            elif p[1] == "color":
                widget = QPushButton("Sélectionner")
                widget.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_color_for(prop))
            elif p[1] == "colorNone":
                widget = QWidget()
                layout = QGridLayout()
                select = QPushButton("Sélectionner")
                select.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_color_for(prop))
                delete = QPushButton("Supprimer")
                delete.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_none_for(prop))
                layout.addWidget(select, 0, 0)
                layout.addWidget(delete, 0, 1)
                widget.setLayout(layout)
            elif p[1] == "file":
                widget = QPushButton("Sélectionner")
                widget.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_file_for(prop))
            elif p[1] == "fileNone":
                widget = QWidget()
                layout = QGridLayout()
                select = QPushButton("Sélectionner")
                select.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_file_for(prop))
                delete = QPushButton("Supprimer")
                delete.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_none_for(prop))
                layout.addWidget(select, 0, 0)
                layout.addWidget(delete, 0, 1)
                widget.setLayout(layout)
            elif p[1] == "files":
                widget = QPushButton("Sélectionner")
                widget.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_files_for(prop))
            else:
                raise TypeError("Unknown type for properties : " + p[1])
            self.grid.addWidget(widget, nb, 1)
            self.grid.setRowStretch(nb, 1)

            nb += 1

        scripting = QPushButton("Modifier Script")
        scripting.clicked.connect(self.edit_script)
        self.grid.addWidget(scripting, nb, 0, 1, 2)

        end_spacer = QSpacerItem(20, 20, QSizePolicy.Preferred,
                                 QSizePolicy.Expanding)
        self.grid.addItem(end_spacer, nb + 1, 0)

        for i in range(0, 2):
            self.grid.setColumnStretch(i, 1)

        self.setLayout(self.grid)
    def __init__(self, parent, metadata):
        """Groupbox for custom extension fields filling form."""
        super().__init__()
        self.setTitle(metadata['neurodata_type'])
        self.parent = parent
        self.metadata = metadata
        self.group_type = metadata['neurodata_type']

        self.lbl_name = QLabel('name<span style="color:' +
                               required_asterisk_color + ';">*</span>:')
        self.form_name = QLineEdit(metadata['name'])
        self.form_name.setToolTip("The unique name of this " +
                                  metadata['neurodata_type'] + " group.")
        nInstances = 0
        for grp in self.parent.groups_list:
            if isinstance(grp, metadata['neurodata_type']):
                nInstances += 1
        if nInstances > 0:
            self.form_name.setText(metadata['name'] + str(nInstances))

        self.grid = QGridLayout()
        self.grid.setColumnStretch(3, 1)
        self.grid.setColumnStretch(5, 1)
        self.grid.addWidget(self.lbl_name, 0, 0, 1, 2)
        self.grid.addWidget(self.form_name, 0, 2, 1, 4)

        # Dynamically created custom fields
        self.intValidator = QIntValidator(self)
        self.floatValidator = QDoubleValidator(self)
        keys_list = list(metadata.keys())
        keys_list.remove('name')
        keys_list.remove('neurodata_type')
        for ii, key in enumerate(keys_list):
            val = metadata[key]
            lbl_key = QLabel(key + ':')
            setattr(self, 'lbl_' + key, lbl_key)
            if isinstance(val, bool):
                chk_val = QLineEdit(str(val))
                chk_val = QCheckBox("True")
                chk_val.setChecked(val)
                setattr(self, 'form_' + key, chk_val)
                self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2)
                self.grid.addWidget(chk_val, ii + 1, 2, 1, 2)
            elif isinstance(val, (int, np.int)):
                form_val = QLineEdit(str(val))
                form_val.setValidator(self.intValidator)
                setattr(self, 'form_' + key, form_val)
                self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2)
                self.grid.addWidget(form_val, ii + 1, 2, 1, 4)
            elif isinstance(val, (float, np.float)):
                form_val = QLineEdit(str(val))
                form_val.setValidator(self.floatValidator)
                setattr(self, 'form_' + key, form_val)
                self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2)
                self.grid.addWidget(form_val, ii + 1, 2, 1, 4)
            elif isinstance(val, str):
                form_val = QLineEdit(str(val))
                setattr(self, 'form_' + key, form_val)
                self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2)
                self.grid.addWidget(form_val, ii + 1, 2, 1, 4)
            elif isinstance(val, datetime):
                pass
                # form_date = QLineEdit(val.strftime("%d/%m/%Y"))
                # form_date.setToolTip("dd/mm/yyyy")
                # setattr(self, 'form_date_'+str(ii), form_date)
                # form_time = QLineEdit(val.strftime("%H:%M"))
                # form_time.setToolTip("dd/mm/yyyy")
                # setattr(self, 'form_time_'+str(ii), form_time)
                # self.grid.addWidget(lbl_key, ii+1, 0, 1, 2)
                # self.grid.addWidget(form_date, ii+1, 2, 1, 2)
                # self.grid.addWidget(form_time, ii+1, 4, 1, 2)
        self.setLayout(self.grid)