[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdepim/mobile
From: Tobias Koenig <tokoe () kde ! org>
Date: 2010-11-25 16:46:05
Message-ID: 20101125164605.42026AC8A2 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1200761 by tokoe:
Implement sorting for the following options:
- by date/time
- by date/time (most recent)
- by sender/receiver
- by subject
- by size
Descending sorting seems to be bugyy right now, and
the comparison for smart sender/receiver doesn't work yet
M +48 -12 lib/threadgroupermodel.cpp
M +9 -5 lib/threadgroupermodel.h
M +28 -3 mail/mainview.cpp
M +4 -0 mail/mainview.h
M +4 -2 mail/messagelistsettingscontroller.cpp
M +1 -1 mail/messagelistsettingscontroller.h
--- trunk/KDE/kdepim/mobile/lib/threadgroupermodel.cpp #1200760:1200761
@@ -41,7 +41,7 @@
{
public:
ThreadGrouperModelPrivate( ThreadGrouperModel *qq )
- : q_ptr( qq ), m_order( ThreadGrouperModel::ThreadsWithNewRepliesOrder )
+ : q_ptr( qq ), m_sortingOption( ThreadGrouperModel::SortByDateTimeMostRecent )
{
}
@@ -60,7 +60,7 @@
mutable QHash<QByteArray, QSet<QByteArray> > m_parentChildrenMap; // maps a \
thread leader item to all its descendant items mutable QHash<QByteArray, \
Akonadi::Item> m_items;
- ThreadGrouperModel::OrderScheme m_order;
+ ThreadGrouperModel::SortingOption m_sortingOption;
};
static QByteArray identifierForMessage( const KMime::Message::Ptr &message, \
Akonadi::Item::Id id ) @@ -151,21 +151,55 @@
const KMime::Message::Ptr leftThreadRootMessage = \
leftThreadRootItem.payload<KMime::Message::Ptr>();
const KMime::Message::Ptr rightThreadRootMessage = \
rightThreadRootItem.payload<KMime::Message::Ptr>();
- if ( m_grouper->m_order == ThreadGrouperModel::ThreadsWithNewRepliesOrder ) {
+ switch ( m_grouper->m_sortingOption ) {
+ case ThreadGrouperModel::SortByDateTime:
+ {
+ const KDateTime leftThreadRootDateTime = \
leftThreadRootMessage->date()->dateTime(); + const KDateTime \
rightThreadRootDateTime = rightThreadRootMessage->date()->dateTime(); + if ( \
leftThreadRootDateTime != rightThreadRootDateTime ) { + return \
leftThreadRootDateTime > rightThreadRootDateTime; + }
+ }
+ break;
+ case ThreadGrouperModel::SortByDateTimeMostRecent:
+ {
const KDateTime leftNewest = m_grouper->getMostRecentUpdate( \
leftThreadRootMessage, leftThreadRootItem.id() );
const KDateTime rightNewest = m_grouper->getMostRecentUpdate( \
rightThreadRootMessage, rightThreadRootItem.id() );
if ( leftNewest != rightNewest ) {
return leftNewest > rightNewest;
}
- } else {
- const KDateTime leftThreadRootDateTime = \
leftThreadRootMessage->date()->dateTime();
- const KDateTime rightThreadRootDateTime = \
rightThreadRootMessage->date()->dateTime();
- if ( leftThreadRootDateTime != rightThreadRootDateTime ) {
- return leftThreadRootDateTime > rightThreadRootDateTime;
}
+ break;
+ case ThreadGrouperModel::SortBySenderReceiver:
+ {
+ const QString leftSender = \
leftThreadRootMessage->sender()->asUnicodeString(); + const QString \
rightSender = rightThreadRootMessage->sender()->asUnicodeString(); +
+ if ( leftSender != rightSender )
+ return leftSender < rightSender;
}
+ break;
+ case ThreadGrouperModel::SortBySubject:
+ {
+ const QString leftSubject = \
leftThreadRootMessage->subject()->asUnicodeString(); + const QString \
rightSubject = rightThreadRootMessage->subject()->asUnicodeString();
+ if ( leftSubject != rightSubject )
+ return leftSubject < rightSubject;
+ }
+ break;
+ case ThreadGrouperModel::SortBySize:
+ {
+ const qint64 leftSize = leftThreadRootItem.size();
+ const qint64 rightSize = rightThreadRootItem.size();
+
+ if ( leftSize != rightSize )
+ return leftSize < rightSize;
+ }
+ break;
+ }
+
return leftThreadRootItem.id() < rightThreadRootItem.id();
}
@@ -247,16 +281,18 @@
delete d_ptr;
}
-void ThreadGrouperModel::setThreadOrder( ThreadGrouperModel::OrderScheme order )
+void ThreadGrouperModel::setSortingOption( ThreadGrouperModel::SortingOption option \
) {
Q_D( ThreadGrouperModel );
- d->m_order = order;
+ d->m_sortingOption = option;
+
+ invalidate();
}
-ThreadGrouperModel::OrderScheme ThreadGrouperModel::threadOrder() const
+ThreadGrouperModel::SortingOption ThreadGrouperModel::sortingOption() const
{
Q_D( const ThreadGrouperModel );
- return d->m_order;
+ return d->m_sortingOption;
}
Akonadi::Item ThreadGrouperModelPrivate::threadRoot( const QModelIndex &index ) \
const
--- trunk/KDE/kdepim/mobile/lib/threadgroupermodel.h #1200760:1200761
@@ -41,16 +41,20 @@
ThreadIdRole = Akonadi::EntityTreeModel::UserRole + 30
};
- enum OrderScheme {
- ThreadsWithNewRepliesOrder,
- ThreadsStartedOrder
+ enum SortingOption
+ {
+ SortByDateTime,
+ SortByDateTimeMostRecent,
+ SortBySenderReceiver,
+ SortBySubject,
+ SortBySize
};
ThreadGrouperModel( QObject* parent = 0 );
virtual ~ThreadGrouperModel();
- void setThreadOrder( OrderScheme order );
- OrderScheme threadOrder() const;
+ void setSortingOption( SortingOption option );
+ SortingOption sortingOption() const;
virtual void setSourceModel( QAbstractItemModel *sourceModel );
--- trunk/KDE/kdepim/mobile/mail/mainview.cpp #1200760:1200761
@@ -191,10 +191,10 @@
QAbstractItemModel* MainView::createItemModelContext(QDeclarativeContext* context, \
QAbstractItemModel* model) {
- ThreadGrouperModel *grouper = new ThreadGrouperModel(this);
- grouper->setSourceModel(model);
+ m_threadGrouperModel = new ThreadGrouperModel(this);
+ m_threadGrouperModel->setSourceModel(model);
- model = grouper;
+ model = m_threadGrouperModel;
QAbstractProxyModel *itemFilterModel = createItemFilterModel();
if ( itemFilterModel ) {
@@ -322,6 +322,8 @@
mMessageListSettingsController = new MessageListSettingsController( this );
actionCollection()->addAction( "messagelist_change_settings", \
mMessageListSettingsController->editAction() ); rootContext()->setContextProperty( \
"messageListSettings", mMessageListSettingsController ); + connect( \
mMessageListSettingsController, SIGNAL( settingsChanged( const MessageListSettings& ) \
), + this, SLOT( messageListSettingsChanged( const MessageListSettings& ) ) \
);
QTime time;
if ( debugTiming ) {
@@ -1556,6 +1558,29 @@
}
}
+void MainView::messageListSettingsChanged( const MessageListSettings &settings )
+{
+ switch ( settings.sortingOption() ) {
+ case MessageListSettings::SortByDateTime:
+ m_threadGrouperModel->setSortingOption( ThreadGrouperModel::SortByDateTime );
+ break;
+ case MessageListSettings::SortByDateTimeMostRecent:
+ m_threadGrouperModel->setSortingOption( \
ThreadGrouperModel::SortByDateTimeMostRecent ); + break;
+ case MessageListSettings::SortBySenderReceiver:
+ m_threadGrouperModel->setSortingOption( \
ThreadGrouperModel::SortBySenderReceiver ); + break;
+ case MessageListSettings::SortBySubject:
+ m_threadGrouperModel->setSortingOption( ThreadGrouperModel::SortBySubject );
+ break;
+ case MessageListSettings::SortBySize:
+ m_threadGrouperModel->setSortingOption( ThreadGrouperModel::SortBySize );
+ break;
+ }
+
+ m_threadGrouperModel->sort( 0, settings.sortingOrder() );
+}
+
// #############################################################
#include "mainview.moc"
--- trunk/KDE/kdepim/mobile/mail/mainview.h #1200760:1200761
@@ -46,9 +46,11 @@
class FilterModel;
class KJob;
class KSelectionProxyModel;
+class MessageListSettings;
class MessageListSettingsController;
class QStandardItemModel;
class TemplateEmailModel;
+class ThreadGrouperModel;
class ThreadModel;
class MainView : public KDeclarativeMainView
@@ -168,6 +170,7 @@
void showMessageSource();
void selectOverrideEncoding();
void toggleShowExtendedHeaders( bool );
+ void messageListSettingsChanged( const MessageListSettings& );
private:
void reply( quint64 id, MessageComposer::ReplyStrategy replyStrategy, bool \
quoteOriginal = true ); @@ -185,6 +188,7 @@
TemplateEmailModel *mEmailTemplateModel;
QItemSelectionModel *mTemplateSelectionModel;
KSelectionProxyModel *m_threadContentsModel;
+ ThreadGrouperModel *m_threadGrouperModel;
ThreadModel *m_threadsModel;
FilterModel *mFilterModel;
Akonadi::QuotaColorProxyModel *mQuotaColorProxyModel;
--- trunk/KDE/kdepim/mobile/mail/messagelistsettingscontroller.cpp #1200760:1200761
@@ -71,7 +71,7 @@
mSettings = MessageListSettings::fromConfig( mCollectionId );
- emit settingsChanged();
+ emit settingsChanged( mSettings );
}
void MessageListSettingsController::editSettings()
@@ -82,6 +82,7 @@
ui.setupUi( dialog.mainWidget() );
ui.mSortingOption->setCurrentIndex( static_cast<int>( mSettings.sortingOption() ) \
); + ui.mSortingOrder->setCurrentIndex( mSettings.sortingOrder() == \
Qt::AscendingOrder ? 0 : 1 ); ui.mGroupingOption->setCurrentIndex( static_cast<int>( \
mSettings.groupingOption() ) ); ui.mUseThreading->setChecked( \
mSettings.useThreading() ); ui.mSaveForCollection->setChecked( \
mSettings.saveForCollection() ); @@ -90,11 +91,12 @@
return;
mSettings.setSortingOption( static_cast<MessageListSettings::SortingOption>( \
ui.mSortingOption->currentIndex() ) ); + mSettings.setSortingOrder( \
ui.mSortingOrder->currentIndex() == 0 ? Qt::AscendingOrder : Qt::DescendingOrder ); \
mSettings.setGroupingOption( static_cast<MessageListSettings::GroupingOption>( \
ui.mGroupingOption->currentIndex() ) ); mSettings.setUseThreading( \
ui.mUseThreading->isChecked() ); mSettings.setSaveForCollection( \
ui.mSaveForCollection->isChecked() );
MessageListSettings::toConfig( mCollectionId, mSettings );
- emit settingsChanged();
+ emit settingsChanged( mSettings );
}
--- trunk/KDE/kdepim/mobile/mail/messagelistsettingscontroller.h #1200760:1200761
@@ -48,7 +48,7 @@
void setCollection( const Akonadi::Collection &collection );
Q_SIGNALS:
- void settingsChanged();
+ void settingsChanged( const MessageListSettings &settings );
private Q_SLOTS:
void editSettings();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic