From 82befeb89422a13bc0c842d911b2da6b774ebfdd Mon Sep 17 00:00:00 2001 From: BasioMeusPuga Date: Thu, 11 Jan 2018 11:28:59 +0530 Subject: [PATCH] Mouse cursor hiding implemented for comics view, Tab focus fixed --- TODO | 4 ++-- __main__.py | 41 ++++++++++++++++++++++++----------------- settings.py | 6 +++--- widgets.py | 31 +++++++++++++++++++++++++++---- 4 files changed, 56 insertions(+), 26 deletions(-) diff --git a/TODO b/TODO index 76f3497..81005f4 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,7 @@ TODO Options: Automatic library management ✓ Recursive file addition - Auto deletion + ✓ Auto deletion Add only one file type if multiple are present ✓ Remember files ✓ Check files (hashes) upon restart @@ -17,8 +17,8 @@ TODO ✓ Shift focus to the tab that has the book open ✓ Tie file deletion and tab closing to model updates ✓ Create separate thread for parser - Show progress in main window + ✓ Memory management ? Create emblem per filetype - Memory management Table view Ignore a / the / numbers for sorting purposes Put the path in the scope of the search diff --git a/__main__.py b/__main__.py index c242ffb..78f8bb6 100755 --- a/__main__.py +++ b/__main__.py @@ -43,12 +43,11 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): # Empty variables that will be infested soon self.settings = {} - self.last_open_tab = None - self.last_open_path = None self.thread = None # Background Thread self.current_contentView = None # For fullscreening purposes self.display_profiles = None self.current_profile_index = None + self.comic_profile = {} self.database_path = None self.library_filter_menu = None @@ -176,7 +175,6 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): self.reloadLibrary.setObjectName('reloadLibrary') self.reloadLibrary.setAutoRaise(True) self.reloadLibrary.clicked.connect(self.settings_dialog.start_library_scan) - # self.reloadLibrary.clicked.connect(self.cull_covers) # TODO self.tabWidget.tabBar().setTabButton( 0, QtWidgets.QTabBar.RightSide, self.reloadLibrary) @@ -233,7 +231,8 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): for i in range(self.lib_ref.proxy_model.rowCount()): all_indexes.add(self.lib_ref.proxy_model.index(i, 0)) - y_range = range(-20, self.listView.viewport().height(), 10) + y_range = list(range(0, self.listView.viewport().height(), 100)) + y_range.extend((-20, self.listView.viewport().height() + 20)) x_range = range(0, self.listView.viewport().width(), 80) visible_indexes = set() @@ -279,7 +278,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): this_item.setData(True, QtCore.Qt.UserRole + 8) def start_culling_timer(self): - self.culling_timer.start(50) + self.culling_timer.start(30) def test_function(self): print('Caesar si viveret, ad remum dareris') @@ -315,6 +314,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): layout_extra_space_per_image = space_left // num_images self.listView.setGridSize( QtCore.QSize(default_size + layout_extra_space_per_image, 250)) + self.start_culling_timer() except ZeroDivisionError: # Initial resize is ignored return @@ -325,7 +325,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): # from the libary in case of a database refresh opened_files = QtWidgets.QFileDialog.getOpenFileNames( - self, 'Open file', self.last_open_path, + self, 'Open file', self.settings['last_open_path'], f'eBooks ({self.available_parsers})') if not opened_files[0]: @@ -334,7 +334,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): self.settings_dialog.okButton.setEnabled(False) self.reloadLibrary.setEnabled(False) - self.last_open_path = os.path.dirname(opened_files[0][0]) + self.settings['last_open_path'] = os.path.dirname(opened_files[0][0]) self.sorterProgress.setVisible(True) self.statusMessage.setText('Adding books...') self.thread = BackGroundBookAddition( @@ -424,6 +424,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): if self.tabWidget.currentIndex() == 0: self.resizeEvent() + self.start_culling_timer() if self.settings['show_toolbars']: self.bookToolBar.hide() self.libraryToolBar.show() @@ -576,20 +577,26 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): True, self.temp_dir.path()).initiate_threads() - found_a_focusable_tab = False - for i in contents: + # New tabs are created here + # Initial position adjustment is carried out by the tab itself file_data = contents[i] - Tab(file_data, self.tabWidget) # New tabs are created here - # Initial position adjustment - # is carried out by the tab itself - if file_data['path'] == self.last_open_tab: - found_a_focusable_tab = True - self.tabWidget.setCurrentIndex(self.tabWidget.count() - 1) + Tab(file_data, self.tabWidget) - if not found_a_focusable_tab: - self.tabWidget.setCurrentIndex(self.tabWidget.count() - 1) + if self.settings['last_open_tab'] == 'library': + self.tabWidget.setCurrentIndex(0) + self.listView.setFocus() + self.settings['last_open_tab'] = None + return + for i in range(1, self.tabWidget.count()): + this_path = self.tabWidget.widget(i).metadata['path'] + if self.settings['last_open_tab'] == this_path: + self.tabWidget.setCurrentIndex(i) + self.settings['last_open_tab'] = None + return + + self.tabWidget.setCurrentIndex(self.tabWidget.count() - 1) self.format_contentView() def get_color(self): diff --git a/settings.py b/settings.py index 7664bd6..684db96 100644 --- a/settings.py +++ b/settings.py @@ -52,7 +52,7 @@ class Settings: self.settings.endGroup() self.settings.beginGroup('runtimeVariables') - self.parent.last_open_path = self.settings.value( + self.parent.settings['last_open_path'] = self.settings.value( 'lastOpenPath', os.path.expanduser('~')) self.parent.database_path = self.settings.value( 'databasePath', @@ -67,7 +67,7 @@ class Settings: self.settings.beginGroup('lastOpen') self.parent.settings['last_open_books'] = self.settings.value('lastOpenBooks', []) - self.parent.last_open_tab = self.settings.value('lastOpenTab', 'library') + self.parent.settings['last_open_tab'] = self.settings.value('lastOpenTab', 'library') self.settings.endGroup() self.settings.beginGroup('settingsWindow') @@ -107,7 +107,7 @@ class Settings: self.settings.endGroup() self.settings.beginGroup('runtimeVariables') - self.settings.setValue('lastOpenPath', self.parent.last_open_path) + self.settings.setValue('lastOpenPath', self.parent.settings['last_open_path']) self.settings.setValue('databasePath', self.parent.database_path) current_profile1 = self.parent.bookToolBar.profileBox.itemData( diff --git a/widgets.py b/widgets.py index 0f46509..f7bbfcc 100644 --- a/widgets.py +++ b/widgets.py @@ -408,10 +408,10 @@ class Tab(QtWidgets.QWidget): self.are_we_doing_images_only = self.metadata['images_only'] if self.are_we_doing_images_only: # Boolean - self.contentView = PliantQGraphicsView(self.window()) + self.contentView = PliantQGraphicsView(self.window(), self) self.contentView.loadImage(chapter_content) else: - self.contentView = PliantQTextBrowser(self.window()) + self.contentView = PliantQTextBrowser(self.window(), self) # print(dir(self.contentView.document())) ## TODO USE this for modifying formatting and searching relative_path_root = os.path.join( @@ -449,6 +449,11 @@ class Tab(QtWidgets.QWidget): title = self.metadata['title'] self.parent.addTab(self, title) + # Hide mouse cursor timer + self.mouse_hide_timer = QtCore.QTimer() + self.mouse_hide_timer.setSingleShot(True) + self.mouse_hide_timer.timeout.connect(self.hide_mouse) + self.contentView.setFocus() def generate_position(self): @@ -544,6 +549,9 @@ class Tab(QtWidgets.QWidget): else: self.dockWidget.show() + def hide_mouse(self): + self.contentView.setCursor(QtCore.Qt.BlankCursor) + def sneaky_change(self): direction = -1 if self.sender().objectName() == 'nextChapter': @@ -561,11 +569,13 @@ class PliantQGraphicsView(QtWidgets.QGraphicsView): def __init__(self, main_window, parent=None): super(PliantQGraphicsView, self).__init__(parent) self.main_window = main_window + self.parent = parent self.image_pixmap = None self.ignore_wheel_event = False self.ignore_wheel_event_number = 0 self.common_functions = PliantWidgetsCommonFunctions( self, self.main_window) + self.setMouseTracking(True) def loadImage(self, image_path): self.image_pixmap = QtGui.QPixmap() @@ -633,15 +643,21 @@ class PliantQGraphicsView(QtWidgets.QGraphicsView): scroll_increment = int((maximum - 0) / 2) self.verticalScrollBar().setValue(vertical + scroll_increment) + def mouseMoveEvent(self, event): + self.setCursor(QtCore.Qt.ArrowCursor) + self.parent.mouse_hide_timer.start(3000) + class PliantQTextBrowser(QtWidgets.QTextBrowser): def __init__(self, main_window, parent=None): super(PliantQTextBrowser, self).__init__(parent) self.main_window = main_window + self.parent = parent self.ignore_wheel_event = False self.ignore_wheel_event_number = 0 self.common_functions = PliantWidgetsCommonFunctions( self, self.main_window) + self.setMouseTracking(True) def wheelEvent(self, event): self.common_functions.wheelEvent(event, False) @@ -659,6 +675,13 @@ class PliantQTextBrowser(QtWidgets.QTextBrowser): else: QtWidgets.QTextBrowser.keyPressEvent(self, event) + # def mouseMoveEvent(self, event): + # TODO + # This does not work as expected + # event.accept() + # self.setCursor(QtCore.Qt.ArrowCursor) + # self.parent.mouse_hide_timer.start(3000) + class PliantWidgetsCommonFunctions(): def __init__(self, parent_widget, main_window): @@ -686,7 +709,7 @@ class PliantWidgetsCommonFunctions(): elif vertical_pdelta < 0: moving_up = False - if abs(vertical_pdelta) > 100: # Adjust sensitivity here + if abs(vertical_pdelta) > 80: # Adjust sensitivity here # Implies that no scrollbar movement is possible if self.pw.verticalScrollBar().value() == self.pw.verticalScrollBar().maximum() == 0: if moving_up: @@ -721,7 +744,7 @@ class PliantWidgetsCommonFunctions(): if not was_button_pressed: self.pw.ignore_wheel_event = True - + class LibraryDelegate(QtWidgets.QStyledItemDelegate): def __init__(self, temp_dir, parent=None):