mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Port preserve_view_state to work with the grid view
This commit is contained in:
parent
5522a2bf94
commit
ae3aa44596
@ -374,7 +374,9 @@ class GridView(QListView):
|
||||
self.setUniformItemSizes(True)
|
||||
self.setWrapping(True)
|
||||
self.setFlow(self.LeftToRight)
|
||||
self.setLayoutMode(self.Batched)
|
||||
# We cannot set layout mode to batched, because that breaks
|
||||
# restore_vpos()
|
||||
# self.setLayoutMode(self.Batched)
|
||||
self.setResizeMode(self.Adjust)
|
||||
self.setSelectionMode(self.ExtendedSelection)
|
||||
self.setVerticalScrollMode(self.ScrollPerPixel)
|
||||
@ -506,4 +508,10 @@ class GridView(QListView):
|
||||
def do_sort(self, column, ascending):
|
||||
self.sort_requested.emit(column, ascending)
|
||||
|
||||
def restore_vpos(self, vpos):
|
||||
self.verticalScrollBar().setValue(vpos)
|
||||
|
||||
def restore_hpos(self, hpos):
|
||||
pass
|
||||
|
||||
setup_dnd_interface(GridView)
|
||||
|
@ -87,18 +87,24 @@ class PreserveViewState(object): # {{{
|
||||
require_selected_ids=True):
|
||||
self.view = view
|
||||
self.require_selected_ids = require_selected_ids
|
||||
self.selected_ids = set()
|
||||
self.current_id = None
|
||||
self.preserve_hpos = preserve_hpos
|
||||
self.preserve_vpos = preserve_vpos
|
||||
self.init_vals()
|
||||
|
||||
def init_vals(self):
|
||||
self.selected_ids = set()
|
||||
self.current_id = None
|
||||
self.vscroll = self.hscroll = 0
|
||||
self.original_view = None
|
||||
|
||||
def __enter__(self):
|
||||
self.init_vals()
|
||||
try:
|
||||
view = self.original_view = self.view.alternate_views.current_view
|
||||
self.selected_ids = self.view.get_selected_ids()
|
||||
self.current_id = self.view.current_id
|
||||
self.vscroll = self.view.verticalScrollBar().value()
|
||||
self.hscroll = self.view.horizontalScrollBar().value()
|
||||
self.vscroll = view.verticalScrollBar().value()
|
||||
self.hscroll = view.horizontalScrollBar().value()
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
@ -110,10 +116,19 @@ class PreserveViewState(object): # {{{
|
||||
if self.selected_ids:
|
||||
self.view.select_rows(self.selected_ids, using_ids=True,
|
||||
scroll=False, change_current=self.current_id is None)
|
||||
if self.preserve_vpos:
|
||||
self.view.verticalScrollBar().setValue(self.vscroll)
|
||||
if self.preserve_hpos:
|
||||
self.view.horizontalScrollBar().setValue(self.hscroll)
|
||||
view = self.original_view
|
||||
if self.view.alternate_views.current_view is view:
|
||||
if self.preserve_vpos:
|
||||
if hasattr(view, 'restore_vpos'):
|
||||
view.restore_vpos(self.vscroll)
|
||||
else:
|
||||
view.verticalScrollBar().setValue(self.vscroll)
|
||||
if self.preserve_hpos:
|
||||
if hasattr(view, 'restore_hpos'):
|
||||
view.restore_hpos(self.hscroll)
|
||||
else:
|
||||
view.horizontalScrollBar().setValue(self.hscroll)
|
||||
self.init_vals()
|
||||
|
||||
@dynamic_property
|
||||
def state(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user