コード例 #1
0
ファイル: JobStatusView.cpp プロジェクト: DaneTheory/tomahawk
void
JobStatusView::refreshDelegates()
{
    int count = m_model->rowCount();
    for ( int i = 0; i < count; i++ )
    {
        QModelIndex index = m_model->index( i, 0 );
        QVariant itemVar = index.data( JobStatusModel::JobDataRole );
        if ( !itemVar.canConvert< JobStatusItem* >() || !itemVar.value< JobStatusItem* >() )
        {
            tLog() << Q_FUNC_INFO << "unable to fetch JobStatusItem* at row" << i;
            continue;
        }
        JobStatusItem* item = itemVar.value< JobStatusItem* >();
        if ( item->hasCustomDelegate() )
            m_view->setItemDelegateForRow( i, item->customDelegate() );
        else
            m_view->setItemDelegateForRow( i, m_view->itemDelegate() );
    }

    checkCount();
}
コード例 #2
0
ファイル: JobStatusModel.cpp プロジェクト: mguentner/tomahawk
void
JobStatusModel::itemFinished()
{
    JobStatusItem* item = qobject_cast< JobStatusItem* >( sender() );
    Q_ASSERT( item );

//     tDebug() << "Got item finished:" << item->type() << item->mainText() << item;
    if ( !m_items.contains( item ) && !m_collapseCount.contains( item->type() ) )
        return;

//     foreach( JobStatusItem* item, m_items )
//     {
//         qDebug() << "ITEM #:" << item;
//     }
//     foreach( const QString& str, m_collapseCount.keys() )
//     {
//         tDebug() << "\t" << str;
//         foreach( JobStatusItem* chain, m_collapseCount[ str ] )
//             qDebug() << "\t\t" << chain;
//     }
    if ( m_collapseCount.contains( item->type() ) )
    {
        const int indexOf = m_items.indexOf( m_collapseCount[ item->type() ].first() );
//         tDebug() << "index in main list of collapsed irst item:" << indexOf;
        if ( m_collapseCount[ item->type() ].first() == item &&
             m_items.contains( m_collapseCount[ item->type() ].first() ) && m_collapseCount[ item->type() ].size() > 1 )
        {
            // the placeholder we use that links m_items and m_collapsecount is done, so choose another one
            m_items.replace( m_items.indexOf( m_collapseCount[ item->type() ].first() ), m_collapseCount[ item->type() ][ 1 ] );
//             qDebug() << "Replaced" << m_collapseCount[ item->type() ].first() << "with:" << m_collapseCount[ item->type() ][ 1 ] << m_items;
        }
        m_collapseCount[ item->type() ].removeAll( item );
//         tDebug() << "New collapse count list:" << m_collapseCount[ item->type() ];
        if ( m_collapseCount[ item->type() ].isEmpty() )
            m_collapseCount.remove( item->type() );
        else
        {
            // One less to count, but item is still there
            const QModelIndex idx = index( indexOf, 0, QModelIndex() );
            emit dataChanged( idx, idx );
            return;
        }
    }

    // Remove row completely
    const int idx = m_items.indexOf( item );
//     tDebug() << "Got index of item:" << idx;
    Q_ASSERT( idx >= 0 );

    beginRemoveRows( QModelIndex(), idx, idx );
    m_items.removeAll( item );
    endRemoveRows();

    if ( item->customDelegate() )
        emit customDelegateJobRemoved( idx );

    if ( item->concurrentJobLimit() > 0 )
    {
        int currentJobs = m_jobTypeCount[ item->type() ];
        currentJobs--;
        m_jobTypeCount[ item->type() ] = currentJobs;

        if ( !m_jobQueue[ item->type() ].isEmpty() )
        {
            JobStatusItem* item = m_jobQueue[ item->type() ].dequeue();
            QMetaObject::invokeMethod( this, "addJob", Qt::QueuedConnection, Q_ARG( JobStatusItem*, item ) );
        }