Use weak reference for undo state, as it is an entirely internal class

Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
carlitosan
2021-12-06 13:37:29 -08:00
parent b9bbe233be
commit d8e5315199
5 changed files with 28 additions and 28 deletions
@@ -18,10 +18,10 @@ namespace ScriptCanvasEditor
{
}
UndoHelper::UndoHelper(SourceHandle memoryAsset)
UndoHelper::UndoHelper(Graph* graph)
: m_undoState(this)
{
SetSource(memoryAsset);
SetSource(graph);
}
UndoHelper::~UndoHelper()
@@ -29,10 +29,10 @@ namespace ScriptCanvasEditor
UndoRequestBus::Handler::BusDisconnect();
}
void UndoHelper::SetSource(SourceHandle source)
void UndoHelper::SetSource(Graph* graph)
{
m_memoryAsset = source;
UndoRequestBus::Handler::BusConnect(source.Get()->GetScriptCanvasId());
m_graph = graph;
UndoRequestBus::Handler::BusConnect(graph->GetScriptCanvasId());
}
ScriptCanvasEditor::UndoCache* UndoHelper::GetSceneUndoCache()
@@ -42,8 +42,8 @@ namespace ScriptCanvasEditor
ScriptCanvasEditor::UndoData UndoHelper::CreateUndoData()
{
AZ::EntityId graphCanvasGraphId = m_memoryAsset.Get()->GetGraphCanvasGraphId();
ScriptCanvas::ScriptCanvasId scriptCanvasId = m_memoryAsset.Get()->GetScriptCanvasId();
AZ::EntityId graphCanvasGraphId = m_graph->GetGraphCanvasGraphId();
ScriptCanvas::ScriptCanvasId scriptCanvasId = m_graph->GetScriptCanvasId();
GraphCanvas::GraphModelRequestBus::Event(graphCanvasGraphId, &GraphCanvas::GraphModelRequests::OnSaveDataDirtied, graphCanvasGraphId);
@@ -94,22 +94,22 @@ namespace ScriptCanvasEditor
void UndoHelper::AddGraphItemChangeUndo(AZStd::string_view undoLabel)
{
GraphItemChangeCommand* command = aznew GraphItemChangeCommand(undoLabel);
command->Capture(m_memoryAsset, true);
command->Capture(m_memoryAsset, false);
command->Capture(m_graph, true);
command->Capture(m_graph, false);
AddUndo(command);
}
void UndoHelper::AddGraphItemAdditionUndo(AZStd::string_view undoLabel)
{
GraphItemAddCommand* command = aznew GraphItemAddCommand(undoLabel);
command->Capture(m_memoryAsset, false);
command->Capture(m_graph, false);
AddUndo(command);
}
void UndoHelper::AddGraphItemRemovalUndo(AZStd::string_view undoLabel)
{
GraphItemRemovalCommand* command = aznew GraphItemRemovalCommand(undoLabel);
command->Capture(m_memoryAsset, true);
command->Capture(m_graph, true);
AddUndo(command);
}
@@ -190,7 +190,7 @@ namespace ScriptCanvasEditor
void UndoHelper::UpdateCache()
{
ScriptCanvas::ScriptCanvasId scriptCanvasId = m_memoryAsset.Get()->GetScriptCanvasId();
ScriptCanvas::ScriptCanvasId scriptCanvasId = m_graph->GetScriptCanvasId();
UndoCache* undoCache = nullptr;
UndoRequestBus::EventResult(undoCache, scriptCanvasId, &UndoRequests::GetSceneUndoCache);
@@ -21,13 +21,13 @@ namespace ScriptCanvasEditor
public:
UndoHelper();
UndoHelper(SourceHandle source);
UndoHelper(Graph* source);
~UndoHelper();
UndoCache* GetSceneUndoCache() override;
UndoData CreateUndoData() override;
void SetSource(SourceHandle source);
void SetSource(Graph* source);
void BeginUndoBatch(AZStd::string_view label) override;
void EndUndoBatch() override;
@@ -58,6 +58,6 @@ namespace ScriptCanvasEditor
Status m_status = Status::Idle;
SceneUndoState m_undoState;
SourceHandle m_memoryAsset;
Graph* m_graph = nullptr;
};
}
@@ -481,6 +481,7 @@ namespace ScriptCanvasEditor
ScriptCanvas::Graph::Activate();
PostActivate();
m_undoHelper.SetSource(this);
}
void Graph::Deactivate()
@@ -1067,7 +1068,6 @@ namespace ScriptCanvasEditor
void Graph::MarkOwnership(ScriptCanvas::ScriptCanvasData& owner)
{
m_owner = &owner;
m_undoHelper.SetSource(SourceHandle(GetOwnership(), {}, ""));
}
ScriptCanvas::DataPtr Graph::GetOwnership() const
@@ -36,7 +36,7 @@ namespace ScriptCanvasEditor
{
}
void GraphItemCommand::Capture(SourceHandle&, bool)
void GraphItemCommand::Capture(Graph*, bool)
{
}
@@ -105,10 +105,10 @@ namespace ScriptCanvasEditor
RestoreItem(m_redoState);
}
void GraphItemChangeCommand::Capture(SourceHandle& memoryAsset, bool captureUndo)
void GraphItemChangeCommand::Capture(Graph* graph, bool captureUndo)
{
m_scriptCanvasId = memoryAsset.Get()->GetScriptCanvasId();
m_graphCanvasGraphId = memoryAsset.Get()->GetGraphCanvasGraphId();
m_scriptCanvasId = graph->GetScriptCanvasId();
m_graphCanvasGraphId = graph->GetGraphCanvasGraphId();
UndoCache* undoCache = nullptr;
UndoRequestBus::EventResult(undoCache, m_scriptCanvasId, &UndoRequests::GetSceneUndoCache);
@@ -204,9 +204,9 @@ namespace ScriptCanvasEditor
RestoreItem(m_redoState);
}
void GraphItemAddCommand::Capture(SourceHandle& memoryAsset, bool)
void GraphItemAddCommand::Capture(Graph* graph, bool)
{
GraphItemChangeCommand::Capture(memoryAsset, false);
GraphItemChangeCommand::Capture(graph, false);
}
//// Graph Item Removal Command
@@ -225,8 +225,8 @@ namespace ScriptCanvasEditor
RestoreItem(m_redoState);
}
void GraphItemRemovalCommand::Capture(SourceHandle& memoryAsset, bool)
void GraphItemRemovalCommand::Capture(Graph* graph, bool)
{
GraphItemChangeCommand::Capture(memoryAsset, true);
GraphItemChangeCommand::Capture(graph, true);
}
}
@@ -46,7 +46,7 @@ namespace ScriptCanvasEditor
void Undo() override;
void Redo() override;
virtual void Capture(SourceHandle& memoryAsset, bool captureUndo);
virtual void Capture(Graph* graph, bool captureUndo);
bool Changed() const override;
@@ -76,7 +76,7 @@ namespace ScriptCanvasEditor
void Undo() override;
void Redo() override;
void Capture(SourceHandle& memoryAsset, bool captureUndo) override;
void Capture(Graph* graph, bool captureUndo) override;
void RestoreItem(const AZStd::vector<AZ::u8>& restoreBuffer) override;
@@ -103,7 +103,7 @@ namespace ScriptCanvasEditor
void Undo() override;
void Redo() override;
void Capture(SourceHandle& memoryAsset, bool captureUndo) override;
void Capture(Graph* graph, bool captureUndo) override;
protected:
GraphItemAddCommand(const GraphItemAddCommand&) = delete;
@@ -124,7 +124,7 @@ namespace ScriptCanvasEditor
void Undo() override;
void Redo() override;
void Capture(SourceHandle& memoryAsset, bool captureUndo) override;
void Capture(Graph* graph, bool captureUndo) override;
protected:
GraphItemRemovalCommand(const GraphItemRemovalCommand&) = delete;