Пример #1
0
QDebug operator<<( QDebug d, const CollectionStatistics& s )
{
    return d << "CollectionStatistics:" << endl
            << "   count:" << s.count() << endl
            << "   unread count:" << s.unreadCount() << endl
            << "   size:" << s.size();
}
 void getCountRecursive( const QModelIndex &index, qint64 &totalSize ) const
 {
   Collection collection = qvariant_cast<Collection>( index.data( EntityTreeModel::CollectionRole ) );
   // Do not assert on invalid collections, since a collection may be deleted
   // in the meantime and deleted collections are invalid.
   if ( collection.isValid() ) {
     CollectionStatistics statistics = collection.statistics();
     totalSize += qMax( 0LL, statistics.size() );
     if ( index.model()->hasChildren( index ) ) {
       const int rowCount = index.model()->rowCount( index );
       for ( int row = 0; row < rowCount; row++ ) {
         static const int column = 0;
         getCountRecursive( index.model()->index( row, column, index ),  totalSize );
       }
     }
   }
 }
Пример #3
0
QVariant EntityTreeModel::data( const QModelIndex & index, int role ) const
{
  Q_D( const EntityTreeModel );
  if ( role == SessionRole ) {
    return QVariant::fromValue( qobject_cast<QObject *>( d->m_session ) );
  }

  // Ugly, but at least the API is clean.
  const HeaderGroup headerGroup = static_cast<HeaderGroup>( ( role / static_cast<int>( TerminalUserRole ) ) );

  role %= TerminalUserRole;
  if ( !index.isValid() ) {
    if ( ColumnCountRole != role ) {
      return QVariant();
    }

    return entityColumnCount( headerGroup );
  }

  if ( ColumnCountRole == role ) {
    return entityColumnCount( headerGroup );
  }

  const Node *node = reinterpret_cast<Node *>( index.internalPointer() );

  if ( ParentCollectionRole == role &&
       d->m_collectionFetchStrategy != FetchNoCollections ) {
    const Collection parentCollection = d->m_collections.value( node->parent );
    Q_ASSERT( parentCollection.isValid() );

    return QVariant::fromValue( parentCollection );
  }

  if ( Node::Collection == node->type ) {

    const Collection collection = d->m_collections.value( node->id );

    if ( !collection.isValid() ) {
      return QVariant();
    }

    switch ( role ) {
      case MimeTypeRole:
        return collection.mimeType();
        break;
      case RemoteIdRole:
        return collection.remoteId();
        break;
      case CollectionIdRole:
        return collection.id();
        break;
      case ItemIdRole:
        // QVariant().toInt() is 0, not -1, so we have to handle the ItemIdRole
        // and CollectionIdRole (below) specially
        return -1;
        break;
      case CollectionRole:
        return QVariant::fromValue( collection );
        break;
      case EntityUrlRole:
        return collection.url().url();
        break;
      case UnreadCountRole:
      {
        CollectionStatistics statistics = collection.statistics();
        return statistics.unreadCount();
      }
      case FetchStateRole:
      {
        return d->m_pendingCollectionRetrieveJobs.contains( collection.id() ) ? FetchingState : IdleState;
      }
      case CollectionSyncProgressRole:
      {
        return d->m_collectionSyncProgress.value( collection.id() );
      }
      case IsPopulatedRole:
      {
        return d->m_populatedCols.contains( collection.id() );
      }
      case Qt::BackgroundRole:
      {
        if ( collection.hasAttribute<EntityDisplayAttribute>() ) {
          EntityDisplayAttribute *eda = collection.attribute<EntityDisplayAttribute>();
          QColor color = eda->backgroundColor();
          if ( color.isValid() ) {
            return color;
          }
        }
        // fall through.
      }
      default:
        return entityData( collection, index.column(), role );
        break;
    }

  } else if ( Node::Item == node->type ) {
    const Item item = d->m_items.value( node->id );
    if ( !item.isValid() ) {
      return QVariant();
    }

    switch ( role ) {
      case ParentCollectionRole:
        return QVariant::fromValue( item.parentCollection() );
      case MimeTypeRole:
        return item.mimeType();
        break;
      case RemoteIdRole:
        return item.remoteId();
        break;
      case ItemRole:
        return QVariant::fromValue( item );
        break;
      case ItemIdRole:
        return item.id();
        break;
      case CollectionIdRole:
        return -1;
        break;
      case LoadedPartsRole:
        return QVariant::fromValue( item.loadedPayloadParts() );
        break;
      case AvailablePartsRole:
        return QVariant::fromValue( item.availablePayloadParts() );
        break;
      case EntityUrlRole:
        return item.url( Akonadi::Item::UrlWithMimeType ).url();
        break;
      case Qt::BackgroundRole:
      {
        if ( item.hasAttribute<EntityDisplayAttribute>() ) {
          EntityDisplayAttribute *eda = item.attribute<EntityDisplayAttribute>();
          const QColor color = eda->backgroundColor();
          if ( color.isValid() ) {
            return color;
          }
        }
        // fall through.
      }
      default:
        return entityData( item, index.column(), role );
        break;
    }
  }

  return QVariant();
}