[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim/work/akonadi-ports] /: Fixes for EntityTreeModel-based feed
From: Frank Osterfeld <frank.osterfeld () kdab ! com>
Date: 2011-09-16 22:40:55
Message-ID: 20110916224055.532D0A607A () git ! kde ! org
[Download RAW message or body]
Git commit 085e518b557468c20a4e33c7f6508c5022f433fa by Frank Osterfeld.
Committed on 17/09/2011 at 00:39.
Pushed by osterfeld into branch 'work/akonadi-ports'.
Fixes for EntityTreeModel-based feed and item views
M +32 -31 akregator/src/articlelistview.cpp
M +2 -1 akregator/src/articlelistview.h
M +3 -0 akregator/src/mainwidget.cpp
M +46 -41 akregator/src/selectioncontroller.cpp
M +0 -1 akregator/src/selectioncontroller.h
M +38 -25 krss/krss/feeditemmodel.cpp
M +2 -2 krss/krss/feeditemmodel.h
M +5 -0 krss/krss/item.cpp
M +5 -0 krss/krss/item.h
M +2 -2 krss/krss/ui/feedlistdelegate.cpp
M +2 -2 krss/krss/ui/feedlistview.cpp
M +3 -1 krss/krss/ui/feedlistview.h
http://commits.kde.org/kdepim/085e518b557468c20a4e33c7f6508c5022f433fa
diff --git a/akregator/src/articlelistview.cpp b/akregator/src/articlelistview.cpp
index e6d85f6..3de97a0 100644
--- a/akregator/src/articlelistview.cpp
+++ b/akregator/src/articlelistview.cpp
@@ -28,7 +28,7 @@
#include <utils/filtercolumnsproxymodel.h>
-#include <krss/itemmodel.h>
+#include <krss/feeditemmodel.h>
#include <KIcon>
#include <KLocale>
@@ -49,7 +49,7 @@
using namespace boost;
using namespace Akregator;
-using KRss::ItemModel;
+using KRss::FeedItemModel;
FilterDeletedProxyModel::FilterDeletedProxyModel( QObject* parent ) : \
QSortFilterProxyModel( parent ) {
@@ -58,7 +58,7 @@ FilterDeletedProxyModel::FilterDeletedProxyModel( QObject* parent ) \
: QSortFilte
bool FilterDeletedProxyModel::filterAcceptsRow( int source_row, const QModelIndex& \
source_parent ) const {
- return !sourceModel()->index( source_row, 0, source_parent ).data( \
ItemModel::IsDeletedRole ).toBool(); + return !sourceModel()->index( source_row, \
0, source_parent ).data( FeedItemModel::IsDeletedRole ).toBool(); }
SortColorizeProxyModel::SortColorizeProxyModel( QObject* parent ) : \
QSortFilterProxyModel( parent ), m_keepFlagIcon( KIcon( "mail-mark-important" ) ) @@ \
-67,10 +67,10 @@ SortColorizeProxyModel::SortColorizeProxyModel( QObject* parent ) : \
QSortFilterP
bool SortColorizeProxyModel::filterAcceptsRow ( int source_row, const QModelIndex& \
source_parent ) const {
+#ifdef KRSS_PORT_DISABLED
if ( source_parent.isValid() )
return false;
-#ifdef KRSS_PORT_DISABLED
for ( uint i = 0; i < m_matchers.size(); ++i )
{
if ( !static_cast<ItemModel*>( sourceModel() )->rowMatches( source_row, \
m_matchers[i] ) ) @@ -99,10 +99,7 @@ QVariant SortColorizeProxyModel::data( const \
QModelIndex& idx, int role ) const {
case Qt::ForegroundRole:
{
- if ( sourceIdx.data( ItemModel::IsNewRole ).toBool() )
- return Settings::useCustomColors() ?
- Settings::colorNewArticles() : Qt::red;
- if ( sourceIdx.data( ItemModel::IsUnreadRole ).toBool() )
+ if ( sourceIdx.data( FeedItemModel::IsUnreadRole ).toBool() )
return Settings::useCustomColors() ?
Settings::colorUnreadArticles() : Qt::blue;
@@ -112,9 +109,9 @@ QVariant SortColorizeProxyModel::data( const QModelIndex& idx, \
int role ) const break;
case Qt::DecorationRole:
{
- if ( sourceIdx.column() == ItemModel::ItemTitleColumn )
+ if ( sourceIdx.column() == FeedItemModel::ItemTitleColumn )
{
- return sourceIdx.data( ItemModel::IsImportantRole ).toBool() ? \
m_keepFlagIcon : QVariant(); + return sourceIdx.data( \
FeedItemModel::IsImportantRole ).toBool() ? m_keepFlagIcon : QVariant(); }
}
break;
@@ -122,42 +119,46 @@ QVariant SortColorizeProxyModel::data( const QModelIndex& idx, \
int role ) const return sourceIdx.data( role );
}
-namespace {
+static bool isRead( const QModelIndex& idx )
+{
- static bool isRead( const QModelIndex& idx )
- {
- if ( !idx.isValid() )
- return false;
- return idx.data( ItemModel::IsReadRole ).toBool();
- }
+ return idx.isValid()
+ ? idx.data( FeedItemModel::IsReadRole ).toBool()
+ : false;
}
void ArticleListView::setItemModel( QAbstractItemModel* model )
{
+ setModel( model );
+#if 0
if ( !model ) {
setModel( model );
return;
}
+ delete m_proxy;
m_proxy = new SortColorizeProxyModel( model );
m_proxy->setSourceModel( model );
- m_proxy->setSortRole( ItemModel::SortRole );
+ m_proxy->setSortRole( FeedItemModel::SortRole );
m_proxy->setFilters( m_matchers );
+#if 0
FilterDeletedProxyModel* const proxy2 = new FilterDeletedProxyModel( model );
- proxy2->setSortRole( ItemModel::SortRole );
+ proxy2->setSortRole( FeedItemModel::SortRole );
proxy2->setSourceModel( m_proxy );
+#endif
FilterColumnsProxyModel* const columnsProxy = new FilterColumnsProxyModel( model \
);
- columnsProxy->setSortRole( ItemModel::SortRole );
- columnsProxy->setSourceModel( proxy2 );
+ columnsProxy->setSortRole( FeedItemModel::SortRole );
+ columnsProxy->setSourceModel( m_proxy );
- columnsProxy->setColumnEnabled( ItemModel::ItemTitleColumn );
- columnsProxy->setColumnEnabled( ItemModel::FeedTitleColumn );
- columnsProxy->setColumnEnabled( ItemModel::DateColumn );
- columnsProxy->setColumnEnabled( ItemModel::AuthorsColumn );
+ columnsProxy->setColumnEnabled( FeedItemModel::ItemTitleColumn );
+ columnsProxy->setColumnEnabled( FeedItemModel::FeedTitleColumn );
+ columnsProxy->setColumnEnabled( FeedItemModel::DateColumn );
+ columnsProxy->setColumnEnabled( FeedItemModel::AuthorsColumn );
setModel( columnsProxy );
header()->setContextMenuPolicy( Qt::CustomContextMenu );
+#endif
}
void ArticleListView::showHeaderMenu(const QPoint& pos)
@@ -298,7 +299,7 @@ void ArticleListView::setIsAggregation( bool aggregation )
}
ArticleListView::ArticleListView( QWidget* parent )
- : QTreeView(parent),
+ : Akonadi::EntityTreeView(parent),
m_columnMode( FeedMode )
{
setSortingEnabled( true );
@@ -324,11 +325,11 @@ ArticleListView::ArticleListView( QWidget* parent )
void ArticleListView::mousePressEvent( QMouseEvent *ev )
{
// let's push the event, so we can use currentIndex() to get the newly selected \
article..
- QTreeView::mousePressEvent( ev );
+ EntityTreeView::mousePressEvent( ev );
if( ev->button() == Qt::MidButton ) {
QModelIndex idx( currentIndex() );
- const KUrl url = currentIndex().data( ItemModel::LinkRole ).value<KUrl>();
+ const KUrl url = currentIndex().data( FeedItemModel::LinkRole \
).value<KUrl>();
emit signalMouseButtonPressed( ev->button(), url );
}
@@ -365,7 +366,7 @@ void ArticleListView::contextMenuEvent( QContextMenuEvent* event \
)
void ArticleListView::paintEvent( QPaintEvent* e )
{
- QTreeView::paintEvent( e );
+ EntityTreeView::paintEvent( e );
#ifdef __GNUC__
#warning The distinction between empty node and 0 items after filtering is hard to \
port to interview @@ -416,7 +417,7 @@ void ArticleListView::setModel( \
QAbstractItemModel* m ) m_feedHeaderState = state;
}
- QTreeView::setModel( m );
+ EntityTreeView::setModel( m );
if ( m )
{
@@ -425,7 +426,7 @@ void ArticleListView::setModel( QAbstractItemModel* m )
// Ensure at least one column is visible
if ( header()->hiddenSectionCount() == header()->count() ) {
- header()->showSection( ItemModel::ItemTitleColumn );
+ header()->showSection( FeedItemModel::ItemTitleColumn );
}
}
}
diff --git a/akregator/src/articlelistview.h b/akregator/src/articlelistview.h
index c10ed69..7ca074f 100644
--- a/akregator/src/articlelistview.h
+++ b/akregator/src/articlelistview.h
@@ -28,6 +28,7 @@
#include "akregator_export.h"
#include "abstractselectioncontroller.h"
+#include <Akonadi/EntityTreeView>
#include <QPointer>
#include <QSortFilterProxyModel>
#include <QTreeView>
@@ -83,7 +84,7 @@ private:
};
-class AKREGATORPART_EXPORT ArticleListView : public QTreeView, public ArticleLister
+class AKREGATORPART_EXPORT ArticleListView : public Akonadi::EntityTreeView, public \
ArticleLister {
Q_OBJECT
diff --git a/akregator/src/mainwidget.cpp b/akregator/src/mainwidget.cpp
index f914ade..436b034 100644
--- a/akregator/src/mainwidget.cpp
+++ b/akregator/src/mainwidget.cpp
@@ -281,6 +281,8 @@ Akregator::MainWidget::MainWidget( Part *part, QWidget *parent, \
ActionManagerImp m_articleSplitter->setSizes( sp2sizes );
KConfigGroup conf(Settings::self()->config(), "General");
+
+#ifdef KRSS_PORT_DISABLED
if(!conf.readEntry("Disable Introduction", false))
{
m_articleListView->hide();
@@ -289,6 +291,7 @@ Akregator::MainWidget::MainWidget( Part *part, QWidget *parent, \
ActionManagerImp m_mainFrame->slotSetTitle(i18n("About"));
m_displayingAboutPage = true;
}
+#endif
m_markReadTimer = new QTimer(this);
m_markReadTimer->setSingleShot(true);
diff --git a/akregator/src/selectioncontroller.cpp \
b/akregator/src/selectioncontroller.cpp index 6e36ed1..d1534bc 100644
--- a/akregator/src/selectioncontroller.cpp
+++ b/akregator/src/selectioncontroller.cpp
@@ -35,11 +35,16 @@
#include <krss/tagprovider.h>
#include <krss/treenode.h>
#include <krss/treenodevisitor.h>
+#include <krss/feedpropertiescollectionattribute.h>
+#include <krss/rssitem.h>
#include <Akonadi/ChangeRecorder>
+#include <Akonadi/CollectionFetchScope>
#include <Akonadi/EntityDisplayAttribute>
#include <Akonadi/EntityMimeTypeFilterModel>
#include <Akonadi/EntityTreeModel>
+#include <Akonadi/Item>
+#include <Akonadi/ItemFetchJob>
#include <Akonadi/ItemFetchScope>
#include <Akonadi/Session>
@@ -78,7 +83,6 @@ static shared_ptr<KRss::TreeNode> subscriptionForIndex( const \
QModelIndex& index
Akregator::SelectionController::SelectionController( QObject* parent )
: AbstractSelectionController( parent ),
- m_feedList(),
m_feedSelector(),
m_articleLister( 0 ),
m_singleDisplay( 0 ),
@@ -86,76 +90,72 @@ Akregator::SelectionController::SelectionController( QObject* \
parent ) m_itemModel( 0 ),
m_selectedSubscription()
{
- Akonadi::ItemFetchScope scope;
- scope.fetchFullPayload( true );
- scope.fetchAttribute<Akonadi::EntityDisplayAttribute>();
+ Akonadi::ItemFetchScope iscope;
+ iscope.fetchFullPayload( true );
+ iscope.fetchAttribute<Akonadi::EntityDisplayAttribute>();
+ Akonadi::CollectionFetchScope cscope;
+ cscope.setIncludeStatistics( true );
+ cscope.setContentMimeTypes( QStringList() << \
QLatin1String("application/rss+xml") );
Akonadi::Session* session = new Akonadi::Session( QByteArray( "Akregator-" ) + \
QByteArray::number( qrand() ) ); Akonadi::ChangeRecorder* recorder = new \
Akonadi::ChangeRecorder; recorder->setSession( session );
recorder->fetchCollection( true );
- recorder->setItemFetchScope( scope );
+ recorder->setCollectionFetchScope( cscope );
+ recorder->setItemFetchScope( iscope );
recorder->setCollectionMonitored( Akonadi::Collection::root() );
recorder->setMimeTypeMonitored( QLatin1String( "application/rss+xml" ) );
- m_itemModel = new FeedItemModel( recorder );
+ m_itemModel = new FeedItemModel( recorder, this );
}
void Akregator::SelectionController::setFeedSelector( QAbstractItemView* \
feedSelector ) {
- if ( m_feedSelector == feedSelector )
- return;
-
- if ( m_feedSelector ) {
- m_feedSelector->disconnect( this );
- m_feedSelector->selectionModel()->disconnect( this );
- }
-
+ Q_ASSERT( !m_feedSelector );
m_feedSelector = feedSelector;
-
init();
}
void Akregator::SelectionController::setArticleLister( Akregator::ArticleLister* \
lister ) {
- if ( m_articleLister == lister )
- return;
-
- if ( m_articleLister )
- m_articleLister->articleSelectionModel()->disconnect( this );
- if ( m_articleLister && m_articleLister->itemView() )
- m_articleLister->itemView()->disconnect( this );
-
+ Q_ASSERT( !m_articleLister );
m_articleLister = lister;
init();
}
void Akregator::SelectionController::init() {
-
- if ( !m_feedSelector || !m_articleLister || !m_articleLister->itemView() )
+ if ( !m_feedSelector || !m_articleLister )
return;
- Akonadi::EntityMimeTypeFilterModel* filterProxy = new \
Akonadi::EntityMimeTypeFilterModel( m_feedSelector ); + Q_ASSERT( \
m_articleLister->itemView() ); + Q_ASSERT( !m_feedSelector->model() );
+
+ Akonadi::EntityMimeTypeFilterModel* filterProxy = new \
Akonadi::EntityMimeTypeFilterModel( this ); + \
filterProxy->addMimeTypeInclusionFilter( \
Akonadi::Collection::mimeType() );
filterProxy->setHeaderGroup( Akonadi::EntityTreeModel::CollectionTreeHeaders );
filterProxy->setSourceModel( m_itemModel );
-
- m_feedSelector->setModel( filterProxy );
+ filterProxy->setDynamicSortFilter( true );
connect( m_feedSelector, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(subscriptionContextMenuRequested(QPoint)) );
connect( m_feedSelector->selectionModel(), \
SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, \
SLOT(selectedSubscriptionChanged(QModelIndex)) );
+ m_feedSelector->setModel( filterProxy );
+
KSelectionProxyModel* selectionProxy = new KSelectionProxyModel( \
m_feedSelector->selectionModel() );
selectionProxy->setFilterBehavior( \
KSelectionProxyModel::ChildrenOfExactSelection ); selectionProxy->setSourceModel( \
m_itemModel );
Akonadi::EntityMimeTypeFilterModel* filterProxy2 = new \
Akonadi::EntityMimeTypeFilterModel;
filterProxy2->setHeaderGroup( Akonadi::EntityTreeModel::ItemListHeaders );
- filterProxy2->setSourceModel( selectionProxy );
+ filterProxy2->addMimeTypeInclusionFilter( QLatin1String("application/rss+xml") \
); filterProxy2->setSortRole( FeedItemModel::SortRole );
+ filterProxy2->setDynamicSortFilter( true );
+ filterProxy2->setSourceModel( selectionProxy );
m_articleLister->setItemModel( filterProxy2 );
-
+ connect( m_articleLister->articleSelectionModel(), \
SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, \
SLOT(itemSelectionChanged()) );
connect( m_articleLister->itemView(), SIGNAL(doubleClicked(QModelIndex)),
this, SLOT(itemIndexDoubleClicked(QModelIndex)) );
}
@@ -186,29 +186,28 @@ shared_ptr<KRss::TreeNode> \
Akregator::SelectionController::selectedSubscription(
void Akregator::SelectionController::setFeedList( const shared_ptr<KRss::FeedList>& \
feedList ) {
+#ifdef KRSS_PORT_DISABLED
+
if ( m_feedList == feedList )
return;
m_feedList = feedList;
-#ifdef KRSS_PORT_DISABLED
if ( m_folderExpansionHandler ) {
m_folderExpansionHandler->setFeedList( m_feedList );
m_folderExpansionHandler->setModel( m_subscriptionModel );
}
-#endif
if ( m_feedSelector ) {
Akonadi::EntityMimeTypeFilterModel* filterProxy = new \
Akonadi::EntityMimeTypeFilterModel( m_feedSelector );
filterProxy->setHeaderGroup( Akonadi::EntityTreeModel::CollectionTreeHeaders \
); filterProxy->setSourceModel( m_itemModel );
m_feedSelector->setModel( filterProxy );
- disconnect( m_feedSelector->selectionModel(), \
SIGNAL(currentChanged(QModelIndex,QModelIndex)),
- this, SLOT(selectedSubscriptionChanged(QModelIndex)) );
connect( m_feedSelector->selectionModel(), \
SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, \
SLOT(selectedSubscriptionChanged(QModelIndex)) ); }
+#endif
}
void Akregator::SelectionController::setFolderExpansionHandler( \
Akregator::FolderExpansionHandler* handler ) @@ -278,27 +277,33 @@ void \
Akregator::SelectionController::subscriptionContextMenuRequested( const QPo
void Akregator::SelectionController::itemSelectionChanged()
{
- const KRss::Item item = currentItem();
+ const Akonadi::Item item = \
m_articleLister->articleSelectionModel()->currentIndex().data( \
Akonadi::EntityTreeModel::ItemRole ).value<Akonadi::Item>(); + if ( \
!item.isValid() ) + return;
Akonadi::ItemFetchScope scope;
- scope.fetchPayloadPart( KRss::Item::HeadersPart );
- scope.fetchPayloadPart( KRss::Item::ContentPart );
- KRss::ItemFetchJob* job = new KRss::ItemFetchJob( this );
+ scope.fetchFullPayload();
+ scope.fetchAttribute<Akonadi::EntityDisplayAttribute>();
+ Akonadi::ItemFetchJob* job = new Akonadi::ItemFetchJob( item );
job->setFetchScope( scope );
- job->setItem( item );
connect( job, SIGNAL(finished(KJob*)), this, SLOT(fullItemFetched(KJob*)) );
job->start();
}
void Akregator::SelectionController::fullItemFetched( KJob* j )
{
- KRss::ItemFetchJob* job = qobject_cast<KRss::ItemFetchJob*>( j );
+ Akonadi::ItemFetchJob* job = qobject_cast<Akonadi::ItemFetchJob*>( j );
assert( job );
if ( job->error() ) {
//PENDING(frank) TODO handle error
+ return;
}
- const KRss::Item item = job->item();
+ Q_ASSERT( job->items().size() == 1 );
+ const Akonadi::Item aitem = job->items().first();
+ if ( !aitem.hasPayload<KRss::RssItem>() )
+ return;
+ const KRss::Item item( aitem );
if ( m_singleDisplay )
m_singleDisplay->showItem( item );
diff --git a/akregator/src/selectioncontroller.h \
b/akregator/src/selectioncontroller.h index fd399e3..a89285b 100644
--- a/akregator/src/selectioncontroller.h
+++ b/akregator/src/selectioncontroller.h
@@ -98,7 +98,6 @@ private:
void init();
private:
- boost::shared_ptr<KRss::FeedList> m_feedList;
QPointer<QAbstractItemView> m_feedSelector;
Akregator::ArticleLister* m_articleLister;
Akregator::SingleArticleDisplay* m_singleDisplay;
diff --git a/krss/krss/feeditemmodel.cpp b/krss/krss/feeditemmodel.cpp
index 1023ca0..6c421c0 100644
--- a/krss/krss/feeditemmodel.cpp
+++ b/krss/krss/feeditemmodel.cpp
@@ -49,7 +49,7 @@ FeedItemModel::~FeedItemModel() {
QVariant FeedItemModel::entityData( const Akonadi::Item &akonadiItem, int column, \
int role ) const { if ( !akonadiItem.hasPayload<RssItem>() )
- return QVariant();
+ return EntityTreeModel::entityData( akonadiItem, column, role );
const RssItem item = akonadiItem.payload<RssItem>();
if ( role == SortRole && column == DateColumn )
@@ -73,8 +73,9 @@ QVariant FeedItemModel::entityData( const Akonadi::Item \
&akonadiItem, int column authors += person.name();
}
return authors;
+#else
+ return EntityTreeModel::entityData( akonadiItem, column, role );
#endif
- return QVariant();
}
case DateColumn:
if ( role == SortRole )
@@ -87,11 +88,11 @@ QVariant FeedItemModel::entityData( const Akonadi::Item \
&akonadiItem, int column return d->m_feed->title();
#endif
default:
- return QVariant();
+ return EntityTreeModel::entityData( akonadiItem, column, role );
}
}
- if ( role == ItemRole ) {
+ if ( role == FeedItemModel::ItemRole ) {
QVariant var;
var.setValue( akonadiItem );
return var;
@@ -117,44 +118,52 @@ QVariant FeedItemModel::entityData( const Akonadi::Item \
&akonadiItem, int column
//PENDING(frank) TODO: use configurable colors
if ( role == Qt::ForegroundRole ) {
- if ( RssItem::isNew( akonadiItem ) )
- return Qt::red;
if ( RssItem::isUnread( akonadiItem ) )
return Qt::blue;
}
- if ( role == Qt::DecorationRole && column == ItemTitleColumn )
- return RssItem::isImportant( akonadiItem ) ? d->importantIcon : QVariant();
- return QVariant();
+ if ( role == Qt::DecorationRole && column == ItemTitleColumn && \
RssItem::isImportant( akonadiItem ) ) + return d->importantIcon;
+
+ return EntityTreeModel::entityData( akonadiItem, column, role );
}
QVariant FeedItemModel::entityData( const Collection &collection, int column, int \
role ) const {
- if ( role == Qt::DisplayRole && column == FeedTitleColumn ) {
- const QString title = FeedCollection( collection ).title();
- if ( !title.isEmpty() )
- return title;
+ if ( role == Qt::DisplayRole || role == SortRole ) {
+ switch ( column ) {
+ case FeedTitleColumn:
+ {
+ const QString title = FeedCollection( collection ).title();
+ if ( !title.isEmpty() )
+ return title;
+ break;
+ }
+ default:
+ break;
+ }
}
return EntityTreeModel::entityData( collection, column, role );
}
int FeedItemModel::entityColumnCount( EntityTreeModel::HeaderGroup headerSet ) const \
{
- if ( headerSet == ItemListHeaders )
+ switch ( headerSet ) {
+ case ItemListHeaders:
return ItemColumnCount;
- else
+ case CollectionTreeHeaders:
return FeedColumnCount;
+ default:
+ break;
+ }
+ return EntityTreeModel::entityColumnCount( headerSet );
}
QVariant FeedItemModel::entityHeaderData( int section, Qt::Orientation orientation, \
int role, EntityTreeModel::HeaderGroup headerSet ) const { Q_ASSERT( section >= 0 );
- if ( orientation != Qt::Horizontal )
- return QVariant();
- if ( role != Qt::DisplayRole )
- return QVariant();
+ if ( orientation != Qt::Horizontal || role != Qt::DisplayRole )
+ return EntityTreeModel::entityHeaderData( section, orientation, role, \
headerSet ); switch ( headerSet ) {
case ItemListHeaders:
{
- if ( section >= ItemColumnCount )
- return QVariant();
switch ( section ) {
case ItemTitleColumn:
return i18n("Title");
@@ -164,23 +173,27 @@ QVariant FeedItemModel::entityHeaderData( int section, \
Qt::Orientation orientati return i18n("Date");
case FeedTitleForItemColumn:
return i18n("Feed");
+ default:
+ break;
}
}
case CollectionTreeHeaders:
{
- if ( section >= FeedColumnCount )
- return QVariant();
- switch ( section ) {
+ switch ( section ) {
case FeedTitleColumn:
return i18n("Title");
case UnreadCountColumn:
return i18n("Unread");
case TotalCountColumn:
return i18n("Total");
+ default:
+ break;
}
}
+ default:
+ break;
}
- return QVariant();
+ return EntityTreeModel::entityHeaderData( section, orientation, role, headerSet \
); }
diff --git a/krss/krss/feeditemmodel.h b/krss/krss/feeditemmodel.h
index 357d611..d682566 100644
--- a/krss/krss/feeditemmodel.h
+++ b/krss/krss/feeditemmodel.h
@@ -50,8 +50,8 @@ public:
FeedColumnCount
};
- enum Role {
- ItemRole =EntityTreeModel::UserRole,
+ enum ItemRoles {
+ ItemRole=EntityTreeModel::UserRole,
SortRole,
IsNewRole,
IsUnreadRole,
diff --git a/krss/krss/item.cpp b/krss/krss/item.cpp
index c86c8a0..fbb0676 100644
--- a/krss/krss/item.cpp
+++ b/krss/krss/item.cpp
@@ -49,6 +49,11 @@ Item::Item() : d( new Private )
{
}
+Item::Item( const Akonadi::Item& aitem ) : d( new Private )
+{
+ d->akonadiItem = aitem;
+}
+
Item::Item( const Item& other ) : d( other.d )
{
}
diff --git a/krss/krss/item.h b/krss/krss/item.h
index 5bd82b7..864ef92 100644
--- a/krss/krss/item.h
+++ b/krss/krss/item.h
@@ -34,6 +34,10 @@ template <class T> class QList;
template <class K, class T> class QHash;
class QString;
+namespace Akonadi {
+ class Item;
+}
+
namespace KRss {
class Category;
@@ -62,6 +66,7 @@ public:
public:
Item();
+ explicit Item( const Akonadi::Item& aitem );
Item( const Item& other );
~Item();
diff --git a/krss/krss/ui/feedlistdelegate.cpp b/krss/krss/ui/feedlistdelegate.cpp
index d8167e3..e095ba9 100644
--- a/krss/krss/ui/feedlistdelegate.cpp
+++ b/krss/krss/ui/feedlistdelegate.cpp
@@ -24,7 +24,7 @@
*/
#include "feedlistdelegate.h"
-#include "krss/feedlistmodel.h"
+#include <Akonadi/EntityTreeModel>
#include <KDebug>
#include <KGlobalSettings>
@@ -62,7 +62,7 @@ void FeedListDelegate::paint( QPainter *painter,
const QModelIndex &index ) const
{
QStyleOptionViewItem newOption = option;
- if ( index.data( FeedListModel::HasUnreadRole ).toBool() )
+ if ( index.data( Akonadi::EntityTreeModel::UnreadCountRole ).toInt() > 0 )
{ // feed has unread articles
newOption.font.setBold(true);
}
diff --git a/krss/krss/ui/feedlistview.cpp b/krss/krss/ui/feedlistview.cpp
index aa3d3ab..521a5c8 100644
--- a/krss/krss/ui/feedlistview.cpp
+++ b/krss/krss/ui/feedlistview.cpp
@@ -198,7 +198,7 @@ void FeedListView::Private::saveHeaderSettings()
}
FeedListView::FeedListView( QWidget *parent )
- : QTreeView( parent ), d( new Private( this ) )
+ : Akonadi::EntityTreeView( parent ), d( new Private( this ) )
{
setSelectionMode( QAbstractItemView::SingleSelection );
setSelectionBehavior( QAbstractItemView::SelectRows );
@@ -237,7 +237,7 @@ void FeedListView::setModel( QAbstractItemModel* m )
if ( model() )
d->headerState = header()->saveState();
- QTreeView::setModel( m );
+ EntityTreeView::setModel( m );
if ( m )
header()->restoreState( d->headerState );
diff --git a/krss/krss/ui/feedlistview.h b/krss/krss/ui/feedlistview.h
index 611cb88..d448573 100644
--- a/krss/krss/ui/feedlistview.h
+++ b/krss/krss/ui/feedlistview.h
@@ -21,6 +21,8 @@
#include "krss/krss_export.h"
+#include <Akonadi/EntityTreeView>
+
#include <QtGui/QTreeView>
#include <boost/shared_ptr.hpp>
@@ -31,7 +33,7 @@ namespace KRss {
class Tag;
class TreeNode;
-class KRSS_EXPORT FeedListView : public QTreeView
+class KRSS_EXPORT FeedListView : public Akonadi::EntityTreeView
{
Q_OBJECT
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic