1 // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
4 #include "GenericWidgetModel.h"
6 #include <Controls/DictionaryWidget.h>
8 #include <ProxyModels/MergingProxyModel.h>
9 #include <ProxyModels/ItemModelAttribute.h>
11 #include <CrySchematyc2/IFramework.h>
12 #include <CrySchematyc2/Script/IScriptGraph.h>
13 #include <CrySchematyc2/Script/IScriptRegistry.h>
18 namespace SchematycEd
{
20 //////////////////////////////////////////////////////////////////////////
21 CGenericWidgetDictionaryEntry::CGenericWidgetDictionaryEntry(CGenericWidgetDictionaryModel
& dictionaryModel
)
22 : m_node(Type_Undefined
)
23 , m_dictionaryModel(dictionaryModel
)
27 //////////////////////////////////////////////////////////////////////////
28 uint32
CGenericWidgetDictionaryEntry::GetType() const
33 //////////////////////////////////////////////////////////////////////////
34 int32
CGenericWidgetDictionaryEntry::GetNumChildEntries() const
36 return m_childs
.size();
39 //////////////////////////////////////////////////////////////////////////
40 const CAbstractDictionaryEntry
* CGenericWidgetDictionaryEntry::GetChildEntry(int32 index
) const
42 if ((index
>= 0) && (index
< m_childs
.size()))
43 return m_dictionaryModel
.GetEntryByGUID(m_childs
[index
]);
48 //////////////////////////////////////////////////////////////////////////
49 const CAbstractDictionaryEntry
* CGenericWidgetDictionaryEntry::GetParentEntry() const
51 return m_dictionaryModel
.GetEntryByGUID(m_parent
);
54 //////////////////////////////////////////////////////////////////////////
55 QString
CGenericWidgetDictionaryEntry::GetToolTip() const
60 //////////////////////////////////////////////////////////////////////////
61 QString
CGenericWidgetDictionaryEntry::GetName() const
66 //////////////////////////////////////////////////////////////////////////
67 QString
CGenericWidgetDictionaryEntry::GetFullName() const
72 //////////////////////////////////////////////////////////////////////////
73 SGUID
CGenericWidgetDictionaryEntry::GetTypeGUID()
78 //////////////////////////////////////////////////////////////////////////
79 QVariant
CGenericWidgetDictionaryEntry::GetColumnValue(int32 columnIndex
) const
83 case CGenericWidgetDictionaryModel::Column_Name
:
85 return QVariant::fromValue(m_name
);
87 case CGenericWidgetDictionaryModel::Column_Type
:
89 return QVariant::fromValue(m_type
);
100 //////////////////////////////////////////////////////////////////////////
101 void CGenericWidgetDictionaryModel::ClearScriptElementModel()
107 m_entryPool
.reserve(128);
110 //////////////////////////////////////////////////////////////////////////
111 CGenericWidgetDictionaryEntry
* CGenericWidgetDictionaryModel::BuildScriptElementEntry(const IScriptElement
& element
, const char* typeName
)
113 m_entryPool
.emplace_back(*this);
114 CGenericWidgetDictionaryEntry
& entry
= m_entryPool
.back();
116 entry
.m_name
= element
.GetName();
117 entry
.m_guid
= element
.GetGUID();
118 entry
.m_node
= CAbstractDictionaryEntry::Type_Entry
;
119 entry
.m_type
= typeName
;
121 m_entryDict
.insert(std::make_pair(entry
.m_guid
, &entry
));
125 void CGenericWidgetDictionaryModel::BuildScriptElementParent(const IScriptElement
& element
, CGenericWidgetDictionaryEntry
* childEntry
, const std::vector
<EScriptElementType
>& parentType
)
127 const IScriptElement
* parent
= element
.GetParent();
128 for (auto& type
: parentType
)
130 if (parent
&& (parent
->GetElementType() == type
))
132 CGenericWidgetDictionaryEntry
* parentEntry
= GetEntryByGUID(parent
->GetGUID());
136 parentEntry
->m_childs
.emplace_back(childEntry
->m_guid
);
137 parentEntry
->m_node
= CAbstractDictionaryEntry::Type_Folder
;
139 childEntry
->m_parent
= parent
->GetGUID();
144 m_entryGuid
.push_back(childEntry
->m_guid
);
148 //////////////////////////////////////////////////////////////////////////
149 int32
CGenericWidgetDictionaryModel::GetNumEntries() const
151 return m_entryGuid
.size();
154 //////////////////////////////////////////////////////////////////////////
155 const CAbstractDictionaryEntry
* CGenericWidgetDictionaryModel::GetEntry(int32 index
) const
157 if (index
< m_entryGuid
.size())
159 return GetEntryByGUID(m_entryGuid
[index
]);
165 //////////////////////////////////////////////////////////////////////////
166 int32
CGenericWidgetDictionaryModel::GetNumColumns() const
171 //////////////////////////////////////////////////////////////////////////
172 QString
CGenericWidgetDictionaryModel::GetColumnName(int32 index
) const
174 auto pAttribute
= CGenericWidgetDictionaryModel::GetColumnAttributeInternal(index
);
177 return QString(pAttribute
->GetName());
183 //////////////////////////////////////////////////////////////////////////
184 int32
CGenericWidgetDictionaryModel::GetDefaultFilterColumn() const
189 //////////////////////////////////////////////////////////////////////////
190 int32
CGenericWidgetDictionaryModel::GetDefaultSortColumn() const
195 //////////////////////////////////////////////////////////////////////////
196 const CItemModelAttribute
* CGenericWidgetDictionaryModel::GetColumnAttribute(int32 index
) const
198 return GetColumnAttributeInternal(index
);
201 //////////////////////////////////////////////////////////////////////////
202 CGenericWidgetDictionaryEntry
* CGenericWidgetDictionaryModel::GetEntryByGUID(const Schematyc2::SGUID
& guid
) const
204 auto it
= m_entryDict
.find(guid
);
205 if (it
!= m_entryDict
.end())
213 const CItemModelAttribute
* CGenericWidgetDictionaryModel::GetColumnAttributeInternal(int column
)
215 static CItemModelAttribute
Name("Name", eAttributeType_String
);
216 static CItemModelAttribute
Type("Type", eAttributeType_String
);
217 static CItemModelAttribute
None(" ", eAttributeType_String
);
221 case Column_Name
: return &Name
;
222 case Column_Type
: return &Type
;
228 } //namespace SchematycEd