class cMainWindow(QMainWindow): def __init__(self): super(cMainWindow, self).__init__() loadUi('MainWindow.ui', self) self.mModel = Model.cModel() self.mainList.setModel( self.mModel ) self.treeView.setModel( self.mModel ) self.mMapper = QDataWidgetMapper() self.mMapper.setModel( self.mModel ) self.mMapper.setOrientation( Qt.Vertical ) self.mMapper.addMapping( self.nameLineEdit, 0) self.mMapper.addMapping( self.weaponComboBox, 1, b"currentText" ) self.mMapper.addMapping( self.shiledSpinBox, 2) self.mainList.selectionModel().currentChanged.connect( self.CombattantSelected ) self.shiledSpinBox.valueChanged.connect( self.SubmitToModel ) self.weaponComboBox.currentIndexChanged.connect( self.SubmitToModel ) weaponList = "Fist", "Dagger", "Sword", "Pike" self.weaponComboBox.addItems( weaponList ) # -------------------------------- def CombattantSelected(self, iIndex): self.mMapper.setRootIndex( iIndex ) self.mMapper.toFirst() # -------------------------------- def SubmitToModel(self, iValue): self.mMapper.submit() # --------------------------------
class CommitDateMaxFilterEditor(QWidget, Ui_CommitDateMaxFilter): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self._data_mapper = QDataWidgetMapper() def setModel(self, model): self._model = model self._data_mapper.setModel(model) self._data_mapper.addMapping(self.uiCommitDateMax, 2) def setSelection(self, current: QModelIndex) -> None: parent = current.parent() self._data_mapper.setRootIndex(parent) self._data_mapper.setCurrentModelIndex(current)
class CommitDateDeltaMinFilterEditor(QWidget, Ui_CommitDateDeltaMinFilter): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self._data_mapper = QDataWidgetMapper() self.uiHelp.clicked.connect(_showTimeDurationHelp) def setModel(self, model): self._model = model self._data_mapper.setModel(model) self._data_mapper.addMapping(self.uiCommitDateDeltaMin, 2) def setSelection(self, current: QModelIndex) -> None: parent = current.parent() self._data_mapper.setRootIndex(parent) self._data_mapper.setCurrentModelIndex(current)
class AuthorFilterEditor(QWidget, Ui_AuthorFilterProperties): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self._data_mapper = QDataWidgetMapper() def setModel(self, model): self._model = model self._data_mapper.setModel(model) self._data_mapper.addMapping(self.uiAuthorName, 2) self._data_mapper.addMapping(self.uiAuthorEmail, 3) def setSelection(self, current: QModelIndex) -> None: parent = current.parent() self._data_mapper.setRootIndex(parent) self._data_mapper.setCurrentModelIndex(current)
class NodeEditor(QWidget, Ui_FilterNodeProperties): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self._data_mapper = QDataWidgetMapper() def setModel(self, model): self._model = model self._data_mapper.setModel(model) self._data_mapper.addMapping(self.uiName, 0) self._data_mapper.addMapping(self.uiComment, 1) def setSelection(self, current: QModelIndex) -> None: parent = current.parent() self._data_mapper.setRootIndex(parent) self._data_mapper.setCurrentModelIndex(current)
def setMappings(mappings): """Set the mappings between the model and widgets. TODO: - Should this be extended to accept other columns? - Check if the already has the model. """ column = 1 mappers = list() for widget, obj in mappings: mapper = QDataWidgetMapper(widget) # logger.debug(obj.model()) mapper.setModel(obj.model()) mapper.addMapping(widget, column) delegate = Delegate(widget) mapper.setItemDelegate(delegate) mapper.setRootIndex(obj.parent().index()) mapper.setCurrentModelIndex(obj.index()) # QDataWidgetMapper needs a focus event to notice a change in the data. # To make sure the model is informed about the change, I connected the # stateChanged signal of the QCheckBox to the submit slot of the # QDataWidgetMapper. The same idea goes for the QComboBox. # https://bugreports.qt.io/browse/QTBUG-1818 if isinstance(widget, QCheckBox): signal = widget.stateChanged try: signal.disconnect() except TypeError: pass signal.connect(mapper.submit) elif isinstance(widget, QComboBox): signal = widget.currentTextChanged try: signal.disconnect() except TypeError: pass signal.connect(mapper.submit) mappers.append(mapper) return mappers
class ArmorEditor(ArmorEditorWidgetBase, ArmorEditorWidget): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self.model = None self.parts_tree_model = ArmorSetTreeModel() self.skill_model = SkillTranslationModel() self.armor_item_mapper = QDataWidgetMapper(self) self.armor_item_mapper.setItemDelegate(ItemDelegate()) self.armor_item_mapper.setModel(self.parts_tree_model) self.parts_tree_view.setModel(self.parts_tree_model) self.parts_tree_view.activated.connect( self.handle_parts_tree_activated) self.import_export_manager = ImportExportManager(self.parts_tree_view) self.import_export_manager.connect_custom_context_menu() for it in ("set_skill1_value", "set_skill2_value", "skill1_value", "skill2_value", "skill3_value"): getattr(self, it).setModel(self.skill_model) mappings = [ (self.id_value, Column.id, b"text"), (self.name_value, Column.gmd_name_index, b"text"), (self.description_value, Column.gmd_desc_index, b"text"), (self.setid_value, Column.set_id), (self.set_group_value, Column.set_group), (self.type_value, Column.type, b"currentIndex"), (self.order_value, Column.order), (self.variant_value, Column.variant, b"currentIndex"), (self.equip_slot_value, Column.equip_slot, b"currentIndex"), (self.gender_value, Column.gender, b"currentIndex"), (self.mdl_main_id_value, Column.mdl_main_id), (self.mdl_secondary_id_value, Column.mdl_secondary_id), (self.icon_color_value, Column.icon_color), (self.defense_value, Column.defense), (self.rarity_value, Column.rarity), (self.cost_value, Column.cost), (self.fire_res_value, Column.fire_res), (self.water_res_value, Column.water_res), (self.thunder_res_value, Column.thunder_res), (self.ice_res_value, Column.ice_res), (self.dragon_res_value, Column.dragon_res), (self.set_skill1_value, Column.set_skill1), (self.set_skill1_lvl_value, Column.set_skill1_lvl), (self.set_skill2_value, Column.set_skill2), (self.set_skill2_lvl_value, Column.set_skill2_lvl), (self.skill1_value, Column.skill1), (self.skill1_lvl_value, Column.skill1_lvl), (self.skill2_value, Column.skill2), (self.skill2_lvl_value, Column.skill2_lvl), (self.skill3_value, Column.skill3), (self.skill3_lvl_value, Column.skill3_lvl), (self.num_gem_slots, Column.num_gem_slots), (self.gem_slot1_lvl_value, Column.gem_slot1_lvl), (self.gem_slot2_lvl_value, Column.gem_slot2_lvl), (self.gem_slot3_lvl_value, Column.gem_slot3_lvl), ] for mapping in mappings: self.armor_item_mapper.addMapping(*mapping) def handle_parts_tree_activated(self, qindex: QModelIndex): if isinstance(qindex.internalPointer(), ArmorSetNode): return self.armor_item_mapper.setRootIndex(qindex.parent()) self.armor_item_mapper.setCurrentModelIndex(qindex) entry = qindex.internalPointer().ref self.crafting_requirements_editor.set_current(entry.id) def set_model(self, model): self.model = model if self.model is None: self.parts_tree_model = None self.parts_tree_view.setModel(None) return self.skill_model.update(model.get_relation_data("t9n_skill_pt")) self.crafting_requirements_editor.set_model(model, None) self.parts_tree_model.update(model) self.configure_tree_view() def configure_tree_view(self): header = self.parts_tree_view.header() header.setSectionResizeMode(0, QHeaderView.Stretch) header.setSectionResizeMode(1, QHeaderView.ResizeToContents) header.setStretchLastSection(False) for i in range(2, self.parts_tree_model.columnCount(None)): header.hideSection(i)