--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/shareui/src/shareuiprivate.cpp Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,346 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Offers message creation and sending services.
+ *
+*/
+
+
+#include "shareuiprivate.h"
+#include <QVariant>
+#include <QDir>
+#include <HbPushButton>
+#include <HbListWidget>
+#include <HbMainWindow>
+#include <HbNotificationDialog>
+#include <xqserviceglobal.h>
+
+//Localized Constants
+#define LOC_SEND_SELECTED_ITEM hbTrId("txt_messaging_title_send_selected_item")
+#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
+
+ShareUiPrivate::ShareUiPrivate()
+ {
+
+ }
+
+/**
+ * Destructor.
+ */
+ShareUiPrivate::~ShareUiPrivate()
+ {
+ if(mContentItemModel)
+ {
+ delete mContentItemModel;
+ }
+ if(mContentListView)
+ {
+ delete mContentListView;
+ }
+ if(mSharePopup)
+ {
+ delete mSharePopup;
+ }
+ mIndexActionMap.clear();
+ mAiwRequestList.clear();
+ mFileList.clear();
+ }
+
+/**
+ * initialize and start the dialog
+ *
+ * @param fileList list of tokens that would allow file manipulation
+ * @return bool error false if dialog initialization failed, true otherwise.
+ *
+ */
+bool ShareUiPrivate::init(QStringList& fileList, bool embedded)
+ {
+ bool retval = false;
+ mFileList.clear();
+
+ if(fileList.count())
+ {
+ for(int i = 0; i < fileList.count(); i++)
+ {
+ mFileList.append(QDir::toNativeSeparators(fileList[i]));
+ }
+
+ mIsEmbedded = embedded;
+
+ initializeUi();
+
+ QList<XQAiwInterfaceDescriptor> serviceDescriptorList;
+ mIndexActionMap.clear();
+ mAiwRequestList.clear();
+ if(fetchServiceDescriptors(serviceDescriptorList))
+ {
+
+ HbAction* action;
+
+ for(int i = 0; i < serviceDescriptorList.count() ; i++)
+ {
+
+ if((action = fetchServiceAction(serviceDescriptorList[i])) != NULL)
+ {
+ updateShareUiDialogList(action);
+ }
+ }
+ retval = true;
+ }
+ else
+ {
+ updateShareUiDialogList(NULL);
+ }
+
+ enableUi();
+ }
+ return retval;
+ }
+
+/**
+ * Creates the view for the sendui dialog.
+ *
+ * @return bool true if initialization was successful, false otherwise.
+ */
+
+void ShareUiPrivate::initializeUi()
+ {
+ mSharePopup = new HbDialog();
+ mSharePopup->setHeadingWidget(new HbLabel(LOC_SEND_SELECTED_ITEM));
+ mSharePopup->setTimeout(HbDialog::NoTimeout);
+ mContentListView = new HbListView(mSharePopup);
+
+ mContentItemModel = new QStandardItemModel(mSharePopup);
+ mContentListView->setModel(mContentItemModel);
+ mSharePopup->setContentWidget(mContentListView);
+ mSharePopup->setFrameType(HbDialog::Strong);
+ mSharePopup->setPrimaryAction(new HbAction(LOC_BUTTON_CANCEL));
+
+ connect(mContentListView, SIGNAL(activated(QModelIndex)),this,SLOT(itemActivated(QModelIndex)));
+
+ }
+
+/**
+ * fetchServiceDescriptors
+ *
+ * Fetches the service descriptors using the Application Manager api.
+ * This function is in progress and will change.
+ *
+ * @return error boolean true if successfully fetched.
+ */
+
+bool ShareUiPrivate::fetchServiceDescriptors(QList<XQAiwInterfaceDescriptor>& serviceDescriptorList)
+ {
+ bool retval = false;
+
+ serviceDescriptorList = mAppManager.list(SERVICE_INTERFACE, SHARE_OP);
+
+ if(serviceDescriptorList.size() > 0)
+ {
+ retval = true;
+ }
+ return retval;
+ }
+
+
+/**
+ * fetchServiceAction fetches the action associated with a specified interface descriptor.
+ * This is used after the fetchServiceDescriptors is called, and
+ *
+ * @param serviceDescriptor ServiceDescriptor fetched using fetchServiceDescriptors
+ * @return error boolean true if successfully fetched.
+ */
+
+HbAction* ShareUiPrivate::fetchServiceAction(XQAiwInterfaceDescriptor interfaceDescriptor)
+ {
+
+ XQAiwRequest* request = mAppManager.create(interfaceDescriptor,SHARE_OP,mIsEmbedded);
+ mAiwRequestList.append(request);
+ HbAction* action = convertAction(request->createAction());
+ if(action)
+ {
+ connect(request, SIGNAL(triggered()), this, SLOT(onTriggered()));
+ connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&)));
+ connect(request, SIGNAL(requestError(int,const QString&)), this, SLOT(handleError(int,const QString&)));
+ }
+ return action;
+ }
+
+
+/**
+ * Update the SendUi Dialog (and associated list items) once the required
+ * information has been fetched.
+ *
+ * @params action HbAction* The action that must be associated with the entry at that point in the list.
+ */
+
+
+bool ShareUiPrivate::updateShareUiDialogList(HbAction* action)
+ {
+
+ bool retval = false;
+ QStandardItem* item = NULL;
+ if(action != NULL)
+ {
+ item = new QStandardItem(action->icon().qicon(),action->text());
+ mContentItemModel->appendRow(item);
+ QModelIndex index = item->index();
+ mIndexActionMap[index] = action;
+ retval = true;
+ }
+ else
+ {
+ item = new QStandardItem(QString("No Services Found"));
+ mContentItemModel->appendRow(item);
+ }
+ return retval;
+
+ }
+
+
+/**
+ *
+ * Enable the UI and show it on the screen.
+ *
+ *
+ */
+
+void ShareUiPrivate::enableUi()
+ {
+ mSharePopup->exec();
+ }
+
+/**
+ * Slot for handling send service selection on the UI
+ *
+ */
+
+
+void ShareUiPrivate::onTriggered(void)
+ {
+
+ XQAiwRequest* request = 0;
+ request = qobject_cast<XQAiwRequest*>(sender());
+ if(request)
+ {
+ request->setArguments(mFileList);
+ }
+ }
+
+/**
+ * Slot for handling valid returns from the framework.
+ *
+ * @param result const QVariant&
+ */
+
+void ShareUiPrivate::handleOk(const QVariant& result)
+ {
+ Q_UNUSED(result)
+ }
+
+/**
+ * Slot for handling errors. Error ids are provided as
+ * 32-bit integers. These are
+ *
+ * @param errorCode qint32
+ *
+ *
+ */
+void ShareUiPrivate::handleError(int errorCode, const QString& errorMessage)
+ {
+ Q_UNUSED(errorMessage)
+ QString errText("IPC Error: ");
+ HbNotificationDialog* dlg = new HbNotificationDialog();
+ dlg->setFocusPolicy(Qt::NoFocus);
+ dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+
+
+ switch(errorCode)
+ {
+ case XQService::EConnectionError:
+ errText.append(QString("EConnectionError: "));
+ break;
+ case XQService::EConnectionClosed:
+ errText.append(QString("EConnectionClosed: "));
+ break;
+ case XQService::EServerNotFound:
+ errText.append(QString("EServerNotFound: "));
+ break;
+ case XQService::EIPCError:
+ errText.append(QString("EIPCError: "));
+ break;
+ case XQService::EUnknownError:
+ errText.append(QString("EUnknownError: "));
+ break;
+ case XQService::ERequestPending:
+ errText.append(QString("ERequestPending: "));
+ break;
+ }
+ errText.append(errorMessage);
+ dlg->setText(errText);
+ dlg->show();
+ }
+
+
+
+/**
+ * When a list box item is pressed, this slot should be invoked. The action
+ * corresponding to the clicked list item should be invoked with the stored lis
+ * of files.
+ *
+ * @param index QModelIndex
+ *
+ */
+
+void ShareUiPrivate::itemActivated(QModelIndex index)
+ {
+
+ HbAction* action = mIndexActionMap[index];
+
+ if(action)
+ {
+ action->setEnabled(true);
+ action->activate(HbAction::Trigger);
+ }
+ mSharePopup->close();
+
+ }
+
+
+/**
+ * Convert a qaction to hbaction.
+ *
+ * @param action QAction*
+ * @return HbAction*
+ */
+
+HbAction* ShareUiPrivate::convertAction(QAction *action)
+ {
+ HbAction *actionHb = 0;
+ if (action)
+ {
+ actionHb = new HbAction(HbIcon(action->icon()), action->text());
+ actionHb->setVisible(action->isVisible());
+ actionHb->setCheckable(action->isCheckable());
+ actionHb->setEnabled(action->isEnabled());
+
+ connect(actionHb, SIGNAL(triggered()), action, SIGNAL(triggered()));
+ connect(actionHb, SIGNAL(changed()), action, SIGNAL(changed()));
+ connect(actionHb, SIGNAL(hovered()), action, SIGNAL(hovered()));
+ connect(actionHb, SIGNAL(toggled(bool)), action, SIGNAL(toggled(bool)));
+
+ action->setParent(actionHb);
+ }
+
+ return actionHb;
+ }