Preserve sort order when removing rows

This commit is contained in:
Kovid Goyal 2022-02-16 08:32:18 +05:30
parent cad142847a
commit 8464187b7a
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -186,22 +186,29 @@ class EmailAccounts(QAbstractTableModel): # {{{
self.endResetModel() self.endResetModel()
return self.index(self.account_order.index(y), 0) return self.index(self.account_order.index(y), 0)
def remove_rows(self, *rows):
for row in sorted(rows, reverse=True):
try:
account = self.account_order[row]
except Exception:
continue
self.accounts.pop(account)
self.account_order = sorted(self.accounts)
has_default = False
for account in self.account_order:
if self.accounts[account][2]:
has_default = True
break
if not has_default and self.account_order:
self.accounts[self.account_order[0]][2] = True
self.beginResetModel()
self.endResetModel()
self.do_sort()
def remove(self, index): def remove(self, index):
if index.isValid(): if index.isValid():
row = index.row() self.remove(index.row())
account = self.account_order[row]
self.accounts.pop(account)
self.account_order = sorted(self.accounts)
has_default = False
for account in self.account_order:
if self.accounts[account][2]:
has_default = True
break
if not has_default and self.account_order:
self.accounts[self.account_order[0]][2] = True
self.beginResetModel()
self.endResetModel()
# }}} # }}}
@ -270,11 +277,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.changed_signal.emit() self.changed_signal.emit()
def remove_email_account(self, *args): def remove_email_account(self, *args):
row_map = {} rows = set()
for idx in self.email_view.selectionModel().selectedIndexes(): for idx in self.email_view.selectionModel().selectedIndexes():
row_map[idx.row()] = idx rows.add(idx.row())
for idx in sorted(row_map.values(), reverse=True): self._email_accounts.remove_rows(*rows)
self._email_accounts.remove(idx)
self.changed_signal.emit() self.changed_signal.emit()
def refresh_gui(self, gui): def refresh_gui(self, gui):