add file state for graphs
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
@@ -132,6 +132,9 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
entity->Init();
|
||||
entity->Activate();
|
||||
|
||||
auto graph = entity->FindComponent<ScriptCanvasEditor::Graph>();
|
||||
graph->MarkOwnership(*scriptCanvasData);
|
||||
}
|
||||
|
||||
return AZ::Success(ScriptCanvasEditor::SourceHandle(scriptCanvasData, {}, path));
|
||||
|
||||
@@ -1030,14 +1030,16 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
AZStd::any* connectionUserData = nullptr;
|
||||
GraphCanvas::ConnectionRequestBus::EventResult(connectionUserData, connectionId, &GraphCanvas::ConnectionRequests::GetUserData);
|
||||
auto scConnectionId = connectionUserData && connectionUserData->is<AZ::EntityId>() ? *AZStd::any_cast<AZ::EntityId>(connectionUserData) : AZ::EntityId();
|
||||
auto scConnectionId = connectionUserData && connectionUserData->is<AZ::EntityId>()
|
||||
? *AZStd::any_cast<AZ::EntityId>(connectionUserData)
|
||||
: AZ::EntityId();
|
||||
|
||||
ScriptCanvas::Connection* connection = AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvas::Connection>(scConnectionId);
|
||||
|
||||
if (connection)
|
||||
if (ScriptCanvas::Connection* connection = AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvas::Connection>(scConnectionId))
|
||||
{
|
||||
ScriptCanvas::GraphNotificationBus::Event(GetScriptCanvasId(), &ScriptCanvas::GraphNotifications::OnDisonnectionComplete, connectionId);
|
||||
|
||||
ScriptCanvas::GraphNotificationBus::Event
|
||||
( GetScriptCanvasId()
|
||||
, &ScriptCanvas::GraphNotifications::OnDisonnectionComplete
|
||||
, connectionId);
|
||||
DisconnectById(scConnectionId);
|
||||
}
|
||||
}
|
||||
@@ -1047,12 +1049,12 @@ namespace ScriptCanvasEditor
|
||||
if (AZ::Entity* entity = aznew AZ::Entity("Script Canvas Graph"))
|
||||
{
|
||||
auto graph = entity->CreateComponent<ScriptCanvasEditor::Graph>();
|
||||
graph->SetAssetType(azrtti_typeid<ScriptCanvasAsset>());
|
||||
entity->CreateComponent<EditorGraphVariableManagerComponent>(graph->GetScriptCanvasId());
|
||||
|
||||
if (ScriptCanvas::DataPtr data = AZStd::make_shared<ScriptCanvas::ScriptCanvasData>())
|
||||
{
|
||||
data->m_scriptCanvasEntity.reset(entity);
|
||||
graph->MarkOwnership(*data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -1060,6 +1062,11 @@ namespace ScriptCanvasEditor
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void Graph::MarkOwnership(ScriptCanvas::ScriptCanvasData& owner)
|
||||
{
|
||||
m_owner = &owner;
|
||||
}
|
||||
|
||||
bool Graph::CreateConnection(const GraphCanvas::ConnectionId& connectionId, const GraphCanvas::Endpoint& sourcePoint, const GraphCanvas::Endpoint& targetPoint)
|
||||
{
|
||||
if (!sourcePoint.IsValid() || !targetPoint.IsValid())
|
||||
@@ -1342,8 +1349,8 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void Graph::SignalDirty()
|
||||
{
|
||||
// #sc_editor_asset
|
||||
// GeneralRequestBus::Broadcast(&GeneralRequests::SignalSceneDirty, GetAssetId());
|
||||
SourceHandle handle(ScriptCanvas::DataPtr(m_owner), {}, {});
|
||||
GeneralRequestBus::Broadcast(&GeneralRequests::SignalSceneDirty, handle);
|
||||
}
|
||||
|
||||
void Graph::HighlightNodesByType(const ScriptCanvas::NodeTypeIdentifier& nodeTypeIdentifier)
|
||||
@@ -3374,11 +3381,6 @@ namespace ScriptCanvasEditor
|
||||
}
|
||||
}
|
||||
|
||||
void Graph::SetAssetType(AZ::Data::AssetType assetType)
|
||||
{
|
||||
m_assetType = assetType;
|
||||
}
|
||||
|
||||
void Graph::ReportError(const ScriptCanvas::Node& node, const AZStd::string& errorSource, const AZStd::string& errorMessage)
|
||||
{
|
||||
AzQtComponents::ToastConfiguration toastConfiguration(AzQtComponents::ToastType::Error, errorSource.c_str(), errorMessage.c_str());
|
||||
|
||||
@@ -304,12 +304,12 @@ namespace ScriptCanvasEditor
|
||||
void OnUndoRedoEnd() override;
|
||||
////
|
||||
|
||||
void SetAssetType(AZ::Data::AssetType);
|
||||
|
||||
void ReportError(const ScriptCanvas::Node& node, const AZStd::string& errorSource, const AZStd::string& errorMessage) override;
|
||||
|
||||
const GraphStatisticsHelper& GetNodeUsageStatistics() const;
|
||||
|
||||
void MarkOwnership(ScriptCanvas::ScriptCanvasData& owner);
|
||||
|
||||
// Finds and returns all nodes within the graph that are of the specified type
|
||||
template <typename NodeType>
|
||||
AZStd::vector<const NodeType*> GetNodesOfType() const
|
||||
@@ -393,5 +393,6 @@ namespace ScriptCanvasEditor
|
||||
bool m_saveFormatConverted = true;
|
||||
|
||||
ScriptCanvasEditor::SourceHandle m_assetId;
|
||||
ScriptCanvas::ScriptCanvasData* m_owner;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -173,13 +173,11 @@ namespace ScriptCanvasEditor
|
||||
outCreatableTypes.insert(m_creatableTypes.begin(), m_creatableTypes.end());
|
||||
}
|
||||
|
||||
void SystemComponent::CreateEditorComponentsOnEntity(AZ::Entity* entity, const AZ::Data::AssetType& assetType)
|
||||
void SystemComponent::CreateEditorComponentsOnEntity(AZ::Entity* entity, [[maybe_unused]] const AZ::Data::AssetType& assetType)
|
||||
{
|
||||
if (entity)
|
||||
{
|
||||
auto graph = entity->CreateComponent<Graph>();
|
||||
graph->SetAssetType(assetType);
|
||||
|
||||
entity->CreateComponent<EditorGraphVariableManagerComponent>(graph->GetScriptCanvasId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,6 +105,44 @@ namespace ScriptCanvasEditor
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AZStd::optional<GraphTabMetadata> GraphTabBar::GetTabData(int tabIndex) const
|
||||
{
|
||||
if (tabIndex < count())
|
||||
{
|
||||
if (QVariant tabDataVariant = tabData(tabIndex); tabDataVariant.isValid())
|
||||
{
|
||||
return tabDataVariant.value<GraphTabMetadata>();
|
||||
}
|
||||
}
|
||||
|
||||
return AZStd::nullopt;
|
||||
}
|
||||
|
||||
AZStd::optional<GraphTabMetadata> GraphTabBar::GetTabData(ScriptCanvasEditor::SourceHandle assetId) const
|
||||
{
|
||||
return GetTabData(FindTab(assetId));
|
||||
}
|
||||
|
||||
void GraphTabBar::SetTabData(const GraphTabMetadata& metadata, int tabIndex)
|
||||
{
|
||||
if (tabIndex < count())
|
||||
{
|
||||
setTabData(tabIndex, QVariant::fromValue(metadata));
|
||||
}
|
||||
}
|
||||
|
||||
void GraphTabBar::SetTabData(const GraphTabMetadata& metadata, ScriptCanvasEditor::SourceHandle assetId)
|
||||
{
|
||||
auto index = FindTab(assetId);
|
||||
auto replacement = GetTabData(assetId);
|
||||
|
||||
if (index >= 0 && replacement)
|
||||
{
|
||||
replacement->m_assetId = assetId;
|
||||
SetTabData(metadata, index);
|
||||
}
|
||||
}
|
||||
|
||||
int GraphTabBar::InsertGraphTab(int tabIndex, ScriptCanvasEditor::SourceHandle assetId)
|
||||
{
|
||||
if (!SelectTab(assetId))
|
||||
@@ -119,6 +157,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AZStd::string tabName;
|
||||
AzFramework::StringFunc::Path::GetFileName(assetId.Path().c_str(), tabName);
|
||||
metaData.m_name = tabName.c_str();
|
||||
|
||||
// #sc_editor_asset filestate
|
||||
Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID;
|
||||
@@ -381,6 +420,23 @@ namespace ScriptCanvasEditor
|
||||
Q_EMIT TabRemoved(index);
|
||||
}
|
||||
|
||||
void GraphTabBar::UpdateFileState(const ScriptCanvasEditor::SourceHandle& assetId, Tracker::ScriptCanvasFileState fileState)
|
||||
{
|
||||
auto tabData = GetTabData(assetId);
|
||||
if (tabData && tabData->m_fileState != fileState)
|
||||
{
|
||||
int index = FindTab(assetId);
|
||||
tabData->m_fileState = fileState;
|
||||
SetTabData(*tabData, assetId);
|
||||
SetTabText(index, tabData->m_name, fileState);
|
||||
|
||||
if (index == currentIndex())
|
||||
{
|
||||
Q_EMIT OnActiveFileStateChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GraphTabBar::currentChangedTab(int index)
|
||||
{
|
||||
if (index < 0)
|
||||
@@ -406,25 +462,6 @@ namespace ScriptCanvasEditor
|
||||
}
|
||||
}
|
||||
|
||||
void GraphTabBar::SetFileState(ScriptCanvasEditor::SourceHandle, Tracker::ScriptCanvasFileState )
|
||||
{
|
||||
// #sc_editor_asset
|
||||
// int index = FindTab(assetId);
|
||||
|
||||
// if (index >= 0 && index < count())
|
||||
// {
|
||||
// QVariant tabdata = tabData(index);
|
||||
// if (tabdata.isValid())
|
||||
// {
|
||||
// auto tabAssetId = tabdata.value<GraphTabMetadata>();
|
||||
//
|
||||
// AZStd::string tabName;
|
||||
// AssetTrackerRequestBus::BroadcastResult(tabName, &AssetTrackerRequests::GetTabName, tabAssetId);
|
||||
// SetTabText(index, tabName.c_str(), fileState);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
#include <Editor/View/Widgets/moc_GraphTabBar.cpp>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace ScriptCanvasEditor
|
||||
QWidget* m_hostWidget = nullptr;
|
||||
CanvasWidget* m_canvasWidget = nullptr;
|
||||
Tracker::ScriptCanvasFileState m_fileState = Tracker::ScriptCanvasFileState::INVALID;
|
||||
QString m_name;
|
||||
};
|
||||
|
||||
class GraphTabBar
|
||||
@@ -48,6 +49,11 @@ namespace ScriptCanvasEditor
|
||||
GraphTabBar(QWidget* parent = nullptr);
|
||||
~GraphTabBar() override = default;
|
||||
|
||||
AZStd::optional<GraphTabMetadata> GetTabData(int index) const;
|
||||
AZStd::optional<GraphTabMetadata> GetTabData(ScriptCanvasEditor::SourceHandle assetId) const;
|
||||
void SetTabData(const GraphTabMetadata& data, int index);
|
||||
void SetTabData(const GraphTabMetadata& data, ScriptCanvasEditor::SourceHandle assetId);
|
||||
|
||||
void AddGraphTab(ScriptCanvasEditor::SourceHandle assetId);
|
||||
void CloseTab(int index);
|
||||
void CloseAllTabs();
|
||||
@@ -78,6 +84,8 @@ namespace ScriptCanvasEditor
|
||||
// The host widget field of the tabMetadata is not used and will not overwrite the tab data
|
||||
void SetTabText(int tabIndex, const QString& path, Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID);
|
||||
|
||||
void UpdateFileState(const ScriptCanvasEditor::SourceHandle& assetId, Tracker::ScriptCanvasFileState fileState);
|
||||
|
||||
Q_SIGNALS:
|
||||
void TabInserted(int index);
|
||||
void TabRemoved(int index);
|
||||
@@ -101,8 +109,6 @@ namespace ScriptCanvasEditor
|
||||
// Called when the selected tab changes
|
||||
void currentChangedTab(int index);
|
||||
|
||||
void SetFileState(ScriptCanvasEditor::SourceHandle, Tracker::ScriptCanvasFileState fileState);
|
||||
|
||||
int m_signalSaveOnChangeTo = -1;
|
||||
};
|
||||
}
|
||||
|
||||
+1
-4
@@ -716,10 +716,7 @@ namespace ScriptCanvasEditor
|
||||
void GraphVariablesModel::SetActiveScene(const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
|
||||
{
|
||||
ScriptCanvas::GraphVariableManagerNotificationBus::Handler::BusDisconnect();
|
||||
|
||||
m_assetType = AZ::Data::AssetType::CreateNull();
|
||||
ScriptCanvas::GraphRequestBus::EventResult(m_assetType, scriptCanvasId, &ScriptCanvas::GraphRequests::GetAssetType);
|
||||
|
||||
m_assetType = azrtti_typeid<ScriptCanvasAsset>();
|
||||
m_scriptCanvasId = scriptCanvasId;
|
||||
|
||||
if (m_scriptCanvasId.IsValid())
|
||||
|
||||
@@ -1104,7 +1104,7 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
ScopedUndoBatch scopedUndoBatch("Modify Graph Canvas Scene");
|
||||
UndoRequestBus::Event(scriptCanvasId, &UndoRequests::AddGraphItemChangeUndo, "Graph Change");
|
||||
MarkAssetModified(m_activeGraph);
|
||||
UpdateFileState(m_activeGraph, Tracker::ScriptCanvasFileState::MODIFIED);
|
||||
}
|
||||
|
||||
const bool forceTimer = true;
|
||||
@@ -1113,7 +1113,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void MainWindow::SignalSceneDirty(ScriptCanvasEditor::SourceHandle assetId)
|
||||
{
|
||||
MarkAssetModified(assetId);
|
||||
UpdateFileState(assetId, Tracker::ScriptCanvasFileState::MODIFIED);
|
||||
}
|
||||
|
||||
void MainWindow::PushPreventUndoStateUpdate()
|
||||
@@ -1134,25 +1134,9 @@ namespace ScriptCanvasEditor
|
||||
m_preventUndoStateUpdateCount = 0;
|
||||
}
|
||||
|
||||
void MainWindow::MarkAssetModified(const ScriptCanvasEditor::SourceHandle& /*assetId*/)
|
||||
void MainWindow::UpdateFileState(const ScriptCanvasEditor::SourceHandle& assetId, Tracker::ScriptCanvasFileState fileState)
|
||||
{
|
||||
// #sc_editor_asset if (!assetId.IsValid())
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// ScriptCanvasMemoryAsset::pointer memoryAsset;
|
||||
// AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId);
|
||||
//
|
||||
// if (memoryAsset)
|
||||
// {
|
||||
// const auto& memoryAssetId = memoryAsset->GetId();
|
||||
// const Tracker::ScriptCanvasFileState& fileState = GetAssetFileState(memoryAssetId);
|
||||
// if (fileState != Tracker::ScriptCanvasFileState::NEW)
|
||||
// {
|
||||
// AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::UpdateFileState, memoryAssetId, Tracker::ScriptCanvasFileState::MODIFIED);
|
||||
// }
|
||||
// }
|
||||
m_tabBar->UpdateFileState(assetId, fileState);
|
||||
}
|
||||
|
||||
void MainWindow::RefreshScriptCanvasAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& /*asset*/)
|
||||
@@ -4394,13 +4378,10 @@ namespace ScriptCanvasEditor
|
||||
}
|
||||
}
|
||||
|
||||
ScriptCanvasEditor::Tracker::ScriptCanvasFileState MainWindow::GetAssetFileState(ScriptCanvasEditor::SourceHandle /*assetId*/) const
|
||||
ScriptCanvasEditor::Tracker::ScriptCanvasFileState MainWindow::GetAssetFileState(ScriptCanvasEditor::SourceHandle assetId) const
|
||||
{
|
||||
// #sc_editor_asset
|
||||
return Tracker::ScriptCanvasFileState::INVALID;
|
||||
// Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID;
|
||||
// AssetTrackerRequestBus::BroadcastResult(fileState, &AssetTrackerRequests::GetFileState, assetId);
|
||||
// return fileState;
|
||||
auto dataOptional = m_tabBar->GetTabData(assetId);
|
||||
return dataOptional ? dataOptional->m_fileState : Tracker::ScriptCanvasFileState::INVALID;
|
||||
}
|
||||
|
||||
void MainWindow::AssignGraphToEntityImpl(const AZ::EntityId& entityId)
|
||||
|
||||
@@ -548,7 +548,7 @@ namespace ScriptCanvasEditor
|
||||
//! \param asset asset to save
|
||||
void GetSuggestedFullFilenameToSaveAs(const ScriptCanvasEditor::SourceHandle& assetId, AZStd::string& filePath, AZStd::string& fileFilter);
|
||||
|
||||
void MarkAssetModified(const ScriptCanvasEditor::SourceHandle& assetId);
|
||||
void UpdateFileState(const ScriptCanvasEditor::SourceHandle& assetId, Tracker::ScriptCanvasFileState fileState);
|
||||
|
||||
// QMainWindow
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
@@ -360,6 +360,7 @@ namespace ScriptCanvasEditor
|
||||
namespace ScriptCanvas
|
||||
{
|
||||
class ScriptCanvasData
|
||||
: public AZStd::enable_shared_from_this<ScriptCanvasData>
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
@@ -1190,11 +1190,6 @@ namespace ScriptCanvas
|
||||
m_isObserved = isObserved;
|
||||
}
|
||||
|
||||
AZ::Data::AssetType Graph::GetAssetType() const
|
||||
{
|
||||
return m_assetType;
|
||||
}
|
||||
|
||||
void Graph::VersioningRemoveSlot(ScriptCanvas::Node& scriptCanvasNode, const SlotId& slotId)
|
||||
{
|
||||
bool deletedSlot = true;
|
||||
|
||||
@@ -187,8 +187,6 @@ namespace ScriptCanvas
|
||||
|
||||
bool IsGraphObserved() const override;
|
||||
void SetIsGraphObserved(bool isObserved) override;
|
||||
|
||||
AZ::Data::AssetType GetAssetType() const override;
|
||||
////
|
||||
|
||||
const AZStd::unordered_map<AZ::EntityId, Node* >& GetNodeMapping() const { return m_nodeMapping; }
|
||||
@@ -198,7 +196,7 @@ namespace ScriptCanvas
|
||||
|
||||
GraphData m_graphData;
|
||||
AZ::Data::AssetType m_assetType;
|
||||
|
||||
|
||||
private:
|
||||
ScriptCanvasId m_scriptCanvasId;
|
||||
ExecutionMode m_executionMode = ExecutionMode::Interpreted;
|
||||
|
||||
@@ -147,9 +147,6 @@ namespace ScriptCanvas
|
||||
//! returns a pair of <variable datum pointer, variable name> with the supplied id
|
||||
//! The variable datum pointer is non-null if the variable has been found
|
||||
virtual GraphVariable* FindVariableById(const VariableId& variableId) = 0;
|
||||
|
||||
virtual AZ::Data::AssetType GetAssetType() const = 0;
|
||||
|
||||
};
|
||||
using GraphRequestBus = AZ::EBus<GraphRequests>;
|
||||
|
||||
|
||||
@@ -493,14 +493,6 @@ namespace ScriptCanvas
|
||||
return m_sortPriority;
|
||||
}
|
||||
|
||||
bool GraphVariable::IsInFunction() const
|
||||
{
|
||||
AZ::Data::AssetType assetType = AZ::Data::AssetType::CreateNull();
|
||||
ScriptCanvas::GraphRequestBus::EventResult(assetType, m_scriptCanvasId, &ScriptCanvas::GraphRequests::GetAssetType);
|
||||
|
||||
return assetType == azrtti_typeid<ScriptCanvas::SubgraphInterfaceAsset>();
|
||||
}
|
||||
|
||||
AZ::u32 GraphVariable::OnInitialValueSourceChanged()
|
||||
{
|
||||
VariableNotificationBus::Event(GetGraphScopedId(), &VariableNotifications::OnVariableInitialValueSourceChanged);
|
||||
|
||||
@@ -194,9 +194,7 @@ namespace ScriptCanvas
|
||||
choices.emplace_back(AZStd::make_pair(static_cast<unsigned char>(VariableFlags::Scope::Function), s_ScopeNames[1]));
|
||||
return choices;
|
||||
}
|
||||
|
||||
bool IsInFunction() const;
|
||||
|
||||
|
||||
void OnScopeTypedChanged();
|
||||
AZ::u32 OnInitialValueSourceChanged();
|
||||
void OnSortPriorityChanged();
|
||||
|
||||
Reference in New Issue
Block a user