| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include "undo-stack-obs.hpp"
- #include <util/util.hpp>
- undo_stack::undo_stack(ui_ptr ui) : ui(ui) {}
- void undo_stack::release()
- {
- for (auto f : undo_items)
- if (f.d)
- f.d(true);
- for (auto f : redo_items)
- if (f.d)
- f.d(false);
- }
- void undo_stack::add_action(const QString &name, undo_redo_cb undo,
- undo_redo_cb redo, std::string undo_data,
- std::string redo_data, func d)
- {
- undo_redo_t n = {name, undo_data, redo_data, undo, redo, d};
- undo_items.push_front(n);
- clear_redo();
- ui->actionMainUndo->setText(QTStr("Undo.Item.Undo").arg(name));
- ui->actionMainUndo->setEnabled(true);
- ui->actionMainRedo->setText(QTStr("Undo.Redo"));
- ui->actionMainRedo->setDisabled(true);
- }
- void undo_stack::undo()
- {
- if (undo_items.size() == 0 || disabled)
- return;
- undo_redo_t temp = undo_items.front();
- temp.undo(temp.undo_data);
- redo_items.push_front(temp);
- undo_items.pop_front();
- ui->actionMainRedo->setText(QTStr("Undo.Item.Redo").arg(temp.name));
- ui->actionMainRedo->setEnabled(true);
- if (undo_items.size() == 0) {
- ui->actionMainUndo->setDisabled(true);
- ui->actionMainUndo->setText(QTStr("Undo.Undo"));
- } else {
- ui->actionMainUndo->setText(
- QTStr("Undo.Item.Undo").arg(undo_items.front().name));
- }
- }
- void undo_stack::redo()
- {
- if (redo_items.size() == 0 || disabled)
- return;
- undo_redo_t temp = redo_items.front();
- temp.redo(temp.redo_data);
- undo_items.push_front(temp);
- redo_items.pop_front();
- ui->actionMainUndo->setText(QTStr("Undo.Item.Undo").arg(temp.name));
- ui->actionMainUndo->setEnabled(true);
- if (redo_items.size() == 0) {
- ui->actionMainRedo->setDisabled(true);
- ui->actionMainRedo->setText(QTStr("Undo.Redo"));
- } else {
- ui->actionMainRedo->setText(
- QTStr("Undo.Item.Redo").arg(redo_items.front().name));
- }
- }
- void undo_stack::enable_undo_redo()
- {
- disabled = false;
- ui->actionMainUndo->setDisabled(false);
- ui->actionMainRedo->setDisabled(false);
- }
- void undo_stack::disable_undo_redo()
- {
- disabled = true;
- ui->actionMainUndo->setDisabled(true);
- ui->actionMainRedo->setDisabled(true);
- }
- void undo_stack::clear_redo()
- {
- for (auto f : redo_items)
- if (f.d)
- f.d(false);
- redo_items.clear();
- }
|