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())