bool ModItemsTree::hasChildren ( const QModelIndex & parent ) const { bool hasChildren; bool triedToFind; if(!_enabled) return false; ModItem *parentElement; if (parent.column() > 0) return false; if (!parent.isValid()) parentElement = rootElement(); else parentElement = static_cast<ModItem*>(parent.internalPointer()); if(parentElement->childrenReaden()) { if(_showComponents) return (parentElement->childCount()>0); else return (parentElement->childCount()-parentElement->compChildCount()>0); } else { triedToFind = true; hasChildren = false; QStringList children = _moomc->getClassNames(parentElement->name()); children.removeAll(QString()); if(!children.isEmpty()) hasChildren = true; else if(parentElement->getClassRestr()==Modelica::MODEL) { if(!_showComponents) { hasChildren = false; triedToFind = false; } else { // look if has component children QStringList compNames; QStringList compClasses; _moomc->getContainedComponents(parentElement->getModClassName(),compNames,compClasses,true); hasChildren = (!compNames.isEmpty()); } } if(triedToFind && !hasChildren) parentElement->setChildrenReaden(true); // avoid re-reading return hasChildren; } }
QModelIndex ModItemsTree::index(int row, int column, const QModelIndex &parent) const { if(!_enabled) return QModelIndex(); if(!hasIndex(row,column,parent)) return QModelIndex(); ModItem *parentComponent; if (!parent.isValid()) parentComponent = _rootElement; else parentComponent = static_cast<ModItem*>(parent.internalPointer()); // looking in children if(row>parentComponent->childCount()) return QModelIndex(); ModItem *childElement = parentComponent->child(row); if (!childElement) return QModelIndex(); if(!_showComponents&&(childElement->getClassRestr()==Modelica::COMPONENT)) return QModelIndex(); else return createIndex(row, column, childElement); }
int ModItemsTree::rowCount(const QModelIndex &parent) const { if(!_enabled) return 0; ModItem *parentElement; if (parent.column() > 0) return 0; if (!parent.isValid()) parentElement = _rootElement; else parentElement = static_cast<ModItem*>(parent.internalPointer()); int count = parentElement->childCount(); if(!_showComponents) count-=parentElement->compChildCount(); return count; }