QModelIndex AssetTemplateModel::findElement( const Element & element, bool build ) { if( !element.isValid() ) return QModelIndex(); int cnt = rowCount(); for( int i=0; i<cnt; i++ ) { QModelIndex idx = index(i,0); if( idx.isValid() && getElement(idx).key() == element.key() ) return idx; } Element p( element.parent() ); QModelIndex par; if( p.isRecord() ) par = findElement(p); if( !par.isValid() ) return par; if( !build && !childrenLoaded(par) ) return QModelIndex(); for( int i = rowCount(par)-1; i>=0; i-- ) { QModelIndex c = par.child( i, 0 ); if( getElement(c).key() == element.key() ) return c; } return QModelIndex(); }
void MetadataItem::ensureChildrenLoaded() { if (!childrenLoaded()) loadChildren(); }
void DbTreeViewPanel::selectLinkedObjects() { QList<DbTreeModel::DbTreeNodeType> fullyCheckedObjectTypes; QList<DbTreeModel::DbTreeNodeType> uncheckedObjectTypes; DbTreeModel *model=dbTree->getModel(); int topLevelRowCount = model->rowCount(QModelIndex()); availableObjectTypes.clear(); for(int i=0; i<topLevelRowCount; ++i){ DbTreeItem *item = static_cast<DbTreeItem*>(model->index(i, 0, QModelIndex()).internalPointer()); availableObjectTypes.append(item->getItemType()); Qt::CheckState checkState = item->checkState(); if(checkState==Qt::Checked){ fullyCheckedObjectTypes.append(item->getItemType()); }else if(checkState==Qt::Unchecked){ uncheckedObjectTypes.append(item->getItemType()); } } if(fullyCheckedObjectTypes.size()==topLevelRowCount || uncheckedObjectTypes.size()==topLevelRowCount){ QString title = fullyCheckedObjectTypes.size()==topLevelRowCount ? tr("All items selected") : tr("Nothing selected"); QString message = fullyCheckedObjectTypes.size()==topLevelRowCount ? tr("All items are already selected.") : tr("Please, select at least one item and try again."); QMessageBox::information(this->window(), title, message); return; } if(selectLinkedObjectsDialog==0){ selectLinkedObjectsDialog = new SelectLinkedObjectsDialog(this); selectLinkedObjectsDialog->setAvailableObjectTypes(availableObjectTypes); } if(!selectLinkedObjectsDialog->exec()){ return; } selectedObjectTypes = selectLinkedObjectsDialog->getSelectedItemTypes(); for(int i=0; i<fullyCheckedObjectTypes.size(); ++i){ selectedObjectTypes.removeOne(fullyCheckedObjectTypes.at(i)); } if(selectedObjectTypes.isEmpty()){ QMessageBox::information(this->window(), tr("Nothing to find"), tr("Nothing to search for. Please, select more object types and try again.")); return; } findOnlyTables = selectedObjectTypes.size()==1 && selectedObjectTypes.at(0)==DbTreeModel::Tables && !uncheckedObjectTypes.contains(DbTreeModel::Tables) && uncheckedObjectTypes.size()==topLevelRowCount-1; setInProgress(true); DbTreeModelNodeExpander *expander = new DbTreeModelNodeExpander(model); connect(expander, SIGNAL(loadComplete()), this, SLOT(childrenLoaded())); connect(expander, SIGNAL(loadError(OciException)), this, SLOT(childrenLoadError(OciException))); expander->loadChildren(QModelIndex(), availableObjectTypes); }