| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <qaction.h>
- #include <qapplication.h>
- #include <qclipboard.h>
- #include <qheaderview.h>
- #include <GraphCanvas/Components/SceneBus.h>
- #include <GraphCanvas/Components/Slots/Data/DataSlotBus.h>
- #include <GraphCanvas/Components/StyleBus.h>
- #include <GraphCanvas/Components/VisualBus.h>
- #include <GraphCanvas/Editor/GraphCanvasProfiler.h>
- #include <GraphCanvas/Utils/QtMimeUtils.h>
- #include <GraphCanvas/Widgets/StyledItemDelegates/GenericComboBoxDelegate.h>
- #include <Editor/Include/ScriptCanvas/Bus/RequestBus.h>
- #include <Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h>
- #include <Editor/View/Widgets/VariablePanel/GraphVariablesTableView.h>
- #include <Editor/Settings.h>
- #include <Editor/Translation/TranslationHelper.h>
- #include <Editor/QtMetaTypes.h>
- #include <Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h>
- #include <Editor/View/Widgets/NodePalette/VariableNodePaletteTreeItemTypes.h>
- #include <ScriptCanvasContextIdentifiers.h>
- #include <ScriptCanvas/Asset/RuntimeAsset.h>
- #include <ScriptCanvas/Bus/RequestBus.h>
- #include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
- #include <AzToolsFramework/ActionManager/HotKey/HotKeyManagerInterface.h>
- #include <AzToolsFramework/API/ToolsApplicationAPI.h>
- #include <AzToolsFramework/Editor/ActionManagerUtils.h>
- #include <AzToolsFramework/UI/PropertyEditor/PropertyEditorAPI.h>
- #include <ScriptCanvas/Variable/GraphVariable.h>
- namespace ScriptCanvasEditor
- {
- const char* GraphVariablesModel::m_columnNames[static_cast<int>(ColumnIndex::Count)] =
- {
- "Name",
- "Type",
- "Default Value",
- "Scope",
- "Initial Value"
- };
- ////////////////////////
- // GraphVariablesModel
- ////////////////////////
- GraphVariablesModel::GraphVariablesModel(QObject* parent /*= nullptr*/)
- : QAbstractTableModel(parent)
- {
- }
- GraphVariablesModel::~GraphVariablesModel()
- {
- ScriptCanvas::GraphVariableManagerNotificationBus::Handler::BusDisconnect();
- }
- int GraphVariablesModel::columnCount([[maybe_unused]] const QModelIndex &parent) const
- {
- return ColumnIndex::Count;
- }
- int GraphVariablesModel::rowCount([[maybe_unused]] const QModelIndex &parent) const
- {
- return aznumeric_cast<int>(m_variableIds.size());
- }
- QVariant GraphVariablesModel::data(const QModelIndex &index, int role) const
- {
- ScriptCanvas::GraphScopedVariableId varId = FindScopedVariableIdForIndex(index);
- switch (role)
- {
- case VarIdRole:
- return QVariant::fromValue<ScriptCanvas::VariableId>(varId.m_identifier);
- case Qt::EditRole:
- {
- if (index.column() == ColumnIndex::Name)
- {
- AZStd::string_view title;
- ScriptCanvas::VariableRequestBus::EventResult(title, varId, &ScriptCanvas::VariableRequests::GetName);
- AZStd::string string = title;
- return QString(string.c_str());
- }
- else if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable && IsEditableType(varType))
- {
- if (varType.IS_A(ScriptCanvas::Data::Type::String()))
- {
- const ScriptCanvas::Data::StringType* stringValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::StringType>();
- return QVariant(stringValue->c_str());
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::Number()))
- {
- const ScriptCanvas::Data::NumberType* numberValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::NumberType>();
- return QVariant((*numberValue));
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::Boolean()))
- {
- const ScriptCanvas::Data::BooleanType* booleanValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::BooleanType>();
- return QVariant((*booleanValue));
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::CRC()))
- {
- const ScriptCanvas::Data::CRCType* crcValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::CRCType>();
- AZStd::string crcString;
- EditorGraphRequestBus::EventResult(crcString, GetScriptCanvasId(), &EditorGraphRequests::DecodeCrc, (*crcValue));
- return QVariant(crcString.c_str());
- }
- else
- {
- AZ_Warning("ScriptCanvas", false, "Unhandled editable type found in GraphVariablesTableView.cpp");
- }
- }
- }
- else if (index.column() == ColumnIndex::Scope)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- return ScriptCanvas::VariableFlags::GetScopeDisplayLabel(graphVariable->GetScope());
- }
- }
- else if (index.column() == ColumnIndex::InitialValueSource)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- return graphVariable->GetInitialValueSourceName().data();
- }
- }
- }
- break;
- case Qt::DisplayRole:
- {
- if (index.column() == ColumnIndex::Name)
- {
- AZStd::string_view title;
- ScriptCanvas::VariableRequestBus::EventResult(title, varId, &ScriptCanvas::VariableRequests::GetName);
- return QString::fromUtf8(title.data(), static_cast<int>(title.size()));
- }
- else if (index.column() == ColumnIndex::Type)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- if (varType.IsValid())
- {
- AZStd::string type = TranslationHelper::GetSafeTypeName(varType);
- return QString::fromUtf8(type.data(), static_cast<int>(type.size()));
- }
- return QVariant();
- }
- else if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable && IsEditableType(varType))
- {
- if (varType.IS_A(ScriptCanvas::Data::Type::String()))
- {
- const ScriptCanvas::Data::StringType* stringValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::StringType>();
- if (stringValue->empty())
- {
- return QString("<None>");
- }
- else
- {
- return QString(stringValue->c_str());
- }
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::CRC()))
- {
- const ScriptCanvas::Data::CRCType* crcValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::CRCType>();
- AZStd::string crcString;
- EditorGraphRequestBus::EventResult(crcString, GetScriptCanvasId(), &EditorGraphRequests::DecodeCrc, (*crcValue));
- if (!crcString.empty())
- {
- return QString::fromUtf8(crcString.c_str(), static_cast<int>(crcString.size()));
- }
- else
- {
- return QString("<Empty>");
- }
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::Number()))
- {
- const ScriptCanvas::Data::NumberType* numberValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::NumberType>();
- return QVariant((*numberValue));
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::Boolean()))
- {
- // Want to return nothing for the boolean, because we'll just use the check box
- return QVariant();
- }
- else
- {
- AZ_Warning("ScriptCanvas", false, "Unhandled editable type found in GraphVariablesTableView.cpp");
- }
- }
- return QVariant();
- }
- else if (index.column() == ColumnIndex::Scope)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- return ScriptCanvas::VariableFlags::GetScopeDisplayLabel(graphVariable->GetScope());
- }
- }
- else if (index.column() == ColumnIndex::InitialValueSource)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- return graphVariable->GetInitialValueSourceName().data();
- }
- }
- }
- break;
- case Qt::FontRole:
- {
- if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- if (varType.IS_A(ScriptCanvas::Data::Type::String()))
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- const ScriptCanvas::Data::StringType* stringValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::StringType>();
- if (stringValue->empty())
- {
- QFont font;
- font.setItalic(true);
- return font;
- }
- }
- }
- }
- }
- break;
- case Qt::ToolTipRole:
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- AZStd::string type;
- if (varType.IsValid())
- {
- type = TranslationHelper::GetSafeTypeName(varType);
- }
- if (index.column() == ColumnIndex::Type)
- {
- if (!type.empty())
- {
- return QVariant(type.c_str());
- }
- }
- else if (index.column() == ColumnIndex::InitialValueSource)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- QString tooltipString = QString("The value of this variable can only be set within this graph");
- if (graphVariable->GetInitialValueSource() == ScriptCanvas::VariableFlags::InitialValueSource::Component)
- {
- tooltipString = QString("The value of this variable can be set set on the component's properties");
- }
- return tooltipString;
- }
- else
- {
- AZStd::string variableName;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(variableName, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::GetVariableName, varId.m_identifier);
- QString tooltipString = QString("Drag to the canvas to Get or Set %1 (Shift+Drag to Get; Alt+Drag to Set)").arg(variableName.c_str());
- if (!type.empty())
- {
- // Prefix the type if it is valid
- return QString("%1 - %2").arg(type.c_str(), tooltipString);
- }
- return tooltipString;
- }
-
- }
- break;
- case Qt::DecorationRole:
- {
- if (index.column() == ColumnIndex::Name)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- const QPixmap* icon = nullptr;
- ScriptCanvas::Data::Type varType = graphVariable->GetDatum()->GetType();
- if (ScriptCanvas::Data::IsContainerType(varType))
- {
- AZStd::vector<ScriptCanvas::Data::Type > dataTypes = ScriptCanvas::Data::GetContainedTypes(varType);
- AZStd::vector< AZ::Uuid> azTypes;
- azTypes.reserve(dataTypes.size());
- for (const ScriptCanvas::Data::Type& dataType : dataTypes)
- {
- azTypes.push_back(ScriptCanvas::Data::ToAZType(dataType));
- }
- GraphCanvas::StyleManagerRequestBus::EventResult(icon, ScriptCanvasEditor::AssetEditorId, &GraphCanvas::StyleManagerRequests::GetMultiDataTypeIcon, azTypes);
- }
- else
- {
- GraphCanvas::StyleManagerRequestBus::EventResult(icon, ScriptCanvasEditor::AssetEditorId, &GraphCanvas::StyleManagerRequests::GetDataTypeIcon, ScriptCanvas::Data::ToAZType(varType));
- }
- if (icon)
- {
- return *icon;
- }
- }
- return QVariant();
- }
- }
- break;
- case Qt::CheckStateRole:
- {
- if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable && varType.IS_A(ScriptCanvas::Data::Type::Boolean()))
- {
- const ScriptCanvas::Data::BooleanType* booleanType = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::BooleanType>();
- if ((*booleanType))
- {
- return Qt::CheckState::Checked;
- }
- else
- {
- return Qt::CheckState::Unchecked;
- }
- }
- }
- }
- break;
- case Qt::TextAlignmentRole:
- {
- return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
- }
- break;
- case GraphCanvas::GenericComboBoxDelegate::ComboBoxDelegateRole:
- {
- if (index.column() == ColumnIndex::Scope)
- {
- return QStringList{
- ScriptCanvas::VariableFlags::GetScopeDisplayLabel(ScriptCanvas::VariableFlags::Scope::Graph),
- ScriptCanvas::VariableFlags::GetScopeDisplayLabel(ScriptCanvas::VariableFlags::Scope::Function)
- };
- }
- else if (index.column() == ColumnIndex::InitialValueSource)
- {
- return QStringList{
- tr(ScriptCanvas::GraphVariable::s_InitialValueSourceNames[0]),
- tr(ScriptCanvas::GraphVariable::s_InitialValueSourceNames[1])
- };
- }
- }
- break;
- default:
- break;
- }
- return QVariant();
- }
- bool GraphVariablesModel::setData(const QModelIndex& index, const QVariant& value, int role)
- {
- ScriptCanvas::GraphScopedVariableId varId = FindScopedVariableIdForIndex(index);
- bool modifiedData = false;
- GeneralRequestBus::Broadcast(&GeneralRequests::PushPreventUndoStateUpdate);
- switch (role)
- {
- case Qt::CheckStateRole:
- {
- if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (varType.IS_A(ScriptCanvas::Data::Type::Boolean()))
- {
- ScriptCanvas::ModifiableDatumView datumView;
- graphVariable->ConfigureDatumView(datumView);
- datumView.SetAs(value.toBool());
- modifiedData = datumView.GetDatum()->GetAs<ScriptCanvas::Data::BooleanType>();
- }
- }
- }
- break;
- case Qt::EditRole:
- {
- if (index.column() == ColumnIndex::Name)
- {
- AZ::Outcome<void, AZStd::string> outcome = AZ::Failure(AZStd::string());
- AZStd::string_view oldVariableName;
- ScriptCanvas::VariableRequestBus::EventResult(oldVariableName, varId, &ScriptCanvas::VariableRequests::GetName);
- AZStd::string newVariableName = value.toString().toUtf8().data();
- if (newVariableName != oldVariableName)
- {
- ScriptCanvas::VariableRequestBus::EventResult(outcome, varId, &ScriptCanvas::VariableRequests::RenameVariable, newVariableName);
- modifiedData = outcome.IsSuccess();
- }
- }
- else if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable && IsEditableType(varType))
- {
- ScriptCanvas::ModifiableDatumView datumView;
- graphVariable->ConfigureDatumView(datumView);
- if (varType.IS_A(ScriptCanvas::Data::Type::String()))
- {
- datumView.SetAs(ScriptCanvas::Data::StringType(value.toString().toUtf8().data()));
- modifiedData = datumView.GetDatum()->GetAs<ScriptCanvas::Data::StringType>();
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::Number()))
- {
- datumView.SetAs(value.toDouble());
- modifiedData = datumView.GetDatum()->GetAs<ScriptCanvas::Data::NumberType>();
- }
- else if (varType.IS_A(ScriptCanvas::Data::Type::CRC()))
- {
- AZStd::string newStringValue = value.toString().toUtf8().data();
- AZ::Crc32 newCrcValue = AZ::Crc32(newStringValue.c_str());
- const ScriptCanvas::Data::CRCType* oldCrcValue = graphVariable->GetDatum()->GetAs<ScriptCanvas::Data::CRCType>();
- if (newCrcValue != (*oldCrcValue))
- {
- EditorGraphRequestBus::Event(GetScriptCanvasId(), &EditorGraphRequests::RemoveCrcCache, (*oldCrcValue));
- EditorGraphRequestBus::Event(GetScriptCanvasId(), &EditorGraphRequests::AddCrcCache, newCrcValue, newStringValue);
- datumView.SetAs<ScriptCanvas::Data::CRCType>(newCrcValue);
- modifiedData = datumView.GetDatum()->GetAs<ScriptCanvas::Data::CRCType>();
- }
- }
- }
- }
- else if (index.column() == ColumnIndex::Scope)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- QString comboBoxValue = value.toString();
- if (!comboBoxValue.isEmpty())
- {
- AZStd::string scopeLabel = ScriptCanvas::VariableFlags::GetScopeDisplayLabel(graphVariable->GetScope());
- if (scopeLabel.compare(comboBoxValue.toUtf8().data()) != 0)
- {
- modifiedData = true;
- graphVariable->SetScope(ScriptCanvas::VariableFlags::GetScopeFromLabel(comboBoxValue.toUtf8().data()));
- AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, AzToolsFramework::Refresh_EntireTree);
- }
- }
- }
- }
- else if (index.column() == ColumnIndex::InitialValueSource)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable)
- {
- QString comboBoxValue = value.toString();
- if (!comboBoxValue.isEmpty())
- {
- if (graphVariable->GetInitialValueSourceName().compare(comboBoxValue.toUtf8().data()) != 0)
- {
- modifiedData = true;
- graphVariable->SetInitialValueSourceFromName(comboBoxValue.toUtf8().data());
- AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, AzToolsFramework::Refresh_EntireTree);
- }
- }
- }
- }
- }
- break;
- default:
- break;
- }
- GeneralRequestBus::Broadcast(&GeneralRequests::PopPreventUndoStateUpdate);
- if (modifiedData)
- {
- GeneralRequestBus::Broadcast(&GeneralRequests::PostUndoPoint, m_scriptCanvasId);
- }
- return modifiedData;
- }
- Qt::ItemFlags GraphVariablesModel::flags(const QModelIndex &index) const
- {
- Qt::ItemFlags itemFlags = Qt::ItemFlags(Qt::ItemIsEnabled |
- Qt::ItemIsDragEnabled |
- Qt::ItemIsSelectable);
- if (index.column() == ColumnIndex::Name)
- {
- itemFlags |= Qt::ItemIsEditable;
- }
- else if (index.column() == ColumnIndex::DefaultValue)
- {
- ScriptCanvas::GraphScopedVariableId varId = FindScopedVariableIdForIndex(index);
- ScriptCanvas::Data::Type varType;
- ScriptCanvas::VariableRequestBus::EventResult(varType, varId, &ScriptCanvas::VariableRequests::GetType);
- if (IsEditableType(varType))
- {
- if (varType.IS_A(ScriptCanvas::Data::Type::Boolean()))
- {
- itemFlags |= Qt::ItemIsUserCheckable;
- }
- else
- {
- itemFlags |= Qt::ItemIsEditable;
- }
- }
- }
- else if (index.column() == ColumnIndex::Scope)
- {
- ScriptCanvas::GraphScopedVariableId varId = FindScopedVariableIdForIndex(index);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, varId.m_identifier);
- if (graphVariable->GetScope() != ScriptCanvas::VariableFlags::Scope::FunctionReadOnly)
- {
- itemFlags |= Qt::ItemIsEditable;
- }
- }
- else if (index.column() == ColumnIndex::InitialValueSource)
- {
- itemFlags |= Qt::ItemIsEditable;
- }
- return itemFlags;
- }
- QStringList GraphVariablesModel::mimeTypes() const
- {
- QStringList mimeTypes;
- mimeTypes.append(Widget::NodePaletteDockWidget::GetMimeType());
- return mimeTypes;
- }
- QMimeData* GraphVariablesModel::mimeData(const QModelIndexList &indexes) const
- {
- GraphCanvas::GraphCanvasMimeContainer container;
- bool isSet = ((QApplication::keyboardModifiers() & Qt::Modifier::ALT) != 0);
- bool isGet = ((QApplication::keyboardModifiers() & Qt::Modifier::SHIFT) != 0);
- ScriptCanvas::VariableId variableId;
- for (QModelIndex modelIndex : indexes)
- {
- // We select by the row, but each row still has multiple columns.
- // So to avoid handling the same row more then once, we only handle column 0.
- if (modelIndex.column() != 0)
- {
- continue;
- }
- variableId = FindVariableIdForIndex(modelIndex);
- GraphCanvas::GraphCanvasMimeEvent* mimeEvent = nullptr;
- if (isSet)
- {
- mimeEvent = aznew CreateSetVariableNodeMimeEvent(variableId);
- }
- else if (isGet)
- {
- mimeEvent = aznew CreateGetVariableNodeMimeEvent(variableId);
- }
- else
- {
- mimeEvent = aznew CreateVariableSpecificNodeMimeEvent(variableId);
- }
- if (mimeEvent)
- {
- container.m_mimeEvents.push_back(mimeEvent);
- }
- }
- if (container.m_mimeEvents.empty())
- {
- return nullptr;
- }
- AZStd::vector<char> encoded;
- if (!container.ToBuffer(encoded))
- {
- return nullptr;
- }
- QMimeData* mimeDataPtr = new QMimeData();
- {
- QByteArray encodedData;
- encodedData.resize((int)encoded.size());
- memcpy(encodedData.data(), encoded.data(), encoded.size());
- mimeDataPtr->setData(Widget::NodePaletteDockWidget::GetMimeType(), encodedData);
- }
- encoded.clear();
- if (container.m_mimeEvents.size() == 1)
- {
- GraphCanvas::QtMimeUtils::WriteTypeToMimeData<ScriptCanvas::VariableId>(mimeDataPtr, GraphCanvas::k_ReferenceMimeType, variableId);
- }
- return mimeDataPtr;
- }
-
- void GraphVariablesModel::SetActiveScene(const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
- {
- ScriptCanvas::GraphVariableManagerNotificationBus::Handler::BusDisconnect();
- m_scriptCanvasId = scriptCanvasId;
- if (m_scriptCanvasId.IsValid())
- {
- ScriptCanvas::GraphVariableManagerNotificationBus::Handler::BusConnect(m_scriptCanvasId);
- }
- PopulateSceneVariables();
- }
- ScriptCanvas::ScriptCanvasId GraphVariablesModel::GetScriptCanvasId() const
- {
- return m_scriptCanvasId;
- }
- bool GraphVariablesModel::IsEditableType(ScriptCanvas::Data::Type scriptCanvasDataType) const
- {
- return scriptCanvasDataType.IS_A(ScriptCanvas::Data::Type::String())
- || scriptCanvasDataType.IS_A(ScriptCanvas::Data::Type::Number())
- || scriptCanvasDataType.IS_A(ScriptCanvas::Data::Type::Boolean())
- || scriptCanvasDataType.IS_A(ScriptCanvas::Data::Type::CRC());
- }
- void GraphVariablesModel::PopulateSceneVariables()
- {
- layoutAboutToBeChanged();
- ScriptCanvas::VariableNotificationBus::MultiHandler::BusDisconnect();
- m_variableIds.clear();
-
- const AZStd::unordered_map<ScriptCanvas::VariableId, ScriptCanvas::GraphVariable>* variableMap = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(variableMap, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::GetVariables);
- if (variableMap)
- {
- m_variableIds.reserve(variableMap->size());
- for (const AZStd::pair<ScriptCanvas::VariableId, ScriptCanvas::GraphVariable>& element : *variableMap)
- {
- ScriptCanvas::GraphScopedVariableId notificationId = element.second.GetGraphScopedId();
- ScriptCanvas::VariableNotificationBus::MultiHandler::BusConnect(notificationId);
- m_variableIds.push_back(notificationId);
- }
- }
- layoutChanged();
- }
- void GraphVariablesModel::OnVariableAddedToGraph(const ScriptCanvas::VariableId& variableId, AZStd::string_view /*variableName*/)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, variableId);
- ScriptCanvas::GraphScopedVariableId notificationId = graphVariable->GetGraphScopedId();
- int index = static_cast<int>(m_variableIds.size());
- beginInsertRows(QModelIndex(), index, index);
- m_variableIds.push_back(notificationId);
- endInsertRows();
- ScriptCanvas::VariableNotificationBus::MultiHandler::BusConnect(notificationId);
- QModelIndex modelIndex = createIndex(index, 0);
- emit VariableAdded(modelIndex);
- }
- void GraphVariablesModel::OnVariableRemovedFromGraph(const ScriptCanvas::VariableId& variableId, AZStd::string_view /*variableName*/)
- {
- int index = FindRowForVariableId(variableId);
- if (index >= 0)
- {
- ScriptCanvas::GraphScopedVariableId notificationId = m_variableIds[index];
- beginRemoveRows(QModelIndex(), index, index);
- m_variableIds.erase(m_variableIds.begin() + index);
- endRemoveRows();
- ScriptCanvas::VariableNotificationBus::MultiHandler::BusDisconnect(notificationId);
- }
- }
- void GraphVariablesModel::OnVariableNameChangedInGraph(const ScriptCanvas::VariableId& variableId, AZStd::string_view /*variableName*/)
- {
- int index = FindRowForVariableId(variableId);
- if (index >= 0)
- {
- QModelIndex modelIndex = createIndex(index, ColumnIndex::Name, nullptr);
- dataChanged(modelIndex, modelIndex);
- }
- }
- void GraphVariablesModel::OnVariableValueChanged()
- {
- const ScriptCanvas::GraphScopedVariableId* variableId = ScriptCanvas::VariableNotificationBus::GetCurrentBusId();
- int index = FindRowForVariableId((*variableId).m_identifier);
- if (index >= 0)
- {
- QModelIndex modelIndex = createIndex(index, ColumnIndex::DefaultValue, nullptr);
- dataChanged(modelIndex, modelIndex);
- }
- }
- void GraphVariablesModel::OnVariableScopeChanged()
- {
- const ScriptCanvas::GraphScopedVariableId* variableId = ScriptCanvas::VariableNotificationBus::GetCurrentBusId();
- int index = FindRowForVariableId((*variableId).m_identifier);
- if (index >= 0)
- {
- QModelIndex modelIndex = createIndex(index, ColumnIndex::Scope, nullptr);
- dataChanged(modelIndex, modelIndex);
- }
- }
- void GraphVariablesModel::OnVariableInitialValueSourceChanged()
- {
- const ScriptCanvas::GraphScopedVariableId* variableId = ScriptCanvas::VariableNotificationBus::GetCurrentBusId();
- int index = FindRowForVariableId((*variableId).m_identifier);
- if (index >= 0)
- {
- QModelIndex modelIndex = createIndex(index, ColumnIndex::InitialValueSource, nullptr);
- dataChanged(modelIndex, modelIndex);
- }
- }
- void GraphVariablesModel::OnVariablePriorityChanged()
- {
- const ScriptCanvas::GraphScopedVariableId* variableId = ScriptCanvas::VariableNotificationBus::GetCurrentBusId();
- int index = FindRowForVariableId((*variableId).m_identifier);
- if (index >= 0)
- {
- QModelIndex modelIndex = createIndex(index, 0, nullptr);
- QModelIndex otherIndex = createIndex(index, ColumnIndex::Count - 1, nullptr);
- dataChanged(modelIndex, otherIndex);
- }
- }
- QVariant GraphVariablesModel::headerData(int section, Qt::Orientation orientation, int role /*= Qt::DisplayRole*/) const
- {
- if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
- {
- return tr(m_columnNames[section]);
- }
- if (role == Qt::TextAlignmentRole)
- {
- return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
- }
- return QAbstractItemModel::headerData(section, orientation, role);
- }
- ScriptCanvas::VariableId GraphVariablesModel::FindVariableIdForIndex(const QModelIndex& index) const
- {
- ScriptCanvas::VariableId variableId;
- if (index.row() >= 0 && index.row() < m_variableIds.size())
- {
- variableId = m_variableIds[index.row()].m_identifier;
- }
- return variableId;
- }
- ScriptCanvas::GraphScopedVariableId GraphVariablesModel::FindScopedVariableIdForIndex(const QModelIndex& index) const
- {
- ScriptCanvas::GraphScopedVariableId scopedVariableId;
- if (index.row() >= 0 && index.row() < m_variableIds.size())
- {
- scopedVariableId = m_variableIds[index.row()];
- }
- return scopedVariableId;
- }
- int GraphVariablesModel::FindRowForVariableId(const ScriptCanvas::VariableId& variableId) const
- {
- for (int i = 0; i < static_cast<int>(m_variableIds.size()); ++i)
- {
- if (m_variableIds[i].m_identifier == variableId)
- {
- return i;
- }
- }
- return -1;
- }
- ////////////////////////////////////////////
- // GraphVariablesModelSortFilterProxyModel
- ////////////////////////////////////////////
- GraphVariablesModelSortFilterProxyModel::GraphVariablesModelSortFilterProxyModel(QObject* parent)
- : QSortFilterProxyModel(parent)
- {
- }
- bool GraphVariablesModelSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const
- {
- if (m_filter.isEmpty())
- {
- return true;
- }
- GraphVariablesModel* model = qobject_cast<GraphVariablesModel*>(sourceModel());
- if (!model)
- {
- return false;
- }
- QModelIndex index = model->index(sourceRow, GraphVariablesModel::ColumnIndex::Name, sourceParent);
- QString test = model->data(index, Qt::DisplayRole).toString();
- return (test.lastIndexOf(m_filterRegex) >= 0);
- }
- bool GraphVariablesModelSortFilterProxyModel::lessThan(const QModelIndex& left, const QModelIndex& right) const
- {
- GraphVariablesModel* model = qobject_cast<GraphVariablesModel*>(sourceModel());
- if (!model)
- {
- return false;
- }
- ScriptCanvas::VariableId leftVariableId = model->FindVariableIdForIndex(left);
- ScriptCanvas::VariableId rightVariableId = model->FindVariableIdForIndex(right);
- ScriptCanvas::GraphVariableManagerRequests* requests = ScriptCanvas::GraphVariableManagerRequestBus::FindFirstHandler(model->GetScriptCanvasId());
- ScriptCanvas::GraphVariable* leftVariable = requests->FindVariableById(leftVariableId);
- ScriptCanvas::GraphVariable* rightVariable = requests->FindVariableById(rightVariableId);
- if (leftVariable == nullptr)
- {
- return true;
- }
- if (rightVariable == nullptr)
- {
- return false;
- }
- int leftPriority = leftVariable->GetSortPriority();
- int rightPriority = rightVariable->GetSortPriority();
- if (leftPriority == rightPriority)
- {
- return QSortFilterProxyModel::lessThan(left, right);
- }
- else
- {
- return m_variableComparator(leftVariable, rightVariable);
- }
- }
- void GraphVariablesModelSortFilterProxyModel::SetFilter(const QString& filter)
- {
- m_filter = QRegExp::escape(filter);
- m_filterRegex = QRegExp(m_filter, Qt::CaseInsensitive);
- invalidateFilter();
- }
- ////////////////////////////
- // GraphVariablesTableView
- ////////////////////////////
- bool GraphVariablesTableView::HasCopyVariableData()
- {
- return QApplication::clipboard()->mimeData() && QApplication::clipboard()->mimeData()->hasFormat(ScriptCanvas::CopiedVariableData::k_variableKey);
- }
- void GraphVariablesTableView::CopyVariableToClipboard(const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const ScriptCanvas::VariableId& variableId)
- {
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, variableId);
- if (graphVariable == nullptr)
- {
- return;
- }
- ScriptCanvas::CopiedVariableData copiedVariableData;
- copiedVariableData.m_variableMapping[variableId] = (*graphVariable);
- AZStd::vector<char> buffer;
- AZ::SerializeContext* serializeContext = AZ::EntityUtils::GetApplicationSerializeContext();
- AZ::IO::ByteContainerStream<AZStd::vector<char>> stream(&buffer);
- AZ::Utils::SaveObjectToStream(stream, AZ::DataStream::ST_BINARY, &copiedVariableData, serializeContext);
- QMimeData* mime = new QMimeData();
- mime->setData(ScriptCanvas::CopiedVariableData::k_variableKey, QByteArray(buffer.cbegin(), static_cast<int>(buffer.size())));
- QClipboard* clipboard = QApplication::clipboard();
- clipboard->setMimeData(mime);
- }
- bool GraphVariablesTableView::HandleVariablePaste(const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
- {
- QClipboard* clipboard = QApplication::clipboard();
- // Trying to paste unknown data into our scene.
- if (!HasCopyVariableData())
- {
- return false;
- }
- ScriptCanvas::CopiedVariableData copiedVariableData;
- QByteArray byteArray = clipboard->mimeData()->data(ScriptCanvas::CopiedVariableData::k_variableKey);
- AZ::SerializeContext* serializeContext = AZ::EntityUtils::GetApplicationSerializeContext();
- AZ::Utils::LoadObjectFromBufferInPlace(byteArray.constData(), static_cast<AZStd::size_t>(byteArray.size()), copiedVariableData, serializeContext);
- ScriptCanvas::GraphVariableManagerRequests* requests = ScriptCanvas::GraphVariableManagerRequestBus::FindFirstHandler(scriptCanvasId);
- if (requests == nullptr)
- {
- return false;
- }
- GeneralRequestBus::Broadcast(&GeneralRequests::PushPreventUndoStateUpdate);
- for (auto variableMapData : copiedVariableData.m_variableMapping)
- {
- requests->CloneVariable(variableMapData.second);
- }
- GeneralRequestBus::Broadcast(&GeneralRequests::PopPreventUndoStateUpdate);
- GeneralRequestBus::Broadcast(&GeneralRequests::PostUndoPoint, scriptCanvasId);
- return !copiedVariableData.m_variableMapping.empty();
- }
- GraphVariablesTableView::GraphVariablesTableView(QWidget* parent)
- : QTableView(parent)
- , m_nextInstanceAction(nullptr)
- , m_previousInstanceAction(nullptr)
- {
- m_model = aznew GraphVariablesModel(this);
- m_proxyModel = aznew GraphVariablesModelSortFilterProxyModel(this);
- m_proxyModel->setSourceModel(m_model);
- m_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
- setModel(m_proxyModel);
- setSortingEnabled(true);
- ApplyPreferenceSort();
- setItemDelegateForColumn(GraphVariablesModel::Name, aznew GraphCanvas::IconDecoratedNameDelegate(this));
- setItemDelegateForColumn(GraphVariablesModel::Scope, aznew GraphCanvas::GenericComboBoxDelegate(this));
- setItemDelegateForColumn(GraphVariablesModel::InitialValueSource, aznew GraphCanvas::GenericComboBoxDelegate(this));
- horizontalHeader()->setStretchLastSection(false);
- horizontalHeader()->setSectionResizeMode(GraphVariablesModel::Name, QHeaderView::ResizeMode::ResizeToContents);
- horizontalHeader()->setSectionResizeMode(GraphVariablesModel::DefaultValue, QHeaderView::ResizeMode::ResizeToContents);
- horizontalHeader()->setSectionResizeMode(GraphVariablesModel::Type, QHeaderView::ResizeMode::Stretch);
- horizontalHeader()->setSectionResizeMode(GraphVariablesModel::Scope, QHeaderView::ResizeMode::Stretch);
- horizontalHeader()->setSectionResizeMode(GraphVariablesModel::InitialValueSource, QHeaderView::ResizeMode::Stretch);
- horizontalHeader()->show();
- {
- QAction* deleteAction = new QAction(this);
- deleteAction->setShortcut(QKeySequence(Qt::Key_Delete));
- QObject::connect(deleteAction, &QAction::triggered, this, &GraphVariablesTableView::OnDeleteSelected);
- addAction(deleteAction);
- }
- {
- QAction* copyAction = new QAction(this);
- copyAction->setShortcut(QKeySequence::Copy);
- QObject::connect(copyAction, &QAction::triggered, this, &GraphVariablesTableView::OnCopySelected);
- addAction(copyAction);
- }
- {
- QAction* pasteAction = new QAction(this);
- pasteAction->setShortcut(QKeySequence::Paste);
- QObject::connect(pasteAction, &QAction::triggered, this, &GraphVariablesTableView::OnPaste);
- addAction(pasteAction);
- }
- {
- QAction* duplicateAction = new QAction(this);
- duplicateAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D));
- QObject::connect(duplicateAction, &QAction::triggered, this, &GraphVariablesTableView::OnDuplicate);
- addAction(duplicateAction);
- }
- {
- m_nextInstanceAction = new QAction(this);
- m_nextInstanceAction->setShortcut(QKeySequence(Qt::Key_F8));
- QObject::connect(m_nextInstanceAction, &QAction::triggered, this, &GraphVariablesTableView::CycleToNextVariableReference);
- addAction(m_nextInstanceAction);
- }
- {
- m_previousInstanceAction = new QAction(this);
- m_previousInstanceAction->setShortcut(QKeySequence(Qt::Key_F7));
- QObject::connect(m_previousInstanceAction, &QAction::triggered, this, &GraphVariablesTableView::CycleToPreviousVariableReference);
- addAction(m_previousInstanceAction);
- }
- QObject::connect(m_model, &GraphVariablesModel::VariableAdded, this, &GraphVariablesTableView::OnVariableAdded);
- setMinimumSize(0, 0);
- ResizeColumns();
- if (auto hotKeyManagerInterface = AZ::Interface<AzToolsFramework::HotKeyManagerInterface>::Get())
- {
- hotKeyManagerInterface->AssignWidgetToActionContext(
- ScriptCanvasIdentifiers::ScriptCanvasVariablesActionContextIdentifier, this);
- }
- }
- GraphVariablesTableView::~GraphVariablesTableView()
- {
- if (auto hotKeyManagerInterface = AZ::Interface<AzToolsFramework::HotKeyManagerInterface>::Get())
- {
- hotKeyManagerInterface->RemoveWidgetFromActionContext(
- ScriptCanvasIdentifiers::ScriptCanvasVariablesActionContextIdentifier, this);
- }
- }
- void GraphVariablesTableView::SetActiveScene(const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
- {
- clearSelection();
- m_model->SetActiveScene(scriptCanvasId);
- m_scriptCanvasId = scriptCanvasId;
- m_graphCanvasGraphId.SetInvalid();
- GeneralRequestBus::BroadcastResult(m_graphCanvasGraphId, &GeneralRequests::GetGraphCanvasGraphId, m_scriptCanvasId);
- m_cyclingHelper.SetActiveGraph(m_graphCanvasGraphId);
- ResizeColumns();
- }
- void GraphVariablesTableView::SetFilter(const QString& filterString)
- {
- clearSelection();
- m_proxyModel->SetFilter(filterString);
- }
- void GraphVariablesTableView::EditVariableName(ScriptCanvas::VariableId variableId)
- {
- int row = m_model->FindRowForVariableId(variableId);
- QModelIndex sourceIndex = m_model->index(row, GraphVariablesModel::ColumnIndex::Name);
- QModelIndex proxyIndex = m_proxyModel->mapFromSource(sourceIndex);
- setCurrentIndex(proxyIndex);
- edit(proxyIndex);
- }
- void GraphVariablesTableView::hideEvent(QHideEvent* event)
- {
- QTableView::hideEvent(event);
- clearSelection();
- m_proxyModel->SetFilter("");
- }
- void GraphVariablesTableView::resizeEvent(QResizeEvent* resizeEvent)
- {
- QTableView::resizeEvent(resizeEvent);
- ResizeColumns();
- }
- void GraphVariablesTableView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
- {
- QTableView::selectionChanged(selected, deselected);
- GraphCanvas::SceneNotificationBus::Handler::BusDisconnect();
- AZStd::unordered_set< ScriptCanvas::VariableId > variableSet;
- QModelIndexList indexList = selectedIndexes();
- for (const QModelIndex& index : indexList)
- {
- QModelIndex sourceIndex = m_proxyModel->mapToSource(index);
- variableSet.insert(m_model->FindVariableIdForIndex(sourceIndex));
- }
- if (variableSet.size() == 1)
- {
- SetCycleTarget((*variableSet.begin()));
- }
- else
- {
- SetCycleTarget(ScriptCanvas::VariableId());
- }
- emit SelectionChanged(variableSet);
- if (!selected.isEmpty())
- {
- GraphCanvas::SceneNotificationBus::Handler::BusConnect(m_graphCanvasGraphId);
- }
- }
- void GraphVariablesTableView::OnSelectionChanged()
- {
- GRAPH_CANVAS_DETAILED_PROFILE_FUNCTION();
- clearSelection();
- }
- void GraphVariablesTableView::ApplyPreferenceSort()
- {
- AZStd::intrusive_ptr<EditorSettings::ScriptCanvasEditorSettings> settings = AZ::UserSettings::CreateFind<EditorSettings::ScriptCanvasEditorSettings>(AZ_CRC("ScriptCanvasPreviewSettings", 0x1c5a2965), AZ::UserSettings::CT_LOCAL);
- m_proxyModel->sort(settings->m_variablePanelSorting);
- }
- void GraphVariablesTableView::OnVariableAdded(QModelIndex modelIndex)
- {
- bool isUndo = false;
- GeneralRequestBus::BroadcastResult(isUndo, &GeneralRequests::IsActiveGraphInUndoRedo);
- if (!isUndo)
- {
- clearSelection();
- m_proxyModel->SetFilter("");
- QModelIndex proxyIndex = m_proxyModel->mapFromSource(modelIndex);
- scrollTo(proxyIndex);
- selectionModel()->select(QItemSelection(proxyIndex, proxyIndex), QItemSelectionModel::Select | QItemSelectionModel::Rows);
- }
- ResizeColumns();
- }
- void GraphVariablesTableView::OnDeleteSelected()
- {
- AZStd::unordered_set< ScriptCanvas::VariableId > variableSet;
- QModelIndexList indexList = selectedIndexes();
- for (const QModelIndex& index : indexList)
- {
- QModelIndex sourceIndex = m_proxyModel->mapToSource(index);
- variableSet.insert(m_model->FindVariableIdForIndex(sourceIndex));
- }
- emit DeleteVariables(variableSet);
- ResizeColumns();
- }
- void GraphVariablesTableView::ResizeColumns()
- {
- int availableWidth = width();
- int typeLength = aznumeric_cast<int>(availableWidth * 0.3f);
- int maxTypeLength = sizeHintForColumn(GraphVariablesModel::Type) + 10;
- if (typeLength >= maxTypeLength)
- {
- typeLength = maxTypeLength;
- }
- int defaultValueLength = aznumeric_cast<int>(availableWidth * 0.2f);
- horizontalHeader()->resizeSection(GraphVariablesModel::Type, typeLength);
- horizontalHeader()->resizeSection(GraphVariablesModel::DefaultValue, defaultValueLength);
- horizontalHeader()->resizeSection(GraphVariablesModel::Scope, 100);
- int remainingLength = aznumeric_cast<int>(availableWidth * 0.1f);
- int maxExposureLength = 80;
- if (remainingLength >= maxExposureLength)
- {
- remainingLength = maxExposureLength;
- }
- horizontalHeader()->resizeSection(GraphVariablesModel::InitialValueSource, 120);
- }
- void GraphVariablesTableView::OnCopySelected()
- {
- QModelIndexList indexList = selectedIndexes();
- if (!indexList.empty())
- {
- QModelIndex sourceIndex = m_proxyModel->mapToSource(indexList.front());
- ScriptCanvas::VariableId variableId = m_model->FindVariableIdForIndex(sourceIndex);
- CopyVariableToClipboard(m_scriptCanvasId, variableId);
- }
- }
- void GraphVariablesTableView::OnPaste()
- {
- HandleVariablePaste(m_scriptCanvasId);
- }
- void GraphVariablesTableView::SetCycleTarget(ScriptCanvas::VariableId variableId)
- {
- m_cyclingHelper.Clear();
- m_cyclingVariableId = variableId;
- if (m_nextInstanceAction)
- {
- m_nextInstanceAction->setEnabled(m_cyclingVariableId.IsValid());
- m_previousInstanceAction->setEnabled(m_cyclingVariableId.IsValid());
- }
- }
- void GraphVariablesTableView::OnDuplicate()
- {
- QModelIndexList indexList = selectedIndexes();
- if (!indexList.empty())
- {
- QModelIndex sourceIndex = m_proxyModel->mapToSource(indexList.front());
- ScriptCanvas::VariableId variableId = m_model->FindVariableIdForIndex(sourceIndex);
- ScriptCanvas::GraphVariable* graphVariable = nullptr;
- ScriptCanvas::GraphVariableManagerRequestBus::EventResult(graphVariable, m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::FindVariableById, variableId);
- if (graphVariable == nullptr)
- {
- return;
- }
- GeneralRequestBus::Broadcast(&GeneralRequests::PushPreventUndoStateUpdate);
- ScriptCanvas::GraphVariableManagerRequestBus::Event(m_scriptCanvasId, &ScriptCanvas::GraphVariableManagerRequests::CloneVariable, (*graphVariable));
- GeneralRequestBus::Broadcast(&GeneralRequests::PopPreventUndoStateUpdate);
- GeneralRequestBus::Broadcast(&GeneralRequests::PostUndoPoint, m_scriptCanvasId);
- }
- }
- void GraphVariablesTableView::CycleToNextVariableReference()
- {
- ConfigureHelper();
- m_cyclingHelper.CycleToNextNode();
- }
- void GraphVariablesTableView::CycleToPreviousVariableReference()
- {
- ConfigureHelper();
- m_cyclingHelper.CycleToPreviousNode();
- }
- void GraphVariablesTableView::ConfigureHelper()
- {
- if (!m_cyclingHelper.IsConfigured() && m_cyclingVariableId.IsValid())
- {
- AZStd::vector< NodeIdPair > nodeIds;
- EditorGraphRequestBus::EventResult(nodeIds, m_scriptCanvasId, &EditorGraphRequests::GetVariableNodes, m_cyclingVariableId);
- AZStd::vector< GraphCanvas::NodeId > canvasNodes;
- canvasNodes.reserve(nodeIds.size());
- for (const auto& nodeIdPair : nodeIds)
- {
- canvasNodes.emplace_back(nodeIdPair.m_graphCanvasId);
- }
- m_cyclingHelper.SetNodes(canvasNodes);
- }
- }
- #include <Editor/View/Widgets/VariablePanel/moc_GraphVariablesTableView.cpp>
- }
|