Fixed delegate display error, tab retention
This commit is contained in:
		
							
								
								
									
										56
									
								
								__main__.py
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								__main__.py
									
									
									
									
									
								
							| @@ -72,6 +72,14 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|         super(MainUI, self).__init__() |         super(MainUI, self).__init__() | ||||||
|         self.setupUi(self) |         self.setupUi(self) | ||||||
|  |  | ||||||
|  |         # Empty variables that will be infested soon | ||||||
|  |         self.last_open_books = None | ||||||
|  |         self.last_open_tab = None | ||||||
|  |         self.last_open_path = None | ||||||
|  |         self.thread = None  # Background Thread | ||||||
|  |         self.viewModel = None | ||||||
|  |         self.current_contentView = None  # For fullscreening purposes | ||||||
|  |  | ||||||
|         # Initialize application |         # Initialize application | ||||||
|         Settings(self).read_settings()  # This should populate all variables that need |         Settings(self).read_settings()  # This should populate all variables that need | ||||||
|                                         # to be remembered across sessions |                                         # to be remembered across sessions | ||||||
| @@ -79,16 +87,12 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|         # Create the database in case it doesn't exist |         # Create the database in case it doesn't exist | ||||||
|         database.DatabaseInit(self.database_path) |         database.DatabaseInit(self.database_path) | ||||||
|  |  | ||||||
|         # Background Thread |  | ||||||
|         self.thread = None |  | ||||||
|  |  | ||||||
|         # Create and right align the statusbar label widget |         # Create and right align the statusbar label widget | ||||||
|         self.statusMessage = QtWidgets.QLabel() |         self.statusMessage = QtWidgets.QLabel() | ||||||
|         self.statusMessage.setObjectName('statusMessage') |         self.statusMessage.setObjectName('statusMessage') | ||||||
|         self.statusBar.addPermanentWidget(self.statusMessage) |         self.statusBar.addPermanentWidget(self.statusMessage) | ||||||
|  |  | ||||||
|         # Init the QListView |         # Init the QListView | ||||||
|         self.viewModel = None |  | ||||||
|         self.lib_ref = Library(self) |         self.lib_ref = Library(self) | ||||||
|  |  | ||||||
|         # Application wide temporary directory |         # Application wide temporary directory | ||||||
| @@ -127,9 +131,6 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|         self.tab_switch() |         self.tab_switch() | ||||||
|         self.tabWidget.currentChanged.connect(self.tab_switch) |         self.tabWidget.currentChanged.connect(self.tab_switch) | ||||||
|  |  | ||||||
|         # For fullscreening purposes |  | ||||||
|         self.current_contentView = None |  | ||||||
|  |  | ||||||
|         # Tab closing |         # Tab closing | ||||||
|         self.tabWidget.setTabsClosable(True) |         self.tabWidget.setTabsClosable(True) | ||||||
|         # TODO |         # TODO | ||||||
| @@ -151,6 +152,9 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|         self.exit_all.setContext(QtCore.Qt.ApplicationShortcut) |         self.exit_all.setContext(QtCore.Qt.ApplicationShortcut) | ||||||
|         self.exit_all.activated.connect(self.closeEvent) |         self.exit_all.activated.connect(self.closeEvent) | ||||||
|  |  | ||||||
|  |         # Open last... open books. | ||||||
|  |         self.open_files(self.last_open_books) | ||||||
|  |         self.last_open_books = None | ||||||
|  |  | ||||||
|     def resizeEvent(self, event=None): |     def resizeEvent(self, event=None): | ||||||
|         if event: |         if event: | ||||||
| @@ -316,11 +320,6 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|  |  | ||||||
|     def list_doubleclick(self, myindex): |     def list_doubleclick(self, myindex): | ||||||
|         index = self.listView.model().index(myindex.row(), 0) |         index = self.listView.model().index(myindex.row(), 0) | ||||||
|         file_exists = self.listView.model().data(index, QtCore.Qt.UserRole + 5) |  | ||||||
|  |  | ||||||
|         if not file_exists: |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         metadata = self.listView.model().data(index, QtCore.Qt.UserRole + 3) |         metadata = self.listView.model().data(index, QtCore.Qt.UserRole + 3) | ||||||
|  |  | ||||||
|         # Shift focus to the tab that has the book open (if there is one) |         # Shift focus to the tab that has the book open (if there is one) | ||||||
| @@ -331,12 +330,30 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|                 return |                 return | ||||||
|  |  | ||||||
|         path = metadata['path'] |         path = metadata['path'] | ||||||
|         contents = sorter.BookSorter( |         self.open_files([path]) | ||||||
|             [path], 'reading', self.database_path, self.temp_dir.path()).initiate_threads() |  | ||||||
|  |  | ||||||
|         tab_ref = Tab(contents, self.tabWidget) |     def open_files(self, file_paths): | ||||||
|         self.tabWidget.setCurrentWidget(tab_ref) |         # file_paths is expected to be a list | ||||||
|         self.format_contentView() |         # This allows for threading file opening | ||||||
|  |         # Which should speed up multiple file opening | ||||||
|  |         # especially @ application start | ||||||
|  |         if not file_paths: | ||||||
|  |             return | ||||||
|  |  | ||||||
|  |         contents = sorter.BookSorter( | ||||||
|  |             file_paths, 'reading', self.database_path, self.temp_dir.path()).initiate_threads() | ||||||
|  |  | ||||||
|  |         found_a_focusable_tab = False | ||||||
|  |  | ||||||
|  |         for i in contents: | ||||||
|  |             file_data = contents[i] | ||||||
|  |             Tab(file_data, self.tabWidget) | ||||||
|  |             if file_data['path'] == self.last_open_tab: | ||||||
|  |                 found_a_focusable_tab = True | ||||||
|  |                 self.tabWidget.setCurrentIndex(self.tabWidget.count() - 1) | ||||||
|  |  | ||||||
|  |         if not found_a_focusable_tab: | ||||||
|  |             self.tabWidget.setCurrentIndex(0) | ||||||
|  |  | ||||||
|     def get_color(self): |     def get_color(self): | ||||||
|         signal_sender = self.sender().objectName() |         signal_sender = self.sender().objectName() | ||||||
| @@ -445,13 +462,16 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): | |||||||
|         self.temp_dir.remove() |         self.temp_dir.remove() | ||||||
|         self.hide() |         self.hide() | ||||||
|  |  | ||||||
|  |         self.last_open_books = [] | ||||||
|         if self.tabWidget.count() > 1: |         if self.tabWidget.count() > 1: | ||||||
|             all_metadata = [] |  | ||||||
|  |  | ||||||
|  |             all_metadata = [] | ||||||
|             for i in range(1, self.tabWidget.count()): |             for i in range(1, self.tabWidget.count()): | ||||||
|                 tab_metadata = self.tabWidget.widget(i).metadata |                 tab_metadata = self.tabWidget.widget(i).metadata | ||||||
|  |                 self.last_open_books.append(tab_metadata['path']) | ||||||
|                 all_metadata.append(tab_metadata) |                 all_metadata.append(tab_metadata) | ||||||
|  |  | ||||||
|  |             Settings(self).save_settings() | ||||||
|             self.thread = BackGroundTabUpdate(self.database_path, all_metadata) |             self.thread = BackGroundTabUpdate(self.database_path, all_metadata) | ||||||
|             self.thread.finished.connect(QtWidgets.qApp.exit) |             self.thread.finished.connect(QtWidgets.qApp.exit) | ||||||
|             self.thread.start() |             self.thread.start() | ||||||
|   | |||||||
| @@ -97,6 +97,8 @@ | |||||||
|    </property> |    </property> | ||||||
|   </widget> |   </widget> | ||||||
|  </widget> |  </widget> | ||||||
|  <resources/> |  <resources> | ||||||
|  |   <include location="resources.qrc"/> | ||||||
|  |  </resources> | ||||||
|  <connections/> |  <connections/> | ||||||
| </ui> | </ui> | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								settings.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								settings.py
									
									
									
									
									
								
							| @@ -58,6 +58,11 @@ class Settings: | |||||||
|             'currentProfileIndex', 0)) |             'currentProfileIndex', 0)) | ||||||
|         self.settings.endGroup() |         self.settings.endGroup() | ||||||
|  |  | ||||||
|  |         self.settings.beginGroup('lastOpen') | ||||||
|  |         self.parent_window.last_open_books = self.settings.value('lastOpenFiles', []) | ||||||
|  |         self.parent_window.last_open_tab = self.settings.value('lastOpenTab', 'library') | ||||||
|  |         self.settings.endGroup() | ||||||
|  |  | ||||||
|     def save_settings(self): |     def save_settings(self): | ||||||
|         self.settings.beginGroup('mainWindow') |         self.settings.beginGroup('mainWindow') | ||||||
|         self.settings.setValue('windowSize', self.parent_window.size()) |         self.settings.setValue('windowSize', self.parent_window.size()) | ||||||
| @@ -81,3 +86,17 @@ class Settings: | |||||||
|             current_profile3]) |             current_profile3]) | ||||||
|         self.settings.setValue('currentProfileIndex', current_profile_index) |         self.settings.setValue('currentProfileIndex', current_profile_index) | ||||||
|         self.settings.endGroup() |         self.settings.endGroup() | ||||||
|  |  | ||||||
|  |         # TODO | ||||||
|  |         # Last open order | ||||||
|  |         # Last open highlighted | ||||||
|  |         current_tab_index = self.parent_window.tabWidget.currentIndex() | ||||||
|  |         if current_tab_index == 0: | ||||||
|  |             last_open_tab = 'library' | ||||||
|  |         else: | ||||||
|  |             last_open_tab = self.parent_window.tabWidget.widget(current_tab_index).metadata['path'] | ||||||
|  |  | ||||||
|  |         self.settings.beginGroup('lastOpen') | ||||||
|  |         self.settings.setValue('lastOpenFiles', self.parent_window.last_open_books) | ||||||
|  |         self.settings.setValue('lastOpenTab', last_open_tab) | ||||||
|  |         self.settings.endGroup() | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ class BookSorter: | |||||||
|         # This includes getting file info for the database |         # This includes getting file info for the database | ||||||
|         # Parsing for the reader proper |         # Parsing for the reader proper | ||||||
|         # Caching upon closing |         # Caching upon closing | ||||||
|         self.file_list = file_list |         self.file_list = [i for i in file_list if os.path.exists(i)] | ||||||
|         self.statistics = [0, (len(file_list))] |         self.statistics = [0, (len(file_list))] | ||||||
|         self.all_books = {} |         self.all_books = {} | ||||||
|         self.hashes = [] |         self.hashes = [] | ||||||
| @@ -145,7 +145,7 @@ class BookSorter: | |||||||
|                     content['Invalid'] = 'Possible Parse Error' |                     content['Invalid'] = 'Possible Parse Error' | ||||||
|  |  | ||||||
|                 position = self.database_position(file_md5) |                 position = self.database_position(file_md5) | ||||||
|                 self.all_books = { |                 self.all_books[file_md5] = { | ||||||
|                     'title': title, |                     'title': title, | ||||||
|                     'author': author, |                     'author': author, | ||||||
|                     'year': year, |                     'year': year, | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								widgets.py
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								widgets.py
									
									
									
									
									
								
							| @@ -412,7 +412,6 @@ class LibraryDelegate(QtWidgets.QStyledItemDelegate): | |||||||
|         self.temp_dir = temp_dir |         self.temp_dir = temp_dir | ||||||
|  |  | ||||||
|     def paint(self, painter, option, index): |     def paint(self, painter, option, index): | ||||||
|         QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) |  | ||||||
|         # This is a hint for the future |         # This is a hint for the future | ||||||
|         # Color icon slightly red |         # Color icon slightly red | ||||||
|         # if option.state & QtWidgets.QStyle.State_Selected: |         # if option.state & QtWidgets.QStyle.State_Selected: | ||||||
| @@ -426,15 +425,23 @@ class LibraryDelegate(QtWidgets.QStyledItemDelegate): | |||||||
|         # TODO |         # TODO | ||||||
|         # Calculate progress on the basis of lines |         # Calculate progress on the basis of lines | ||||||
|  |  | ||||||
|  |         if not file_exists: | ||||||
|  |             read_icon = QtGui.QIcon.fromTheme('vcs-conflicting').pixmap(36) | ||||||
|  |             painter.setOpacity(.7) | ||||||
|  |             QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) | ||||||
|  |             painter.setOpacity(1) | ||||||
|  |             x_draw = option.rect.bottomRight().x() - 30 | ||||||
|  |             y_draw = option.rect.bottomRight().y() - 35 | ||||||
|  |             painter.drawPixmap(x_draw, y_draw, read_icon) | ||||||
|  |             return | ||||||
|  |  | ||||||
|  |         QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) | ||||||
|         if position: |         if position: | ||||||
|             current_chapter = position['current_chapter'] |             current_chapter = position['current_chapter'] | ||||||
|             total_chapters = position['total_chapters'] |             total_chapters = position['total_chapters'] | ||||||
|             progress_percent = int(current_chapter * 100 / total_chapters) |             progress_percent = int(current_chapter * 100 / total_chapters) | ||||||
|  |  | ||||||
|             if not file_exists: |             if current_chapter == total_chapters: | ||||||
|                 read_icon = QtGui.QIcon.fromTheme('vcs-conflicting').pixmap(36) |  | ||||||
|                 QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) |  | ||||||
|             elif current_chapter == total_chapters: |  | ||||||
|                 QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) |                 QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) | ||||||
|                 read_icon = QtGui.QIcon.fromTheme('vcs-normal').pixmap(36) |                 read_icon = QtGui.QIcon.fromTheme('vcs-normal').pixmap(36) | ||||||
|             elif current_chapter == 1: |             elif current_chapter == 1: | ||||||
| @@ -450,9 +457,6 @@ class LibraryDelegate(QtWidgets.QStyledItemDelegate): | |||||||
|             if current_chapter != 1: |             if current_chapter != 1: | ||||||
|                 painter.drawPixmap(x_draw, y_draw, read_icon) |                 painter.drawPixmap(x_draw, y_draw, read_icon) | ||||||
|  |  | ||||||
|         else: |  | ||||||
|             QtWidgets.QStyledItemDelegate.paint(self, painter, option, index) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class MyAbsModel(QtGui.QStandardItemModel, QtCore.QAbstractItemModel): | class MyAbsModel(QtGui.QStandardItemModel, QtCore.QAbstractItemModel): | ||||||
|     def __init__(self, parent=None): |     def __init__(self, parent=None): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user