Progress image generation for table
This commit is contained in:
@@ -56,12 +56,12 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
|
|||||||
self.statusBar.addWidget(self.sorterProgress)
|
self.statusBar.addWidget(self.sorterProgress)
|
||||||
self.sorterProgress.setVisible(False)
|
self.sorterProgress.setVisible(False)
|
||||||
|
|
||||||
# Init the Library
|
|
||||||
self.lib_ref = Library(self)
|
|
||||||
|
|
||||||
# Application wide temporary directory
|
# Application wide temporary directory
|
||||||
self.temp_dir = QtCore.QTemporaryDir()
|
self.temp_dir = QtCore.QTemporaryDir()
|
||||||
|
|
||||||
|
# Init the Library
|
||||||
|
self.lib_ref = Library(self)
|
||||||
|
|
||||||
# Library toolbar
|
# Library toolbar
|
||||||
self.libraryToolBar = LibraryToolBar(self)
|
self.libraryToolBar = LibraryToolBar(self)
|
||||||
self.libraryToolBar.addButton.triggered.connect(self.add_books)
|
self.libraryToolBar.addButton.triggered.connect(self.add_books)
|
||||||
|
@@ -129,11 +129,12 @@ class Library:
|
|||||||
# all_metadata is just being sent. It is not being displayed
|
# all_metadata is just being sent. It is not being displayed
|
||||||
# It will be correlated to the current row as its first userrole
|
# It will be correlated to the current row as its first userrole
|
||||||
self.table_rows.append(
|
self.table_rows.append(
|
||||||
(title, author, year, tags, all_metadata))
|
(title, author, None, year, tags, all_metadata))
|
||||||
|
|
||||||
def create_table_model(self):
|
def create_table_model(self):
|
||||||
table_header = ['Title', 'Author', 'Year', 'Tags']
|
table_header = ['Title', 'Author', 'Status', 'Year', 'Tags']
|
||||||
self.table_model = LibraryTableModel(table_header, self.table_rows)
|
self.table_model = LibraryTableModel(
|
||||||
|
table_header, self.table_rows, self.parent_window.temp_dir.path())
|
||||||
self.create_table_proxy_model()
|
self.create_table_proxy_model()
|
||||||
|
|
||||||
def create_table_proxy_model(self):
|
def create_table_proxy_model(self):
|
||||||
@@ -148,7 +149,7 @@ class Library:
|
|||||||
def update_table_proxy_model(self):
|
def update_table_proxy_model(self):
|
||||||
self.table_proxy_model.invalidateFilter()
|
self.table_proxy_model.invalidateFilter()
|
||||||
self.table_proxy_model.setFilterParams(
|
self.table_proxy_model.setFilterParams(
|
||||||
self.parent_window.libraryToolBar.searchBar.text(), [0, 1, 3])
|
self.parent_window.libraryToolBar.searchBar.text(), [0, 1, 4])
|
||||||
# This isn't needed, but it forces a model update every time the
|
# This isn't needed, but it forces a model update every time the
|
||||||
# text in the line edit changes. So I guess it is needed.
|
# text in the line edit changes. So I guess it is needed.
|
||||||
self.table_proxy_model.setFilterFixedString(
|
self.table_proxy_model.setFilterFixedString(
|
||||||
|
36
models.py
36
models.py
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui
|
from PyQt5 import QtCore, QtGui
|
||||||
|
from resources import pie_chart
|
||||||
|
|
||||||
|
|
||||||
class LibraryItemModel(QtGui.QStandardItemModel, QtCore.QAbstractItemModel):
|
class LibraryItemModel(QtGui.QStandardItemModel, QtCore.QAbstractItemModel):
|
||||||
@@ -13,10 +16,12 @@ class LibraryTableModel(QtCore.QAbstractTableModel):
|
|||||||
# Sorting is taken care of by the QSortFilterProxy model
|
# Sorting is taken care of by the QSortFilterProxy model
|
||||||
# which has an inbuilt sort method
|
# which has an inbuilt sort method
|
||||||
|
|
||||||
def __init__(self, header_data, display_data, parent=None):
|
def __init__(self, header_data, display_data, temp_dir=None, parent=None):
|
||||||
super(LibraryTableModel, self).__init__(parent)
|
super(LibraryTableModel, self).__init__(parent)
|
||||||
self.header_data = header_data
|
self.header_data = header_data
|
||||||
self.display_data = display_data
|
self.display_data = display_data
|
||||||
|
self.temp_dir = temp_dir # Is only needed for the main table
|
||||||
|
# This model is otherwise reusable if this remains None
|
||||||
|
|
||||||
def rowCount(self, parent):
|
def rowCount(self, parent):
|
||||||
return len(self.display_data)
|
return len(self.display_data)
|
||||||
@@ -28,13 +33,38 @@ class LibraryTableModel(QtCore.QAbstractTableModel):
|
|||||||
if not index.isValid():
|
if not index.isValid():
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
if role == QtCore.Qt.DecorationRole and index.column() == 2 and self.temp_dir:
|
||||||
|
return_pixmap = None
|
||||||
|
file_exists = self.display_data[index.row()][5]['file_exists']
|
||||||
|
position = self.display_data[index.row()][5]['position']
|
||||||
|
|
||||||
|
if not file_exists:
|
||||||
|
return_pixmap = QtGui.QIcon(':/images/error.svg').pixmap(
|
||||||
|
QtCore.Qt.SizeHintRole + 10)
|
||||||
|
|
||||||
|
if position:
|
||||||
|
current_chapter = position['current_chapter']
|
||||||
|
total_chapters = position['total_chapters']
|
||||||
|
progress_percent = int(current_chapter * 100 / total_chapters)
|
||||||
|
|
||||||
|
if current_chapter == total_chapters:
|
||||||
|
return_pixmap = QtGui.QIcon(':/images/checkmark.svg').pixmap(
|
||||||
|
QtCore.Qt.SizeHintRole + 10)
|
||||||
|
else:
|
||||||
|
pie_chart.GeneratePie(progress_percent, self.temp_dir).generate()
|
||||||
|
svg_path = os.path.join(self.temp_dir, 'lector_progress.svg')
|
||||||
|
return_pixmap = QtGui.QIcon(svg_path).pixmap(
|
||||||
|
QtCore.Qt.SizeHintRole + 10)
|
||||||
|
|
||||||
|
return return_pixmap
|
||||||
|
|
||||||
if role == QtCore.Qt.DisplayRole:
|
if role == QtCore.Qt.DisplayRole:
|
||||||
value = self.display_data[index.row()][index.column()]
|
value = self.display_data[index.row()][index.column()]
|
||||||
file_exists = self.display_data[index.row()][4]['file_exists']
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
elif role == QtCore.Qt.UserRole:
|
elif role == QtCore.Qt.UserRole:
|
||||||
# The rest of the roles can be accomodated here.
|
# The rest of the roles can be accomodated here.
|
||||||
value = self.display_data[index.row()][4]
|
value = self.display_data[index.row()][5]
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
return QtCore.QVariant()
|
return QtCore.QVariant()
|
||||||
|
@@ -339,7 +339,6 @@ class FixedPushButton(QtWidgets.QPushButton):
|
|||||||
class Tab(QtWidgets.QWidget):
|
class Tab(QtWidgets.QWidget):
|
||||||
def __init__(self, metadata, parent=None):
|
def __init__(self, metadata, parent=None):
|
||||||
# TODO
|
# TODO
|
||||||
# A horizontal slider to control flow
|
|
||||||
# Take hint from a position function argument to open the book
|
# Take hint from a position function argument to open the book
|
||||||
# at a specific page
|
# at a specific page
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user