mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Enhancement #1941969: If a rule us selected then insert new rules above selected rule
This commit is contained in:
parent
9b46b4ab76
commit
dc5360eda4
@ -751,10 +751,15 @@ class RulesModel(QAbstractListModel): # {{{
|
|||||||
if role == Qt.ItemDataRole.UserRole:
|
if role == Qt.ItemDataRole.UserRole:
|
||||||
return (kind, col, rule)
|
return (kind, col, rule)
|
||||||
|
|
||||||
def add_rule(self, kind, col, rule):
|
def add_rule(self, kind, col, rule, selected_row=None):
|
||||||
self.beginResetModel()
|
self.beginResetModel()
|
||||||
self.rules.append((kind, col, rule))
|
if selected_row:
|
||||||
|
self.rules.insert(selected_row.row(), (kind, col, rule))
|
||||||
|
else:
|
||||||
|
self.rules.append((kind, col, rule))
|
||||||
self.endResetModel()
|
self.endResetModel()
|
||||||
|
if selected_row:
|
||||||
|
return self.index(selected_row.row())
|
||||||
return self.index(len(self.rules)-1)
|
return self.index(len(self.rules)-1)
|
||||||
|
|
||||||
def replace_rule(self, index, kind, col, r):
|
def replace_rule(self, index, kind, col, r):
|
||||||
@ -1081,17 +1086,19 @@ class EditRules(QWidget): # {{{
|
|||||||
if d.exec_() == QDialog.DialogCode.Accepted:
|
if d.exec_() == QDialog.DialogCode.Accepted:
|
||||||
kind, col, r = d.rule
|
kind, col, r = d.rule
|
||||||
if kind and r and col:
|
if kind and r and col:
|
||||||
idx = self.model.add_rule(kind, col, r)
|
selected_row = self.get_first_selected_row()
|
||||||
|
idx = self.model.add_rule(kind, col, r, selected_row=selected_row)
|
||||||
self.rules_view.scrollTo(idx)
|
self.rules_view.scrollTo(idx)
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
||||||
def add_advanced(self):
|
def add_advanced(self):
|
||||||
|
selected_row = self.get_first_selected_row()
|
||||||
if self.pref_name == 'column_color_rules':
|
if self.pref_name == 'column_color_rules':
|
||||||
td = TemplateDialog(self, '', mi=self.mi, fm=self.fm, color_field='')
|
td = TemplateDialog(self, '', mi=self.mi, fm=self.fm, color_field='')
|
||||||
if td.exec_() == QDialog.DialogCode.Accepted:
|
if td.exec_() == QDialog.DialogCode.Accepted:
|
||||||
col, r = td.rule
|
col, r = td.rule
|
||||||
if r and col:
|
if r and col:
|
||||||
idx = self.model.add_rule('color', col, r)
|
idx = self.model.add_rule('color', col, r, selected_row=selected_row)
|
||||||
self.rules_view.scrollTo(idx)
|
self.rules_view.scrollTo(idx)
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
else:
|
else:
|
||||||
@ -1102,7 +1109,7 @@ class EditRules(QWidget): # {{{
|
|||||||
if td.exec_() == QDialog.DialogCode.Accepted:
|
if td.exec_() == QDialog.DialogCode.Accepted:
|
||||||
typ, col, r = td.rule
|
typ, col, r = td.rule
|
||||||
if typ and r and col:
|
if typ and r and col:
|
||||||
idx = self.model.add_rule(typ, col, r)
|
idx = self.model.add_rule(typ, col, r, selected_row=selected_row)
|
||||||
self.rules_view.scrollTo(idx)
|
self.rules_view.scrollTo(idx)
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
||||||
@ -1131,12 +1138,19 @@ class EditRules(QWidget): # {{{
|
|||||||
self.rules_view.scrollTo(index)
|
self.rules_view.scrollTo(index)
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
||||||
def get_selected_row(self, txt):
|
def get_first_selected_row(self):
|
||||||
|
r = self.get_selected_row('', show_error=False)
|
||||||
|
if r:
|
||||||
|
return r[-1]
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_selected_row(self, txt, show_error=True):
|
||||||
sm = self.rules_view.selectionModel()
|
sm = self.rules_view.selectionModel()
|
||||||
rows = list(sm.selectedRows())
|
rows = list(sm.selectedRows())
|
||||||
if not rows:
|
if not rows:
|
||||||
error_dialog(self, _('No rule selected'),
|
if show_error:
|
||||||
_('No rule selected for %s.')%txt, show=True)
|
error_dialog(self, _('No rule selected'),
|
||||||
|
_('No rule selected for %s.')%txt, show=True)
|
||||||
return None
|
return None
|
||||||
return sorted(rows, reverse=True)
|
return sorted(rows, reverse=True)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user