Improved tree ordering system

This commit is contained in:
Magne Sjaastad
2013-09-25 15:06:44 +02:00
parent f72c382a8d
commit ac02a97c39
3 changed files with 48 additions and 6 deletions

View File

@@ -398,9 +398,25 @@ PdmUiTreeOrdering* PdmObject::uiTreeOrdering(QString uiConfigName /*= ""*/)
for (size_t fIdx = 0; fIdx < m_fields.size(); ++fIdx)
{
if ( (m_fields[fIdx]->hasChildObjects()) && !uiTreeOrdering->containsField(m_fields[fIdx]))
if (m_fields[fIdx]->hasChildObjects() && !uiTreeOrdering->containsField(m_fields[fIdx]))
{
uiTreeOrdering->add( m_fields[fIdx]);
if (m_fields[fIdx]->isUiHidden() && !m_fields[fIdx]->isUiChildrenHidden())
{
std::vector<PdmObject*> children;
m_fields[fIdx]->childObjects(&children);
for (size_t cIdx = 0; cIdx < children.size(); cIdx++)
{
if (!uiTreeOrdering->containsObject(children[cIdx]))
{
uiTreeOrdering->add(children[cIdx]);
}
}
}
else if ( !m_fields[fIdx]->isUiHidden())
{
uiTreeOrdering->add(m_fields[fIdx]);
}
}
}
}
@@ -422,7 +438,7 @@ void PdmObject::expandUiTree(PdmUiTreeOrdering* root, QString uiConfigName /*= "
if (!root->isSubTreeDefined() && root->dataObject())
{
if (root->m_field)
if (root->m_field && !root->m_field->isUiChildrenHidden(uiConfigName))
{
std::vector<PdmObject*> fieldsChildObjects;
root->m_field->childObjects(&fieldsChildObjects);

View File

@@ -72,14 +72,14 @@ namespace caf
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmUiTreeOrdering::containsField(PdmFieldHandle* field)
bool PdmUiTreeOrdering::containsField(const PdmFieldHandle* field) const
{
assert (field);
for (int cIdx = 0; cIdx < this->childCount(); ++cIdx)
{
PdmUiTreeOrdering* child = dynamic_cast<PdmUiTreeOrdering*>(this->child(cIdx));
if (!(child->m_field == field))
if (child->m_field == field)
{
return true;
}
@@ -88,6 +88,26 @@ namespace caf
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmUiTreeOrdering::containsObject(const PdmObject* object) const
{
assert (object);
for (int cIdx = 0; cIdx < this->childCount(); ++cIdx)
{
PdmUiTreeOrdering* child = dynamic_cast<PdmUiTreeOrdering*>(this->child(cIdx));
if (child->dataObject() == object)
{
return true;
}
}
return false;
}
//--------------------------------------------------------------------------------------------------
/// Creates an new PdmUiTreeOrdering item, and adds it to parent. If position is -1, it is added
/// at the end of parents existing child list.
@@ -101,5 +121,7 @@ namespace caf
}
} //End of namespace caf

View File

@@ -57,6 +57,7 @@ class PdmFieldHandle;
class PdmUiTreeOrdering : public UiTreeItem< PdmPointer<PdmObject> >
{
public:
PdmUiTreeOrdering(PdmUiTreeOrdering* parent = NULL, int position = -1, PdmObject* dataObject = NULL);
void add(PdmFieldHandle * field);
@@ -68,11 +69,14 @@ class PdmUiTreeOrdering : public UiTreeItem< PdmPointer<PdmObject> >
/// To stop the tree generation at this level, setSubTreeDefined to true
void setSubTreeDefined(bool isSubTreeDefined ) { m_isSubTreeDefined = isSubTreeDefined; }
PdmFieldHandle* field() const { return m_field; }
private:
friend class PdmObject;
bool forgetRemainingFields() const { return m_forgetRemainingFields; }
bool isSubTreeDefined() const { return m_isSubTreeDefined; }
bool containsField(PdmFieldHandle* field);
bool containsField(const PdmFieldHandle* field) const;
bool containsObject(const PdmObject* object) const;
private:
PdmFieldHandle* m_field;