AppFwk : Add multiselect field of AppEnum including highlight field

This commit is contained in:
Magne Sjaastad committed 2017-09-20 10:06:57 +02:00
1 parent f45d065ac2
commit 5ddb796059
1 file changed
+35 -1
@@ -225,6 +225,11 @@ public:
m_proxyEnumMember = T2; m_proxyEnumMember = T2;
m_testEnumField.capability<caf::PdmUiFieldHandle>()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); m_testEnumField.capability<caf::PdmUiFieldHandle>()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&m_multipleAppEnum, "MultipleAppEnumValue", "MultipleAppEnumValue", "", "", "");
m_multipleAppEnum.capability<caf::PdmUiFieldHandle>()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&m_highlightedEnum, "HighlightedEnum", "HighlightedEnum", "", "", "");
m_highlightedEnum.uiCapability()->setUiHidden(true);
} }
caf::PdmField<double> m_doubleField; caf::PdmField<double> m_doubleField;
@@ -239,6 +244,9 @@ public:
TestEnumType m_proxyEnumMember; TestEnumType m_proxyEnumMember;
// vector of app enum
caf::PdmField< std::vector< caf::AppEnum<TestEnumType> > > m_multipleAppEnum;
caf::PdmField< caf::AppEnum<TestEnumType> > m_highlightedEnum;
caf::PdmField<bool> m_toggleField; caf::PdmField<bool> m_toggleField;
virtual caf::PdmFieldHandle* objectToggleField() virtual caf::PdmFieldHandle* objectToggleField()
@@ -252,13 +260,16 @@ public:
{ {
std::cout << "Toggle Field changed" << std::endl; std::cout << "Toggle Field changed" << std::endl;
} }
else if (changedField == &m_highlightedEnum)
{
std::cout << "Highlight value " << m_highlightedEnum() << std::endl;
}
} }
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly)
{ {
QList<caf::PdmOptionItemInfo> options; QList<caf::PdmOptionItemInfo> options;
if (&m_ptrField == fieldNeedingOptions) if (&m_ptrField == fieldNeedingOptions)
{ {
caf::PdmFieldHandle* field; caf::PdmFieldHandle* field;
@@ -287,6 +298,13 @@ public:
} }
} }
} }
else if (&m_multipleAppEnum == fieldNeedingOptions)
{
for (size_t i = 0; i < caf::AppEnum<TestEnumType>::size(); ++i)
{
options.push_back(caf::PdmOptionItemInfo(caf::AppEnum<TestEnumType>::uiTextFromIndex(i), caf::AppEnum<TestEnumType>::fromIndex(i)));
}
}
if (useOptionsOnly) *useOptionsOnly = true; if (useOptionsOnly) *useOptionsOnly = true;
@@ -301,6 +319,22 @@ public:
return &m_textField; return &m_textField;
} }
protected:
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override
{
if (field == &m_multipleAppEnum)
{
caf::PdmUiTreeSelectionEditorAttribute* attr = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>(attribute);
if (attr)
{
attr->highLightField = m_highlightedEnum.uiCapability();
}
}
}
}; };
CAF_PDM_SOURCE_INIT(SmallDemoPdmObjectA, "SmallDemoPdmObjectA"); CAF_PDM_SOURCE_INIT(SmallDemoPdmObjectA, "SmallDemoPdmObjectA");