From 5fa724ae692ed14a87095a2e29e3772ad169b2e1 Mon Sep 17 00:00:00 2001 From: BasioMeusPuga Date: Tue, 27 Mar 2018 21:58:35 +0530 Subject: [PATCH] Implement scroll speed slider --- lector/resources/raw/settings.ui | 38 +++++++++++++++++++++++++++++- lector/resources/settingswindow.py | 25 +++++++++++++++++++- lector/settings.py | 2 ++ lector/settingsdialog.py | 8 ++++++- lector/widgets.py | 6 ++++- 5 files changed, 75 insertions(+), 4 deletions(-) diff --git a/lector/resources/raw/settings.ui b/lector/resources/raw/settings.ui index dba24aa..6ade5ef 100644 --- a/lector/resources/raw/settings.ui +++ b/lector/resources/raw/settings.ui @@ -182,7 +182,7 @@ Reopen book to see changes - Dictionary language: + Dictionary language Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -194,6 +194,42 @@ Reopen book to see changes + + + + + + + 0 + 0 + + + + Scroll speed + + + + + + + + 0 + 0 + + + + 3 + + + 15 + + + Qt::Horizontal + + + + + diff --git a/lector/resources/settingswindow.py b/lector/resources/settingswindow.py index 61f642f..aac8845 100644 --- a/lector/resources/settingswindow.py +++ b/lector/resources/settingswindow.py @@ -116,6 +116,28 @@ class Ui_Dialog(object): self.languageBox.setObjectName("languageBox") self.horizontalLayout_5.addWidget(self.languageBox) self.horizontalLayout_8.addLayout(self.horizontalLayout_5) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.scrollSpeedLabel = QtWidgets.QLabel(self.groupBox_2) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.scrollSpeedLabel.sizePolicy().hasHeightForWidth()) + self.scrollSpeedLabel.setSizePolicy(sizePolicy) + self.scrollSpeedLabel.setObjectName("scrollSpeedLabel") + self.horizontalLayout.addWidget(self.scrollSpeedLabel) + self.scrollSpeedSlider = QtWidgets.QSlider(self.groupBox_2) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.scrollSpeedSlider.sizePolicy().hasHeightForWidth()) + self.scrollSpeedSlider.setSizePolicy(sizePolicy) + self.scrollSpeedSlider.setMinimum(3) + self.scrollSpeedSlider.setMaximum(15) + self.scrollSpeedSlider.setOrientation(QtCore.Qt.Horizontal) + self.scrollSpeedSlider.setObjectName("scrollSpeedSlider") + self.horizontalLayout.addWidget(self.scrollSpeedSlider) + self.horizontalLayout_8.addLayout(self.horizontalLayout) self.verticalLayout_3.addLayout(self.horizontalLayout_8) self.gridLayout_3.addLayout(self.verticalLayout_3, 2, 0, 1, 1) self.verticalLayout.addWidget(self.groupBox_2) @@ -187,7 +209,8 @@ class Ui_Dialog(object): self.hideScrollBars.setText(_translate("Dialog", "Hide scrollbars when reading")) self.cachingEnabled.setToolTip(_translate("Dialog", "Greatly reduces page transition time at the cost of more memory")) self.cachingEnabled.setText(_translate("Dialog", "Cache comic / pdf pages")) - self.languageLabel.setText(_translate("Dialog", "Dictionary language:")) + self.languageLabel.setText(_translate("Dialog", "Dictionary language")) + self.scrollSpeedLabel.setText(_translate("Dialog", "Scroll speed")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.textTab), _translate("Dialog", "Text")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.imageTab), _translate("Dialog", "Comic/PDF")) self.okButton.setText(_translate("Dialog", "Scan Library")) diff --git a/lector/settings.py b/lector/settings.py index b57c78d..537f15e 100644 --- a/lector/settings.py +++ b/lector/settings.py @@ -104,6 +104,7 @@ class Settings: 'cachingEnabled', 'True').capitalize()) self.parent.settings['hide_scrollbars'] = literal_eval(self.settings.value( 'hideScrollBars', 'False').capitalize()) + self.parent.settings['scroll_speed'] = int(self.settings.value('scrollSpeed', 7)) self.settings.endGroup() self.settings.beginGroup('dialogSettings') @@ -174,6 +175,7 @@ class Settings: self.settings.setValue('dictionaryLanguage', current_settings['dictionary_language']) self.settings.setValue('cachingEnabled', current_settings['caching_enabled']) self.settings.setValue('hideScrollBars', current_settings['hide_scrollbars']) + self.settings.setValue('scrollSpeed', current_settings['scroll_speed']) self.settings.endGroup() self.settings.beginGroup('dialogSettings') diff --git a/lector/settingsdialog.py b/lector/settingsdialog.py index 0d993ab..da0f87e 100644 --- a/lector/settingsdialog.py +++ b/lector/settingsdialog.py @@ -35,6 +35,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): def __init__(self, parent=None): super(SettingsUI, self).__init__() self.setupUi(self) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) self._translate = QtCore.QCoreApplication.translate self.parent = parent @@ -90,6 +91,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.performCulling.setChecked(self.parent.settings['perform_culling']) self.cachingEnabled.setChecked(self.parent.settings['caching_enabled']) self.hideScrollBars.setChecked(self.parent.settings['hide_scrollbars']) + self.scrollSpeedSlider.setValue(self.parent.settings['scroll_speed']) self.autoTags.clicked.connect(self.manage_checkboxes) self.coverShadows.clicked.connect(self.manage_checkboxes) @@ -98,6 +100,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.performCulling.clicked.connect(self.manage_checkboxes) self.cachingEnabled.clicked.connect(self.manage_checkboxes) self.hideScrollBars.clicked.connect(self.manage_checkboxes) + self.scrollSpeedSlider.valueChanged.connect(self.change_scroll_speed) # Generate the QStandardItemModel for the listView self.listModel = QtGui.QStandardItemModel() @@ -131,7 +134,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.parent.generate_library_filter_menu(paths) directory_data = {} if not paths: - print('Database returned no paths for settings...') + print('Database: No paths for settings...') else: # Convert to the dictionary format that is # to be fed into the QFileSystemModel @@ -297,6 +300,9 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): 2: 'hi'} self.parent.settings['dictionary_language'] = language_dict[self.languageBox.currentIndex()] + def change_scroll_speed(self, event): + self.parent.settings['scroll_speed'] = self.scrollSpeedSlider.value() + def manage_checkboxes(self, event=None): sender = self.sender().objectName() diff --git a/lector/widgets.py b/lector/widgets.py index 936542e..02a4e7c 100644 --- a/lector/widgets.py +++ b/lector/widgets.py @@ -114,7 +114,8 @@ class Tab(QtWidgets.QWidget): # the graphics view self.contentView.setFrameShape(QtWidgets.QFrame.NoFrame) self.contentView.setObjectName('contentView') - self.contentView.verticalScrollBar().setSingleStep(7) + self.contentView.verticalScrollBar().setSingleStep( + self.main_window.settings['scroll_speed']) if self.main_window.settings['hide_scrollbars']: self.contentView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) @@ -193,10 +194,13 @@ class Tab(QtWidgets.QWidget): search_text = search_data[1] if search_text: + # textCursor() RETURNS a copy of the textcursor cursor = self.contentView.textCursor() cursor.movePosition(QtGui.QTextCursor.Start, QtGui.QTextCursor.KeepAnchor) self.contentView.setTextCursor(cursor) + # This is needed so that search results are always at the top + # of the window self.contentView.verticalScrollBar().setValue( self.contentView.verticalScrollBar().maximum())