Terminal strip add/remove is managed by undo stack

This commit is contained in:
joshua
2021-04-06 20:06:20 +02:00
parent 5d17461c6e
commit df07f373d8
2 changed files with 37 additions and 4 deletions

View File

@@ -22,6 +22,7 @@
#include "../terminalstrip.h"
#include "../elementprovider.h"
#include "../qetgraphicsitem/terminalelement.h"
#include "../UndoCommand/addterminalstripcommand.h"
#include <QTreeWidgetItem>
@@ -65,8 +66,11 @@ void TerminalStripEditor::buildTree()
QStringList ftstrl(tr("Bornes indépendante"));
new QTreeWidgetItem(ui->m_terminal_strip_tw, ftstrl, TerminalStripEditor::FreeTerminal);
const auto ts_vector = m_project->terminalStrip();
for (const auto ts : ts_vector) {
auto ts_vector = m_project->terminalStrip();
std::sort(ts_vector.begin(), ts_vector.end(), [](TerminalStrip *a, TerminalStrip *b) {
return a->name() < b->name();});
for (const auto ts : qAsConst(ts_vector)) {
addTerminalStrip(ts);
}
addFreeTerminal();
@@ -78,9 +82,14 @@ void TerminalStripEditor::buildTree()
* in the tree widget
* @param terminal_strip
* @return the QTreeWidgetItem who represent the terminal strip
* both if created or already exist
*/
QTreeWidgetItem* TerminalStripEditor::addTerminalStrip(TerminalStrip *terminal_strip)
{
if (auto item = m_H_item_strip.key(terminal_strip)) {
return item;
}
auto root_item = ui->m_terminal_strip_tw->topLevelItem(0);
//Check if installation already exist
@@ -117,7 +126,9 @@ QTreeWidgetItem* TerminalStripEditor::addTerminalStrip(TerminalStrip *terminal_s
//Add the terminal strip
QStringList name{terminal_strip->name()};
return new QTreeWidgetItem(loc_qtwi, name, TerminalStripEditor::Strip);
auto item = new QTreeWidgetItem(loc_qtwi, name, TerminalStripEditor::Strip);
m_H_item_strip.insert(item, terminal_strip);
return item;
}
/**
@@ -172,7 +183,26 @@ void TerminalStripEditor::on_m_add_terminal_strip_pb_clicked()
if (dialog->exec() == QDialog::Accepted)
{
auto item = addTerminalStrip(dialog->generatedTerminalStrip());
auto ts = dialog->generatedTerminalStrip();
m_project->undoStack()->push(new AddTerminalStripCommand(ts, m_project));
auto item = addTerminalStrip(ts);
ui->m_terminal_strip_tw->setCurrentItem(item);
}
}
/**
* @brief TerminalStripEditor::on_m_remove_terminal_strip_pb_clicked
* Action when user click on remove terminal strip button
*/
void TerminalStripEditor::on_m_remove_terminal_strip_pb_clicked()
{
auto item = ui->m_terminal_strip_tw->currentItem();
if (auto strip = m_H_item_strip.value(item))
{
m_H_item_strip.remove(item);
delete item;
m_project->undoStack()->push(new RemoveTerminalStripCommand(strip, m_project));
}
}

View File

@@ -57,10 +57,13 @@ class TerminalStripEditor : public QDialog
private slots:
void on_m_add_terminal_strip_pb_clicked();
void on_m_remove_terminal_strip_pb_clicked();
private:
Ui::TerminalStripEditor *ui;
QETProject *m_project = nullptr;
QHash<QTreeWidgetItem *, TerminalStrip *> m_H_item_strip;
};
#endif // TERMINALSTRIPEDITOR_H