Exemple #1
0
void ProjectModel::finishMetadataUpdate(ThreadWeaver::Job * _job)
{
    UpdateStatsJob* job = static_cast<UpdateStatsJob *>(_job);

    if (job->m_status == -2)
    {
        delete job;
        return;
    }

    if ((m_dirsWaitingForMetadata.contains(m_activeNode)) && (job->m_status == 0))
    {
        m_dirsWaitingForMetadata.remove(m_activeNode);
        //store the results

        setMetadataForDir(m_activeNode, m_activeJob->m_info);

        QModelIndex item = indexForNode(m_activeNode);

        //scan dubdirs - initiate data loading into the model.
        for (int row=0; row < m_activeNode->rows.count(); row++)
        {
            QModelIndex child = index(row, 0, item);

            if (canFetchMore(child))
                fetchMore(child);
            //QCoreApplication::processEvents();
        }
    }

    delete m_activeJob;

    startNewMetadataJob();
}
/*!
    Resets the model and sets the data provider to be the given \a
    query. Note that the query must be active and must not be
    isForwardOnly().

    lastError() can be used to retrieve verbose information if there
    was an error setting the query.

    \sa query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly(), lastError()
*/
void QSqlQueryModel::setQuery(const QSqlQuery &query)
{
    Q_D(QSqlQueryModel);
    QSqlRecord newRec = query.record();
    bool columnsChanged = (newRec != d->rec);
    bool hasQuerySize = query.driver()->hasFeature(QSqlDriver::QuerySize);
    bool hasNewData = (newRec != QSqlRecord()) || !query.lastError().isValid();

    if (d->colOffsets.size() != newRec.count() || columnsChanged)
        d->initColOffsets(newRec.count());

    bool mustClearModel = d->bottom.isValid();
    if (mustClearModel) {
        d->atEnd = true;
        beginRemoveRows(QModelIndex(), 0, qMax(d->bottom.row(), 0));
        d->bottom = QModelIndex();
    }

    d->error = QSqlError();
    d->query = query;
    d->rec = newRec;

    if (mustClearModel)
        endRemoveRows();

    d->atEnd = false;

    if (columnsChanged && hasNewData)
        reset();

    if (!query.isActive() || query.isForwardOnly()) {
        d->atEnd = true;
        d->bottom = QModelIndex();
        if (query.isForwardOnly())
            d->error = QSqlError(QLatin1String("Forward-only queries "
                                               "cannot be used in a data model"),
                                 QString(), QSqlError::ConnectionError);
        else
            d->error = query.lastError();
        return;
    }
    QModelIndex newBottom;
    if (hasQuerySize && d->query.size() > 0) {
        newBottom = createIndex(d->query.size() - 1, d->rec.count() - 1);
        beginInsertRows(QModelIndex(), 0, qMax(0, newBottom.row()));
        d->bottom = createIndex(d->query.size() - 1, columnsChanged ? 0 : d->rec.count() - 1);
        d->atEnd = true;
        endInsertRows();
    } else {
        newBottom = createIndex(-1, d->rec.count() - 1);
    }
    d->bottom = newBottom;

    queryChange();

    // fetchMore does the rowsInserted stuff for incremental models
    fetchMore();
}
void DiscoItemsModel::appendTopLevelItem(const Jid &AItemJid, const QString &AItemNode)
{
	if (findIndex(AItemJid,AItemNode,FRootIndex,false).isEmpty())
	{
		DiscoItemIndex *index = new DiscoItemIndex;
		index->itemJid = AItemJid;
		index->itemNode = AItemNode;
		appendChildren(FRootIndex, QList<DiscoItemIndex*>()<<index);
		fetchMore(modelIndex(index,0));
	}
}
Exemple #4
0
void toResultModel::slotFetchMore(toEventQuery*)
{
    if (ReadAll)
    {
        MaxRows = -1;
        slotReadData();
    }
    else if (Rows.size() < MaxRows)
    {
        QModelIndex ind;
        fetchMore(ind);
    }
}
Exemple #5
0
bool InventoryItemModel::Open(const QModelIndex &index)
{
    AbstractInventoryItem *item = GetItem(index);

    if (item->GetItemType() == AbstractInventoryItem::Type_Folder)
    {
        fetchMore(index);
        return canFetchMore(index);
    }

    if (item->GetItemType() == AbstractInventoryItem::Type_Asset)
        return dataModel_->OpenItem(item);

    return false;
}
bool FlatModel::hasChildren(const QModelIndex &parent) const
{
    if (!parent.isValid())
        return true;

    FolderNode *folderNode = nodeForIndex(parent)->asFolderNode();
    if (!folderNode)
        return false;

    QHash<FolderNode*, QList<Node*> >::const_iterator it = m_childNodes.constFind(folderNode);
    if (it == m_childNodes.constEnd()) {
        fetchMore(folderNode);
        it = m_childNodes.constFind(folderNode);
    }
    return !it.value().isEmpty();
}
Exemple #7
0
bool
DatabaseModel::setData(const QModelIndex& index, const QVariant& value, int /*role*/)
{
	// Only notes can be updated manually
	if (headerData(index.column(), Qt::Horizontal) != "notes")
		return false;

	// TODO: Grab indices in a more robust manner
	QModelIndex repoIndex = this->index(index.row(), 1);
	QModelIndex fileIndex = this->index(index.row(), 2);
	QModelIndex msgIndex = this->index(index.row(), 4);

	// Update error notes. Errors are considered identical if the same message
	// originates from the same file
	QString updateQuery =
			"UPDATE Errors SET notes=? "
			"WHERE file="
			"    (SELECT id FROM Files WHERE file=? AND repo="
			"        (SELECT id FROM Repos WHERE repo=?)"
			"    ) "
			"AND message="
			"    (SELECT id FROM Messages WHERE message=?)";

	QSqlQuery q;
	q.prepare(updateQuery);
	q.addBindValue(value);
	q.addBindValue(data(fileIndex));
	q.addBindValue(data(repoIndex));
	q.addBindValue(data(msgIndex));
	bool ok = q.exec();

	// Refresh. Block modelAboutToBeReset()/modelReset() signals
	// to maintain the views' sort order and scroll position
	if (ok)
	{
		q = this->query();
		q.exec();

		this->blockSignals(true);
		this->setQuery(q);
		while (canFetchMore())
			fetchMore();
		this->blockSignals(false);
	}

	return ok;
}
void checkpivotmodel::buildQuery()
{

    QString query,from,where;
    query="select df.runid,df.value";
    from=" from detectorFlag as df";
    where=" where df.tagid=128";
    int colid=2;

    for (unsigned int i=0; i<infocolumns.size(); i++)
    {
        query+=QString(",rd%1.value").arg(i);
        from+=QString(" join rundata as rd%1 on df.runid=rd%1.runid ").arg(i);
        where+=infocolumns[i].clause(QString("rd%1").arg(i));
    }



    for (unsigned int i=0; i<detectorcolumns.size(); i++)
    {
        query+=QString(",df%1.value").arg(i);
        from+=QString(" join detectorFlag as df%1 on df.runid=df%1.runid ").arg(i);
        where+=detectorcolumns[i].clause(QString("df%1").arg(i));
    }


    QString q=query+from+where+addFilter+" group by df.runid order by df.runid";
    setQuery(q);
    while (canFetchMore()) fetchMore();
    setHeaderData(0, Qt::Horizontal, tr("Run ID"));
    setHeaderData(1, Qt::Horizontal, tr("Type"));
    for (unsigned int i=0; i<infocolumns.size(); i++)
    {

        setHeaderData(colid,Qt::Horizontal,infocolumns[i].name );
        colid++;
    }
    firstdetectorcolumn=colid;

    for (unsigned int i=0; i<detectorcolumns.size(); i++)
    {
        setHeaderData(colid,Qt::Horizontal,detectorcolumns[i].name);
        colid++;
    }

}
/*!
    \internal
*/
void QDeclarativePlaceContentModel::setPlace(QDeclarativePlace *place)
{
    if (m_place != place) {
        beginResetModel();

        int initialCount = m_contentCount;
        clearData();
        m_place = place;
        endResetModel();

        emit placeChanged();
        if (initialCount != -1)
            emit totalCountChanged();

        fetchMore(QModelIndex());
    }
}
Exemple #10
0
void ImageListModel::preloadAllImages()
{
    QModelIndex parentDummy;
    while (canFetchMore(parentDummy))
        fetchMore(parentDummy);
}
void PgnGameEntryModel::onResultsReady()
{
    if (m_entryCount < 1024)
        fetchMore(QModelIndex());
}
Exemple #12
0
bool InventoryItemModel::InsertExistingItem(int position, AbstractInventoryItem *new_parent, AbstractInventoryItem *item,
    const QModelIndex &parent_index)
{
    if (new_parent == item->GetParent())
        return false;

    InventoryFolder *newParentFolder = dynamic_cast<InventoryFolder *>(new_parent);
    if (!newParentFolder)
        return false;

    if (parent_index.isValid())
        beginInsertRows(parent_index, parent_index.row(), parent_index.row());

    if (item->GetItemType() == AbstractInventoryItem::Type_Folder)
    {
        dataModel_->GetOrCreateNewFolder(item->GetID(), *newParentFolder, item->GetName(), false);

        InventoryFolder *newFolder = static_cast<InventoryFolder *>(dataModel_->GetOrCreateNewFolder(
            item->GetID(), *newParentFolder, item->GetName(), false));
        //newFolder->SetDirty(true);

        // When moving folders with descendents, we don't need to notify server about every descendent,
        // just the root item we're moving i.e. when the current parent is different from the new parent.
        InventoryFolder *currentParent = static_cast<InventoryFolder *>(item->GetParent());
        if (currentParent != newParentFolder)
            dataModel_->NotifyServerAboutItemMove(newFolder);

        /*
        if (newFolder->HasChildren())
        {
            AbstractInventoryItem childItem = newFolder->Child(0);
            InsertExistingItem(0, newFolder, item);
        }
        */
    }

    if (item->GetItemType()== AbstractInventoryItem::Type_Asset)
    {
        InventoryAsset *oldAsset= static_cast<InventoryAsset *>(item);
        if (oldAsset->IsLibraryItem())
        {
            // Library asset can only be copied, moving not possible.
            // Server is authorative for copy operation so we don't create the new asset right here.
            // If the copy as legal, server sends us packet and we create the asset after that.
            InventoryAsset newTempAsset(oldAsset->GetID(), oldAsset->GetAssetReference(), oldAsset->GetName(),
                newParentFolder);

            dataModel_->NotifyServerAboutItemCopy(&newTempAsset);
        }
        else
        {
            InventoryAsset *newAsset = static_cast<InventoryAsset *>(dataModel_->GetOrCreateNewAsset(
                oldAsset->GetID(), oldAsset->GetAssetReference(), *newParentFolder, oldAsset->GetName()));
            newAsset->SetDescription(oldAsset->GetDescription());
            newAsset->SetInventoryType(oldAsset->GetInventoryType());
            newAsset->SetAssetType(oldAsset->GetAssetType());
            newAsset->SetCreatorId(oldAsset->GetCreatorId());
            newAsset->SetOwnerId(oldAsset->GetOwnerId());
            newAsset->SetGroupId(oldAsset->GetGroupId());
            newAsset->SetCreationTime(oldAsset->GetCreationTime());

            // When moving folders with descendents, we don't need to notify server about every descendent,
            // just the root item we're moving i.e. when the current parent is different from the new parent.
            InventoryFolder *currentParent = static_cast<InventoryFolder *>(item->GetParent());
            if (currentParent != newParentFolder)
                dataModel_->NotifyServerAboutItemMove(newAsset);
        }
    }

    if (parent_index.isValid())
    {
        endInsertRows();
        fetchMore(parent_index);
    }

    return true;
}
Exemple #13
0
void DhQDirModel::DvhfetchMore(const QModelIndex& x1) {
  return fetchMore(x1);
}
/*!
    \internal
*/
void QDeclarativePlaceContentModel::componentComplete()
{
    m_complete = true;
    fetchMore(QModelIndex());
}
void DhQAbstractTableModel::DvhfetchMore(const QModelIndex& x1) {
  return fetchMore(x1);
}