mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -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.setUniformItemSizes(True)
|
||||||
self.setWrapping(True)
|
self.setWrapping(True)
|
||||||
self.setFlow(self.LeftToRight)
|
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.setResizeMode(self.Adjust)
|
||||||
self.setSelectionMode(self.ExtendedSelection)
|
self.setSelectionMode(self.ExtendedSelection)
|
||||||
self.setVerticalScrollMode(self.ScrollPerPixel)
|
self.setVerticalScrollMode(self.ScrollPerPixel)
|
||||||
@ -506,4 +508,10 @@ class GridView(QListView):
|
|||||||
def do_sort(self, column, ascending):
|
def do_sort(self, column, ascending):
|
||||||
self.sort_requested.emit(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)
|
setup_dnd_interface(GridView)
|
||||||
|
@ -87,18 +87,24 @@ class PreserveViewState(object): # {{{
|
|||||||
require_selected_ids=True):
|
require_selected_ids=True):
|
||||||
self.view = view
|
self.view = view
|
||||||
self.require_selected_ids = require_selected_ids
|
self.require_selected_ids = require_selected_ids
|
||||||
self.selected_ids = set()
|
|
||||||
self.current_id = None
|
|
||||||
self.preserve_hpos = preserve_hpos
|
self.preserve_hpos = preserve_hpos
|
||||||
self.preserve_vpos = preserve_vpos
|
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.vscroll = self.hscroll = 0
|
||||||
|
self.original_view = None
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
|
self.init_vals()
|
||||||
try:
|
try:
|
||||||
|
view = self.original_view = self.view.alternate_views.current_view
|
||||||
self.selected_ids = self.view.get_selected_ids()
|
self.selected_ids = self.view.get_selected_ids()
|
||||||
self.current_id = self.view.current_id
|
self.current_id = self.view.current_id
|
||||||
self.vscroll = self.view.verticalScrollBar().value()
|
self.vscroll = view.verticalScrollBar().value()
|
||||||
self.hscroll = self.view.horizontalScrollBar().value()
|
self.hscroll = view.horizontalScrollBar().value()
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
@ -110,10 +116,19 @@ class PreserveViewState(object): # {{{
|
|||||||
if self.selected_ids:
|
if self.selected_ids:
|
||||||
self.view.select_rows(self.selected_ids, using_ids=True,
|
self.view.select_rows(self.selected_ids, using_ids=True,
|
||||||
scroll=False, change_current=self.current_id is None)
|
scroll=False, change_current=self.current_id is None)
|
||||||
if self.preserve_vpos:
|
view = self.original_view
|
||||||
self.view.verticalScrollBar().setValue(self.vscroll)
|
if self.view.alternate_views.current_view is view:
|
||||||
if self.preserve_hpos:
|
if self.preserve_vpos:
|
||||||
self.view.horizontalScrollBar().setValue(self.hscroll)
|
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
|
@dynamic_property
|
||||||
def state(self):
|
def state(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user