/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #include "precompiled.h" #include "LibraryDataModel.h" #include #include #include #include #include #include namespace ScriptCanvasEditor { namespace Model { LibraryData::LibraryData(QObject* parent /*= nullptr*/) : QAbstractTableModel(parent) { Add("All", AZ::Uuid::CreateNull()); AZ::SerializeContext* serializeContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); serializeContext->EnumerateDerived( [this] (const AZ::SerializeContext::ClassData* classData, const AZ::Uuid& classUuid) -> bool { Add(classData->m_name, classData->m_typeId); return true; }); } int LibraryData::rowCount(const QModelIndex &parent /*= QModelIndex()*/) const { return m_data.size(); } int LibraryData::columnCount(const QModelIndex &parent /*= QModelIndex()*/) const { return ColumnIndex::Count; } QVariant LibraryData::data(const QModelIndex &index, int role /*= Qt::DisplayRole*/) const { switch (role) { case DataSetRole: { if (index.column() == ColumnIndex::Name) { const Data* data = &m_data[index.row()]; return QVariant::fromValue(reinterpret_cast(const_cast(data))); } } break; case Qt::DisplayRole: { if (index.column() == ColumnIndex::Name) { return m_data[index.row()].m_name; } } break; case Qt::DecorationRole: { AZ::SerializeContext* serializeContext = nullptr; EBUS_EVENT_RESULT(serializeContext, AZ::ComponentApplicationBus, GetSerializeContext); const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(m_data[index.row()].m_uuid); if (classData && classData->m_editData) { const auto& editorElementData = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData); if (editorElementData) { if (auto iconAttribute = editorElementData->FindAttribute(AZ::Edit::Attributes::Icon)) { if (auto iconAttributeData = azdynamic_cast*>(iconAttribute)) { AZStd::string iconAttributeValue = iconAttributeData->Get(nullptr); if (!iconAttributeValue.empty()) { return QVariant(QIcon(QString(iconAttributeValue.c_str()))); } } } } } else { QString defaultIcon = QStringLiteral("Editor/Icons/ScriptCanvas/Libraries/All.png"); return QVariant(QIcon(defaultIcon)); } return QVariant(); } break; default: break; } return QVariant(); } Qt::ItemFlags LibraryData::flags(const QModelIndex &index) const { return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled; } void LibraryData::Add(const char* name, const AZ::Uuid& uuid) { m_data.push_back({ QString(name), uuid }); } } }