Skip to content
Snippets Groups Projects
Commit 227fd877 authored by Matthias Puchner's avatar Matthias Puchner
Browse files

re-implement undo/redo for "delete layer" with new item serialization

parent f20f832d
No related branches found
No related tags found
1 merge request!575Complete parameter tree builder, minor changes
Pipeline #52940 canceled
......@@ -16,6 +16,7 @@
#include "GUI/Model/Sample/LayerItem.h"
#include "GUI/Model/Sample/MultiLayerItem.h"
#include "GUI/Model/Session/Serializer.h"
#include "GUI/View/SampleDesigner/MultiLayerForm.h"
#include "GUI/View/SampleDesigner/SampleEditorController.h"
#include <utility>
......@@ -23,6 +24,28 @@
namespace {
constexpr int COMMAND_ID_CHANGE_VALUE = 11;
constexpr auto TagBackup = "backup";
template <typename ItemType> QByteArray serialize(ItemType& t)
{
QByteArray a;
QXmlStreamWriter w(&a);
w.writeStartElement(TagBackup);
Serializer s(&w);
t.serialize(s);
w.writeEndElement();
return a;
}
template <typename ItemType> void deserialize(ItemType* t, const QByteArray& a)
{
QXmlStreamReader r(a);
Serializer sr(&r);
r.readNextStartElement();
ASSERT(r.name().toString() == TagBackup);
t->serialize(sr);
}
} // namespace
......@@ -32,15 +55,7 @@ CommandRemoveLayer::CommandRemoveLayer(SampleEditorController* ec, LayerItem* la
: QUndoCommand(parent), m_ec(ec)
{
m_indexOfLayer = ec->multiLayerItem()->layers().indexOf(layerItem);
// m_layerItemBackup = m_backupModel.insertItem<LayerItem>();
//
// auto* source = layerItem;
//
// for (auto* child : source->children()) {
// auto tag = source->tagFromItem(child);
// m_backupModel.copyItem(child, m_layerItemBackup, tag);
// }
m_layerItemBackup = serialize(*layerItem);
}
void CommandRemoveLayer::redo()
......@@ -55,21 +70,11 @@ void CommandRemoveLayer::redo()
void CommandRemoveLayer::undo()
{
// if (m_indexOfLayer < m_ec->multiLayerItem()->layers().size())
// m_ec->multiLayerItem()->addLayer(m_indexOfLayer);
// else
// m_ec->multiLayerItem()->addLayer(-1);
//
// auto* restoredLayer = m_ec->multiLayerItem()->layers()[m_indexOfLayer];
// restoredLayer->setMaterialModel(m_ec->materialModel());
//
// for (auto* child : m_layerItemBackup->children()) {
// auto tag = m_layerItemBackup->tagFromItem(child);
// m_backupModel.copyItem(child, restoredLayer, tag);
// }
//
// m_ec->multiLayerForm()->onLayerAdded(restoredLayer);
// emit m_ec->modified();
LayerItem* restoredLayer = m_ec->multiLayerItem()->addLayer(m_indexOfLayer);
deserialize(restoredLayer, m_layerItemBackup);
restoredLayer->setMaterialModel(m_ec->materialModel());
m_ec->multiLayerForm()->onLayerAdded(restoredLayer);
emit m_ec->modified();
}
......
......@@ -15,7 +15,6 @@
#ifndef BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEEDITORCOMMANDS_H
#define BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEEDITORCOMMANDS_H
#include "GUI/Model/Sample/SampleModel.h"
#include <QUndoCommand>
class SampleEditorController;
......@@ -52,8 +51,7 @@ public:
private:
SampleEditorController* m_ec;
LayerItem* m_layerItemBackup;
SampleModel m_backupModel;
QByteArray m_layerItemBackup;
int m_indexOfLayer;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment