def createEditor(self, parent, option, index): mod, attr, atype = self._tr(index) if atype is int: editor = QSpinBox(parent) editor.setMinimum(0) editor.setMaximum(self.INT_MAX) editor.setSingleStep(1) # Icons if attr.lower().endswith('iconsize'): editor.setSingleStep(8) elif atype is float: editor = QDoubleSpinBox(parent) editor.setMinimum(0) editor.setMaximum(float(self.INT_MAX)) editor.setSingleStep(0.1) elif atype is bool: editor = QComboBox(parent) editor.addItem(str(True)) editor.addItem(str(False)) else: return None return editor
def createEditor(self, parent: QWidget, QStyleOptionViewItem, proxy_index: QModelIndex): # Get the actual source. src_index = self._proxy.mapToSource(proxy_index) # If it's the column #0, then immediately return. if src_index.column() == 0: return None tree_item = src_index.internalPointer() feature = tree_item.own_data[0] interface_type = feature.node.principal_interface_type if interface_type == EInterfaceType.intfIInteger: w = QSpinBox(parent) w.setRange(feature.min, feature.max) w.setSingleStep(feature.inc) w.setValue(feature.value) elif interface_type == EInterfaceType.intfICommand: w = QPushButton(parent) w.setText('Execute') w.clicked.connect(lambda: self.on_button_clicked(proxy_index)) elif interface_type == EInterfaceType.intfIBoolean: w = QComboBox(parent) boolean_ints = {'False': 0, 'True': 1} w.addItem('False') w.addItem('True') proxy_index = boolean_ints[ 'True'] if feature.value else boolean_ints['False'] w.setCurrentIndex(proxy_index) elif interface_type == EInterfaceType.intfIEnumeration: w = QComboBox(parent) for item in feature.entries: w.addItem(item.symbolic) w.setCurrentText(feature.value) elif interface_type == EInterfaceType.intfIString: w = QLineEdit(parent) w.setText(feature.value) elif interface_type == EInterfaceType.intfIFloat: w = QLineEdit(parent) w.setText(str(feature.value)) else: return None # w.setFont(get_system_font()) return w
def createandmove(self, label, value, text, value_type, box): lbl = label.replace('_', ' ') lbl = lbl.title() w = QWidget(self) h = QHBoxLayout() vbtn = None qbtn = QLabel(lbl, self) if value_type == int: if label == 'button_border_radius' or label == 'button_border_size' \ or label == 'deadzone_border_size' or label == 'sticks_border_size' \ or label == 'dpad_border_radius' or label == 'dpad_border_size' \ or label == 'dpad_background_border_radius' or label == 'dpad_background_border_size': vbtn = QSpinBox() vbtn.setMinimum(0) vbtn.setMaximum(1000) vbtn.setSingleStep(1) vbtn.setValue(value) vbtn.valueChanged.connect( lambda: self.write_widget_value(label, vbtn.value())) if label == 'autorepeat_count': vbtn = QSpinBox() vbtn.setMinimum(1) vbtn.setMaximum(10) vbtn.setSingleStep(1) vbtn.setValue(value) vbtn.valueChanged.connect( lambda: self.write_widget_value(label, vbtn.value())) if label == 'button_width' or label == 'button_height': vbtn = QSpinBox() vbtn.setMinimum(1) vbtn.setMaximum(1000) vbtn.setSingleStep(10) vbtn.setValue(value) vbtn.valueChanged.connect( lambda: self.write_widget_value(label, vbtn.value())) if label == 'overlay_x_position' or label == 'overlay_y_position' \ or label == 'overlay_width' or label == 'overlay_height' \ or label == 'dpad_background_opacity' or label == 'deadzone' \ or label == 'button_opacity': vbtn = QSpinBox() vbtn.setMinimum(0) vbtn.setMaximum(100) vbtn.setSingleStep(1) vbtn.setValue(value) vbtn.valueChanged.connect( lambda: self.write_widget_value(label, vbtn.value())) if value_type == float: if label == 'autorepeat_interval' or label == 'combo_interval': vbtn = QDoubleSpinBox() vbtn.setDecimals(3) vbtn.setMinimum(0.001) vbtn.setMaximum(10.0) vbtn.setSingleStep(0.01) vbtn.setValue(value) vbtn.valueChanged.connect( lambda: self.write_widget_value(label, vbtn.value())) if label == 'current_layout_file': vbtn = QComboBox() items = list(profiles_filelist) item1 = read_settings('User_Settings', 'current_layout_file') if items: if item1 in items: vbtn.addItem(item1) items.remove(item1) for p in items: vbtn.addItem(p) vbtn.currentIndexChanged.connect( lambda: self.write_widget_value(label, vbtn.currentText())) if value_type == str and value.startswith('#'): if len(value) == 7: vbtn = QPushButton() color_name = read_settings('User_Settings', label) stl = "background-color:%s;" % color_name vbtn.setStyleSheet(stl) vbtn.clicked.connect(lambda: self.get_color(label, vbtn)) if value_type == bool: vbtn = QCheckBox() status = read_settings('User_Settings', label) vbtn.setChecked(status) vbtn.minimumSizeHint() vbtn.stateChanged.connect( lambda: self.write_widget_value(label, vbtn.isChecked())) if label == 'input_method': vbtn = QComboBox() item1 = read_settings('User_Settings', 'input_method') vbtn.addItem(item1) if item1 == 'xdotool': item2 = 'pyuserinput' else: item2 = 'xdotool' vbtn.addItem(item2) vbtn.currentIndexChanged.connect( lambda: self.write_widget_value(label, vbtn.currentText())) if label == 'New Layout File': vbtn = QPushButton() vbtn.setText(value) vbtn.clicked.connect(self.create_new_layout_file) ibtn = QPushButton() ibtn.setIcon(QIcon.fromTheme("dialog-information")) ibtn.setMinimumSize(QtCore.QSize(50, 50)) ibtn.clicked.connect(lambda: self.show_dialog(text)) h.addWidget(qbtn) if vbtn != None: vbtn.setMinimumSize(QtCore.QSize(200, 50)) if value_type == bool: vbtn.setMinimumSize(QtCore.QSize(125, 50)) vbtn.setStyleSheet( 'QCheckBox::indicator {min-width:50;min-height:50;border-radius:25px;border:4px solid #555555;}' 'QCheckBox::indicator:checked {background-color:green;}' 'QCheckBox::indicator:unchecked {background-color:grey;}') h.addStretch(1) h.addWidget(vbtn) h.addWidget(ibtn) w.setLayout(h) w.setMinimumHeight(70) w.setObjectName('SettingsRow') w.setStyleSheet('#SettingsRow { \ background-color:#eeeeee;border: 1px solid #bbbbbb; \ border-radius:5px; \ }') box.addWidget(w)