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)); } }