コード例 #1
0
class HeaderEditDialog(QDialog):

    header_changed = pyqtSignal(str, list)

    def __init__(self, parent, columns):
        super().__init__(parent)

        self.columns = copy.deepcopy(columns)
        self.setupUi()

    def setupUi(self):
        self.resize(200, 400)
        self.vbox = QVBoxLayout(self)
        self.columnList = QListWidget(self)
        self.vbox.addWidget(self.columnList)

        self.columnList.setDragDropMode(QListWidget.InternalMove)
        self.columnList.setDefaultDropAction(Qt.MoveAction)
        self.columnList.setSelectionMode(QListWidget.ExtendedSelection)
        self.columnList.setAlternatingRowColors(True)
        self.columnList.installEventFilter(self)
        self.columnList.setObjectName("ColumnList")
        # self.columnList.setContextMenuPolicy(Qt.CustomContextMenu)
        # self.columnList.customContextMenuRequested.connect(self.open_menu)

        self.buttonBox = QDialogButtonBox(
            QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
        self.vbox.addWidget(self.buttonBox)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        self.fill_column_list()

    def eventFilter(self, object, event):
        if event.type() == QEvent.KeyPress:
            if event.key() == Qt.Key_Space or event.key() == Qt.Key_Return:
                self.toggle_selected_columns()
                return True
        return False

    def fill_column_list(self):
        for column in self.columns:
            ColumnListItem(self.columnList, column)

    def accept(self):
        result = []
        for i in range(self.columnList.count()):
            item = self.columnList.item(i)
            result.append(item.column)
        self.header_changed.emit('rearrange', result)
        self.done(0)

    def reject(self):
        self.done(0)

    def toggle_selected_columns(self):
        selected = self.columnList.selectedItems()
        for item in selected:
            value_now = item.data(Qt.CheckStateRole)
            item.setData(Qt.CheckStateRole, not value_now)
        self.columnList.reset(
        )  # @Improvement: is there a better way to update QListWidget?

    # def load_preset(self, action):
    #     name = action.text()
    #     self.result_future(('load', name))
    #
    # def save_preset(self, action):
    #     result = []
    #     for i in range(self.columnList.count()): # column list has to be generated here because if
    #         item = self.columnList.item(i)       # you rearrange and save, then what gets saved is
    #         result.append(item.column)           # the un-rearranged list from the table header
    #
    #     name = action.text()
    #     if action.property('new'):
    #         self.result_future(('save new', (name, result)))
    #     else:
    #         self.result_future(('save', (name, result)))

    # def open_menu(self, position):
    #     return  # @TODO: implement header presets
    #     menu = QMenu(self)
    #
    #     load_menu = QMenu('Load preset', self)
    #     save_menu = QMenu('Save preset as', self)
    #     save_new_action = save_menu.addAction('New')
    #     save_new_action.setProperty('new', True)
    #     save_menu.addSeparator()
    #
    #     presets = CONFIG.get_columns_presets()
    #     for preset in presets:
    #         load_menu.addAction(preset)
    #         save_menu.addAction(preset)
    #
    #     load_menu.triggered.connect(self.load_preset)
    #     save_menu.triggered.connect(self.save_preset)
    #
    #     menu.addMenu(load_menu)
    #     menu.addMenu(save_menu)
    #
    #     menu.popup(self.columnList.viewport().mapToGlobal(position))

    def get_selected_items(self):
        result = []
        selected = self.columnList.selectedIndexes()
        for index in selected:
            item = self.columnList.itemFromIndex(index)
            result.append(item)
        return result

    def enable_selected(self):
        selected = self.get_selected_items()
        for item in selected:
            item.setData(Qt.CheckStateRole, Qt.Checked)

    def disable_selected(self):
        selected = self.get_selected_items()
        for item in selected:
            item.setData(Qt.CheckStateRole, Qt.Unchecked)
コード例 #2
0
class filterTabView(QTabWidget):
    def __init__(self, query, contentView, TAGS, KEYWORDS):
        super().__init__()
        self.query = query
        self.TAGS = TAGS
        self.KEYWORDS = KEYWORDS
        self.contentView = contentView
        self.initList()
        self.initUI()

    def initUI(self):
        self.tagsTab = QListWidget()
        for tag in self.TAGS:
            item = QListWidgetItem(tag)
            item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.tagsTab.addItem(item)
        self.tagsTab.clicked.connect(self.tagsSelect)

        self.ratingTab = QListWidget()
        for word in ['1 star', '2 star', '3 star', '4 star', '5 star']:
            item = QListWidgetItem(word)
            item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.ratingTab.addItem(item)
        self.ratingTab.clicked.connect(self.ratingSelect)

        self.keywordTab = QListWidget()
        for keyword in self.KEYWORDS:
            item = QListWidgetItem(keyword)
            item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.keywordTab.addItem(item)
        self.keywordTab.clicked.connect(self.keywordSelect)

        self.addTab(self.tagsTab, "Tags")
        self.addTab(self.ratingTab, "Rating")
        self.addTab(self.keywordTab, "Keyword")

    def initList(self):
        self.tagsList = []
        self.ratingsList = []
        self.keywordsList = []

    def tagsSelect(self, point):
        item = point.data()
        if self.tagsTab.itemFromIndex(point).checkState() == 2:
            if item in self.tagsList:
                pass
            else:
                self.tagsList.append(item)
        if self.tagsTab.itemFromIndex(point).checkState() == 0:
            if item in self.tagsList:
                self.tagsList.remove(item)
        self.contentView.updateAllPage(self.tagsList, self.ratingsList,
                                       self.keywordsList)

    def ratingSelect(self, point):
        item = point.data()
        if self.ratingTab.itemFromIndex(point).checkState() == 2:
            if item in self.ratingsList:
                pass
            else:
                self.ratingsList.append(item)
        if self.ratingTab.itemFromIndex(point).checkState() == 0:
            if item in self.ratingsList:
                self.ratingsList.remove(item)
        self.contentView.updateAllPage(self.tagsList, self.ratingsList,
                                       self.keywordsList)

    def keywordSelect(self, point):
        item = point.data()
        if self.keywordTab.itemFromIndex(point).checkState() == 2:
            if item in self.keywordsList:
                pass
            else:
                self.keywordsList.append(item)
        if self.keywordTab.itemFromIndex(point).checkState() == 0:
            if item in self.keywordsList:
                self.keywordsList.remove(item)
        self.contentView.updateAllPage(self.tagsList, self.ratingsList,
                                       self.keywordsList)