def maybeHideClose(bbox: QDialogButtonBox) -> None: if isMac: b = bbox.button(QDialogButtonBox.Close) if b: bbox.removeButton(b)
class GenericTableWidget(QDialog): changed_value_signal = pyqtSignal() def __init__(self, db, mode): super().__init__() self.db = db self.input_labels_names = [] self.data_for_table = self.get_data_from_db() self.default_column = 0 self.title = '' self.table = 0 self.columns = 0 def set_up_ui(self, mode): self.layout = QVBoxLayout() self.setWindowTitle(self.title) if self.data_for_table == None: rows = 0 else: rows = len(self.data_for_table) self.table = QTableWidget(rows, self.columns) if self.data_for_table is not None: self.populate_table(self.data_for_table, self.table) self.layout.addWidget(self.table) self.add_button = QPushButton('Add') self.rename_button = QPushButton('Rename') self.delete_button = QPushButton('Delete') self.select_button = QPushButton('Select') self.button_box = QDialogButtonBox() self.layout.addWidget(self.button_box) self.button_box.addButton(self.select_button, QDialogButtonBox.ActionRole) self.button_box.addButton(self.add_button, QDialogButtonBox.ActionRole) self.button_box.addButton(self.rename_button, QDialogButtonBox.ActionRole) self.button_box.addButton(self.delete_button, QDialogButtonBox.ActionRole) self.select_button.clicked.connect(self.on_click_select) self.add_button.clicked.connect(self.on_click_add) self.rename_button.clicked.connect(self.on_click_rename) self.delete_button.clicked.connect(self.on_click_delete) if mode == 'add': self.button_box.removeButton(self.select_button) self.setLayout(self.layout) def on_click_select(self): return self.get_selected_item_text(self.default_column) def populate_table(self, data, table): row = 0 for item in data: column = 0 for sub_item in item: table.setItem(row, column, QTableWidgetItem(sub_item)) column += 1 row += 1 def add_new_items_totable(self, new_items, table): row_count = table.rowCount() table.insertRow(row_count) column = 0 for item in new_items: table.setItem(row_count, column, QTableWidgetItem(item)) column += 1 def on_click_add(self): new_items = InputDialogMultiple.get_multiple_inputs( self.input_labels_names) self.add_new_items_totable(new_items, self.table) self.add_to_db(new_items) self.changed_value_signal.emit() @abstractmethod def add_to_db(self, items): pass @abstractmethod def rename_to_db(self, old_item, new_item): pass @abstractmethod def delete_to_db(self, item_to_delete): pass @abstractmethod def get_data_from_db(self): pass def on_click_rename(self): selected_item = self.get_selected_item_text(self.default_column) new_items = InputDialogMultiple.get_multiple_inputs( self.input_labels_names) self.rename_to_db(selected_item, new_items) column = 0 for item in new_items: self.table.setItem(self.table.currentItem().row(), column, QTableWidgetItem(item)) column += 1 self.changed_value_signal.emit() def get_selected_item_text(self, column): row = self.table.currentItem().row() return self.table.item(row, column).text() def get_items(self): items = [] for row in range(self.table.rowCount()): items.append(self.table.item(row, self.default_column).text()) return items def on_click_delete(self): if YesNoConfirmation.get_confirmation() == True: selected_item = self.get_selected_item_text(self.default_column) row_to_remove = self.table.currentItem().row() self.delete_to_db(selected_item) self.table.removeRow(row_to_remove) self.changed_value_signal.emit()