diff --git a/sources/editor/UndoCommand/openelmtcommand.cpp b/sources/editor/UndoCommand/openelmtcommand.cpp
new file mode 100644
index 000000000..8fa9f9898
--- /dev/null
+++ b/sources/editor/UndoCommand/openelmtcommand.cpp
@@ -0,0 +1,62 @@
+/*
+ Copyright 2006-2022 The QElectroTech Team
+ This file is part of QElectroTech.
+
+ QElectroTech is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ QElectroTech is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QElectroTech. If not, see .
+*/
+#include "openelmtcommand.h"
+#include "../elementscene.h"
+
+#include
+#include
+
+OpenElmtCommand::OpenElmtCommand(const QDomDocument &document,
+ QPointer scene,
+ QUndoCommand *parent) :
+ QUndoCommand{parent},
+ m_document{document.cloneNode().toDocument()},
+ m_scene{scene}
+{
+ setText(QObject::tr("Ouvrir un element"));
+}
+
+void OpenElmtCommand::undo()
+{
+ for (const auto &item : qAsConst(m_graphics_item)) {
+ m_scene->removeItem(item);
+ }
+}
+
+void OpenElmtCommand::redo()
+{
+ if (!m_scene) {
+ return;
+ }
+
+ if (m_first_redo)
+ {
+ m_scene->fromXml(m_document, QPointF(), true, &m_graphics_item);
+ m_first_redo = false;
+
+ //m_document is now useless,
+ //we clear it to use less memory
+ m_document.clear();
+ }
+ else {
+ for (const auto &item : qAsConst(m_graphics_item)) {
+ m_scene->addItem(item);
+ }
+ }
+ m_scene->slot_select(m_graphics_item);
+}
diff --git a/sources/editor/UndoCommand/openelmtcommand.h b/sources/editor/UndoCommand/openelmtcommand.h
new file mode 100644
index 000000000..e318b4ee3
--- /dev/null
+++ b/sources/editor/UndoCommand/openelmtcommand.h
@@ -0,0 +1,43 @@
+/*
+ Copyright 2006-2022 The QElectroTech Team
+ This file is part of QElectroTech.
+
+ QElectroTech is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ QElectroTech is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QElectroTech. If not, see .
+*/
+#ifndef OPENELMTCOMMAND_H
+#define OPENELMTCOMMAND_H
+
+#include
+#include
+#include
+
+class ElementScene;
+class QGraphicsItem;
+
+class OpenElmtCommand : public QUndoCommand
+{
+ public:
+ OpenElmtCommand(const QDomDocument &document, QPointer scene, QUndoCommand *parent = nullptr);
+
+ virtual void undo() override;
+ virtual void redo() override;
+
+ private:
+ QDomDocument m_document;
+ bool m_first_redo{true};
+ QPointer m_scene;
+ QList m_graphics_item;
+};
+
+#endif // OPENELMTCOMMAND_H
diff --git a/sources/editor/ui/qetelementeditor.cpp b/sources/editor/ui/qetelementeditor.cpp
index 4fa0e74e1..09dcb03de 100644
--- a/sources/editor/ui/qetelementeditor.cpp
+++ b/sources/editor/ui/qetelementeditor.cpp
@@ -47,6 +47,7 @@
#include "../../newelementwizard.h"
#include "../editorcommands.h"
#include "../../dxf/dxftoelmt.h"
+#include "../UndoCommand/openelmtcommand.h"
#include
#include
@@ -1514,8 +1515,7 @@ void QETElementEditor::on_m_import_dxf_triggered()
QDomDocument xml_;
xml_.setContent(array_);
- m_elmt_scene->fromXml(xml_);
- fillPartsList();
+ m_elmt_scene->undoStack().push(new OpenElmtCommand(xml_, m_elmt_scene));
}
}