new source file button works

Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
main^2^2
chcurran 4 years ago committed by Chris Burel
parent 65814e65cc
commit 6c1d1dc2e2

@ -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;
}
}
@ -1354,7 +1356,7 @@ namespace ScriptCanvasEditor
void Graph::SignalDirty()
{
SourceHandle handle(ScriptCanvas::DataPtr(m_owner), {}, {});
SourceHandle handle(m_owner->shared_from_this(), {}, {});
GeneralRequestBus::Broadcast(&GeneralRequests::SignalSceneDirty, handle);
}

@ -1148,28 +1148,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);
}
}
*/
}
@ -1287,31 +1266,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
@ -1640,7 +1594,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)
@ -1675,32 +1652,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;
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
// return AZ::Success(outTabIndex);
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()
@ -1944,16 +1953,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)
@ -2719,69 +2720,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))
{
SetActiveAsset(fileAssetId.m_assetId);
// #sc_editor_asset
AZStd::string tabName = "Get from widget";
// AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, fileAssetId);
saveDialogResults = ShowSaveDialog(tabName.c_str());
if (fileState == Tracker::ScriptCanvasFileState::NEW
|| fileState == Tracker::ScriptCanvasFileState::MODIFIED
|| fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED)
{
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();

Loading…
Cancel
Save