--- a/ipsservices/nmimapclientplugin/src/nmimapclientplugin.cpp Mon May 03 12:23:15 2010 +0300
+++ b/ipsservices/nmimapclientplugin/src/nmimapclientplugin.cpp Fri May 14 15:41:10 2010 +0300
@@ -33,6 +33,8 @@
Constructs a new NmImapClientPlugin.
*/
NmImapClientPlugin::NmImapClientPlugin()
+: mListOptionsMenuRequest(NULL),
+mSettingsViewLauncher(NULL)
{
}
@@ -41,6 +43,7 @@
*/
NmImapClientPlugin::~NmImapClientPlugin()
{
+ delete mSettingsViewLauncher;
}
/*!
@@ -54,7 +57,7 @@
QList<NmAction *> &actionList)
{
NMLOG("NmImapClientPlugin::getActions()-->");
-
+
// Check if this request is for the IMAP protocol.
quint32 pluginId = this->pluginId();
if (request.mailboxId().pluginId32() != pluginId
@@ -66,12 +69,180 @@
NMLOG(QString("request.mailboxId().pluginId32()=%1").arg(request.mailboxId().pluginId32()));
return;
}
-
+
// Get the NmBaseClientPlugin implementation of the UI actions.
NmBaseClientPlugin::getActions(request, actionList);
+
+ // Append IMAP plugin specific actions
+ switch (request.menuType()) {
+ case NmActionOptionsMenu:
+ {
+ if (request.contextView()==NmActionContextViewMessageList){
+ mListOptionsMenuRequest = request;
+ // Create sub-menu for standard folders selection
+ HbMenu *standardFolders = new HbMenu();
+ NmAction *inboxAction = new NmAction(0);
+ inboxAction->setObjectName("imapclientplugin_folders_inbox");
+ inboxAction->setText(hbTrId("txt_mail_opt_folders_inbox"));
+ inboxAction->setCheckable(true);
+ connect(inboxAction, SIGNAL(triggered()), this, SLOT(switchToStandardFolderInbox()));
+ standardFolders->addAction(inboxAction);
+ NmAction *outboxAction = new NmAction(0);
+ outboxAction->setObjectName("imapclientplugin_folders_outbox");
+ outboxAction->setText(hbTrId("txt_mail_opt_folders_outbox"));
+ outboxAction->setCheckable(true);
+ connect(outboxAction, SIGNAL(triggered()), this, SLOT(switchToStandardFolderOutbox()));
+ standardFolders->addAction(outboxAction);
+ NmAction *draftsAction = new NmAction(0);
+ draftsAction->setObjectName("imapclientplugin_folders_drafts");
+ draftsAction->setText(hbTrId("txt_mail_opt_folders_drafts"));
+ draftsAction->setCheckable(true);
+ connect(draftsAction, SIGNAL(triggered()), this, SLOT(switchToStandardFolderDrafts()));
+ standardFolders->addAction(draftsAction);
+ NmAction *sentAction = new NmAction(0);
+ sentAction->setObjectName("imapclientplugin_folders_sent");
+ sentAction->setText(hbTrId("txt_mail_opt_folders_sent"));
+ sentAction->setCheckable(true);
+ connect(sentAction, SIGNAL(triggered()), this, SLOT(switchToStandardFolderSent()));
+ standardFolders->addAction(sentAction);
+ // Set active action
+ NmFolderType curFolderType(NmFolderOther);
+ if (mUiEngine) {
+ curFolderType = mUiEngine->folderTypeById(request.mailboxId(),request.folderId());
+ }
+ switch (curFolderType){
+ case NmFolderInbox: {
+ inboxAction->setChecked(true);
+ break;
+ }
+ case NmFolderOutbox: {
+ outboxAction->setChecked(true);
+ break;
+ }
+ case NmFolderDrafts: {
+ draftsAction->setChecked(true);
+ break;
+ }
+ case NmFolderSent: {
+ sentAction->setChecked(true);
+ break;
+ }
+ }
+
+ // Add folders selection with sub-menu
+ NmAction *foldersAction = new NmAction(0);
+ foldersAction->setObjectName("baseclientplugin_folders");
+ foldersAction->setText(hbTrId("txt_mail_opt_folders"));
+ foldersAction->setMenu(standardFolders);
+ actionList.append(foldersAction);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
NMLOG("<--NmImapClientPlugin::getActions()");
}
+/*!
+ Slot connected to options menu settings NmAction.
+ Opens mailbox settings.
+ */
+void NmImapClientPlugin::settings()
+{
+ NMLOG("NmImapClientPlugin::settings()-->");
+
+ const NmId &id = mMenuRequest.mailboxId();
+ NmMailboxMetaData *mailbox = mUiEngine->mailboxById(id);
+
+ if (mailbox) {
+ if (!mSettingsViewLauncher) {
+ mSettingsViewLauncher = new NmSettingsViewLauncher();
+
+ connect(mSettingsViewLauncher,
+ SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)),
+ this, SLOT(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)));
+
+ connect(mSettingsViewLauncher,
+ SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)),
+ this, SLOT(mailboxPropertyChanged(const NmId &, QVariant, QVariant)));
+
+ connect(mSettingsViewLauncher,
+ SIGNAL(goOnline(const NmId &)),
+ this, SLOT(goOnline(const NmId &)));
+
+ connect(mSettingsViewLauncher,
+ SIGNAL(goOffline(const NmId &)),
+ this, SLOT(goOffline(const NmId &)));
+ }
+
+ mSettingsViewLauncher->launchSettingsView(id, mailbox->name());
+ }
+
+ NMLOG("<--NmImapClientPlugin::settings()");
+}
+
+/*!
+ Private slot to switch message list contents
+ to standard folder inbox
+*/
+void NmImapClientPlugin::switchToStandardFolderInbox()
+{
+ if (mListOptionsMenuRequest.observer()){
+ NmId folderId=mUiEngine->standardFolderId(mListOptionsMenuRequest.mailboxId(),NmFolderInbox);
+ NmActionResponse response(NmActionResponseCommandSwitchFolder, NmActionOptionsMenu,
+ NmActionContextViewNone, mListOptionsMenuRequest.mailboxId(),
+ folderId);
+ mListOptionsMenuRequest.observer()->handleActionCommand(response);
+ }
+}
+
+/*!
+ Private slot to switch message list contents
+ to standard folder outbox
+*/
+void NmImapClientPlugin::switchToStandardFolderOutbox()
+{
+ if (mListOptionsMenuRequest.observer()){
+ NmId folderId=mUiEngine->standardFolderId(mListOptionsMenuRequest.mailboxId(),NmFolderOutbox);
+ NmActionResponse response(NmActionResponseCommandSwitchFolder, NmActionOptionsMenu,
+ NmActionContextViewNone, mListOptionsMenuRequest.mailboxId(),
+ folderId);
+ mListOptionsMenuRequest.observer()->handleActionCommand(response);
+ }
+}
+
+/*!
+ Private slot to switch message list contents
+ to standard folder drafts
+*/
+void NmImapClientPlugin::switchToStandardFolderDrafts()
+{
+ if (mListOptionsMenuRequest.observer()){
+ NmId folderId=mUiEngine->standardFolderId(mListOptionsMenuRequest.mailboxId(),NmFolderDrafts);
+ NmActionResponse response(NmActionResponseCommandSwitchFolder, NmActionOptionsMenu,
+ NmActionContextViewNone, mListOptionsMenuRequest.mailboxId(),
+ folderId);
+ mListOptionsMenuRequest.observer()->handleActionCommand(response);
+ }
+}
+
+/*!
+ Private slot to switch message list contents
+ to standard folder sent
+*/
+void NmImapClientPlugin::switchToStandardFolderSent()
+{
+ if (mListOptionsMenuRequest.observer()){
+ NmId folderId=mUiEngine->standardFolderId(mListOptionsMenuRequest.mailboxId(),NmFolderSent);
+ NmActionResponse response(NmActionResponseCommandSwitchFolder, NmActionOptionsMenu,
+ NmActionContextViewNone, mListOptionsMenuRequest.mailboxId(),
+ folderId);
+ mListOptionsMenuRequest.observer()->handleActionCommand(response);
+ }
+}
+
/*!
Provide id of plugin.