Addon Manager: Remember scroll position on Back (#14753)

* Addon Manager: Remember scroll position on Back

* Addon Manager: Linter cleanup
This commit is contained in:
Chris Hennes
2024-06-21 14:53:56 -05:00
committed by GitHub
parent 5f8398278f
commit bac074e37d

View File

@@ -29,8 +29,8 @@ from addonmanager_freecad_interface import Preferences
from Addon import Addon
from Widgets.addonmanager_widget_package_details_view import PackageDetailsView
from addonmanager_package_details_controller import PackageDetailsController
from Widgets.addonmanager_widget_view_selector import AddonManagerDisplayStyle
from addonmanager_package_details_controller import PackageDetailsController
from package_list import PackageList
# Get whatever version of PySide we can
@@ -38,13 +38,10 @@ try:
import PySide # Use the FreeCAD wrapper
except ImportError:
try:
import PySide6 # Outside FreeCAD, try Qt6 first
PySide = PySide6
import PySide6 as PySide # Outside FreeCAD, try Qt6 first
except ImportError:
import PySide2 # Fall back to Qt5 (if this fails, Python will kill this module's import)
PySide = PySide2
# Fall back to Qt5 (if this fails, Python will kill this module's import)
import PySide2 as PySide
from PySide import QtCore, QtWidgets
@@ -84,6 +81,7 @@ class CompositeView(QtWidgets.QWidget):
self._setup_ui()
self._setup_connections()
self._restore_splitter_state()
self.scroll_position = 0
def _save_splitter_state(self):
"""Write the splitter state into an Addon manager preference, CompositeSplitterState"""
@@ -145,16 +143,30 @@ class CompositeView(QtWidgets.QWidget):
self.splitter.splitterMoved.connect(self._splitter_moved)
def addon_selected(self, addon):
"""Depending on the display_style, show addon details (possibly hiding the package_list
widget in the process."""
self.package_details_controller.show_repo(addon)
if self.display_style != AddonManagerDisplayStyle.COMPOSITE:
self.scroll_position = (
self.package_list.ui.listPackages.verticalScrollBar().sliderPosition()
)
print(f"Saved slider position at {self.scroll_position}")
self.package_list.hide()
self.package_details.show()
self.package_details.button_bar.set_show_back_button(True)
def _back_button_clicked(self):
if self.display_style != AddonManagerDisplayStyle.COMPOSITE:
print(f"Set slider position to {self.scroll_position}")
self.package_list.show()
self.package_details.hide()
# The following must be done *after* a cycle through the event loop
QtCore.QTimer.singleShot(
0,
lambda: self.package_list.ui.listPackages.verticalScrollBar().setSliderPosition(
self.scroll_position
),
)
def _splitter_moved(self, position: int, index: int) -> None:
def _splitter_moved(self, _1: int, _2: int) -> None:
self._save_splitter_state()