clean up open pipeline to render graph

Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
chcurran
2021-11-03 19:15:44 -07:00
parent 6c130c7a86
commit b635e112fc
15 changed files with 616 additions and 569 deletions
@@ -58,111 +58,111 @@ namespace ScriptCanvasEditor
SaveAs(assetId, {}, onSaveCallback); SaveAs(assetId, {}, onSaveCallback);
} }
void AssetTracker::SaveAs(AZ::Data::AssetId assetId, const AZStd::string& path, Callbacks::OnSave onSaveCallback) void AssetTracker::SaveAs(AZ::Data::AssetId /*assetId*/, const AZStd::string& /*path*/, Callbacks::OnSave /*onSaveCallback*/)
{ {
auto assetIter = m_assetsInUse.find(assetId); // auto assetIter = m_assetsInUse.find(assetId);
//
if (assetIter != m_assetsInUse.end()) // if (assetIter != m_assetsInUse.end())
{ // {
auto onSave = [this, assetId, onSaveCallback](bool saveSuccess, AZ::Data::AssetPtr asset, AZ::Data::AssetId previousFileAssetId) // auto onSave = [this, assetId, onSaveCallback](bool saveSuccess, AZ::Data::AssetPtr asset, AZ::Data::AssetId previousFileAssetId)
{ // {
AZ::Data::AssetId signalId = assetId; // AZ::Data::AssetId signalId = assetId;
AZ::Data::AssetId fileAssetId = asset->GetId(); // AZ::Data::AssetId fileAssetId = asset->GetId();
//
// If there is a previous file Id is valid, it means this is a save-as operation and we need to remap the tracking. // // If there is a previous file Id is valid, it means this is a save-as operation and we need to remap the tracking.
if (previousFileAssetId.IsValid()) // if (previousFileAssetId.IsValid())
{ // {
if (saveSuccess) // if (saveSuccess)
{ // {
fileAssetId = m_assetsInUse[assetId]->GetFileAssetId(); // fileAssetId = m_assetsInUse[assetId]->GetFileAssetId();
m_remappedAsset[asset->GetId()] = fileAssetId; // m_remappedAsset[asset->GetId()] = fileAssetId;
//
// Erase the asset first so the smart pointer can deal with it's things. // // Erase the asset first so the smart pointer can deal with it's things.
m_assetsInUse.erase(fileAssetId); // m_assetsInUse.erase(fileAssetId);
//
// Then perform the insert once we know nothing will attempt to delete this while we are operating on it. // // Then perform the insert once we know nothing will attempt to delete this while we are operating on it.
m_assetsInUse[fileAssetId] = m_assetsInUse[assetId]; // m_assetsInUse[fileAssetId] = m_assetsInUse[assetId];
m_assetsInUse.erase(assetId); // m_assetsInUse.erase(assetId);
} // }
//
m_savingAssets.erase(assetId); // m_savingAssets.erase(assetId);
m_savingAssets.insert(fileAssetId); // m_savingAssets.insert(fileAssetId);
//
signalId = fileAssetId; // signalId = fileAssetId;
//
if (m_queuedCloses.erase(assetId)) // if (m_queuedCloses.erase(assetId))
{ // {
m_queuedCloses.insert(fileAssetId); // m_queuedCloses.insert(fileAssetId);
} // }
//
auto assetIter = m_assetsInUse.find(fileAssetId); // auto assetIter = m_assetsInUse.find(fileAssetId);
//
if (assetIter != m_assetsInUse.end()) // if (assetIter != m_assetsInUse.end())
{ // {
AZStd::invoke(onSaveCallback, saveSuccess, m_assetsInUse[fileAssetId]->GetAsset().Get(), previousFileAssetId); // AZStd::invoke(onSaveCallback, saveSuccess, m_assetsInUse[fileAssetId]->GetAsset().Get(), previousFileAssetId);
} // }
else // else
{ // {
AZ_Error("ScriptCanvas", !saveSuccess, "Unable to find Memory Asset for Asset(%s)", fileAssetId.ToString<AZStd::string>().c_str()); // AZ_Error("ScriptCanvas", !saveSuccess, "Unable to find Memory Asset for Asset(%s)", fileAssetId.ToString<AZStd::string>().c_str());
AZStd::invoke(onSaveCallback, saveSuccess, asset, previousFileAssetId); // AZStd::invoke(onSaveCallback, saveSuccess, asset, previousFileAssetId);
} // }
} // }
else // else
{ // {
if (saveSuccess) // if (saveSuccess)
{ // {
// This should be the case when we get a save as from a newly created file. // // This should be the case when we get a save as from a newly created file.
// // //
// If we find the 'memory' asset id in the assets in use. This means this was a new file that was saved. // // If we find the 'memory' asset id in the assets in use. This means this was a new file that was saved.
// To maintain all of the look-up stuff, we need to treat this like a remapping stage. // // To maintain all of the look-up stuff, we need to treat this like a remapping stage.
auto assetInUseIter = m_assetsInUse.find(assetId); // auto assetInUseIter = m_assetsInUse.find(assetId);
if (assetInUseIter != m_assetsInUse.end()) // if (assetInUseIter != m_assetsInUse.end())
{ // {
fileAssetId = assetInUseIter->second->GetFileAssetId(); // fileAssetId = assetInUseIter->second->GetFileAssetId();
//
if (assetId != fileAssetId) // if (assetId != fileAssetId)
{ // {
m_remappedAsset[assetId] = fileAssetId; // m_remappedAsset[assetId] = fileAssetId;
//
m_assetsInUse.erase(fileAssetId); // m_assetsInUse.erase(fileAssetId);
m_assetsInUse[fileAssetId] = AZStd::move(assetInUseIter->second); // m_assetsInUse[fileAssetId] = AZStd::move(assetInUseIter->second);
m_assetsInUse.erase(assetId); // m_assetsInUse.erase(assetId);
//
m_savingAssets.erase(assetId); // m_savingAssets.erase(assetId);
m_savingAssets.insert(fileAssetId); // m_savingAssets.insert(fileAssetId);
//
if (m_queuedCloses.erase(assetId)) // if (m_queuedCloses.erase(assetId))
{ // {
m_queuedCloses.insert(fileAssetId); // m_queuedCloses.insert(fileAssetId);
} // }
} // }
} // }
else // else
{ // {
fileAssetId = CheckAssetId(fileAssetId); // fileAssetId = CheckAssetId(fileAssetId);
} // }
//
signalId = fileAssetId; // signalId = fileAssetId;
} // }
//
if (onSaveCallback) // if (onSaveCallback)
{ // {
AZStd::invoke(onSaveCallback, saveSuccess, m_assetsInUse[signalId]->GetAsset().Get(), previousFileAssetId); // AZStd::invoke(onSaveCallback, saveSuccess, m_assetsInUse[signalId]->GetAsset().Get(), previousFileAssetId);
} // }
//
AssetTrackerNotificationBus::Broadcast(&AssetTrackerNotifications::OnAssetSaved, m_assetsInUse[signalId], saveSuccess); // AssetTrackerNotificationBus::Broadcast(&AssetTrackerNotifications::OnAssetSaved, m_assetsInUse[signalId], saveSuccess);
} // }
//
SignalSaveComplete(signalId); // SignalSaveComplete(signalId);
}; // };
//
m_savingAssets.insert(assetId); // m_savingAssets.insert(assetId);
assetIter->second->SaveAs(path, onSave); // assetIter->second->SaveAs(path, onSave);
} // }
else // else
{ // {
AZ_Assert(false, "Cannot SaveAs into an existing AssetId"); // AZ_Assert(false, "Cannot SaveAs into an existing AssetId");
} // }
} }
bool AssetTracker::Load(AZ::Data::AssetId fileAssetId, AZ::Data::AssetType assetType, Callbacks::OnAssetReadyCallback onAssetReadyCallback) bool AssetTracker::Load(AZ::Data::AssetId fileAssetId, AZ::Data::AssetType assetType, Callbacks::OnAssetReadyCallback onAssetReadyCallback)
@@ -18,7 +18,7 @@ namespace ScriptCanvasEditor
namespace Callbacks namespace Callbacks
{ {
//! Callback used to know when a save operation failed or succeeded //! Callback used to know when a save operation failed or succeeded
using OnSave = AZStd::function<void(bool saveSuccess, AZ::Data::AssetPtr, AZ::Data::AssetId previousFileAssetId)>; using OnSave = AZStd::function<void(bool saveSuccess, const SourceHandle& attempt, const SourceHandle& previous)>;
using OnAssetReadyCallback = AZStd::function<void(ScriptCanvasMemoryAsset&)>; using OnAssetReadyCallback = AZStd::function<void(ScriptCanvasMemoryAsset&)>;
using OnAssetCreatedCallback = OnAssetReadyCallback; using OnAssetCreatedCallback = OnAssetReadyCallback;
@@ -124,6 +124,12 @@ namespace ScriptCanvasEditor
} }
} }
if (auto entity = scriptCanvasData->GetScriptCanvasEntity())
{
entity->Init();
entity->Activate();
}
return AZ::Success(ScriptCanvasEditor::SourceHandle(scriptCanvasData, {}, path)); return AZ::Success(ScriptCanvasEditor::SourceHandle(scriptCanvasData, {}, path));
} }
} }
@@ -283,10 +283,11 @@ namespace ScriptCanvasEditor
m_undoHelper = AZStd::make_unique<UndoHelper>(*this); m_undoHelper = AZStd::make_unique<UndoHelper>(*this);
} }
ScriptCanvasEditor::Widget::CanvasWidget* ScriptCanvasMemoryAsset::CreateView(QWidget* parent) ScriptCanvasEditor::Widget::CanvasWidget* ScriptCanvasMemoryAsset::CreateView(QWidget* /*parent*/)
{ {
m_canvasWidget = new Widget::CanvasWidget(m_fileAssetId, parent); //m_canvasWidget = new Widget::CanvasWidget(m_fileAssetId, parent);
return m_canvasWidget; //return m_canvasWidget;
return nullptr;
} }
void ScriptCanvasMemoryAsset::ClearView() void ScriptCanvasMemoryAsset::ClearView()
@@ -430,68 +431,68 @@ namespace ScriptCanvasEditor
} }
} }
void ScriptCanvasMemoryAsset::SourceFileFailed(AZStd::string relativePath, AZStd::string scanFolder, AZ::Uuid) void ScriptCanvasMemoryAsset::SourceFileFailed(AZStd::string /*relativePath*/, AZStd::string /*scanFolder*/, AZ::Uuid)
{ {
AZStd::string fullPath; // AZStd::string fullPath;
AzFramework::StringFunc::Path::Join(scanFolder.data(), relativePath.data(), fullPath); // AzFramework::StringFunc::Path::Join(scanFolder.data(), relativePath.data(), fullPath);
AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::NormalizePath, fullPath); // AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::NormalizePath, fullPath);
//
auto assetPathIdIt = AZStd::find(m_pendingSave.begin(), m_pendingSave.end(), fullPath); // auto assetPathIdIt = AZStd::find(m_pendingSave.begin(), m_pendingSave.end(), fullPath);
//
if (assetPathIdIt != m_pendingSave.end()) // if (assetPathIdIt != m_pendingSave.end())
{ // {
if (m_onSaveCallback) // if (m_onSaveCallback)
{ // {
m_onSaveCallback(false, m_inMemoryAsset.Get(), AZ::Data::AssetId()); // m_onSaveCallback(false, m_inMemoryAsset.Get(), AZ::Data::AssetId());
m_onSaveCallback = nullptr; // m_onSaveCallback = nullptr;
} // }
//
m_pendingSave.erase(assetPathIdIt); // m_pendingSave.erase(assetPathIdIt);
} // }
} }
void ScriptCanvasMemoryAsset::SavingComplete(const AZStd::string& streamName, AZ::Uuid sourceAssetId) void ScriptCanvasMemoryAsset::SavingComplete(const AZStd::string& /*streamName*/, AZ::Uuid /*sourceAssetId*/)
{ {
AZStd::string normPath = streamName; // AZStd::string normPath = streamName;
AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::NormalizePath, normPath); // AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::NormalizePath, normPath);
//
auto assetPathIdIt = AZStd::find(m_pendingSave.begin(), m_pendingSave.end(), normPath); // auto assetPathIdIt = AZStd::find(m_pendingSave.begin(), m_pendingSave.end(), normPath);
if (assetPathIdIt != m_pendingSave.end()) // if (assetPathIdIt != m_pendingSave.end())
{ // {
AZ::Data::AssetId previousFileAssetId; // AZ::Data::AssetId previousFileAssetId;
//
if (sourceAssetId != m_fileAssetId.m_guid) // if (sourceAssetId != m_fileAssetId.m_guid)
{ // {
previousFileAssetId = m_fileAssetId; // previousFileAssetId = m_fileAssetId;
//
// The source file has changed, store the AssetId to the canonical asset on file // // The source file has changed, store the AssetId to the canonical asset on file
SetFileAssetId(sourceAssetId); // SetFileAssetId(sourceAssetId);
//
} // }
else if (!m_fileAssetId.IsValid()) // else if (!m_fileAssetId.IsValid())
{ // {
SetFileAssetId(sourceAssetId); // SetFileAssetId(sourceAssetId);
} // }
//
m_formerGraphIdPair = AZStd::make_pair(m_scriptCanvasId, m_graphId); // m_formerGraphIdPair = AZStd::make_pair(m_scriptCanvasId, m_graphId);
//
m_fileState = Tracker::ScriptCanvasFileState::UNMODIFIED; // m_fileState = Tracker::ScriptCanvasFileState::UNMODIFIED;
//
m_pendingSave.erase(assetPathIdIt); // m_pendingSave.erase(assetPathIdIt);
//
m_absolutePath = m_saveAsPath; // m_absolutePath = m_saveAsPath;
m_saveAsPath.clear(); // m_saveAsPath.clear();
//
// Connect to the source asset's bus to monitor for situations we may need to handle // // Connect to the source asset's bus to monitor for situations we may need to handle
AZ::Data::AssetBus::MultiHandler::BusConnect(m_inMemoryAsset.GetId()); // AZ::Data::AssetBus::MultiHandler::BusConnect(m_inMemoryAsset.GetId());
AZ::Data::AssetBus::MultiHandler::BusConnect(m_fileAssetId); // AZ::Data::AssetBus::MultiHandler::BusConnect(m_fileAssetId);
//
if (m_onSaveCallback) // if (m_onSaveCallback)
{ // {
m_onSaveCallback(true, m_inMemoryAsset.Get(), previousFileAssetId); // m_onSaveCallback(true, m_inMemoryAsset.Get(), previousFileAssetId);
m_onSaveCallback = nullptr; // m_onSaveCallback = nullptr;
} // }
} // }
} }
void ScriptCanvasMemoryAsset::FinalizeAssetSave(bool, const AzToolsFramework::SourceControlFileInfo& fileInfo, const AZ::Data::AssetStreamInfo& saveInfo, Callbacks::OnSave onSaveCallback) void ScriptCanvasMemoryAsset::FinalizeAssetSave(bool, const AzToolsFramework::SourceControlFileInfo& fileInfo, const AZ::Data::AssetStreamInfo& saveInfo, Callbacks::OnSave onSaveCallback)
@@ -525,14 +526,14 @@ namespace ScriptCanvasEditor
UndoNotificationBus::Broadcast(&UndoNotifications::OnCanRedoChanged, m_undoState->m_undoStack->CanRedo()); UndoNotificationBus::Broadcast(&UndoNotifications::OnCanRedoChanged, m_undoState->m_undoStack->CanRedo());
} }
void ScriptCanvasMemoryAsset::SetFileAssetId(const AZ::Data::AssetId& fileAssetId) void ScriptCanvasMemoryAsset::SetFileAssetId(const AZ::Data::AssetId& /*fileAssetId*/)
{ {
m_fileAssetId = fileAssetId; // m_fileAssetId = fileAssetId;
//
if (m_canvasWidget) // if (m_canvasWidget)
{ // {
m_canvasWidget->SetAssetId(fileAssetId); // m_canvasWidget->SetAssetId(fileAssetId);
} // }
} }
void ScriptCanvasMemoryAsset::SignalFileStateChanged() void ScriptCanvasMemoryAsset::SignalFileStateChanged()
@@ -604,27 +605,27 @@ namespace ScriptCanvasEditor
// AssetSaveFinalizer // AssetSaveFinalizer
////////////////////////////////////// //////////////////////////////////////
bool AssetSaveFinalizer::ValidateStatus(const AzToolsFramework::SourceControlFileInfo& fileInfo) bool AssetSaveFinalizer::ValidateStatus(const AzToolsFramework::SourceControlFileInfo& /*fileInfo*/)
{ {
auto fileIO = AZ::IO::FileIOBase::GetInstance(); // auto fileIO = AZ::IO::FileIOBase::GetInstance();
if (fileInfo.IsLockedByOther()) // if (fileInfo.IsLockedByOther())
{ // {
AZ_Error("Script Canvas", !fileInfo.IsLockedByOther(), "The file is already exclusively opened by another user: %s", fileInfo.m_filePath.data()); // AZ_Error("Script Canvas", !fileInfo.IsLockedByOther(), "The file is already exclusively opened by another user: %s", fileInfo.m_filePath.data());
AZStd::invoke(m_onSave, false, m_inMemoryAsset, m_fileAssetId); // AZStd::invoke(m_onSave, false, m_inMemoryAsset, m_fileAssetId);
return false; // return false;
} // }
else if (fileInfo.IsReadOnly() && fileIO->Exists(fileInfo.m_filePath.c_str())) // else if (fileInfo.IsReadOnly() && fileIO->Exists(fileInfo.m_filePath.c_str()))
{ // {
AZ_Error("Script Canvas", !fileInfo.IsReadOnly(), "File %s is read-only. It cannot be saved." // AZ_Error("Script Canvas", !fileInfo.IsReadOnly(), "File %s is read-only. It cannot be saved."
" If this file is in Perforce it may not have been checked out by the Source Control API.", fileInfo.m_filePath.data()); // " If this file is in Perforce it may not have been checked out by the Source Control API.", fileInfo.m_filePath.data());
AZStd::invoke(m_onSave, false, m_inMemoryAsset, m_fileAssetId); // AZStd::invoke(m_onSave, false, m_inMemoryAsset, m_fileAssetId);
return false; // return false;
} // }
else if (m_saving) // else if (m_saving)
{ // {
AZ_Warning("Script Canvas", false, "Trying to save the same file twice. Will result in one save callback being ignored."); // AZ_Warning("Script Canvas", false, "Trying to save the same file twice. Will result in one save callback being ignored.");
return false; // return false;
} // }
return true; return true;
} }
@@ -163,7 +163,7 @@ namespace ScriptCanvasEditor
public: public:
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = AZ::Data::AssetId; using BusIdType = SourceHandle;
virtual void OnAssetVisualized() {}; virtual void OnAssetVisualized() {};
virtual void OnAssetUnloaded() {}; virtual void OnAssetUnloaded() {};
@@ -36,7 +36,7 @@ namespace ScriptCanvasEditor
{ {
namespace Widget namespace Widget
{ {
CanvasWidget::CanvasWidget(const AZ::Data::AssetId& assetId, QWidget* parent) CanvasWidget::CanvasWidget(const ScriptCanvasEditor::SourceHandle& assetId, QWidget* parent)
: QWidget(parent) : QWidget(parent)
, ui(new Ui::CanvasWidget()) , ui(new Ui::CanvasWidget())
, m_attached(false) , m_attached(false)
@@ -78,7 +78,7 @@ namespace ScriptCanvasEditor
m_scriptCanvasId = scriptCanvasId; m_scriptCanvasId = scriptCanvasId;
} }
void CanvasWidget::SetAssetId(const AZ::Data::AssetId& assetId) void CanvasWidget::SetAssetId(const ScriptCanvasEditor::SourceHandle& assetId)
{ {
m_assetId = assetId; m_assetId = assetId;
} }
@@ -21,6 +21,7 @@ AZ_POP_DISABLE_WARNING
#include <AzCore/Asset/AssetCommon.h> #include <AzCore/Asset/AssetCommon.h>
#include <GraphCanvas/Components/ViewBus.h> #include <GraphCanvas/Components/ViewBus.h>
#include <ScriptCanvas/Core/Core.h>
#endif #endif
class QVBoxLayout; class QVBoxLayout;
@@ -46,13 +47,13 @@ namespace ScriptCanvasEditor
Q_OBJECT Q_OBJECT
public: public:
AZ_CLASS_ALLOCATOR(CanvasWidget, AZ::SystemAllocator, 0); AZ_CLASS_ALLOCATOR(CanvasWidget, AZ::SystemAllocator, 0);
CanvasWidget(const AZ::Data::AssetId& assetId, QWidget* parent = nullptr); CanvasWidget(const ScriptCanvasEditor::SourceHandle& assetId, QWidget* parent = nullptr);
~CanvasWidget() override; ~CanvasWidget() override;
void SetDefaultBorderColor(AZ::Color defaultBorderColor); void SetDefaultBorderColor(AZ::Color defaultBorderColor);
void ShowScene(const ScriptCanvas::ScriptCanvasId& scriptCanvasId); void ShowScene(const ScriptCanvas::ScriptCanvasId& scriptCanvasId);
void SetAssetId(const AZ::Data::AssetId& assetId); void SetAssetId(const ScriptCanvasEditor::SourceHandle& assetId);
const GraphCanvas::ViewId& GetViewId() const; const GraphCanvas::ViewId& GetViewId() const;
@@ -69,7 +70,7 @@ namespace ScriptCanvasEditor
void SetupGraphicsView(); void SetupGraphicsView();
AZ::Data::AssetId m_assetId; ScriptCanvasEditor::SourceHandle m_assetId;
AZStd::unique_ptr<Ui::CanvasWidget> ui; AZStd::unique_ptr<Ui::CanvasWidget> ui;
@@ -23,6 +23,8 @@
#include <ScriptCanvas/Asset/AssetDescription.h> #include <ScriptCanvas/Asset/AssetDescription.h>
#include <Editor/Include/ScriptCanvas/Components/EditorGraph.h>
namespace ScriptCanvasEditor namespace ScriptCanvasEditor
{ {
namespace Widget namespace Widget
@@ -31,7 +33,7 @@ namespace ScriptCanvasEditor
// GraphTabBar // GraphTabBar
//////////////// ////////////////
GraphTabBar::GraphTabBar(QWidget* parent /*= nullptr*/) GraphTabBar::GraphTabBar(QWidget* parent)
: AzQtComponents::TabBar(parent) : AzQtComponents::TabBar(parent)
{ {
setTabsClosable(true); setTabsClosable(true);
@@ -49,40 +51,81 @@ namespace ScriptCanvasEditor
InsertGraphTab(count(), assetId); InsertGraphTab(count(), assetId);
} }
int GraphTabBar::InsertGraphTab([[maybe_unused]] int tabIndex, [[maybe_unused]] ScriptCanvasEditor::SourceHandle assetId) void GraphTabBar::ClearTabView(int tabIndex)
{ {
// #sc_editor_asset if (tabIndex < count())
// if (!SelectTab(assetId)) {
// { if (QVariant tabDataVariant = tabData(tabIndex); tabDataVariant.isValid())
// AZStd::shared_ptr<ScriptCanvasMemoryAsset> memoryAsset; {
// AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId); GraphTabMetadata replacement = tabDataVariant.value<GraphTabMetadata>();
// if (replacement.m_canvasWidget)
// if (memoryAsset) {
// { delete replacement.m_canvasWidget;
// ScriptCanvas::AssetDescription assetDescription = memoryAsset->GetAsset().Get()->GetAssetDescription(); replacement.m_canvasWidget = nullptr;
// tabDataVariant.setValue(replacement);
// QIcon tabIcon = QIcon(assetDescription.GetIconPathImpl()); setTabData(tabIndex, tabDataVariant);
// int newTabIndex = qobject_cast<AzQtComponents::TabWidget*>(parent())->insertTab(tabIndex, new QWidget(), tabIcon, ""); }
// }
// CanvasWidget* canvasWidget = memoryAsset->CreateView(this); }
// }
// canvasWidget->SetDefaultBorderColor(assetDescription.GetDisplayColorImpl());
// CanvasWidget* GraphTabBar::ModOrCreateTabView(int tabIndex)
// AZStd::string tabName; {
// AzFramework::StringFunc::Path::GetFileName(memoryAsset->GetAbsolutePath().c_str(), tabName); if (tabIndex < count())
// {
// ConfigureTab(newTabIndex, assetId, tabName); if (QVariant tabDataVariant = tabData(tabIndex); tabDataVariant.isValid())
// {
// // new graphs will need to use their in-memory assetid which we'll need to update if (!tabDataVariant.value<GraphTabMetadata>().m_canvasWidget)
// // upon saving the asset {
// if (!memoryAsset->GetFileAssetId().IsValid()) CanvasWidget* canvasWidget = new CanvasWidget(tabDataVariant.value<GraphTabMetadata>().m_assetId, this);
// { canvasWidget->SetDefaultBorderColor(ScriptCanvasAssetDescription().GetDisplayColorImpl());
// setTabData(newTabIndex, QVariant::fromValue(memoryAsset->GetId())); GraphTabMetadata replacement = tabDataVariant.value<GraphTabMetadata>();
// } replacement.m_canvasWidget = canvasWidget;
// tabDataVariant.setValue(replacement);
// return newTabIndex; setTabData(tabIndex, tabDataVariant);
// } }
// }
return tabDataVariant.value<GraphTabMetadata>().m_canvasWidget;
}
}
return nullptr;
}
CanvasWidget* GraphTabBar::ModTabView(int tabIndex)
{
if (tabIndex < count())
{
if (QVariant tabDataVariant = tabData(tabIndex); tabDataVariant.isValid())
{
return tabDataVariant.value<GraphTabMetadata>().m_canvasWidget;
}
}
return nullptr;
}
int GraphTabBar::InsertGraphTab(int tabIndex, ScriptCanvasEditor::SourceHandle assetId)
{
if (!SelectTab(assetId))
{
QIcon tabIcon = QIcon(ScriptCanvasAssetDescription().GetIconPathImpl());
tabIndex = qobject_cast<AzQtComponents::TabWidget*>(parent())->insertTab(tabIndex, new QWidget(), tabIcon, "");
GraphTabMetadata metaData;
CanvasWidget* canvasWidget = new CanvasWidget(assetId, this);
canvasWidget->SetDefaultBorderColor(ScriptCanvasAssetDescription().GetDisplayColorImpl());
metaData.m_canvasWidget = canvasWidget;
AZStd::string tabName;
AzFramework::StringFunc::Path::GetFileName(assetId.Path().c_str(), tabName);
// #sc_editor_asset filestate
Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID;
// AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, fileAssetId);
SetTabText(tabIndex, tabName.c_str(), fileState);
setTabData(tabIndex, QVariant::fromValue(metaData));
return tabIndex;
}
return -1; return -1;
} }
@@ -98,31 +141,10 @@ namespace ScriptCanvasEditor
return false; return false;
} }
void GraphTabBar::ConfigureTab(int tabIndex, ScriptCanvasEditor::SourceHandle fileAssetId, const AZStd::string& tabName) // void GraphTabBar::ConfigureTab(int /*tabIndex*/, ScriptCanvasEditor::SourceHandle fileAssetId, const AZStd::string& tabName)
{ // {
if (fileAssetId.IsValid()) //
{ // }
QVariant tabDataVariant = tabData(tabIndex);
if (tabDataVariant.isValid())
{
// #se_editor_asset
// auto tabAssetId = tabDataVariant.value<AZ::Data::AssetId>();
// MemoryAssetNotificationBus::MultiHandler::BusDisconnect(tabAssetId);
}
setTabData(tabIndex, QVariant::fromValue(fileAssetId));
// #se_editor_asset
// MemoryAssetNotificationBus::MultiHandler::BusConnect(fileAssetId);
}
// #se_editor_asset
Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID;
// AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, fileAssetId);
SetTabText(tabIndex, tabName.c_str(), fileState);
}
int GraphTabBar::FindTab(ScriptCanvasEditor::SourceHandle assetId) const int GraphTabBar::FindTab(ScriptCanvasEditor::SourceHandle assetId) const
{ {
@@ -131,8 +153,8 @@ namespace ScriptCanvasEditor
QVariant tabDataVariant = tabData(tabIndex); QVariant tabDataVariant = tabData(tabIndex);
if (tabDataVariant.isValid()) if (tabDataVariant.isValid())
{ {
auto tabAssetId = tabDataVariant.value<ScriptCanvasEditor::SourceHandle>(); auto tabAssetId = tabDataVariant.value<GraphTabMetadata>();
if (tabAssetId == assetId) if (tabAssetId.m_assetId == assetId)
{ {
return tabIndex; return tabIndex;
} }
@@ -141,18 +163,56 @@ namespace ScriptCanvasEditor
return -1; return -1;
} }
ScriptCanvasEditor::SourceHandle GraphTabBar::FindTabByPath(AZStd::string_view path) const
{
ScriptCanvasEditor::SourceHandle candidate(nullptr, {}, path);
for (int index = 0; index < count(); ++index)
{
QVariant tabdata = tabData(index);
if (tabdata.isValid())
{
auto tabAssetId = tabdata.value<GraphTabMetadata>();
if (tabAssetId.m_assetId.AnyEquals(candidate))
{
return tabAssetId.m_assetId;
}
}
}
return {};
}
ScriptCanvasEditor::SourceHandle GraphTabBar::FindAssetId(int tabIndex) ScriptCanvasEditor::SourceHandle GraphTabBar::FindAssetId(int tabIndex)
{ {
QVariant dataVariant = tabData(tabIndex); QVariant dataVariant = tabData(tabIndex);
if (dataVariant.isValid()) if (dataVariant.isValid())
{ {
auto tabAssetId = dataVariant.value<ScriptCanvasEditor::SourceHandle>(); auto tabAssetId = dataVariant.value<GraphTabMetadata>();
return tabAssetId; return tabAssetId.m_assetId;
} }
return ScriptCanvasEditor::SourceHandle(); return ScriptCanvasEditor::SourceHandle();
} }
ScriptCanvas::ScriptCanvasId GraphTabBar::FindScriptCanvasIdFromGraphCanvasId(const GraphCanvas::GraphId& graphCanvasGraphId) const
{
for (int index = 0; index < count(); ++index)
{
QVariant tabdata = tabData(index);
if (tabdata.isValid())
{
auto tabAssetId = tabdata.value<GraphTabMetadata>();
if (tabAssetId.m_assetId && tabAssetId.m_assetId.Get()->GetGraphCanvasGraphId() == graphCanvasGraphId)
{
return tabAssetId.m_assetId.Get()->GetScriptCanvasId();
}
}
}
return ScriptCanvas::ScriptCanvasId{};
}
void GraphTabBar::CloseTab(int index) void GraphTabBar::CloseTab(int index)
{ {
if (index >= 0 && index < count()) if (index >= 0 && index < count())
@@ -160,10 +220,11 @@ namespace ScriptCanvasEditor
QVariant tabdata = tabData(index); QVariant tabdata = tabData(index);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto tabAssetId = tabdata.value<AZ::Data::AssetId>(); // #sc_editor_asset fix tabData
auto tabAssetId = tabdata.value<GraphTabMetadata>();
MemoryAssetNotificationBus::MultiHandler::BusDisconnect(tabAssetId); //MemoryAssetNotificationBus::MultiHandler::BusDisconnect(tabAssetId);
AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::ClearView, tabAssetId); //AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::ClearView, tabAssetId);
} }
qobject_cast<AzQtComponents::TabWidget*>(parent())->removeTab(index); qobject_cast<AzQtComponents::TabWidget*>(parent())->removeTab(index);
@@ -191,10 +252,10 @@ namespace ScriptCanvasEditor
QVariant tabdata = tabData(tabIndex); QVariant tabdata = tabData(tabIndex);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto tabAssetId = tabdata.value<AZ::Data::AssetId>(); auto tabAssetId = tabdata.value<GraphTabMetadata>();
Tracker::ScriptCanvasFileState fileState; Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID;
AssetTrackerRequestBus::BroadcastResult(fileState , &AssetTrackerRequests::GetFileState, tabAssetId); //AssetTrackerRequestBus::BroadcastResult(fileState , &AssetTrackerRequests::GetFileState, tabAssetId);
isModified = fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::MODIFIED; isModified = fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::MODIFIED;
} }
@@ -269,7 +330,7 @@ namespace ScriptCanvasEditor
void GraphTabBar::OnFileStateChanged(Tracker::ScriptCanvasFileState ) void GraphTabBar::OnFileStateChanged(Tracker::ScriptCanvasFileState )
{ {
// #se_editor_asset // #sc_editor_asset
// const AZ::Data::AssetId* fileAssetId = MemoryAssetNotificationBus::GetCurrentBusId(); // const AZ::Data::AssetId* fileAssetId = MemoryAssetNotificationBus::GetCurrentBusId();
// if (fileAssetId) // if (fileAssetId)
@@ -332,7 +393,7 @@ namespace ScriptCanvasEditor
return; return;
} }
auto assetId = tabdata.value<AZ::Data::AssetId>(); auto assetId = tabdata.value<GraphTabMetadata>();
// #sc_editor_asset // #sc_editor_asset
// ScriptCanvasEditor::GeneralRequestBus::Broadcast(&ScriptCanvasEditor::GeneralRequests::OnChangeActiveGraphTab, assetId); // ScriptCanvasEditor::GeneralRequestBus::Broadcast(&ScriptCanvasEditor::GeneralRequests::OnChangeActiveGraphTab, assetId);
@@ -346,7 +407,7 @@ namespace ScriptCanvasEditor
void GraphTabBar::SetFileState(ScriptCanvasEditor::SourceHandle, Tracker::ScriptCanvasFileState ) void GraphTabBar::SetFileState(ScriptCanvasEditor::SourceHandle, Tracker::ScriptCanvasFileState )
{ {
// #se_editor_asset // #sc_editor_asset
// int index = FindTab(assetId); // int index = FindTab(assetId);
// if (index >= 0 && index < count()) // if (index >= 0 && index < count())
@@ -354,7 +415,7 @@ namespace ScriptCanvasEditor
// QVariant tabdata = tabData(index); // QVariant tabdata = tabData(index);
// if (tabdata.isValid()) // if (tabdata.isValid())
// { // {
// auto tabAssetId = tabdata.value<AZ::Data::AssetId>(); // auto tabAssetId = tabdata.value<GraphTabMetadata>();
// //
// AZStd::string tabName; // AZStd::string tabName;
// AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, tabAssetId); // AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, tabAssetId);
@@ -16,6 +16,7 @@
#include <AzCore/Component/EntityId.h> #include <AzCore/Component/EntityId.h>
#include <AzCore/Asset/AssetCommon.h> #include <AzCore/Asset/AssetCommon.h>
#include <ScriptCanvas/Core/Core.h>
#include <Editor/Assets/ScriptCanvasAssetTracker.h> #include <Editor/Assets/ScriptCanvasAssetTracker.h>
#endif #endif
@@ -26,11 +27,13 @@ namespace ScriptCanvasEditor
{ {
namespace Widget namespace Widget
{ {
class CanvasWidget;
struct GraphTabMetadata struct GraphTabMetadata
{ {
AZ::Data::AssetId m_assetId; SourceHandle m_assetId;
QWidget* m_hostWidget = nullptr; QWidget* m_hostWidget = nullptr;
QString m_tabName; CanvasWidget* m_canvasWidget = nullptr;
Tracker::ScriptCanvasFileState m_fileState = Tracker::ScriptCanvasFileState::INVALID; Tracker::ScriptCanvasFileState m_fileState = Tracker::ScriptCanvasFileState::INVALID;
}; };
@@ -46,16 +49,22 @@ namespace ScriptCanvasEditor
~GraphTabBar() override = default; ~GraphTabBar() override = default;
void AddGraphTab(ScriptCanvasEditor::SourceHandle assetId); void AddGraphTab(ScriptCanvasEditor::SourceHandle assetId);
void CloseTab(int index);
void CloseAllTabs();
int InsertGraphTab(int tabIndex, ScriptCanvasEditor::SourceHandle assetId); int InsertGraphTab(int tabIndex, ScriptCanvasEditor::SourceHandle assetId);
bool SelectTab(ScriptCanvasEditor::SourceHandle assetId); bool SelectTab(ScriptCanvasEditor::SourceHandle assetId);
void ConfigureTab(int tabIndex, ScriptCanvasEditor::SourceHandle fileAssetId, const AZStd::string& tabName); // void ConfigureTab(int tabIndex, ScriptCanvasEditor::SourceHandle fileAssetId, const AZStd::string& tabName);
int FindTab(ScriptCanvasEditor::SourceHandle assetId) const; int FindTab(ScriptCanvasEditor::SourceHandle assetId) const;
ScriptCanvasEditor::SourceHandle FindTabByPath(AZStd::string_view path) const;
ScriptCanvasEditor::SourceHandle FindAssetId(int tabIndex); ScriptCanvasEditor::SourceHandle FindAssetId(int tabIndex);
ScriptCanvas::ScriptCanvasId FindScriptCanvasIdFromGraphCanvasId(const GraphCanvas::GraphId& graphCanvasGraphId) const;
void CloseTab(int index); void ClearTabView(int tabIndex);
void CloseAllTabs(); CanvasWidget* ModOrCreateTabView(int tabIndex);
CanvasWidget* ModTabView(int tabIndex);
void OnContextMenu(const QPoint& point); void OnContextMenu(const QPoint& point);
@@ -122,7 +122,11 @@ namespace ScriptCanvasEditor
{ {
} }
ExecutionLogTreeItem* DebugLogRootItem::CreateExecutionItem(const LoggingDataId& loggingDataId, const ScriptCanvas::NodeTypeIdentifier& nodeType, const ScriptCanvas::GraphInfo& graphInfo, const ScriptCanvas::NamedNodeId& nodeId) ExecutionLogTreeItem* DebugLogRootItem::CreateExecutionItem
( [[maybe_unused]] const LoggingDataId& loggingDataId
, [[maybe_unused]] const ScriptCanvas::NodeTypeIdentifier& nodeType
, [[maybe_unused]] const ScriptCanvas::GraphInfo& graphInfo
, [[maybe_unused]] const ScriptCanvas::NamedNodeId& nodeId)
{ {
ExecutionLogTreeItem* treeItem = nullptr; ExecutionLogTreeItem* treeItem = nullptr;
@@ -136,11 +140,13 @@ namespace ScriptCanvasEditor
if (m_updatePolicy == UpdatePolicy::SingleTime) if (m_updatePolicy == UpdatePolicy::SingleTime)
{ {
treeItem = CreateChildNodeWithoutAddSignal<ExecutionLogTreeItem>(loggingDataId, nodeType, graphInfo, nodeId); // #sc_editor_asset
// treeItem = CreateChildNodeWithoutAddSignal<ExecutionLogTreeItem>(loggingDataId, nodeType, graphInfo, nodeId);
} }
else else
{ {
treeItem = CreateChildNode<ExecutionLogTreeItem>(loggingDataId, nodeType, graphInfo, nodeId); // #sc_editor_asset
// treeItem = CreateChildNode<ExecutionLogTreeItem>(loggingDataId, nodeType, graphInfo, nodeId);
} }
return treeItem; return treeItem;
@@ -185,7 +191,11 @@ namespace ScriptCanvasEditor
// ExecutionLogTreeItem // ExecutionLogTreeItem
///////////////////////// /////////////////////////
ExecutionLogTreeItem::ExecutionLogTreeItem(const LoggingDataId& loggingDataId, const ScriptCanvas::NodeTypeIdentifier& nodeType, const ScriptCanvas::GraphInfo& graphInfo, const ScriptCanvas::NamedNodeId& nodeId) ExecutionLogTreeItem::ExecutionLogTreeItem
( const LoggingDataId& loggingDataId
, const ScriptCanvas::NodeTypeIdentifier& nodeType
, const SourceHandle& graphInfo
, const ScriptCanvas::NamedNodeId& nodeId)
: m_loggingDataId(loggingDataId) : m_loggingDataId(loggingDataId)
, m_nodeType(nodeType) , m_nodeType(nodeType)
, m_graphInfo(graphInfo) , m_graphInfo(graphInfo)
@@ -196,7 +206,9 @@ namespace ScriptCanvasEditor
m_paletteConfiguration.SetColorPalette("MethodNodeTitlePalette"); m_paletteConfiguration.SetColorPalette("MethodNodeTitlePalette");
AZ::NamedEntityId entityName; AZ::NamedEntityId entityName;
LoggingDataRequestBus::EventResult(entityName, m_loggingDataId, &LoggingDataRequests::FindNamedEntityId, m_graphInfo.m_runtimeEntity);
// #sc_editor_asset restore this
//LoggingDataRequestBus::EventResult(entityName, m_loggingDataId, &LoggingDataRequests::FindNamedEntityId, m_graphInfo.m_runtimeEntity);
m_sourceEntityName = entityName.ToString().c_str(); m_sourceEntityName = entityName.ToString().c_str();
m_displayName = nodeId.m_name.c_str(); m_displayName = nodeId.m_name.c_str();
@@ -207,7 +219,7 @@ namespace ScriptCanvasEditor
m_inputName = "---"; m_inputName = "---";
m_outputName = "---"; m_outputName = "---";
GeneralAssetNotificationBus::Handler::BusConnect(GetAssetId()); GeneralAssetNotificationBus::Handler::BusConnect(graphInfo);
} }
QVariant ExecutionLogTreeItem::Data(const QModelIndex& index, int role) const QVariant ExecutionLogTreeItem::Data(const QModelIndex& index, int role) const
@@ -502,12 +514,13 @@ namespace ScriptCanvasEditor
const ScriptCanvas::GraphIdentifier& ExecutionLogTreeItem::GetGraphIdentifier() const const ScriptCanvas::GraphIdentifier& ExecutionLogTreeItem::GetGraphIdentifier() const
{ {
return m_graphInfo.m_graphIdentifier; // #sc_editor_asset
return m_graphIdentifier;
} }
const AZ::Data::AssetId& ExecutionLogTreeItem::GetAssetId() const AZ::Data::AssetId ExecutionLogTreeItem::GetAssetId() const
{ {
return m_graphInfo.m_graphIdentifier.m_assetId; return m_graphInfo.Id();
} }
AZ::EntityId ExecutionLogTreeItem::GetScriptCanvasAssetNodeId() const AZ::EntityId ExecutionLogTreeItem::GetScriptCanvasAssetNodeId() const
@@ -131,7 +131,12 @@ namespace ScriptCanvasEditor
AZ_CLASS_ALLOCATOR(ExecutionLogTreeItem, AZ::SystemAllocator, 0); AZ_CLASS_ALLOCATOR(ExecutionLogTreeItem, AZ::SystemAllocator, 0);
AZ_RTTI(ExecutionLogTreeItem, "{71139142-A30C-4A16-81CC-D51314AEAF7D}", DebugLogTreeItem); AZ_RTTI(ExecutionLogTreeItem, "{71139142-A30C-4A16-81CC-D51314AEAF7D}", DebugLogTreeItem);
ExecutionLogTreeItem(const LoggingDataId& loggingDataId, const ScriptCanvas::NodeTypeIdentifier& nodeType, const ScriptCanvas::GraphInfo& graphInfo, const ScriptCanvas::NamedNodeId& nodeId); ExecutionLogTreeItem
( const LoggingDataId& loggingDataId
, const ScriptCanvas::NodeTypeIdentifier& nodeType
, const SourceHandle& graphInfo
, const ScriptCanvas::NamedNodeId& nodeId);
~ExecutionLogTreeItem() override = default; ~ExecutionLogTreeItem() override = default;
QVariant Data(const QModelIndex& index, int role) const override final; QVariant Data(const QModelIndex& index, int role) const override final;
@@ -163,7 +168,7 @@ namespace ScriptCanvasEditor
//// ////
const ScriptCanvas::GraphIdentifier& GetGraphIdentifier() const; const ScriptCanvas::GraphIdentifier& GetGraphIdentifier() const;
const AZ::Data::AssetId& GetAssetId() const; AZ::Data::AssetId GetAssetId() const;
AZ::EntityId GetScriptCanvasAssetNodeId() const; AZ::EntityId GetScriptCanvasAssetNodeId() const;
GraphCanvas::NodeId GetGraphCanvasNodeId() const; GraphCanvas::NodeId GetGraphCanvasNodeId() const;
@@ -184,7 +189,8 @@ namespace ScriptCanvasEditor
LoggingDataId m_loggingDataId; LoggingDataId m_loggingDataId;
ScriptCanvas::NodeTypeIdentifier m_nodeType; ScriptCanvas::NodeTypeIdentifier m_nodeType;
ScriptCanvas::GraphInfo m_graphInfo; SourceHandle m_graphInfo;
ScriptCanvas::GraphIdentifier m_graphIdentifier;
QString m_sourceEntityName; QString m_sourceEntityName;
QString m_graphName; QString m_graphName;
QString m_relativeGraphPath; QString m_relativeGraphPath;
@@ -819,16 +819,10 @@ namespace ScriptCanvasEditor
void MainWindow::SignalActiveSceneChanged(ScriptCanvasEditor::SourceHandle assetId) void MainWindow::SignalActiveSceneChanged(ScriptCanvasEditor::SourceHandle assetId)
{ {
// #se_editor_asset
/*
ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId);
AZ::EntityId graphId; AZ::EntityId graphId;
if (assetId)
if (memoryAsset)
{ {
graphId = memoryAsset->GetGraphId(); EditorGraphRequestBus::EventResult(graphId, assetId.Get()->GetScriptCanvasId(), &EditorGraphRequests::GetGraphCanvasGraphId);
} }
m_autoSaveTimer.stop(); m_autoSaveTimer.stop();
@@ -847,18 +841,20 @@ namespace ScriptCanvasEditor
GraphCanvas::ViewId viewId; GraphCanvas::ViewId viewId;
GraphCanvas::SceneRequestBus::EventResult(viewId, graphId, &GraphCanvas::SceneRequests::GetViewId); GraphCanvas::SceneRequestBus::EventResult(viewId, graphId, &GraphCanvas::SceneRequests::GetViewId);
AZ_Assert(viewId.IsValid(), "SceneRequest must return a valid ViewId");
if (viewId.IsValid()) if (viewId.IsValid())
{ {
GraphCanvas::ViewNotificationBus::Handler::BusDisconnect(); GraphCanvas::ViewNotificationBus::Handler::BusDisconnect();
GraphCanvas::ViewNotificationBus::Handler::BusConnect(viewId); GraphCanvas::ViewNotificationBus::Handler::BusConnect(viewId);
enabled = memoryAsset->GetScriptCanvasId().IsValid(); enabled = true;
}
else
{
AZ_Error("ScriptCanvasEditor", viewId.IsValid(), "SceneRequest must return a valid ViewId");
} }
} }
UpdateMenuState(enabled); UpdateMenuState(enabled);
*/
} }
void MainWindow::UpdateRecentMenu() void MainWindow::UpdateRecentMenu()
@@ -938,7 +934,7 @@ namespace ScriptCanvasEditor
if (shouldSaveResults == UnsavedChangesOptions::SAVE) if (shouldSaveResults == UnsavedChangesOptions::SAVE)
{ {
// #se_editor_asset // #sc_editor_asset
// Callbacks::OnSave saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr, ScriptCanvasEditor::SourceHandle) // Callbacks::OnSave saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr, ScriptCanvasEditor::SourceHandle)
// { // {
// if (isSuccessful) // if (isSuccessful)
@@ -1138,7 +1134,7 @@ namespace ScriptCanvasEditor
void MainWindow::MarkAssetModified(const ScriptCanvasEditor::SourceHandle& /*assetId*/) void MainWindow::MarkAssetModified(const ScriptCanvasEditor::SourceHandle& /*assetId*/)
{ {
// #se_editor_asset if (!assetId.IsValid()) // #sc_editor_asset if (!assetId.IsValid())
// { // {
// return; // return;
// } // }
@@ -1159,7 +1155,7 @@ namespace ScriptCanvasEditor
void MainWindow::RefreshScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& /*asset*/) void MainWindow::RefreshScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& /*asset*/)
{ {
// #se_editor_asset // #sc_editor_asset
/* /*
ScriptCanvasMemoryAsset::pointer memoryAsset; ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, asset.GetId()); AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, asset.GetId());
@@ -1192,12 +1188,9 @@ namespace ScriptCanvasEditor
*/ */
} }
AZ::Outcome<int, AZStd::string> MainWindow::OpenScriptCanvasAssetId(const ScriptCanvasEditor::SourceHandle& /*fileAssetId*/) AZ::Outcome<int, AZStd::string> MainWindow::OpenScriptCanvasAssetId(const ScriptCanvasEditor::SourceHandle& fileAssetId)
{ {
// #se_editor_asset if (fileAssetId.Id().IsNull())
return AZ::Failure(AZStd::string("rewrite MainWindow::OpenScriptCanvasAssetId"));
/*
if (!fileAssetId.IsValid())
{ {
return AZ::Failure(AZStd::string("Unable to open asset with invalid asset id")); return AZ::Failure(AZStd::string("Unable to open asset with invalid asset id"));
} }
@@ -1210,79 +1203,47 @@ namespace ScriptCanvasEditor
return AZ::Success(outTabIndex); return AZ::Success(outTabIndex);
} }
AZ::Data::AssetInfo assetInfo; outTabIndex = CreateAssetTab(fileAssetId);
AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, fileAssetId);
if (assetInfo.m_relativePath.empty()) if (!m_isRestoringWorkspace)
{ {
return AZ::Failure(AZStd::string("Unknown AssetId")); SetActiveAsset(fileAssetId);
} }
if (assetInfo.m_assetType != azrtti_typeid<ScriptCanvasAsset>())
{
return AZ::Failure(AZStd::string("Invalid AssetId provided, it's not a Script Canvas supported type"));
}
AssetTrackerRequests::OnAssetReadyCallback onAssetReady = [this, fileAssetId, &outTabIndex](ScriptCanvasMemoryAsset& asset)
{
if (!asset.IsSourceInError())
{
outTabIndex = CreateAssetTab(asset.GetFileAssetId());
if (!m_isRestoringWorkspace)
{
SetActiveAsset(fileAssetId);
}
UpdateWorkspaceStatus(asset);
}
else
{
outTabIndex = -1;
m_loadingAssets.erase(fileAssetId);
}
};
m_loadingAssets.insert(fileAssetId);
AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::Load, fileAssetId, assetInfo.m_assetType, onAssetReady);
if (outTabIndex >= 0) if (outTabIndex >= 0)
{ {
AddRecentFile(fileAssetId.Path().c_str());
OpenScriptCanvasAssetImplementation(fileAssetId);
return AZ::Success(outTabIndex); return AZ::Success(outTabIndex);
} }
else else
{ {
return AZ::Failure(AZStd::string("Specified asset is in an error state and cannot be properly displayed.")); return AZ::Failure(AZStd::string("Specified asset is in an error state and cannot be properly displayed."));
} }
*/
} }
AZ::Outcome<int, AZStd::string> MainWindow::OpenScriptCanvasAsset(const ScriptCanvasMemoryAsset& /*scriptCanvasAsset*/, int /*tabIndex*/ /*= -1*/) AZ::Outcome<int, AZStd::string> MainWindow::OpenScriptCanvasAssetImplementation(const SourceHandle& scriptCanvasAsset, int tabIndex)
{ {
// #se_editor_asset const ScriptCanvasEditor::SourceHandle& fileAssetId = scriptCanvasAsset;
return AZ::Failure(AZStd::string("rewrite MainWindow::OpenScriptCanvasAsset"));
/*
const ScriptCanvasEditor::SourceHandle& fileAssetId = scriptCanvasAsset.GetFileAssetId();
if (!fileAssetId.IsValid()) if (!fileAssetId.IsValid())
{ {
return AZ::Failure(AZStd::string("Unable to open asset with invalid asset id")); return AZ::Failure(AZStd::string("Unable to open asset with invalid asset id"));
} }
if (scriptCanvasAsset.IsSourceInError()) if (!scriptCanvasAsset.IsValid())
{ {
if (!m_isRestoringWorkspace) if (!m_isRestoringWorkspace)
{ {
AZStd::string errorPath = scriptCanvasAsset.GetAbsolutePath(); AZStd::string errorPath = scriptCanvasAsset.Path();
if (errorPath.empty()) if (errorPath.empty())
{ {
errorPath = m_errorFilePath; errorPath = m_errorFilePath;
} }
if (m_queuedFocusOverride == fileAssetId) if (m_queuedFocusOverride.AnyEquals(fileAssetId))
{ {
m_queuedFocusOverride.SetInvalid(); m_queuedFocusOverride = fileAssetId;
} }
QMessageBox::warning(this, "Unable to open source file", QString("Source File(%1) is in error and cannot be opened").arg(errorPath.c_str()), QMessageBox::StandardButton::Ok); QMessageBox::warning(this, "Unable to open source file", QString("Source File(%1) is in error and cannot be opened").arg(errorPath.c_str()), QMessageBox::StandardButton::Ok);
@@ -1307,18 +1268,14 @@ namespace ScriptCanvasEditor
if (outTabIndex == -1) if (outTabIndex == -1)
{ {
return AZ::Failure(AZStd::string::format("Unable to open existing Script Canvas Asset with id %s in the Script Canvas Editor", AssetHelpers::AssetIdToString(fileAssetId).c_str())); return AZ::Failure(AZStd::string::format("Unable to open existing Script Canvas Asset with id %s in the Script Canvas Editor"
, fileAssetId.ToString().c_str()));
} }
AZStd::string assetPath = scriptCanvasAsset.GetAbsolutePath(); AZStd::string assetPath = scriptCanvasAsset.Path();
if (!assetPath.empty() && !m_loadingNewlySavedFile) if (!assetPath.empty() && !m_loadingNewlySavedFile)
{ {
const size_t eraseCount = m_loadingWorkspaceAssets.erase(fileAssetId); AddRecentFile(assetPath.c_str());
if (eraseCount == 0)
{
AddRecentFile(assetPath.c_str());
}
} }
if (!m_isRestoringWorkspace) if (!m_isRestoringWorkspace)
@@ -1326,47 +1283,34 @@ namespace ScriptCanvasEditor
SetActiveAsset(fileAssetId); SetActiveAsset(fileAssetId);
} }
GraphCanvas::GraphId graphCanvasGraphId = GetGraphCanvasGraphId(scriptCanvasAsset.GetScriptCanvasId()); GraphCanvas::GraphId graphCanvasGraphId = GetGraphCanvasGraphId(scriptCanvasAsset.Get()->GetScriptCanvasId());
GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId, &GraphCanvas::AssetEditorNotifications::OnGraphLoaded, graphCanvasGraphId); GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId, &GraphCanvas::AssetEditorNotifications::OnGraphLoaded, graphCanvasGraphId);
GeneralAssetNotificationBus::Event(fileAssetId, &GeneralAssetNotifications::OnAssetVisualized); GeneralAssetNotificationBus::Event(fileAssetId, &GeneralAssetNotifications::OnAssetVisualized);
AssetTrackerNotificationBus::MultiHandler::BusConnect(fileAssetId);
return AZ::Success(outTabIndex); return AZ::Success(outTabIndex);
*/
} }
AZ::Outcome<int, AZStd::string> MainWindow::OpenScriptCanvasAsset(ScriptCanvasEditor::SourceHandle /*scriptCanvasAssetId*/, int /*tabIndex*/ /*= -1*/) AZ::Outcome<int, AZStd::string> MainWindow::OpenScriptCanvasAsset(ScriptCanvasEditor::SourceHandle scriptCanvasAssetId, int tabIndex)
{ {
// #se_editor_asset if (scriptCanvasAssetId)
return AZ::Failure(AZStd::string("rewrite MainWindow::OpenScriptCanvasAsset"));
/*
ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, scriptCanvasAssetId);
// If the asset is already tracked we can go directly to opening it.
if (memoryAsset)
{ {
return OpenScriptCanvasAsset(*memoryAsset, tabIndex); return OpenScriptCanvasAssetImplementation(scriptCanvasAssetId, tabIndex);
} }
else else
{ {
return OpenScriptCanvasAssetId(scriptCanvasAssetId); return OpenScriptCanvasAssetId(scriptCanvasAssetId);
} }
*/
} }
int MainWindow::CreateAssetTab(const ScriptCanvasEditor::SourceHandle& /*assetId*/, int /*tabIndex*/) int MainWindow::CreateAssetTab(const ScriptCanvasEditor::SourceHandle& assetId, int tabIndex)
{ {
// #se_editor_asset return m_tabBar->InsertGraphTab(tabIndex, assetId);
return -1;
// return m_tabBar->InsertGraphTab(tabIndex, assetId);
} }
AZ::Outcome<int, AZStd::string> MainWindow::UpdateScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& /*scriptCanvasAsset*/) AZ::Outcome<int, AZStd::string> MainWindow::UpdateScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& /*scriptCanvasAsset*/)
{ {
// #se_editor_asset // #sc_editor_asset
return AZ::Failure(AZStd::string("rewrite MainWindow::UpdateScriptCanvasAsset")); return AZ::Failure(AZStd::string("rewrite MainWindow::UpdateScriptCanvasAsset"));
/* /*
@@ -1391,7 +1335,7 @@ namespace ScriptCanvasEditor
void MainWindow::RemoveScriptCanvasAsset(const ScriptCanvasEditor::SourceHandle& /*assetId*/) void MainWindow::RemoveScriptCanvasAsset(const ScriptCanvasEditor::SourceHandle& /*assetId*/)
{ {
// #se_editor_asset move what is necessary to the widget // #sc_editor_asset move what is necessary to the widget
/* /*
AssetHelpers::PrintInfo("RemoveScriptCanvasAsset : %s", AssetHelpers::AssetIdToString(assetId).c_str()); AssetHelpers::PrintInfo("RemoveScriptCanvasAsset : %s", AssetHelpers::AssetIdToString(assetId).c_str());
@@ -1417,7 +1361,7 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(tabIndex); QVariant tabdata = m_tabBar->tabData(tabIndex);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto tabAssetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto tabAssetId = tabdata.value<Widget::GraphTabMetadata>();
SetActiveAsset(tabAssetId); SetActiveAsset(tabAssetId);
} }
*/ */
@@ -1465,7 +1409,7 @@ namespace ScriptCanvasEditor
bool MainWindow::IsScriptCanvasAssetOpen(const ScriptCanvasEditor::SourceHandle& /*assetId*/) const bool MainWindow::IsScriptCanvasAssetOpen(const ScriptCanvasEditor::SourceHandle& /*assetId*/) const
{ {
// #se_editor_asset // #sc_editor_asset
return false; return false;
} }
@@ -1481,7 +1425,7 @@ namespace ScriptCanvasEditor
void MainWindow::GetSuggestedFullFilenameToSaveAs(const ScriptCanvasEditor::SourceHandle& /*assetId*/, AZStd::string& /*filePath*/, AZStd::string& /*fileFilter*/) void MainWindow::GetSuggestedFullFilenameToSaveAs(const ScriptCanvasEditor::SourceHandle& /*assetId*/, AZStd::string& /*filePath*/, AZStd::string& /*fileFilter*/)
{ {
// #se_editor_asset // #sc_editor_asset
/* /*
ScriptCanvasMemoryAsset::pointer memoryAsset; ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId); AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId);
@@ -1528,18 +1472,50 @@ namespace ScriptCanvasEditor
void MainWindow::OpenFile(const char* fullPath) void MainWindow::OpenFile(const char* fullPath)
{ {
AZ::Outcome<ScriptCanvasEditor::SourceHandle, AZStd::string> outcome = LoadFromFile(fullPath); auto tabIndex = m_tabBar->FindTabByPath(fullPath);
if (tabIndex.IsValid())
if (!outcome.IsSuccess())
{ {
SetActiveAsset(tabIndex);
return;
}
AZStd::string watchFolder;
AZ::Data::AssetInfo assetInfo;
bool sourceInfoFound{};
AzToolsFramework::AssetSystemRequestBus::BroadcastResult
( sourceInfoFound
, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, fullPath, assetInfo, watchFolder);
if (!sourceInfoFound)
{
QMessageBox::warning(this, "Invalid Source Asset", QString("'%1' is not a valid asset path.").arg(fullPath), QMessageBox::Ok);
m_errorFilePath = fullPath; m_errorFilePath = fullPath;
AZ_Warning("ScriptCanvas", false, "Unable to open file as a ScriptCanvas graph: %s", fullPath); AZ_Warning("ScriptCanvas", false, "Unable to open file as a ScriptCanvas graph: %s", fullPath);
return;
}
AZ::Outcome<ScriptCanvasEditor::SourceHandle, AZStd::string> outcome = LoadFromFile(fullPath);
if (!outcome.IsSuccess())
{
QMessageBox::warning(this, "Invalid Source File", QString("'%1' is not a valid file path.").arg(fullPath), QMessageBox::Ok);
m_errorFilePath = fullPath;
AZ_Warning("ScriptCanvas", false, "Unable to open file as a ScriptCanvas graph: %s", fullPath);
return;
}
m_errorFilePath.clear();
m_activeGraph = ScriptCanvasEditor::SourceHandle(outcome.TakeValue(), assetInfo.m_assetId.m_guid, fullPath);
auto openOutcome = OpenScriptCanvasAsset(m_activeGraph);
if (openOutcome)
{
RunGraphValidation(false);
SetRecentAssetId(m_activeGraph);
SetActiveAsset(m_activeGraph);
} }
else else
{ {
m_errorFilePath.clear(); AZ_Warning("Script Canvas", openOutcome, "%s", openOutcome.GetError().data());
m_activeGraph = outcome.TakeValue();
return;
} }
#if defined(EDITOR_ASSET_SUPPORT_ENABLED) #if defined(EDITOR_ASSET_SUPPORT_ENABLED)
@@ -1770,7 +1746,7 @@ namespace ScriptCanvasEditor
bool MainWindow::OnFileSave(const Callbacks::OnSave& saveCB) bool MainWindow::OnFileSave(const Callbacks::OnSave& saveCB)
{ {
return SaveAssetImpl(m_activeGraph, saveCB); return SaveAssetAsImpl(m_activeGraph, saveCB);
} }
bool MainWindow::OnFileSaveAs(const Callbacks::OnSave& saveCB) bool MainWindow::OnFileSaveAs(const Callbacks::OnSave& saveCB)
@@ -1798,7 +1774,7 @@ namespace ScriptCanvasEditor
else if (fileState == Tracker::ScriptCanvasFileState::MODIFIED else if (fileState == Tracker::ScriptCanvasFileState::MODIFIED
|| fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED) || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED)
{ {
SaveAsset(assetId, saveCB); SaveAs(assetId.Path(), assetId, saveCB);
saveSuccessful = true; saveSuccessful = true;
} }
@@ -1878,7 +1854,7 @@ namespace ScriptCanvasEditor
return false; return false;
} }
SaveNewAsset(internalStringFile, inMemoryAssetId, saveCB); SaveAs(internalStringFile, inMemoryAssetId, saveCB);
m_newlySavedFile = internalStringFile; m_newlySavedFile = internalStringFile;
@@ -1893,7 +1869,7 @@ namespace ScriptCanvasEditor
void MainWindow::OnSaveCallback(bool /*saveSuccess*/, AZ::Data::AssetPtr /*fileAsset*/, ScriptCanvasEditor::SourceHandle /*previousFileAssetId*/) void MainWindow::OnSaveCallback(bool /*saveSuccess*/, AZ::Data::AssetPtr /*fileAsset*/, ScriptCanvasEditor::SourceHandle /*previousFileAssetId*/)
{ {
// #se_editor_asset yikes...just save the thing...move to ::SaveAsset maybe // #sc_editor_asset yikes...just save the thing...move to ::SaveAsset maybe
/* /*
ScriptCanvasMemoryAsset::pointer memoryAsset; ScriptCanvasMemoryAsset::pointer memoryAsset;
@@ -1915,7 +1891,7 @@ namespace ScriptCanvasEditor
if (saveTabIndex != m_tabBar->currentIndex()) if (saveTabIndex != m_tabBar->currentIndex())
{ {
// Invalidate the file asset id so we don't delete trigger the asset flow. // Invalidate the file asset id so we don't delete trigger the asset flow.
m_tabBar->setTabData(saveTabIndex, QVariant::fromValue(ScriptCanvasEditor::SourceHandle())); m_tabBar->setTabData(saveTabIndex, QVariant::fromValue(GraphTabMetaData));
m_tabBar->CloseTab(saveTabIndex); m_tabBar->CloseTab(saveTabIndex);
saveTabIndex = -1; saveTabIndex = -1;
@@ -1936,6 +1912,7 @@ namespace ScriptCanvasEditor
AzFramework::StringFunc::Path::GetFileName(memoryAsset->GetAbsolutePath().c_str(), tabName); AzFramework::StringFunc::Path::GetFileName(memoryAsset->GetAbsolutePath().c_str(), tabName);
// Update the tab's assetId to the file asset Id (necessary when saving a new asset) // Update the tab's assetId to the file asset Id (necessary when saving a new asset)
// used to be configure tab...sets the name and file state
m_tabBar->ConfigureTab(saveTabIndex, fileAssetId, tabName); m_tabBar->ConfigureTab(saveTabIndex, fileAssetId, tabName);
GeneralAssetNotificationBus::Event(memoryAsset->GetId(), &GeneralAssetNotifications::OnAssetVisualized); GeneralAssetNotificationBus::Event(memoryAsset->GetId(), &GeneralAssetNotifications::OnAssetVisualized);
@@ -2027,53 +2004,11 @@ namespace ScriptCanvasEditor
return OnFileSave(saveCB); return OnFileSave(saveCB);
} }
void MainWindow::SaveAsset(ScriptCanvasEditor::SourceHandle /*assetId*/, const Callbacks::OnSave& /*onSave*/) void MainWindow::SaveAs(AZStd::string_view /*path*/, ScriptCanvasEditor::SourceHandle /*inMemoryAssetId*/, const Callbacks::OnSave& /*onSave*/)
{
/*
PrepareAssetForSave(assetId);
auto onSaveCallback = [this, onSave](bool saveSuccess, AZ::Data::AssetPtr asset, ScriptCanvasEditor::SourceHandle previousAssetId)
{
OnSaveCallback(saveSuccess, asset, previousAssetId);
if (onSave)
{
AZStd::invoke(onSave, saveSuccess, asset, previousAssetId);
}
};
AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::Save, assetId, onSaveCallback);
UpdateSaveState();
ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, m_activeGraph);
// Disable the current view if we are saving.
if (memoryAsset)
{
DisableAssetView(memoryAsset);
}
BlockCloseRequests();
*/
}
void MainWindow::SaveNewAsset(AZStd::string_view /*path*/, ScriptCanvasEditor::SourceHandle /*inMemoryAssetId*/, const Callbacks::OnSave& /*onSave*/)
{ {
/* /*
PrepareAssetForSave(inMemoryAssetId); PrepareAssetForSave(inMemoryAssetId);
auto onSaveCallback = [this, onSave](bool saveSuccess, AZ::Data::AssetPtr asset, ScriptCanvasEditor::SourceHandle previousAssetId)
{
OnSaveCallback(saveSuccess, asset, previousAssetId);
if (onSave)
{
AZStd::invoke(onSave, saveSuccess, asset, previousAssetId);
}
};
AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::SaveAs, inMemoryAssetId, path, onSaveCallback);
UpdateSaveState();
ScriptCanvasMemoryAsset::pointer memoryAsset; ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, inMemoryAssetId); AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, inMemoryAssetId);
@@ -2083,6 +2018,44 @@ namespace ScriptCanvasEditor
DisableAssetView(memoryAsset); DisableAssetView(memoryAsset);
} }
auto onSaveCallback = [this, onSave](bool saveSuccess, AZ::Data::AssetPtr asset, ScriptCanvasEditor::SourceHandle previousAssetId)
{
OnSaveCallback(saveSuccess, asset, previousAssetId);
if (onSave)
{
AZStd::invoke(onSave, saveSuccess, asset, previousAssetId);
}
};
AZ::Data::AssetStreamInfo streamInfo;
streamInfo.m_streamFlags = AZ::IO::OpenMode::ModeWrite;
streamInfo.m_streamName = m_saveAsPath;
if (!streamInfo.IsValid())
{
return;
}
bool sourceControlActive = false;
AzToolsFramework::SourceControlConnectionRequestBus::BroadcastResult(sourceControlActive, &AzToolsFramework::SourceControlConnectionRequests::IsActive);
// If Source Control is active then use it to check out the file before saving otherwise query the file info and save only if the file is not read-only
if (sourceControlActive)
{
AzToolsFramework::SourceControlCommandBus::Broadcast(&AzToolsFramework::SourceControlCommandBus::Events::RequestEdit,
streamInfo.m_streamName.c_str(),
true,
[this, streamInfo, onSaveCallback](bool success, AzToolsFramework::SourceControlFileInfo info) { FinalizeAssetSave(success, info, streamInfo, onSaveCallback); }
);
}
else
{
AzToolsFramework::SourceControlCommandBus::Broadcast(&AzToolsFramework::SourceControlCommandBus::Events::GetFileInfo,
streamInfo.m_streamName.c_str(),
[this, streamInfo, onSaveCallback](bool success, AzToolsFramework::SourceControlFileInfo info) { FinalizeAssetSave(success, info, streamInfo, onSaveCallback); }
);
}
UpdateSaveState();
BlockCloseRequests(); BlockCloseRequests();
*/ */
} }
@@ -2503,7 +2476,6 @@ namespace ScriptCanvasEditor
if (eraseCount == 0) if (eraseCount == 0)
{ {
AZStd::string fullPath = AZStd::string::format("%s/%s", rootFilePath.c_str(), assetInfo.m_relativePath.c_str()); AZStd::string fullPath = AZStd::string::format("%s/%s", rootFilePath.c_str(), assetInfo.m_relativePath.c_str());
AddRecentFile(fullPath.c_str());
} }
} }
} }
@@ -2566,69 +2538,55 @@ namespace ScriptCanvasEditor
AZ::EntityId MainWindow::GetActiveGraphCanvasGraphId() const AZ::EntityId MainWindow::GetActiveGraphCanvasGraphId() const
{ {
// #se_editor_asset AZ::EntityId graphId{};
// AZ::EntityId graphId; if (m_activeGraph)
// AssetTrackerRequestBus::BroadcastResult(graphId, &AssetTrackerRequests::GetGraphId, m_activeGraph);
/*
* Falls through to this, which falls through to editor graph, move to canvas widget
AZ::EntityId ScriptCanvasMemoryAsset::GetGraphId()
{
if (!m_graphId.IsValid())
{ {
EditorGraphRequestBus::EventResult(m_graphId, m_scriptCanvasId, &EditorGraphRequests::GetGraphCanvasGraphId); EditorGraphRequestBus::EventResult
( graphId, m_activeGraph.Get()->GetScriptCanvasId(), &EditorGraphRequests::GetGraphCanvasGraphId);
} }
return m_graphId; return graphId;
}
*/
return AZ::EntityId{};
} }
ScriptCanvas::ScriptCanvasId MainWindow::GetActiveScriptCanvasId() const ScriptCanvas::ScriptCanvasId MainWindow::GetActiveScriptCanvasId() const
{ {
// ScriptCanvas::ScriptCanvasId sceneId; return FindScriptCanvasIdByAssetId(m_activeGraph);
// AssetTrackerRequestBus::BroadcastResult(sceneId, &AssetTrackerRequests::GetScriptCanvasId, m_activeGraph);
// #se_editor_asset
return ScriptCanvas::ScriptCanvasId{};
} }
GraphCanvas::GraphId MainWindow::GetGraphCanvasGraphId(const ScriptCanvas::ScriptCanvasId& /*scriptCanvasId*/) const GraphCanvas::GraphId MainWindow::GetGraphCanvasGraphId(const ScriptCanvas::ScriptCanvasId& scriptCanvasId) const
{ {
// #se_editor_asset AZ::EntityId graphId{};
// AZ::EntityId graphCanvasId; EditorGraphRequestBus::EventResult(graphId, scriptCanvasId, &EditorGraphRequests::GetGraphCanvasGraphId);
// AssetTrackerRequestBus::BroadcastResult(graphCanvasId, &AssetTrackerRequests::GetGraphCanvasId, scriptCanvasId); return graphId;
// move to widget
return AZ::EntityId{};
} }
GraphCanvas::GraphId MainWindow::FindGraphCanvasGraphIdByAssetId(const ScriptCanvasEditor::SourceHandle& /*assetId*/) const GraphCanvas::GraphId MainWindow::FindGraphCanvasGraphIdByAssetId(const ScriptCanvasEditor::SourceHandle& assetId) const
{ {
// #se_editor_asset AZ::EntityId graphId{};
// AZ::EntityId graphId;
// AssetTrackerRequestBus::BroadcastResult(graphId, &AssetTrackerRequests::GetGraphId, assetId); if (assetId)
return AZ::EntityId{}; {
EditorGraphRequestBus::EventResult
( graphId, assetId.Get()->GetScriptCanvasId(), &EditorGraphRequests::GetGraphCanvasGraphId);
}
return graphId;
} }
ScriptCanvas::ScriptCanvasId MainWindow::FindScriptCanvasIdByAssetId(const ScriptCanvasEditor::SourceHandle& /*assetId*/) const ScriptCanvas::ScriptCanvasId MainWindow::FindScriptCanvasIdByAssetId(const ScriptCanvasEditor::SourceHandle& assetId) const
{ {
// #se_editor_asset return assetId ? assetId.Get()->GetScriptCanvasId() : ScriptCanvas::ScriptCanvasId{};
// ScriptCanvas::ScriptCanvasId scriptCanvasId;
// AssetTrackerRequestBus::BroadcastResult(scriptCanvasId, &AssetTrackerRequests::GetScriptCanvasId, assetId);
return ScriptCanvas::ScriptCanvasId{};
} }
ScriptCanvas::ScriptCanvasId MainWindow::GetScriptCanvasId(const GraphCanvas::GraphId& /*graphCanvasGraphId*/) const ScriptCanvas::ScriptCanvasId MainWindow::GetScriptCanvasId(const GraphCanvas::GraphId& graphCanvasGraphId) const
{ {
// #se_editor_asset return m_tabBar->FindScriptCanvasIdFromGraphCanvasId(graphCanvasGraphId);
// ScriptCanvas::ScriptCanvasId scriptCanvasId;
// AssetTrackerRequestBus::BroadcastResult(scriptCanvasId, &AssetTrackerRequests::GetScriptCanvasIdFromGraphId, graphCanvasGraphId);
return ScriptCanvas::ScriptCanvasId{};
} }
bool MainWindow::IsInUndoRedo(const AZ::EntityId& graphCanvasGraphId) const bool MainWindow::IsInUndoRedo(const AZ::EntityId& graphCanvasGraphId) const
{ {
// #se_editor_asset // #sc_editor_asset
bool isActive = false; bool isActive = false;
UndoRequestBus::EventResult(isActive, GetScriptCanvasId(graphCanvasGraphId), &UndoRequests::IsActive); UndoRequestBus::EventResult(isActive, GetScriptCanvasId(graphCanvasGraphId), &UndoRequests::IsActive);
return isActive; return isActive;
@@ -2660,8 +2618,8 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(tabIndex); QVariant tabdata = m_tabBar->tabData(tabIndex);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto tabAssetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto tabAssetId = tabdata.value<Widget::GraphTabMetadata>();
if (tabAssetId == assetId) if (tabAssetId.m_assetId == assetId)
{ {
return tabdata; return tabdata;
} }
@@ -2681,21 +2639,15 @@ namespace ScriptCanvasEditor
return false; return false;
} }
void MainWindow::ReconnectSceneBuses(ScriptCanvasEditor::SourceHandle /*previousAssetId*/, ScriptCanvasEditor::SourceHandle /*nextAssetId*/) void MainWindow::ReconnectSceneBuses(ScriptCanvasEditor::SourceHandle previousAsset, ScriptCanvasEditor::SourceHandle nextAsset)
{ {
// #se_editor_asset // #sc_editor_asset
/*
ScriptCanvasMemoryAsset::pointer previousAsset;
AssetTrackerRequestBus::BroadcastResult(previousAsset, &AssetTrackerRequests::GetAsset, previousAssetId);
ScriptCanvasMemoryAsset::pointer nextAsset;
AssetTrackerRequestBus::BroadcastResult(nextAsset, &AssetTrackerRequests::GetAsset, nextAssetId);
// Disconnect previous asset // Disconnect previous asset
AZ::EntityId previousScriptCanvasSceneId; AZ::EntityId previousScriptCanvasSceneId;
if (previousAsset) if (previousAsset)
{ {
previousScriptCanvasSceneId = previousAsset->GetScriptCanvasId(); previousScriptCanvasSceneId = previousAsset.Get()->GetScriptCanvasId();
GraphCanvas::SceneNotificationBus::MultiHandler::BusDisconnect(previousScriptCanvasSceneId); GraphCanvas::SceneNotificationBus::MultiHandler::BusDisconnect(previousScriptCanvasSceneId);
} }
@@ -2703,7 +2655,8 @@ namespace ScriptCanvasEditor
if (nextAsset) if (nextAsset)
{ {
// Connect the next asset // Connect the next asset
nextAssetGraphCanvasId = nextAsset->GetGraphId(); EditorGraphRequestBus::EventResult(nextAssetGraphCanvasId, nextAsset.Get()->GetScriptCanvasId(), &EditorGraphRequests::GetGraphCanvasGraphId);
if (nextAssetGraphCanvasId.IsValid()) if (nextAssetGraphCanvasId.IsValid())
{ {
GraphCanvas::SceneNotificationBus::MultiHandler::BusConnect(nextAssetGraphCanvasId); GraphCanvas::SceneNotificationBus::MultiHandler::BusConnect(nextAssetGraphCanvasId);
@@ -2716,13 +2669,12 @@ namespace ScriptCanvasEditor
// Notify about the graph refresh // Notify about the graph refresh
GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId, &GraphCanvas::AssetEditorNotifications::OnGraphRefreshed, previousScriptCanvasSceneId, nextAssetGraphCanvasId); GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId, &GraphCanvas::AssetEditorNotifications::OnGraphRefreshed, previousScriptCanvasSceneId, nextAssetGraphCanvasId);
*/
} }
void MainWindow::SetActiveAsset(const ScriptCanvasEditor::SourceHandle& /*fileAssetId*/) void MainWindow::SetActiveAsset(const ScriptCanvasEditor::SourceHandle& fileAssetId)
{ {
// #se_editor_asset // #sc_editor_asset
/*
if (m_activeGraph == fileAssetId) if (m_activeGraph == fileAssetId)
{ {
return; return;
@@ -2745,98 +2697,61 @@ namespace ScriptCanvasEditor
if (m_activeGraph.IsValid()) if (m_activeGraph.IsValid())
{ {
ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, m_activeGraph);
// If we are saving the asset, the Id may have changed from the in-memory to the file asset Id, in that case, // If we are saving the asset, the Id may have changed from the in-memory to the file asset Id, in that case,
// there's no need to hide the view or remove the widget // there's no need to hide the view or remove the widget
if (memoryAsset && memoryAsset->GetView()) auto oldTab = m_tabBar->FindTab(m_activeGraph);
if (auto view = m_tabBar->ModTabView(oldTab))
{ {
memoryAsset->GetView()->hide(); view->hide();
m_layout->removeWidget(memoryAsset->GetView()); m_layout->removeWidget(view);
m_tabBar->ClearTabView(oldTab);
} }
} }
if (fileAssetId.IsValid()) if (fileAssetId.IsValid())
{ {
ScriptCanvasEditor::SourceHandle previousAssetId = m_activeGraph; ScriptCanvasEditor::SourceHandle previousAssetId = m_activeGraph;
m_activeGraph = fileAssetId; m_activeGraph = fileAssetId;
RefreshActiveAsset(); RefreshActiveAsset();
ReconnectSceneBuses(previousAssetId, m_activeGraph); ReconnectSceneBuses(previousAssetId, m_activeGraph);
} }
else else
{ {
ScriptCanvasEditor::SourceHandle previousAssetId = m_activeGraph; ScriptCanvasEditor::SourceHandle previousAssetId = m_activeGraph;
m_activeGraph.Clear(); m_activeGraph.Clear();
m_emptyCanvas->show(); m_emptyCanvas->show();
ReconnectSceneBuses(previousAssetId, m_activeGraph); ReconnectSceneBuses(previousAssetId, m_activeGraph);
SignalActiveSceneChanged(ScriptCanvasEditor::SourceHandle()); SignalActiveSceneChanged(ScriptCanvasEditor::SourceHandle());
} }
UpdateUndoCache(fileAssetId); UpdateUndoCache(fileAssetId);
RefreshSelection();
RefreshSelection();
*/
} }
void MainWindow::RefreshActiveAsset() void MainWindow::RefreshActiveAsset()
{ {
// #se_editor_asset
/*
if (m_activeGraph.IsValid()) if (m_activeGraph.IsValid())
{ {
AssetHelpers::PrintInfo("RefreshActiveAsset : m_activeGraph (%s)", m_activeGraph.ToString().c_str()); AssetHelpers::PrintInfo("RefreshActiveAsset : m_activeGraph (%s)", m_activeGraph.ToString().c_str());
if (auto view = m_tabBar->ModOrCreateTabView(m_tabBar->FindTab(m_activeGraph)))
ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, m_activeGraph);
if (memoryAsset)
{ {
AZ::EntityId sceneEntityId = memoryAsset->GetScriptCanvasId(); view->ShowScene(m_activeGraph.Get()->GetScriptCanvasId());
m_layout->addWidget(view);
const auto& scriptCanvasAsset = memoryAsset->GetAsset(); view->show();
m_emptyCanvas->hide();
if (scriptCanvasAsset.IsReady() && scriptCanvasAsset.Get()->GetScriptCanvasEntity()->GetState() == AZ::Entity::State::Active) SignalActiveSceneChanged(m_activeGraph);
{
if (!memoryAsset->GetView())
{
memoryAsset->CreateView(m_tabBar);
}
auto view = memoryAsset->GetView();
AZ_Assert(view, "Asset should have a view");
if (view)
{
AssetHelpers::PrintInfo("RefreshActiveAsset : m_activeGraph (%s)", m_activeGraph.ToString().c_str());
view->ShowScene(sceneEntityId);
m_layout->addWidget(view);
view->show();
m_emptyCanvas->hide();
}
SignalActiveSceneChanged(m_activeGraph);
}
} }
else else
{ {
// If we couldn't load a memory asset for our active asset. Just set ourselves to invalid.
SetActiveAsset({}); SetActiveAsset({});
} }
} }
*/
} }
void MainWindow::Clear() void MainWindow::Clear()
{ {
m_tabBar->CloseAllTabs(); m_tabBar->CloseAllTabs();
// #se_editor_asset // #sc_editor_asset
// //
// AssetTrackerRequests::AssetList assets; // AssetTrackerRequests::AssetList assets;
// AssetTrackerRequestBus::BroadcastResult(assets, &AssetTrackerRequests::GetAssets); // AssetTrackerRequestBus::BroadcastResult(assets, &AssetTrackerRequests::GetAssets);
@@ -2855,12 +2770,12 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(index); QVariant tabdata = m_tabBar->tabData(index);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto fileAssetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto fileAssetId = tabdata.value<Widget::GraphTabMetadata>();
Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::NEW; Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::NEW;
bool isSaving = false; bool isSaving = false;
// #se_editor_asset Get from widgets // #sc_editor_asset Get from widgets
/* /*
AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, fileAssetId); AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, fileAssetId);
AssetTrackerRequestBus::BroadcastResult(isSaving, &AssetTrackerRequests::IsSaving, fileAssetId); AssetTrackerRequestBus::BroadcastResult(isSaving, &AssetTrackerRequests::IsSaving, fileAssetId);
@@ -2874,9 +2789,9 @@ namespace ScriptCanvasEditor
UnsavedChangesOptions saveDialogResults = UnsavedChangesOptions::CONTINUE_WITHOUT_SAVING; UnsavedChangesOptions saveDialogResults = UnsavedChangesOptions::CONTINUE_WITHOUT_SAVING;
if (!isSaving && (fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::MODIFIED || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED)) if (!isSaving && (fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::MODIFIED || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED))
{ {
SetActiveAsset(fileAssetId); SetActiveAsset(fileAssetId.m_assetId);
// #se_editor_asset // #sc_editor_asset
AZStd::string tabName = "Get from widget"; AZStd::string tabName = "Get from widget";
// AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, fileAssetId); // AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, fileAssetId);
@@ -2885,7 +2800,7 @@ namespace ScriptCanvasEditor
if (saveDialogResults == UnsavedChangesOptions::SAVE) if (saveDialogResults == UnsavedChangesOptions::SAVE)
{ {
// #se_editor_asset // #sc_editor_asset
// auto saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr asset, ScriptCanvasEditor::SourceHandle) // auto saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr asset, ScriptCanvasEditor::SourceHandle)
// { // {
// if (isSuccessful) // if (isSuccessful)
@@ -2927,10 +2842,9 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(index); QVariant tabdata = m_tabBar->tabData(index);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto assetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto assetId = tabdata.value<Widget::GraphTabMetadata>();
SaveAssetImpl(assetId, nullptr); SaveAssetAsImpl(assetId.m_assetId, nullptr);
} }
} }
void MainWindow::CloseAllTabs() void MainWindow::CloseAllTabs()
@@ -2946,7 +2860,7 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(index); QVariant tabdata = m_tabBar->tabData(index);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto assetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto assetId = tabdata.value<Widget::GraphTabMetadata>().m_assetId;
m_isClosingTabs = true; m_isClosingTabs = true;
m_skipTabOnClose = assetId; m_skipTabOnClose = assetId;
@@ -2956,7 +2870,7 @@ namespace ScriptCanvasEditor
void MainWindow::CopyPathToClipboard(int /*index*/) void MainWindow::CopyPathToClipboard(int /*index*/)
{ {
// #se_editor_asset // #sc_editor_asset
/* /*
QVariant tabdata = m_tabBar->tabData(index); QVariant tabdata = m_tabBar->tabData(index);
@@ -2964,7 +2878,7 @@ namespace ScriptCanvasEditor
{ {
QClipboard* clipBoard = QGuiApplication::clipboard(); QClipboard* clipBoard = QGuiApplication::clipboard();
auto assetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto assetId = tabdata.value<Widget::GraphTabMetadata>();
ScriptCanvasMemoryAsset::pointer memoryAsset; ScriptCanvasMemoryAsset::pointer memoryAsset;
AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId); AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId);
@@ -3006,9 +2920,9 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(tab); QVariant tabdata = m_tabBar->tabData(tab);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto assetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto assetId = tabdata.value<Widget::GraphTabMetadata>();
if (assetId != m_skipTabOnClose) if (assetId.m_assetId != m_skipTabOnClose)
{ {
break; break;
} }
@@ -3027,7 +2941,7 @@ namespace ScriptCanvasEditor
QVariant tabdata = m_tabBar->tabData(index); QVariant tabdata = m_tabBar->tabData(index);
if (tabdata.isValid()) if (tabdata.isValid())
{ {
auto tabAssetId = tabdata.value<ScriptCanvasEditor::SourceHandle>(); auto tabAssetId = tabdata.value<Widget::GraphTabMetadata>();
if (tabAssetId == m_activeGraph) if (tabAssetId == m_activeGraph)
{ {
@@ -3694,7 +3608,7 @@ namespace ScriptCanvasEditor
void MainWindow::UpdateSaveState() void MainWindow::UpdateSaveState()
{ {
// #se_editor_asset todo, consider making blocking // #sc_editor_asset todo, consider making blocking
// bool enabled = m_activeGraph.IsValid(); // bool enabled = m_activeGraph.IsValid();
// bool isSaving = false; // bool isSaving = false;
// bool hasModifications = false; // bool hasModifications = false;
@@ -3910,7 +3824,7 @@ namespace ScriptCanvasEditor
AZ::EntityId MainWindow::FindEditorNodeIdByAssetNodeId(const ScriptCanvasEditor::SourceHandle& /*assetId*/, AZ::EntityId /*assetNodeId*/) const AZ::EntityId MainWindow::FindEditorNodeIdByAssetNodeId(const ScriptCanvasEditor::SourceHandle& /*assetId*/, AZ::EntityId /*assetNodeId*/) const
{ {
// #se_editor_asset // #sc_editor_asset
return AZ::EntityId{}; return AZ::EntityId{};
// AZ::EntityId editorEntityId; // AZ::EntityId editorEntityId;
// AssetTrackerRequestBus::BroadcastResult(editorEntityId, &AssetTrackerRequests::GetEditorEntityIdFromSceneEntityId, assetId, assetNodeId); // AssetTrackerRequestBus::BroadcastResult(editorEntityId, &AssetTrackerRequests::GetEditorEntityIdFromSceneEntityId, assetId, assetNodeId);
@@ -3919,7 +3833,7 @@ namespace ScriptCanvasEditor
AZ::EntityId MainWindow::FindAssetNodeIdByEditorNodeId(const ScriptCanvasEditor::SourceHandle& /*assetId*/, AZ::EntityId /*editorNodeId*/) const AZ::EntityId MainWindow::FindAssetNodeIdByEditorNodeId(const ScriptCanvasEditor::SourceHandle& /*assetId*/, AZ::EntityId /*editorNodeId*/) const
{ {
// #se_editor_asset // #sc_editor_asset
return AZ::EntityId{}; return AZ::EntityId{};
// AZ::EntityId sceneEntityId; // AZ::EntityId sceneEntityId;
// AssetTrackerRequestBus::BroadcastResult(sceneEntityId, &AssetTrackerRequests::GetSceneEntityIdFromEditorEntityId, assetId, editorNodeId); // AssetTrackerRequestBus::BroadcastResult(sceneEntityId, &AssetTrackerRequests::GetSceneEntityIdFromEditorEntityId, assetId, editorNodeId);
@@ -4413,7 +4327,7 @@ namespace ScriptCanvasEditor
void MainWindow::OnAssignToSelectedEntities() void MainWindow::OnAssignToSelectedEntities()
{ {
// #se_editor_asset consider cutting // #sc_editor_asset consider cutting
// Tracker::ScriptCanvasFileState fileState; // Tracker::ScriptCanvasFileState fileState;
// AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, m_activeGraph); // AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, m_activeGraph);
// //
@@ -4487,7 +4401,7 @@ namespace ScriptCanvasEditor
ScriptCanvasEditor::Tracker::ScriptCanvasFileState MainWindow::GetAssetFileState(ScriptCanvasEditor::SourceHandle /*assetId*/) const ScriptCanvasEditor::Tracker::ScriptCanvasFileState MainWindow::GetAssetFileState(ScriptCanvasEditor::SourceHandle /*assetId*/) const
{ {
// #se_editor_asset // #sc_editor_asset
return Tracker::ScriptCanvasFileState::INVALID; return Tracker::ScriptCanvasFileState::INVALID;
// Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID; // Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID;
// AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, assetId); // AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, assetId);
@@ -4540,7 +4454,7 @@ namespace ScriptCanvasEditor
if (usableRequestBus) if (usableRequestBus)
{ {
ScriptCanvasMemoryAsset::pointer memoryAsset; ScriptCanvasMemoryAsset::pointer memoryAsset;
// #se_editor_asset // #sc_editor_asset
// AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, m_activeGraph); // AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, m_activeGraph);
if (memoryAsset) if (memoryAsset)
@@ -4597,6 +4511,7 @@ namespace ScriptCanvasEditor
m_filesToOpen.pop_front(); m_filesToOpen.pop_front();
OpenFile(nextFile.toUtf8().data()); OpenFile(nextFile.toUtf8().data());
OpenNextFile();
} }
else else
{ {
@@ -230,7 +230,7 @@ namespace ScriptCanvasEditor
, private VariablePaletteRequestBus::Handler , private VariablePaletteRequestBus::Handler
, private ScriptCanvas::BatchOperationNotificationBus::Handler , private ScriptCanvas::BatchOperationNotificationBus::Handler
, private AssetGraphSceneBus::Handler , private AssetGraphSceneBus::Handler
, private AssetTrackerNotificationBus::MultiHandler //, private AssetTrackerNotificationBus::MultiHandler
#if SCRIPTCANVAS_EDITOR #if SCRIPTCANVAS_EDITOR
//, public IEditorNotifyListener //, public IEditorNotifyListener
#endif #endif
@@ -421,7 +421,7 @@ namespace ScriptCanvasEditor
//! GeneralRequestBus //! GeneralRequestBus
AZ::Outcome<int, AZStd::string> OpenScriptCanvasAssetId(const SourceHandle& assetId) override; AZ::Outcome<int, AZStd::string> OpenScriptCanvasAssetId(const SourceHandle& assetId) override;
AZ::Outcome<int, AZStd::string> OpenScriptCanvasAsset(SourceHandle scriptCanvasAssetId, int tabIndex = -1) override; AZ::Outcome<int, AZStd::string> OpenScriptCanvasAsset(SourceHandle scriptCanvasAssetId, int tabIndex = -1) override;
AZ::Outcome<int, AZStd::string> OpenScriptCanvasAsset(const ScriptCanvasMemoryAsset& scriptCanvasAsset, int tabIndex = -1); AZ::Outcome<int, AZStd::string> OpenScriptCanvasAssetImplementation(const SourceHandle& sourceHandle, int tabIndex = -1);
int CloseScriptCanvasAsset(const SourceHandle& assetId) override; int CloseScriptCanvasAsset(const SourceHandle& assetId) override;
bool CreateScriptCanvasAssetFor(const TypeDefs::EntityComponentId& requestingEntityId) override; bool CreateScriptCanvasAssetFor(const TypeDefs::EntityComponentId& requestingEntityId) override;
@@ -556,8 +556,7 @@ namespace ScriptCanvasEditor
bool ActivateAndSaveAsset(const ScriptCanvasEditor::SourceHandle& unsavedAssetId, const Callbacks::OnSave& onSave); bool ActivateAndSaveAsset(const ScriptCanvasEditor::SourceHandle& unsavedAssetId, const Callbacks::OnSave& onSave);
void SaveNewAsset(AZStd::string_view path, ScriptCanvasEditor::SourceHandle assetId, const Callbacks::OnSave& onSave); void SaveAs(AZStd::string_view path, ScriptCanvasEditor::SourceHandle assetId, const Callbacks::OnSave& onSave);
void SaveAsset(ScriptCanvasEditor::SourceHandle assetId, const Callbacks::OnSave& onSave);
void OpenFile(const char* fullPath); void OpenFile(const char* fullPath);
void CreateMenus(); void CreateMenus();
@@ -190,12 +190,27 @@ namespace ScriptCanvas
namespace ScriptCanvasEditor namespace ScriptCanvasEditor
{ {
SourceHandle::SourceHandle(const SourceHandle& data, const AZ::Uuid& id, AZStd::string_view path)
: m_data(data.m_data)
, m_id(id)
, m_path(path)
{
}
SourceHandle::SourceHandle(ScriptCanvas::DataPtr graph, const AZ::Uuid& id, AZStd::string_view path) SourceHandle::SourceHandle(ScriptCanvas::DataPtr graph, const AZ::Uuid& id, AZStd::string_view path)
: m_data(graph) : m_data(graph)
, m_id(id) , m_id(id)
, m_path(path) , m_path(path)
{} {}
bool SourceHandle::AnyEquals(const SourceHandle& other) const
{
return m_data == other.m_data
|| m_id == other.m_id
|| m_path == other.m_path;
}
void SourceHandle::Clear() void SourceHandle::Clear()
{ {
m_data = nullptr; m_data = nullptr;
@@ -326,8 +326,12 @@ namespace ScriptCanvasEditor
SourceHandle() = default; SourceHandle() = default;
SourceHandle(const SourceHandle& data, const AZ::Uuid& id, AZStd::string_view path);
SourceHandle(ScriptCanvas::DataPtr graph, const AZ::Uuid& id, AZStd::string_view path); SourceHandle(ScriptCanvas::DataPtr graph, const AZ::Uuid& id, AZStd::string_view path);
bool AnyEquals(const SourceHandle& other) const;
void Clear(); void Clear();
GraphPtrConst Get() const; GraphPtrConst Get() const;
@@ -391,11 +395,28 @@ namespace AZStd
{ {
using argument_type = ScriptCanvas::SlotId; using argument_type = ScriptCanvas::SlotId;
using result_type = AZStd::size_t; using result_type = AZStd::size_t;
AZ_FORCE_INLINE size_t operator()(const argument_type& ref) const
inline size_t operator()(const argument_type& ref) const
{ {
return AZStd::hash<AZ::Uuid>()(ref.m_id); return AZStd::hash<AZ::Uuid>()(ref.m_id);
} }
}; };
template<>
struct hash<ScriptCanvasEditor::SourceHandle>
{
using argument_type = ScriptCanvasEditor::SourceHandle;
using result_type = AZStd::size_t;
inline size_t operator()(const argument_type& handle) const
{
size_t h = 0;
hash_combine(h, handle.Id());
hash_combine(h, handle.Path());
hash_combine(h, handle.Get());
return h;
}
};
} }
#define SCRIPT_CANVAS_INFINITE_LOOP_DETECTION_COUNT (2000000) #define SCRIPT_CANVAS_INFINITE_LOOP_DETECTION_COUNT (2000000)