From 2fe7aa9c756bd520775250d2e53744e64f43a6fa Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Mon, 14 Dec 2020 08:41:27 +0100 Subject: [PATCH] PICARD-2063: Make automatic horizontal scrolling in file browser configurable --- picard/ui/filebrowser.py | 19 +++++++++++-------- picard/ui/options/interface.py | 3 +++ picard/ui/ui_options_interface.py | 4 ++++ ui/options_interface.ui | 7 +++++++ 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/picard/ui/filebrowser.py b/picard/ui/filebrowser.py index 5161efeb9..658b87b9a 100644 --- a/picard/ui/filebrowser.py +++ b/picard/ui/filebrowser.py @@ -128,15 +128,18 @@ class FileBrowser(QtWidgets.QTreeView): def scrollTo(self, index, scrolltype=QtWidgets.QAbstractItemView.EnsureVisible): # QTreeView.scrollTo resets the horizontal scroll position to 0. - # Reimplemented to instead scroll to horizontal parent position. - level = -1 + # Reimplemented to instead scroll to horizontal parent position or keep previous position. + if index and config.setting['filebrowser_horizontal_autoscroll']: + level = -1 + parent = index.parent() + root = self.rootIndex() + while parent.isValid() and parent != root: + parent = parent.parent() + level += 1 + pos_x = max(self.indentation() * level, 0) + else: + pos_x = self.horizontalScrollBar().value() super().scrollTo(index, scrolltype) - parent = self.currentIndex().parent() - root = self.rootIndex() - while parent.isValid() and parent != root: - parent = parent.parent() - level += 1 - pos_x = max(self.indentation() * level, 0) self.horizontalScrollBar().setValue(pos_x) def mousePressEvent(self, event): diff --git a/picard/ui/options/interface.py b/picard/ui/options/interface.py index d9401d0ce..1a1a8feca 100644 --- a/picard/ui/options/interface.py +++ b/picard/ui/options/interface.py @@ -136,6 +136,7 @@ class InterfaceOptionsPage(OptionsPage): config.BoolOption("setting", "quit_confirmation", True), config.TextOption("setting", "ui_language", ""), config.BoolOption("setting", "use_system_theme", False), + config.BoolOption("setting", "filebrowser_horizontal_autoscroll", True), config.BoolOption("setting", "starting_directory", False), config.TextOption("setting", "starting_directory_path", _default_starting_dir), config.TextOption("setting", "load_image_behavior", "append"), @@ -205,6 +206,7 @@ class InterfaceOptionsPage(OptionsPage): self.ui.use_system_theme.setChecked(config.setting["use_system_theme"]) current_ui_language = config.setting["ui_language"] self.ui.ui_language.setCurrentIndex(self.ui.ui_language.findData(current_ui_language)) + self.ui.filebrowser_horizontal_autoscroll.setChecked(config.setting["filebrowser_horizontal_autoscroll"]) self.ui.starting_directory.setChecked(config.setting["starting_directory"]) self.ui.starting_directory_path.setText(config.setting["starting_directory_path"]) self.populate_action_list() @@ -242,6 +244,7 @@ class InterfaceOptionsPage(OptionsPage): dialog.exec_() config.setting["use_system_theme"] = self.ui.use_system_theme.isChecked() config.setting["ui_language"] = self.ui.ui_language.itemData(self.ui.ui_language.currentIndex()) + config.setting["filebrowser_horizontal_autoscroll"] = self.ui.filebrowser_horizontal_autoscroll.isChecked() config.setting["starting_directory"] = self.ui.starting_directory.isChecked() config.setting["starting_directory_path"] = os.path.normpath(self.ui.starting_directory_path.text()) self.update_layout_config() diff --git a/picard/ui/ui_options_interface.py b/picard/ui/ui_options_interface.py index fe4ab146a..235524389 100644 --- a/picard/ui/ui_options_interface.py +++ b/picard/ui/ui_options_interface.py @@ -35,6 +35,9 @@ class Ui_InterfaceOptionsPage(object): self.quit_confirmation = QtWidgets.QCheckBox(self.groupBox_2) self.quit_confirmation.setObjectName("quit_confirmation") self.vboxlayout1.addWidget(self.quit_confirmation) + self.filebrowser_horizontal_autoscroll = QtWidgets.QCheckBox(self.groupBox_2) + self.filebrowser_horizontal_autoscroll.setObjectName("filebrowser_horizontal_autoscroll") + self.vboxlayout1.addWidget(self.filebrowser_horizontal_autoscroll) self.starting_directory = QtWidgets.QCheckBox(self.groupBox_2) self.starting_directory.setObjectName("starting_directory") self.vboxlayout1.addWidget(self.starting_directory) @@ -134,6 +137,7 @@ class Ui_InterfaceOptionsPage(object): self.builtin_search.setText(_("Use builtin search rather than looking in browser")) self.use_adv_search_syntax.setText(_("Use advanced query syntax")) self.quit_confirmation.setText(_("Show a quit confirmation dialog for unsaved changes")) + self.filebrowser_horizontal_autoscroll.setText(_("Adjust horizontal position in file browser automatically")) self.starting_directory.setText(_("Begin browsing in the following directory:")) self.starting_directory_browse.setText(_("Browse...")) self.label.setText(_("User interface language:")) diff --git a/ui/options_interface.ui b/ui/options_interface.ui index 1ad4c31a9..31d663a96 100644 --- a/ui/options_interface.ui +++ b/ui/options_interface.ui @@ -59,6 +59,13 @@ + + + + Adjust horizontal position in file browser automatically + + +