Highlight the items before the selected one to give a visual aid about what is going to be executed

This commit is contained in:
Matthias Koefferlein 2024-07-29 00:32:41 +02:00
parent c6928d234c
commit 9165e81754
1 changed files with 25 additions and 4 deletions

View File

@ -1457,7 +1457,7 @@ class UndoRedoListViewModel
{ {
public: public:
UndoRedoListViewModel (QObject *parent, db::Manager *manager, bool for_undo) UndoRedoListViewModel (QObject *parent, db::Manager *manager, bool for_undo)
: QAbstractListModel (parent), mp_manager (manager), m_for_undo (for_undo) : QAbstractListModel (parent), mp_manager (manager), m_for_undo (for_undo), m_step (-1)
{ {
// .. nothing yet .. // .. nothing yet ..
} }
@ -1477,9 +1477,14 @@ public:
delta = index.row (); delta = index.row ();
} }
return QVariant (tl::to_qstring (mp_manager->undo_or_redo_item (delta))); return QVariant (tl::to_qstring (mp_manager->undo_or_redo_item (delta)));
} else { } else if (role == Qt::FontRole) {
return QVariant (); if (index.row () <= m_step) {
QFont font;
font.setBold (true);
return QVariant (font);
}
} }
return QVariant ();
} }
QModelIndex index (int row, int column, const QModelIndex &parent) const QModelIndex index (int row, int column, const QModelIndex &parent) const
@ -1496,7 +1501,7 @@ public:
return QModelIndex (); return QModelIndex ();
} }
virtual int rowCount (const QModelIndex &parent) const int rowCount (const QModelIndex &parent) const
{ {
if (parent.isValid ()) { if (parent.isValid ()) {
return 0; return 0;
@ -1505,9 +1510,18 @@ public:
} }
} }
void set_current_step (int step)
{
if (m_step != step) {
m_step = step;
emit dataChanged (index (0, 0, QModelIndex ()), index (rowCount (QModelIndex ()) - 1, 0, QModelIndex ()));
}
}
private: private:
db::Manager *mp_manager; db::Manager *mp_manager;
bool m_for_undo; bool m_for_undo;
int m_step;
}; };
} }
@ -1541,12 +1555,19 @@ UndoRedoListForm::selection_changed (const QModelIndex &current)
mp_ui->title_lbl->setText (m_for_undo ? tr ("Undo to step (select one)") : tr ("Redo to step (select one)")); mp_ui->title_lbl->setText (m_for_undo ? tr ("Undo to step (select one)") : tr ("Redo to step (select one)"));
m_steps = -1; m_steps = -1;
} else { } else {
m_steps = current.row () + 1; m_steps = current.row () + 1;
if (m_steps == 1) { if (m_steps == 1) {
mp_ui->title_lbl->setText (m_for_undo ? tr ("Undo one step") : tr ("Redo one step")); mp_ui->title_lbl->setText (m_for_undo ? tr ("Undo one step") : tr ("Redo one step"));
} else { } else {
mp_ui->title_lbl->setText ((m_for_undo ? tr ("Undo %1 steps") : tr ("Redo %1 steps")).arg (m_steps)); mp_ui->title_lbl->setText ((m_for_undo ? tr ("Undo %1 steps") : tr ("Redo %1 steps")).arg (m_steps));
} }
UndoRedoListViewModel *model = dynamic_cast<UndoRedoListViewModel *> (mp_ui->items->model ());
if (model) {
model->set_current_step (m_steps - 1);
}
} }
} }