[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdepimlibs/akonadi/kmime
From: Andras Mantia <amantia () kde ! org>
Date: 2010-09-20 12:56:48
Message-ID: 20100920130206.B06E9AC876 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1177528 by amantia:
Support message mark toggling.
BUG: 249716
M +19 -3 markascommand.cpp
M +3 -2 markascommand_p.h
M +65 -2 standardmailactionmanager.cpp
--- trunk/KDE/kdepimlibs/akonadi/kmime/markascommand.cpp #1177527:1177528
@@ -24,15 +24,17 @@
#include <akonadi/itemfetchscope.h>
#include <akonadi/itemmodifyjob.h>
-MarkAsCommand::MarkAsCommand( const Akonadi::MessageStatus& targetStatus, const \
Akonadi::Item::List& msgList, QObject* parent): CommandBase( parent ) \
+MarkAsCommand::MarkAsCommand( const Akonadi::MessageStatus& targetStatus, const \
Akonadi::Item::List& msgList, bool invert, QObject* parent): CommandBase( parent ) {
+ mInvertMark = invert;
mMessages = msgList;
mTargetStatus = targetStatus;
mFolderListJobCount = 0;
}
-MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const \
Akonadi::Collection::List& folders, QObject* parent): CommandBase( parent ) \
+MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const \
Akonadi::Collection::List& folders, bool invert, QObject* parent): CommandBase( \
parent ) {
+ mInvertMark = invert;
mFolders = folders;
mTargetStatus = targetStatus;
mFolderListJobCount = mFolders.size();
@@ -55,6 +57,11 @@
foreach( const Akonadi::Item &item, fjob->items() ) {
Akonadi::MessageStatus status;
status.setStatusFromFlags( item.flags() );
+ if ( mInvertMark ) {
+ if ( status & mTargetStatus ) {
+ mMessages.append( item );
+ }
+ } else
if (! (status & mTargetStatus) )
{
mMessages.append( item );
@@ -106,7 +113,17 @@
Akonadi::MessageStatus itemStatus;
itemStatus.setStatusFromFlags( it.flags() );
+ if ( mInvertMark ) {
+
+ if ( mTargetStatus & Akonadi::MessageStatus::statusRead() ) {
+ itemStatus.setUnread();
+ } else if ( mTargetStatus & Akonadi::MessageStatus::statusUnread() ) {
+ itemStatus.setRead();
+ } else
+ itemStatus.toggle( mTargetStatus );
+ } else {
itemStatus.set( mTargetStatus );
+ }
/*if ( itemStatus != oldStatus )*/ {
item.setFlags( itemStatus.statusFlags() );
// Store back modified item
@@ -126,7 +143,6 @@
emitResult( Failed );
}
if ( mMarkJobCount == 0 && mFolderListJobCount == 0 ) {
- qDebug() << "MARK ALL AS DONE";
emitResult( OK );
}
}
--- trunk/KDE/kdepimlibs/akonadi/kmime/markascommand_p.h #1177527:1177528
@@ -33,8 +33,8 @@
{
Q_OBJECT
public:
- MarkAsCommand( const Akonadi::MessageStatus& targetStatus, const \
Akonadi::Item::List & msgList, QObject* parent = 0 );
- MarkAsCommand( const Akonadi::MessageStatus& targetStatus, const \
Akonadi::Collection::List& folders, QObject* parent = 0 ); + MarkAsCommand( const \
Akonadi::MessageStatus& targetStatus, const Akonadi::Item::List & msgList, bool \
invert = false, QObject* parent = 0 ); + MarkAsCommand( const \
Akonadi::MessageStatus& targetStatus, const Akonadi::Collection::List& folders, bool \
invert = false, QObject* parent = 0 ); void execute();
private Q_SLOTS:
@@ -49,6 +49,7 @@
Akonadi::MessageStatus mTargetStatus;
int mMarkJobCount;
int mFolderListJobCount;
+ int mInvertMark;
};
#endif // MARKASCOMMAND_H
--- trunk/KDE/kdepimlibs/akonadi/kmime/standardmailactionmanager.cpp #1177527:1177528
@@ -180,10 +180,63 @@
void updateActions()
{
- //TODO
+ if ( !mItemSelectionModel || mItemSelectionModel->selectedIndexes().isEmpty() \
) + return;
+
+ bool allMarkedAsImportant = true;
+ bool allMarkedAsRead = true;
+ bool allMarkedAsActionItem = true;
+
+ Q_FOREACH( QModelIndex index, mItemSelectionModel->selectedRows() ) {
+ const Item item = index.data( EntityTreeModel::ItemRole ).value<Item>();
+ Akonadi::MessageStatus status;
+ status.setStatusFromFlags( item.flags() );
+ if ( !status.isImportant() )
+ allMarkedAsImportant = false;
+ if ( !status.isRead() )
+ allMarkedAsRead= false;
+ if ( !status.isToAct() )
+ allMarkedAsActionItem = false;
+ }
+
+ QAction *action = mParent->action( \
Akonadi::StandardMailActionManager::MarkMailAsRead ); + updateMarkAction( \
action, allMarkedAsRead); + if ( allMarkedAsRead )
+ action->setText( i18n("&Mark Mail as Unread") );
+ else
+ action->setText( i18n("&Mark Mail as Read") );
+
+ action = mParent->action( \
Akonadi::StandardMailActionManager::MarkMailAsImportant ); + updateMarkAction( \
action, allMarkedAsImportant ); + if ( allMarkedAsImportant )
+ action->setText( i18n("Remove Important Mark") );
+ else
+ action->setText( i18n("&Mark Mail as Important") );
+
+ action = mParent->action( \
Akonadi::StandardMailActionManager::MarkMailAsActionItem ); + updateMarkAction( \
action, allMarkedAsActionItem ); + if ( allMarkedAsActionItem )
+ action->setText( i18n("Remove Action Item Mark") );
+ else
+ action->setText( i18n("&Mark Mail as Action Item") );
+
emit mParent->actionStateUpdated();
}
+ void updateMarkAction( QAction* action, bool allMarked )
+ {
+ QByteArray data = action->data().toByteArray();
+ if ( allMarked ) {
+ if ( !data.startsWith( '!' ) )
+ data.prepend( '!' );
+ } else {
+ if ( data.startsWith( '!' ) )
+ data = data.mid( 1 );
+ }
+ action->setData( data );
+ }
+
+
Collection selectedCollection() const
{
if ( !mCollectionSelectionModel )
@@ -233,6 +286,11 @@
QByteArray typeStr = action->data().toByteArray();
kDebug() << "Mark mail as: " << typeStr;
+ bool invert = false;
+ if ( typeStr.startsWith( '!' ) ) {
+ invert = true;
+ typeStr = typeStr.mid(1);
+ }
StandardMailActionManager::Type type = MarkMailAsRead;
if ( typeStr == "U" )
type = MarkMailAsUnread;
@@ -260,7 +318,7 @@
Akonadi::MessageStatus targetStatus;
targetStatus.setStatusFromStr( QLatin1String( typeStr ) );
- MarkAsCommand *command = new MarkAsCommand( targetStatus, items, mParent );
+ MarkAsCommand *command = new MarkAsCommand( targetStatus, items, invert, \
mParent ); command->execute();
}
@@ -399,6 +457,11 @@
connect( selectionModel, SIGNAL( selectionChanged( const QItemSelection&, const \
QItemSelection& ) ), SLOT( updateActions() ) );
+ //to catch item modifications, listen to the model's dataChanged signal as well
+ connect( selectionModel->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ SLOT( updateActions() ) );
+
+
d->updateActions();
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic