new source file button works
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
@@ -31,6 +31,7 @@ namespace ScriptCanvasEditor
|
||||
NEW,
|
||||
MODIFIED,
|
||||
UNMODIFIED,
|
||||
// #sc_editor_asset restore this
|
||||
SOURCE_REMOVED,
|
||||
INVALID = -1
|
||||
};
|
||||
|
||||
@@ -1055,6 +1055,8 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
data->m_scriptCanvasEntity.reset(entity);
|
||||
graph->MarkOwnership(*data);
|
||||
entity->Init();
|
||||
entity->Activate();
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -1352,7 +1354,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void Graph::SignalDirty()
|
||||
{
|
||||
SourceHandle handle(ScriptCanvas::DataPtr(m_owner), {}, {});
|
||||
SourceHandle handle(m_owner->shared_from_this(), {}, {});
|
||||
GeneralRequestBus::Broadcast(&GeneralRequests::SignalSceneDirty, handle);
|
||||
}
|
||||
|
||||
|
||||
@@ -1146,28 +1146,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (memoryAsset && asset.IsReady())
|
||||
{
|
||||
AZ::EntityId scGraphId = memoryAsset->GetScriptCanvasId();
|
||||
GraphCanvas::SceneNotificationBus::MultiHandler::BusDisconnect(scGraphId);
|
||||
AZ::EntityId graphCanvasId = GetGraphCanvasGraphId(scGraphId);
|
||||
|
||||
GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId, &GraphCanvas::AssetEditorNotifications::OnGraphRefreshed, graphCanvasId, graphCanvasId);
|
||||
|
||||
int tabIndex = -1;
|
||||
if (IsTabOpen(asset.GetId(), tabIndex))
|
||||
{
|
||||
const AZStd::string& assetPath = memoryAsset->GetAbsolutePath();
|
||||
m_tabBar->setTabToolTip(tabIndex, assetPath.c_str());
|
||||
m_tabBar->SetTabText(tabIndex, memoryAsset->GetTabName().c_str(), memoryAsset->GetFileState());
|
||||
}
|
||||
|
||||
if (graphCanvasId.IsValid())
|
||||
{
|
||||
GraphCanvas::SceneNotificationBus::MultiHandler::BusConnect(graphCanvasId);
|
||||
GraphCanvas::SceneMimeDelegateRequestBus::Event(graphCanvasId, &GraphCanvas::SceneMimeDelegateRequests::AddDelegate, m_entityMimeDelegateId);
|
||||
|
||||
GraphCanvas::SceneRequestBus::Event(graphCanvasId, &GraphCanvas::SceneRequests::SetMimeType, Widget::NodePaletteDockWidget::GetMimeType());
|
||||
GraphCanvas::SceneMemberNotificationBus::Event(graphCanvasId, &GraphCanvas::SceneMemberNotifications::OnSceneReady);
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -1285,31 +1264,6 @@ namespace ScriptCanvasEditor
|
||||
return m_tabBar->InsertGraphTab(tabIndex, assetId);
|
||||
}
|
||||
|
||||
AZ::Outcome<int, AZStd::string> MainWindow::UpdateScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& /*scriptCanvasAsset*/)
|
||||
{
|
||||
// #sc_editor_asset
|
||||
return AZ::Failure(AZStd::string("rewrite MainWindow::UpdateScriptCanvasAsset"));
|
||||
|
||||
/*
|
||||
int outTabIndex = -1;
|
||||
|
||||
PushPreventUndoStateUpdate();
|
||||
RefreshScriptCanvasAsset(scriptCanvasAsset);
|
||||
if (IsTabOpen(scriptCanvasAsset.GetId(), outTabIndex))
|
||||
{
|
||||
RefreshActiveAsset();
|
||||
}
|
||||
PopPreventUndoStateUpdate();
|
||||
|
||||
if (outTabIndex == -1)
|
||||
{
|
||||
return AZ::Failure(AZStd::string::format("Script Canvas Asset %s is not open in a tab", scriptCanvasAsset.ToString<AZStd::string>().c_str()));
|
||||
}
|
||||
|
||||
return AZ::Success(outTabIndex);
|
||||
*/
|
||||
}
|
||||
|
||||
void MainWindow::RemoveScriptCanvasAsset(const ScriptCanvasEditor::SourceHandle& /*assetId*/)
|
||||
{
|
||||
// #sc_editor_asset move what is necessary to the widget
|
||||
@@ -1638,7 +1592,30 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void MainWindow::OnFileNew()
|
||||
{
|
||||
MakeNewFile<ScriptCanvasAsset, ScriptCanvasAssetHandler>();
|
||||
static int scriptCanvasEditorDefaultNewNameCount = 0;
|
||||
|
||||
ScriptCanvasAssetDescription description;
|
||||
|
||||
AZStd::string newAssetName = AZStd::string::format(description.GetAssetNamePatternImpl(), ++scriptCanvasEditorDefaultNewNameCount);
|
||||
|
||||
AZStd::array<char, AZ::IO::MaxPathLength> assetRootArray;
|
||||
if (!AZ::IO::FileIOBase::GetInstance()->ResolvePath(description.GetSuggestedSavePathImpl()
|
||||
, assetRootArray.data(), assetRootArray.size()))
|
||||
{
|
||||
AZ_ErrorOnce("Script Canvas", false, "Unable to resolve @projectroot@ path");
|
||||
}
|
||||
|
||||
AZStd::string assetPath;
|
||||
AzFramework::StringFunc::Path::Join(assetRootArray.data(), (newAssetName + description.GetExtensionImpl()).data(), assetPath);
|
||||
|
||||
auto createOutcome = CreateScriptCanvasAsset(assetPath);
|
||||
if (createOutcome)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
AZ_Warning("Script Canvas", createOutcome, "%s", createOutcome.GetError().data());
|
||||
}
|
||||
}
|
||||
|
||||
int MainWindow::InsertTabForAsset(AZStd::string_view assetPath, ScriptCanvasEditor::SourceHandle assetId, int tabIndex)
|
||||
@@ -1673,32 +1650,64 @@ namespace ScriptCanvasEditor
|
||||
}
|
||||
}
|
||||
|
||||
AZ::Outcome<int, AZStd::string> MainWindow::CreateScriptCanvasAsset(AZStd::string_view /*assetPath*/, AZ::Data::AssetType /*assetType*/, int /*tabIndex*/)
|
||||
AZ::Outcome<int, AZStd::string> MainWindow::CreateScriptCanvasAsset(AZStd::string_view assetPath, int tabIndex)
|
||||
{
|
||||
return AZ::Failure(AZStd::string("MainWindow::CreateScriptCanvasAsset just make a new thing with the project root + untitled..."));
|
||||
// int outTabIndex = -1;
|
||||
//
|
||||
// ScriptCanvasEditor::SourceHandle newAssetId;
|
||||
// auto onAssetCreated = [this, assetPath, tabIndex, &outTabIndex](ScriptCanvasMemoryAsset& asset)
|
||||
// {
|
||||
// const ScriptCanvasEditor::SourceHandle& assetId = asset.GetId();
|
||||
//
|
||||
// outTabIndex = InsertTabForAsset(assetPath, assetId, tabIndex);
|
||||
//
|
||||
// SetActiveAsset(assetId);
|
||||
//
|
||||
// UpdateScriptCanvasAsset(asset.GetAsset());
|
||||
//
|
||||
// AZ::EntityId scriptCanvasEntityId;
|
||||
// AssetTrackerRequestBus::BroadcastResult(scriptCanvasEntityId, &AssetTrackerRequests::GetScriptCanvasId, assetId);
|
||||
//
|
||||
// GraphCanvas::GraphId graphCanvasGraphId = GetGraphCanvasGraphId(scriptCanvasEntityId);
|
||||
// GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId, &GraphCanvas::AssetEditorNotifications::OnGraphLoaded, graphCanvasGraphId);
|
||||
//
|
||||
// };
|
||||
// AssetTrackerRequestBus::BroadcastResult(newAssetId, &AssetTrackerRequests::Create, assetPath, assetType, onAssetCreated);
|
||||
int outTabIndex = -1;
|
||||
|
||||
// return AZ::Success(outTabIndex);
|
||||
ScriptCanvas::DataPtr graph = Graph::Create();
|
||||
AZ::Uuid assetId = AZ::Uuid::CreateRandom();
|
||||
ScriptCanvasEditor::SourceHandle handle = ScriptCanvasEditor::SourceHandle(graph, assetId, assetPath);
|
||||
|
||||
outTabIndex = InsertTabForAsset(assetPath, handle, tabIndex);
|
||||
m_tabBar->UpdateFileState(handle, Tracker::ScriptCanvasFileState::NEW);
|
||||
|
||||
if (outTabIndex == -1)
|
||||
{
|
||||
return AZ::Failure(AZStd::string::format("Script Canvas Asset %.*s is not open in a tab", assetPath.data()));
|
||||
}
|
||||
|
||||
SetActiveAsset(handle);
|
||||
|
||||
// #sc_editor_asset delete candidate
|
||||
|
||||
PushPreventUndoStateUpdate();
|
||||
|
||||
AZ::EntityId scriptCanvasEntityId = graph->GetGraph()->GetScriptCanvasId();
|
||||
GraphCanvas::SceneNotificationBus::MultiHandler::BusDisconnect(scriptCanvasEntityId);
|
||||
AZ::EntityId graphCanvasGraphId = GetGraphCanvasGraphId(scriptCanvasEntityId);
|
||||
|
||||
GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId
|
||||
, &GraphCanvas::AssetEditorNotifications::OnGraphRefreshed, graphCanvasGraphId, graphCanvasGraphId);
|
||||
|
||||
if (IsTabOpen(handle, tabIndex))
|
||||
{
|
||||
AZStd::string tabName;
|
||||
AzFramework::StringFunc::Path::GetFileName(assetPath.data(), tabName);
|
||||
m_tabBar->setTabToolTip(tabIndex, assetPath.data());
|
||||
m_tabBar->SetTabText(tabIndex, tabName.c_str(), Tracker::ScriptCanvasFileState::NEW);
|
||||
}
|
||||
|
||||
if (graphCanvasGraphId.IsValid())
|
||||
{
|
||||
GraphCanvas::SceneNotificationBus::MultiHandler::BusConnect(graphCanvasGraphId);
|
||||
GraphCanvas::SceneMimeDelegateRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneMimeDelegateRequests::AddDelegate, m_entityMimeDelegateId);
|
||||
|
||||
GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::SetMimeType, Widget::NodePaletteDockWidget::GetMimeType());
|
||||
GraphCanvas::SceneMemberNotificationBus::Event(graphCanvasGraphId, &GraphCanvas::SceneMemberNotifications::OnSceneReady);
|
||||
}
|
||||
|
||||
if (IsTabOpen(handle, outTabIndex))
|
||||
{
|
||||
RefreshActiveAsset();
|
||||
}
|
||||
|
||||
PopPreventUndoStateUpdate();
|
||||
|
||||
|
||||
GraphCanvas::AssetEditorNotificationBus::Event(ScriptCanvasEditor::AssetEditorId
|
||||
, &GraphCanvas::AssetEditorNotifications::OnGraphLoaded, graphCanvasGraphId);
|
||||
|
||||
return AZ::Success(outTabIndex);
|
||||
}
|
||||
|
||||
bool MainWindow::OnFileSave()
|
||||
@@ -1942,16 +1951,8 @@ namespace ScriptCanvasEditor
|
||||
}
|
||||
else
|
||||
{
|
||||
// #sc_editor_asset this seems to remove the unsaved indicator even on failure
|
||||
|
||||
// Use the previous memory asset to find what we had setup as our display
|
||||
// AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, m_activeGraph);
|
||||
|
||||
// Drop off our file modifier status for our display name when we fail to save.
|
||||
// if (tabName.at(tabName.size() -1) == '*')
|
||||
// {
|
||||
// tabName = tabName.substr(0, tabName.size() - 2);
|
||||
// }
|
||||
const auto failureMessage = AZStd::string::format("Failed to save %s: %s", tabName.c_str(), result.fileSaveError.c_str());
|
||||
QMessageBox::critical(this, QString(), QObject::tr(failureMessage.data()));
|
||||
}
|
||||
|
||||
if (m_tabBar->currentIndex() != saveTabIndex)
|
||||
@@ -2717,69 +2718,25 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void MainWindow::OnTabCloseButtonPressed(int index)
|
||||
{
|
||||
|
||||
QVariant tabdata = m_tabBar->tabData(index);
|
||||
if (tabdata.isValid())
|
||||
{
|
||||
auto fileAssetId = tabdata.value<Widget::GraphTabMetadata>();
|
||||
|
||||
Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::NEW;
|
||||
bool isSaving = false;
|
||||
|
||||
// #sc_editor_asset Get from widgets
|
||||
/*
|
||||
AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, fileAssetId);
|
||||
AssetTrackerRequestBus::BroadcastResult(isSaving, &AssetTrackerRequests::IsSaving, fileAssetId);
|
||||
*/
|
||||
if (isSaving)
|
||||
{
|
||||
m_closeCurrentGraphAfterSave = true;
|
||||
return;
|
||||
}
|
||||
|
||||
Widget::GraphTabMetadata tabMetadata = tabdata.value<Widget::GraphTabMetadata>();
|
||||
Tracker::ScriptCanvasFileState fileState = tabMetadata.m_fileState;
|
||||
UnsavedChangesOptions saveDialogResults = UnsavedChangesOptions::CONTINUE_WITHOUT_SAVING;
|
||||
if (!isSaving && (fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::MODIFIED || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED))
|
||||
|
||||
if (fileState == Tracker::ScriptCanvasFileState::NEW
|
||||
|| fileState == Tracker::ScriptCanvasFileState::MODIFIED
|
||||
|| fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED)
|
||||
{
|
||||
SetActiveAsset(fileAssetId.m_assetId);
|
||||
|
||||
// #sc_editor_asset
|
||||
AZStd::string tabName = "Get from widget";
|
||||
// AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, fileAssetId);
|
||||
|
||||
saveDialogResults = ShowSaveDialog(tabName.c_str());
|
||||
SetActiveAsset(tabMetadata.m_assetId);
|
||||
saveDialogResults = ShowSaveDialog(m_tabBar->tabText(index).toUtf8().constData());
|
||||
}
|
||||
|
||||
if (saveDialogResults == UnsavedChangesOptions::SAVE)
|
||||
{
|
||||
// #sc_editor_asset
|
||||
// auto saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr asset, ScriptCanvasEditor::SourceHandle)
|
||||
// {
|
||||
// if (isSuccessful)
|
||||
// {
|
||||
// ScriptCanvasMemoryAsset::pointer memoryAsset;
|
||||
// AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, asset->GetId());
|
||||
// AZ_Assert(memoryAsset, "At this point we must have a MemoryAsset");
|
||||
//
|
||||
// int tabIndex = -1;
|
||||
// if (IsTabOpen(memoryAsset->GetFileAssetId(), tabIndex))
|
||||
// {
|
||||
// OnTabCloseRequest(tabIndex);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// QMessageBox::critical(this, QString(), QObject::tr("Failed to save."));
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// if (fileState == Tracker::ScriptCanvasFileState::NEW)
|
||||
// {
|
||||
// SaveAssetImpl(fileAssetId, saveCB);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// SaveAsset(fileAssetId, saveCB);
|
||||
// }
|
||||
m_closeCurrentGraphAfterSave = true;
|
||||
SaveAssetImpl(tabMetadata.m_assetId, fileState == Tracker::ScriptCanvasFileState::NEW ? Save::As : Save::InPlace);
|
||||
}
|
||||
else if (saveDialogResults == UnsavedChangesOptions::CONTINUE_WITHOUT_SAVING)
|
||||
{
|
||||
|
||||
@@ -437,9 +437,7 @@ namespace ScriptCanvasEditor
|
||||
const NodePaletteModelInformation* FindNodePaletteModelInformation(const ScriptCanvas::NodeTypeIdentifier& nodeType) const override;
|
||||
////
|
||||
|
||||
AZ::Outcome<int, AZStd::string> CreateScriptCanvasAsset(AZStd::string_view assetPath, AZ::Data::AssetType assetType, int tabIndex = -1);
|
||||
AZ::Outcome<int, AZStd::string> UpdateScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& scriptCanvasAsset);
|
||||
|
||||
AZ::Outcome<int, AZStd::string> CreateScriptCanvasAsset(AZStd::string_view assetPath, int tabIndex = -1);
|
||||
void RefreshScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& scriptCanvasAsset);
|
||||
|
||||
//! Removes the assetId -> ScriptCanvasAsset mapping and disconnects from the asset tracker
|
||||
@@ -647,31 +645,6 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void OpenNextFile();
|
||||
|
||||
template <typename GraphAssetType, typename AssetHandler>
|
||||
void MakeNewFile()
|
||||
{
|
||||
static int scriptCanvasEditorDefaultNewNameCount = 0;
|
||||
|
||||
AZStd::string newAssetName = AZStd::string::format(ScriptCanvas::AssetDescription::GetAssetNamePattern<GraphAssetType>(), ++scriptCanvasEditorDefaultNewNameCount);
|
||||
|
||||
AZStd::array<char, AZ::IO::MaxPathLength> assetRootArray;
|
||||
if (!AZ::IO::FileIOBase::GetInstance()->ResolvePath(ScriptCanvas::AssetDescription::GetSuggestedSavePath<GraphAssetType>(), assetRootArray.data(), assetRootArray.size()))
|
||||
{
|
||||
AZ_ErrorOnce("Script Canvas", false, "Unable to resolve @projectroot@ path");
|
||||
}
|
||||
|
||||
AZStd::string assetPath;
|
||||
AzFramework::StringFunc::Path::Join(assetRootArray.data(), (newAssetName + ScriptCanvas::AssetDescription::GetExtension<GraphAssetType>()).data(), assetPath);
|
||||
|
||||
auto createOutcome = CreateScriptCanvasAsset(assetPath, azrtti_typeid<GraphAssetType>());
|
||||
if (createOutcome)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
AZ_Warning("Script Canvas", createOutcome, "%s", createOutcome.GetError().data());
|
||||
}
|
||||
}
|
||||
|
||||
void DisableAssetView(const ScriptCanvasEditor::SourceHandle& memoryAssetId);
|
||||
void EnableAssetView(const ScriptCanvasEditor::SourceHandle& memoryAssetId);
|
||||
|
||||
@@ -203,6 +203,15 @@ namespace ScriptCanvasEditor
|
||||
, m_path(path)
|
||||
{}
|
||||
|
||||
SourceHandle::~SourceHandle()
|
||||
{
|
||||
AZ_TracePrintf("ScriptCanvas", "Destroy Handle: %p, count %d", m_data.get(), m_data.use_count());
|
||||
if (m_data.use_count() <= 1)
|
||||
{
|
||||
AZ_TracePrintf("ScriptCanvas", "BOOM Handle: %p, count %d", m_data.get(), m_data.use_count());
|
||||
}
|
||||
}
|
||||
|
||||
bool SourceHandle::AnyEquals(const SourceHandle& other) const
|
||||
{
|
||||
return m_data == other.m_data
|
||||
|
||||
@@ -330,6 +330,8 @@ namespace ScriptCanvasEditor
|
||||
|
||||
SourceHandle(ScriptCanvas::DataPtr graph, const AZ::Uuid& id, AZStd::string_view path);
|
||||
|
||||
~SourceHandle();
|
||||
|
||||
bool AnyEquals(const SourceHandle& other) const;
|
||||
|
||||
void Clear();
|
||||
|
||||
Reference in New Issue
Block a user