class AllMoviesView(QWidget):

    def __init__(self, parent):
        super().__init__(parent)
        self.ui = Ui_allMovies_window()
        self.ui.setupUi(self)

        self.labels = ['Id', 'Title', 'Film director', 'Genre', 'Status']

        self.ui.allMovies_tableView.clicked.connect(self.movie_details)

        self.show()

    def loadData(self):
        results = movie_session.query(Movie, Film_director, Genre, MovieStatus).select_from(Movie).join(Film_director).join(Genre).join(MovieStatus).all()
        self.model = QStandardItemModel(len(results), len(self.labels))
        self.model.setHorizontalHeaderLabels(self.labels)

        self.filter_proxy_model = QSortFilterProxyModel()
        self.filter_proxy_model.setFilterKeyColumn(-1)
        self.filter_proxy_model.setSourceModel(self.model)

        for row, (movie, film_director, genre, movie_status) in enumerate(results):
            movie_id = QStandardItem(str(movie.id))
            movie_id.setTextAlignment(Qt.AlignCenter)
            movie_title = QStandardItem(movie.title)
            movie_title.setTextAlignment(Qt.AlignCenter)
            filmDirector = QStandardItem(film_director.name + " " + film_director.surname)
            filmDirector.setTextAlignment(Qt.AlignCenter)
            genreI = QStandardItem(genre.name)
            genreI.setTextAlignment(Qt.AlignCenter)
            status = QStandardItem(movie_status.name)
            status.setTextAlignment(Qt.AlignCenter)
            status.setForeground(QBrush(getColorStatus(movie.status_id, movie)))

            self.model.setItem(row, 0, movie_id)
            self.model.setItem(row, 1, movie_title)
            self.model.setItem(row, 2, filmDirector)
            self.model.setItem(row, 3, genreI)
            self.model.setItem(row, 4, status)

        self.ui.allMovies_tableView.setModel(self.filter_proxy_model)
        self.ui.allMovies_tableView.setColumnHidden(0, True)

        self.ui.searchMovie_lineEdit.textChanged.connect(self.filter_proxy_model.setFilterRegExp)

    def movie_details(self):
        row = self.ui.allMovies_tableView.selectionModel().selectedRows()[0].row()
        id = self.filter_proxy_model.index(row, 0).data()
        result = movie_session.query(Movie, Film_director, Genre, MovieStatus).select_from(Movie).filter_by(id=id).join(Film_director).join(Genre).join(MovieStatus).first()

        movie, film_director, genre, status = result
        movie_view = self.parent().findChild(QWidget, 'movie_window')
        movie_view.updateValues(movie, film_director, genre, status)
        self.parent().setCurrentWidget(movie_view)
class SpellingDictionaryEditDialog(QDialog, Ui_SpellingDictionaryEditDialog):
    """
    Class implementing a dialog to edit the various spell checking
    dictionaries.
    """
    def __init__(self, data, info, parent=None):
        """
        Constructor
        
        @param data contents to be edited (string)
        @param info info string to show at the header (string)
        @param parent reference to the parent widget (QWidget)
        """
        super(SpellingDictionaryEditDialog, self).__init__(parent)
        self.setupUi(self)

        self.infoLabel.setText(info)

        self.__model = QStringListModel(
            [line.strip() for line in data.splitlines() if line.strip()], self)
        self.__model.sort(0)
        self.__proxyModel = QSortFilterProxyModel(self)
        self.__proxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.__proxyModel.setDynamicSortFilter(True)
        self.__proxyModel.setSourceModel(self.__model)
        self.wordList.setModel(self.__proxyModel)

        self.searchEdit.textChanged.connect(
            self.__proxyModel.setFilterFixedString)

        self.removeButton.clicked.connect(self.wordList.removeSelected)
        self.removeAllButton.clicked.connect(self.wordList.removeAll)

    @pyqtSlot()
    def on_addButton_clicked(self):
        """
        Private slot to handle adding an entry.
        """
        self.__model.insertRow(self.__model.rowCount())
        self.wordList.edit(
            self.__proxyModel.index(self.__model.rowCount() - 1, 0))

    def getData(self):
        """
        Public method to get the data.
        
        @return data of the dialog (string)
        """
        return os.linesep.join([
            line.strip() for line in self.__model.stringList() if line.strip()
        ]) + os.linesep
Exemplo n.º 3
0
class SpellingDictionaryEditDialog(QDialog, Ui_SpellingDictionaryEditDialog):
    """
    Class implementing a dialog to edit the various spell checking
    dictionaries.
    """
    def __init__(self, data, info, parent=None):
        """
        Constructor
        
        @param data contents to be edited (string)
        @param info info string to show at the header (string)
        @param parent reference to the parent widget (QWidget)
        """
        super(SpellingDictionaryEditDialog, self).__init__(parent)
        self.setupUi(self)
        
        self.infoLabel.setText(info)
        
        self.__model = QStringListModel(data.splitlines(), self)
        self.__model.sort(0)
        self.__proxyModel = QSortFilterProxyModel(self)
        self.__proxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.__proxyModel.setDynamicSortFilter(True)
        self.__proxyModel.setSourceModel(self.__model)
        self.wordList.setModel(self.__proxyModel)
        
        self.searchEdit.textChanged.connect(
            self.__proxyModel.setFilterFixedString)
        
        self.removeButton.clicked.connect(self.wordList.removeSelected)
        self.removeAllButton.clicked.connect(self.wordList.removeAll)
    
    @pyqtSlot()
    def on_addButton_clicked(self):
        """
        Private slot to handle adding an entry.
        """
        self.__model.insertRow(self.__model.rowCount())
        self.wordList.edit(
            self.__proxyModel.index(self.__model.rowCount() - 1, 0))
    
    def getData(self):
        """
        Public method to get the data.
        
        @return data of the dialog (string)
        """
        return os.linesep.join(
            [line for line in self.__model.stringList() if line])
Exemplo n.º 4
0
class AllFilmDirectorsView(QWidget):
    def __init__(self, parent):
        super().__init__(parent)
        self.ui = Ui_AllFilmDirectors_window()
        self.ui.setupUi(self)

        self.labels = ['Id', 'Name', 'Surname']
        self.ui.allFilmDirectors_tableView.clicked.connect(
            self.filmDirector_details)

        self.show()

    def loadData(self):
        filmDirectors = movie_session.query(Film_director).all()
        self.model = QStandardItemModel(len(filmDirectors), len(self.labels))
        self.model.setHorizontalHeaderLabels(self.labels)

        self.filter_proxy_model = QSortFilterProxyModel()
        self.filter_proxy_model.setFilterKeyColumn(-1)
        self.filter_proxy_model.setSourceModel(self.model)

        for row, filmDirector in enumerate(filmDirectors):
            filmDirector_id = QStandardItem(str(filmDirector.id))
            filmDirector_id.setTextAlignment(Qt.AlignCenter)
            filmDirector_name = QStandardItem(filmDirector.name)
            filmDirector_name.setTextAlignment(Qt.AlignCenter)
            filmDirector_surname = QStandardItem(filmDirector.surname)
            filmDirector_surname.setTextAlignment(Qt.AlignCenter)

            self.model.setItem(row, 0, filmDirector_id)
            self.model.setItem(row, 1, filmDirector_name)
            self.model.setItem(row, 2, filmDirector_surname)

        self.ui.allFilmDirectors_tableView.setModel(self.filter_proxy_model)
        self.ui.allFilmDirectors_tableView.setColumnHidden(0, True)

        self.ui.searchFilmDirector_lineEdit.textChanged.connect(
            self.filter_proxy_model.setFilterRegExp)

    def filmDirector_details(self):
        row = self.ui.allFilmDirectors_tableView.selectionModel().selectedRows(
        )[0].row()
        id = self.filter_proxy_model.index(row, 0).data()
        filmDirector = movie_session.query(Film_director).filter_by(
            id=id).first()
        filmDirector_view = self.parent().findChild(QWidget,
                                                    'filmDirector_window')
        filmDirector_view.updateValues(filmDirector)
        self.parent().setCurrentWidget(filmDirector_view)
Exemplo n.º 5
0
class TagChooser(Ui_Form, QWidget):
    def __init__(self, *args, **kwargs):
        super(TagChooser, self).__init__(*args, **kwargs)
        self.setupUi(self)

        with open_db() as db:
            self.tags_model = CheckableTagsListModel(db, parent=self)

            self.filter_model = QSortFilterProxyModel(self)
            self.filter_model.setSourceModel(self.tags_model)

            self.tagsList.setModel(self.filter_model)

        self.filterEdit.textEdited.connect(self.tags_model.setNewTagItem)
        self.filterEdit.textEdited.connect(
            self.filter_model.setFilterFixedString)
        self.filterEdit.textEdited.connect(self.selectAtLeastOne)
        self.filterEdit.installEventFilter(self)

        self.selectAtLeastOne()

    def setCheckedTags(self, tags, semi=()):
        self.tags_model.set_checked(tags, semi)

    def checkedTags(self):
        return self.tags_model.get_checked()

    @Slot()
    def selectAtLeastOne(self):
        if not self.tagsList.selectionModel().hasSelection():
            self.tagsList.selectionModel().setCurrentIndex(
                self.filter_model.index(0, 0),
                QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows)

    def eventFilter(self, target, event):
        if target is not self.filterEdit:
            return super(TagChooser, self).eventFilter(target, event)

        elif event.type() != event.KeyPress:
            return False
        elif event.key() in (Qt.Key_Up, Qt.Key_Down):
            self.tagsList.event(event)
            return True
        elif event.key() == Qt.Key_Space:
            self.tagsList.event(event)
            return True
        return False
Exemplo n.º 6
0
class AllGenresView(QWidget):
    def __init__(self, parent):
        super().__init__(parent)
        self.ui = Ui_allGenres_window()
        self.ui.setupUi(self)

        self.labels = ['Id', 'Name']

        self.ui.allGenres_tableView.clicked.connect(self.editGenre)

        self.show()

    def loadData(self):
        genres = movie_session.query(Genre).all()
        self.model = QStandardItemModel(len(genres), len(self.labels))
        self.model.setHorizontalHeaderLabels(self.labels)

        self.filter_proxy_model = QSortFilterProxyModel()
        self.filter_proxy_model.setFilterKeyColumn(-1)
        self.filter_proxy_model.setSourceModel(self.model)

        for row, genre in enumerate(genres):
            genre_id = QStandardItem(str(genre.id))
            genre_id.setTextAlignment(Qt.AlignCenter)
            genre_name = QStandardItem(genre.name)
            genre_name.setTextAlignment(Qt.AlignCenter)
            self.model.setItem(row, 0, genre_id)
            self.model.setItem(row, 1, genre_name)

        self.ui.allGenres_tableView.setModel(self.filter_proxy_model)
        self.ui.allGenres_tableView.setColumnHidden(0, True)

        self.ui.searchGenre_lineEdit.textChanged.connect(
            self.filter_proxy_model.setFilterRegExp)

    def editGenre(self):
        row = self.ui.allGenres_tableView.selectionModel().selectedRows(
        )[0].row()
        id = self.filter_proxy_model.index(row, 0).data()
        genre = movie_session.query(Genre).filter_by(id=id).first()
        genre_view = self.parent().findChild(QWidget, 'genre_window')
        genre_view.updateValues(genre)
        self.parent().setCurrentWidget(genre_view)
Exemplo n.º 7
0
class MinibufferInput(QLineEdit):
    completion_activated = Signal(QModelIndex)

    FuzzyMatch = Prompt.FuzzyMatch
    SimpleMatch = Prompt.SimpleMatch

    def __init__(self, parent, window):
        QLineEdit.__init__(self, parent)
        self._completer_model = None
        self._popup = Popup(window, self)
        self.textEdited.connect(self._show_completions)
        self._popup.installEventFilter(self)
        self.installEventFilter(self)
        self._eat_focusout = False
        self._proxy_model = QSortFilterProxyModel(self)
        self._proxy_model.setFilterKeyColumn(-1)
        self._popup.setModel(self._proxy_model)
        self._popup.activated.connect(self._on_completion_activated)
        self._popup.selectionModel().currentRowChanged.connect(
            self._on_row_changed)
        self._right_italic_text = ""
        self._mark = False
        self.configure_completer({})

        from ..keyboardhandler import LOCAL_KEYMAP_SETTER
        LOCAL_KEYMAP_SETTER.register_minibuffer_input(self)

    def configure_completer(self, opts):
        self._popup._max_visible_items = opts.get("max-visible-items", 10)
        self._match = opts.get("match", self.SimpleMatch)
        self._autocomplete_single = opts.get("autocomplete-single", True)
        self._autocomplete = opts.get("autocomplete", False)
        if self._autocomplete:
            self._autocomplete_single = False
        self._complete_empty = opts.get("complete-empty", False)

    def keymap(self):
        prompt = self.parent()._prompt
        if prompt and prompt.keymap:
            return prompt.keymap
        return KEYMAP

    def eventFilter(self, obj, event):
        etype = event.type()
        if etype == QEvent.FocusOut and obj == self and self._eat_focusout \
           and self._popup.isVisible():
            # keep the focus on the line edit
            return True
        elif etype == QEvent.MouseButtonPress:
            # if we've clicked in the widget (or its descendant), let it handle
            # the click
            pos = obj.mapToGlobal(event.pos())
            target = QApplication.widgetAt(pos)
            if target and (self.isAncestorOf(target) or target == self):
                if not self._popup.underMouse():
                    self._popup.hide()
                target.event(event)
                return True

            if not self._popup.underMouse():
                self._popup.hide()
                return True
        elif etype in (QEvent.KeyPress, QEvent.KeyRelease):
            # send event to the line edit
            self._eat_focusout = True
            self.event(event)
            self._eat_focusout = False
            return True

        return QLineEdit.eventFilter(self, obj, event)

    def set_completer_model(self, completer_model):
        self._proxy_model.setSourceModel(completer_model)

    def completer_model(self):
        return self._proxy_model.sourceModel()

    def set_match(self, type):
        self._match = type
        if self._popup.isVisible():
            self._show_completions(self.text)

    def _on_row_changed(self, current, old):
        if self._autocomplete:
            self.complete(hide_popup=False)

    def _show_completions(self, txt, force=False):
        force = force or self._complete_empty
        if self._match == self.SimpleMatch:
            pattern = "^" + QRegExp.escape(txt)
        else:
            pattern = ".*".join(QRegExp.escape(t) for t in txt.split())

        self._proxy_model.setFilterRegExp(QRegExp(pattern, Qt.CaseInsensitive))
        if self._proxy_model.rowCount() == 0:
            self._popup.hide()
        elif not txt and not force:
            self._popup.hide()
        else:
            self._popup.popup()

    def show_completions(self):
        self._show_completions(self.text(), True)

    def _on_completion_activated(self, index, hide_popup=True):
        if hide_popup:
            self._popup.hide()
        model = index.model()
        if index.column() != 0:
            index = model.index(index.row(), 0)

        self.setText(model.data(index))
        self.completion_activated.emit(model.mapToSource(index))

    def popup(self):
        return self._popup

    def complete(self, hide_popup=True):
        if not self._popup.isVisible():
            return

        index = self._popup.selectionModel().currentIndex()
        if index.isValid():
            self._on_completion_activated(index, hide_popup=hide_popup)
        elif self._autocomplete_single and self._proxy_model.rowCount() == 1:
            self._on_completion_activated(self._proxy_model.index(0, 0),
                                          hide_popup=hide_popup)

    def select_next_completion(self, forward=True):
        model = self._proxy_model
        entries = model.rowCount()
        if entries == 0:
            return

        selection = self._popup.selectionModel().currentIndex()
        if not selection.isValid():
            row = 0 if forward else (entries - 1)
        else:
            row = selection.row()
            if forward:
                row = row + 1
                if row >= entries:
                    row = 0
            else:
                row = row - 1
                if row < 0:
                    row = (entries - 1)

        self._popup.selectRow(row)

    def mark(self):
        return self._mark

    def set_mark(self, value=None):
        if value is None:
            value = not self._mark
        self._mark = value
        return self._mark

    def reinit(self):
        self.setText("")
        self.setEchoMode(self.Normal)
        self.setValidator(None)
        self._right_italic_text = ""

    def set_right_italic_text(self, text):
        self._right_italic_text = text
        self.update()

    def paintEvent(self, event):
        QLineEdit.paintEvent(self, event)
        if not self._right_italic_text:
            return
        painter = QPainter(self)
        font = painter.font()
        font.setItalic(True)
        painter.setFont(font)
        painter.setRenderHint(QPainter.Antialiasing, True)
        painter.drawText(self.rect().adjusted(0, 0, -10, 0), Qt.AlignRight,
                         self._right_italic_text)
Exemplo n.º 8
0
class MasternodesWidget(QWidget):
    """Widget that displays masternodes."""
    def __init__(self, manager, parent=None):
        super(MasternodesWidget, self).__init__(parent)
        self.manager = manager
        self.model = MasternodesModel(self.manager)
        self.proxy_model = QSortFilterProxyModel()
        self.proxy_model.setSourceModel(self.model)
        self.view = QTableView()
        self.view.setModel(self.proxy_model)
        for header in [self.view.horizontalHeader(), self.view.verticalHeader()]:
            header.setHighlightSections(False)

        header = self.view.horizontalHeader()
        header.setSectionResizeMode(MasternodesModel.ALIAS, QHeaderView.ResizeToContents)
        header.setSectionResizeMode(MasternodesModel.VIN, QHeaderView.Stretch)
        header.setSectionResizeMode(MasternodesModel.COLLATERAL, QHeaderView.ResizeToContents)
        header.setSectionResizeMode(MasternodesModel.DELEGATE, QHeaderView.ResizeToContents)
        self.view.verticalHeader().setVisible(False)

        self.view.setSelectionMode(QAbstractItemView.SingleSelection)
        self.view.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.view.setSortingEnabled(True)
        self.view.sortByColumn(self.model.ALIAS, Qt.AscendingOrder)

        vbox = QVBoxLayout()
        vbox.setContentsMargins(0, 0, 0, 0)
        vbox.addWidget(self.view)
        self.setLayout(vbox)

    def select_masternode(self, alias):
        """Select the row that represents alias."""
        self.view.clearSelection()
        for i in range(self.proxy_model.rowCount()):
            idx = self.proxy_model.index(i, 0)
            mn_alias = str(self.proxy_model.data(idx))
            if mn_alias == alias:
                self.view.selectRow(i)
                break

    def populate_collateral_key(self, row):
        """Fill in the collateral key for a masternode based on its collateral output.

        row refers to the desired row in the proxy model, not the actual model.
        """
        mn = self.masternode_for_row(row)
        self.manager.populate_masternode_output(mn.alias)
        # Emit dataChanged for the collateral key.
        index = self.model.index(row, self.model.COLLATERAL)
        self.model.dataChanged.emit(index, index)

    def refresh_items(self):
        self.model.dataChanged.emit(QModelIndex(), QModelIndex())

    def add_masternode(self, masternode, save = True):
        self.model.add_masternode(masternode, save=save)

    def remove_masternode(self, alias, save = True):
        self.model.remove_masternode(alias, save=save)

    def masternode_for_row(self, row):
        idx = self.proxy_model.mapToSource(self.proxy_model.index(row, 0))
        return self.model.masternode_for_row(idx.row())

    def import_masternode_conf_lines(self, conf_lines, pw):
        return self.model.import_masternode_conf_lines(conf_lines, pw)
Exemplo n.º 9
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.filename = None
        self.data_changed = False
        self.file_data = None

        self.open_file_dir = os.path.expanduser('~')

        self.ui = loadUi('gui/MainWindow.ui', self)

        self.ui.action_Open.triggered.connect(self.menu_open)
        self.ui.action_Save.triggered.connect(self.menu_save)
        self.ui.action_Close.triggered.connect(self.menu_close)
        self.ui.action_Exit.triggered.connect(qApp.quit)

        self.ui.action_ShowMap.triggered.connect(self.show_map)
        self.ui.action_BoltChecker.triggered.connect(self.show_boltchecker)

        self.datamodel = QSortFilterProxyModel()
        self.datamodel.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.datamodel.setSortCaseSensitivity(Qt.CaseInsensitive)
        self.ui.treeView.setSortingEnabled(False)
        self.ui.treeView.setModel(self.datamodel)
        self.ui.treeView.setSortingEnabled(True)

        self.ui.treeView.doubleClicked.connect(self.treeView_doubleClicked)
        self.ui.treeView.selectionModel().selectionChanged.connect(
            self.treeView_selectionChanged)
        self.ui.searchField.textChanged.connect(self.searchField_textChanged)

    def menu_open(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file',
                                            self.open_file_dir)
        if fname[0]:
            self.open_file(fname[0])

    def open_file(self, filename):
        self.filename = filename
        self.open_file_dir = os.path.dirname(self.filename)
        with open(filename, 'rb') as f:
            reader = ES2Reader(f)
            self.file_data = reader.read_all()
        self.update_tree(self.file_data)
        self.set_changed(False)
        self.ui.action_Close.setEnabled(True)

    def set_changed(self, changed=True):
        self.data_changed = changed
        self.ui.action_Save.setEnabled(self.data_changed)

    def menu_save(self):
        for i in range(100):
            backup_filename = '{}.{}'.format(self.filename, i)
            if not os.path.exists(backup_filename):
                shutil.copy2(self.filename, backup_filename)
                break
        else:
            raise Exception('Too many backups!')

        with open(self.filename, 'wb') as f:
            writer = ES2Writer(f)
            for k, v in self.file_data.items():
                writer.save(k, v)
            writer.save_all()

        self.set_changed(False)

    def menu_close(self):
        self.ui.action_Save.setEnabled(False)
        self.ui.action_Close.setEnabled(False)
        self.filename = None
        self.file_data = None
        self.update_tree(None)

    def update_tree(self, file_data=None):
        self.datamodel.setSourceModel(TreeModel(file_data))
        self.ui.treeView.sortByColumn(0, Qt.AscendingOrder)
        self.ui.treeView.resizeColumnToContents(0)

    def treeView_selectionChanged(self):
        pass
        # indexes = self.ui.treeView.selectionModel().selection().indexes()
        # if len(indexes) > 0:
        #     index = indexes[0]
        #     tag = self.datamodel.data(index)
        #     print('selectionChanged')
        #     print(self.file_data[item].header.value_type)
        #     print(self.file_data[item].value)

    def treeView_doubleClicked(self):
        index = self.ui.treeView.selectionModel().selection().indexes()[0]
        self.edit_index(index)

    def edit_index(self, index):
        tag = index.data()
        dialog = EditDialog(tag, self.file_data[tag], self)
        result = dialog.exec_()
        if result == QDialog.Accepted:
            dialog_result = dialog.get_value()
            if self.file_data[tag].value == dialog_result:
                return
            self.set_changed()
            self.file_data[tag].value = dialog_result
            value_index = self.datamodel.index(index.row(), 2)
            self.datamodel.setData(value_index, dialog_result)

    def searchField_textChanged(self, text):
        self.datamodel.setFilterWildcard(text)

    def show_map(self):
        dialog = MapViewDialog(self.file_data, self)
        dialog.exec_()

    def show_boltchecker(self):
        dialog = BoltCheckerDialog(self.file_data, self)
        dialog.exec_()
Exemplo n.º 10
0
class FileChooser(BaseFileChooser):
	def __init__(self, **kwargs):
		super(FileChooser, self).__init__(**kwargs)

		self.options = PropDict()

		self.edit.textEdited.connect(self._onTextEdited)

		self.view.activated.connect(self._onActivated)

		# models
		self.rootChanger = RootChangerProxy()

		fsModel = QFileSystemModel(self)
		self.setModel(fsModel)

		self.filter = QSortFilterProxyModel()
		self.filter.setSourceModel(self.rootChanger)
		self.view.setModel(self.filter)

	def setModel(self, model):
		self.baseModel = model
		self.rootChanger.setSourceModel(self.baseModel)

	@Slot(str)
	def setRoot(self, path):
		self.root = path
		srcIdx = self.baseModel.setRootPath(path)
		self.rootChanger.setRootSource(srcIdx)
		self.view.setRootIndex(QModelIndex())

	@Slot(str)
	def _onTextEdited(self, txt):
		elems = txt.rsplit('/', 1)
		if len(elems) == 2:
			dir, base = elems
		else:
			dir, base = '', elems[0]

		path = os.path.join(self.root, dir)
		self.rootChanger.setRootSource(self.baseModel.index(path))
		self.filter.setFilterRegExp(QRegExp(base, Qt.CaseInsensitive, QRegExp.Wildcard))

		if self.options.get('autosuggest'):
			names = [self.filter.data(self.filter.index(i, 0)).toString()
				 for i in range(self.filter.rowCount(QModelIndex()))]
			names = [n[len(base):] for n in names]
			add = commonPrefix(names)

			cursor = self.edit.cursorPosition()
			self.edit.setText(self.edit.text()[:cursor] + add)
			self.edit.setSelection(cursor, len(self.edit.text()))

	@Slot(QModelIndex)
	def _onActivated(self, idx):
		idx = self.filter.mapToSource(idx)
		idx = self.rootChanger.mapToSource(idx)
		info = self.baseModel.fileInfo(idx)
		if info.isDir():
			return
		path = info.absoluteFilePath()
		self.openFile(path)
Exemplo n.º 11
0
class AllBooksView(QWidget):
    def __init__(self, parent):
        super().__init__(parent)
        self.ui = Ui_allBooks_window()
        self.ui.setupUi(self)

        self.labels = ['Id', 'Title', 'ISBN', 'Author', 'Genre', 'Status']

        self.ui.allBooks_tableView.clicked.connect(self.book_details)

        self.show()

    """def createRangeSlider(self):
        slider = QLabeledRangeSlider(Qt.Horizontal)
        self.ui.verticalLayout_2.addWidget(slider)
        slider.setHandleLabelPosition(QLabeledRangeSlider.LabelPosition.LabelsAbove)

        return slider

    def updateValues(self):
        books = book_session.query(Book).all()
        minPages, maxPages = books[0].pages, books[0].pages
        for i in range(1, len(books)):
            book = books[i]
            if book.pages < minPages: minPages = book.pages
            if book.pages > maxPages: maxPages = book.pages

        self.pagesSlider.setMaximum(maxPages)
        self.pagesSlider.setMinimum(minPages)

        self.pagesSlider.setValue((minPages + (maxPages - minPages) / 5, maxPages - (maxPages - minPages) / 5))
        
        self.yearSlider.setMaximum(ACTUAL_YEAR)
        self.yearSlider.setMinimum(FIRST_YEAR_BOOK)

        self.yearSlider.setValue((FIRST_YEAR_BOOK + (ACTUAL_YEAR - FIRST_YEAR_BOOK) / 5, ACTUAL_YEAR - (ACTUAL_YEAR - FIRST_YEAR_BOOK) / 5))"""

    def loadData(self):
        results = book_session.query(
            Book, Author, Genre, BookStatus).select_from(Book).join(
                Author).join(Genre).join(BookStatus).all()
        self.model = QStandardItemModel(len(results), len(self.labels))
        self.model.setHorizontalHeaderLabels(self.labels)

        self.filter_proxy_model = QSortFilterProxyModel()
        self.filter_proxy_model.setFilterKeyColumn(
            -1)  # LETTURA DA TUTTE LE COLONNE
        self.filter_proxy_model.setSourceModel(self.model)

        for row, (book, author, genre, status) in enumerate(results):
            book_id = QStandardItem(str(book.id))
            book_id.setTextAlignment(Qt.AlignCenter)
            book_title = QStandardItem(book.title)
            book_title.setTextAlignment(Qt.AlignCenter)
            book_isbn = QStandardItem(book.isbn)
            book_isbn.setTextAlignment(Qt.AlignCenter)
            authorI = QStandardItem(author.name + " " + author.surname)
            authorI.setTextAlignment(Qt.AlignCenter)
            genreI = QStandardItem(genre.name)
            genreI.setTextAlignment(Qt.AlignCenter)
            status = QStandardItem(status.name)
            status.setTextAlignment(Qt.AlignCenter)
            status.setForeground(QBrush(getColorStatus(book.status_id, book)))

            self.model.setItem(row, 0, book_id)
            self.model.setItem(row, 1, book_title)
            self.model.setItem(row, 2, book_isbn)
            self.model.setItem(row, 3, authorI)
            self.model.setItem(row, 4, genreI)
            self.model.setItem(row, 5, status)

        self.ui.allBooks_tableView.setModel(self.filter_proxy_model)
        self.ui.allBooks_tableView.setColumnHidden(0, True)

        self.ui.searchBook_lineEdit.textChanged.connect(
            self.filter_proxy_model.setFilterRegExp)

    def book_details(self):
        row = self.ui.allBooks_tableView.selectionModel().selectedRows(
        )[0].row()
        id = self.filter_proxy_model.index(row, 0).data()
        result = book_session.query(
            Book, Author, Genre, BookStatus).select_from(Book).filter_by(
                id=id).join(Author).join(Genre).join(BookStatus).first()

        print(result)
        book, author, genre, status = result
        print(book.id, author.id, genre.id, status.id)
        book_view = self.parent().findChild(QWidget, 'book_window')
        book_view.updateValues(book, author, genre, status)
        self.parent().setCurrentWidget(book_view)
Exemplo n.º 12
0
class FileChooser(BaseFileChooser):
	def __init__(self, **kwargs):
		super(FileChooser, self).__init__(**kwargs)

		self.options = PropDict()

		self.edit.textEdited.connect(self._onTextEdited)

		self.view.activated.connect(self._onActivated)

		# models
		self.rootChanger = RootChangerProxy()

		fsModel = QFileSystemModel(self)
		self.setModel(fsModel)

		self.filter = QSortFilterProxyModel()
		self.filter.setSourceModel(self.rootChanger)
		self.view.setModel(self.filter)

	def setModel(self, model):
		self.baseModel = model
		self.rootChanger.setSourceModel(self.baseModel)

	@Slot(str)
	def setRoot(self, path):
		self.root = path
		srcIdx = self.baseModel.setRootPath(path)
		self.rootChanger.setRootSource(srcIdx)
		self.view.setRootIndex(QModelIndex())

	@Slot(str)
	def _onTextEdited(self, txt):
		elems = txt.rsplit('/', 1)
		if len(elems) == 2:
			dir, base = elems
		else:
			dir, base = '', elems[0]

		path = os.path.join(self.root, dir)
		self.rootChanger.setRootSource(self.baseModel.index(path))
		self.filter.setFilterRegExp(QRegExp(base, Qt.CaseInsensitive, QRegExp.Wildcard))

		if self.options.get('autosuggest'):
			names = [self.filter.data(self.filter.index(i, 0)).toString()
				 for i in range(self.filter.rowCount(QModelIndex()))]
			names = [n[len(base):] for n in names]
			add = commonPrefix(names)

			cursor = self.edit.cursorPosition()
			self.edit.setText(self.edit.text()[:cursor] + add)
			self.edit.setSelection(cursor, len(self.edit.text()))

	@Slot(QModelIndex)
	def _onActivated(self, idx):
		idx = self.filter.mapToSource(idx)
		idx = self.rootChanger.mapToSource(idx)
		info = self.baseModel.fileInfo(idx)
		if info.isDir():
			return
		path = info.absoluteFilePath()
		self.openFile(path)