Esempio n. 1
0
def maybeHideClose(bbox: QDialogButtonBox) -> None:
    if isMac:
        b = bbox.button(QDialogButtonBox.Close)
        if b:
            bbox.removeButton(b)
Esempio n. 2
0
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()