mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #1051135 (Cursor position after multiple deletes)
This commit is contained in:
parent
fb672d3264
commit
030f98bec9
@ -286,6 +286,14 @@ class DeleteAction(InterfaceAction):
|
|||||||
current_row = view.row_count() - 1
|
current_row = view.row_count() - 1
|
||||||
view.set_current_row(current_row)
|
view.set_current_row(current_row)
|
||||||
|
|
||||||
|
def library_ids_deleted2(self, ids_deleted, next_id=None):
|
||||||
|
view = self.gui.library_view
|
||||||
|
current_row = None
|
||||||
|
if next_id is not None:
|
||||||
|
rmap = view.ids_to_rows([next_id])
|
||||||
|
current_row = rmap.get(next_id, None)
|
||||||
|
self.library_ids_deleted(ids_deleted, current_row=current_row)
|
||||||
|
|
||||||
def delete_books(self, *args):
|
def delete_books(self, *args):
|
||||||
'''
|
'''
|
||||||
Delete selected books from device or library.
|
Delete selected books from device or library.
|
||||||
@ -325,16 +333,13 @@ class DeleteAction(InterfaceAction):
|
|||||||
'removed from your calibre library. Are you sure?')
|
'removed from your calibre library. Are you sure?')
|
||||||
+'</p>', 'library_delete_books', self.gui):
|
+'</p>', 'library_delete_books', self.gui):
|
||||||
return
|
return
|
||||||
ci = view.currentIndex()
|
next_id = view.next_id
|
||||||
row = None
|
|
||||||
if ci.isValid():
|
|
||||||
row = ci.row()
|
|
||||||
if len(rows) < 5:
|
if len(rows) < 5:
|
||||||
view.model().delete_books_by_id(to_delete_ids)
|
view.model().delete_books_by_id(to_delete_ids)
|
||||||
self.library_ids_deleted(to_delete_ids, row)
|
self.library_ids_deleted2(to_delete_ids, next_id=next_id)
|
||||||
else:
|
else:
|
||||||
self.__md = MultiDeleter(self.gui, to_delete_ids,
|
self.__md = MultiDeleter(self.gui, to_delete_ids,
|
||||||
partial(self.library_ids_deleted, current_row=row))
|
partial(self.library_ids_deleted2, next_id=next_id))
|
||||||
# Device view is visible.
|
# Device view is visible.
|
||||||
else:
|
else:
|
||||||
if self.gui.stack.currentIndex() == 1:
|
if self.gui.stack.currentIndex() == 1:
|
||||||
|
@ -867,6 +867,35 @@ class BooksView(QTableView): # {{{
|
|||||||
break
|
break
|
||||||
return property(fget=fget, fset=fset)
|
return property(fget=fget, fset=fset)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def next_id(self):
|
||||||
|
'''
|
||||||
|
Return the id of the 'next' row (i.e. the first unselected row after
|
||||||
|
the current row).
|
||||||
|
'''
|
||||||
|
ci = self.currentIndex()
|
||||||
|
if not ci.isValid():
|
||||||
|
return None
|
||||||
|
selected_rows = frozenset([i.row() for i in self.selectedIndexes() if
|
||||||
|
i.isValid()])
|
||||||
|
column = ci.column()
|
||||||
|
|
||||||
|
for i in xrange(ci.row()+1, self.row_count()):
|
||||||
|
if i in selected_rows: continue
|
||||||
|
try:
|
||||||
|
return self.model().id(self.model().index(i, column))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# No unselected rows after the current row, look before
|
||||||
|
for i in xrange(ci.row()-1, -1, -1):
|
||||||
|
if i in selected_rows: continue
|
||||||
|
try:
|
||||||
|
return self.model().id(self.model().index(i, column))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self._model.close()
|
self._model.close()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user