--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsappschecklist.cpp Fri Mar 19 09:27:44 2010 +0200
@@ -0,0 +1,232 @@
+/*
+ * 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:
+ *
+ */
+
+#include <hbaction.h>
+#include <hbinstance.h>
+#include <hbview.h>
+#include <hblistview.h>
+#include <hbdocumentloader.h>
+#include <hsmenuservice.h>
+#include <hsmenuitemmodel.h>
+
+#include "hsappschecklist.h"
+
+/*!
+ \class HsAppsCheckList
+ \ingroup group_hsmenustateplugin
+ \brief Application Library State.
+ State responsible for selecting a group of applications to be added to
+ a collection.
+ */
+
+/*!
+ \fn void commit(const QList<int> &appList);
+ Signal emitted when applications are selected.
+ \param appList application list.
+ */
+
+/*!
+ Constructor
+ \retval void
+ */
+HsAppsCheckList::HsAppsCheckList() :
+ mView(0), mActionConfirm(0), mListView(0), mModel(0), mSortAttribute(
+ AscendingNameHsSortAttribute)
+{
+}
+
+/*!
+ Destructor
+ */
+HsAppsCheckList::~HsAppsCheckList()
+{
+ cleanUp();
+}
+
+/*!
+ Cleans data
+ \retval void
+ */
+void HsAppsCheckList::cleanUp()
+{
+ //clean up
+ delete mListView;
+ mListView = NULL;
+ delete mActionConfirm;
+ mActionConfirm = NULL;
+ delete mView;
+ mView = NULL;
+ delete mModel;
+ mModel = NULL;
+ mSortAttribute = AscendingNameHsSortAttribute;
+}
+
+/*!
+ Sets sort order for applications.
+ \param sortAttribute sort order.
+ */
+void HsAppsCheckList::setSortOrder(HsSortAttribute sortOrder)
+{
+ mSortAttribute = sortOrder;
+}
+
+/*!
+ Shows check box list with all application.
+ \param sortAttribute order to sort applications.
+ */
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+void HsAppsCheckList::showAppsCheckboxList(HsSortAttribute sortOrder)
+{
+ HSMENUTEST_FUNC_ENTRY("HsAppsCheckList::showAppsCheckboxList");
+ if (!mModel) {
+ mModel = HsMenuService::getAllApplicationsModel(sortOrder);
+ }
+ // fills model with data
+ // constucts controls such as checklist
+ constructControls();
+
+ // Add mListView to main window
+ HbMainWindow *hbMainWindow = mainWindow();
+
+ // add action done
+ hbMainWindow->addSoftKeyAction(Hb::SecondarySoftKey, mActionConfirm);
+
+ // We need to add the above created view into main window.
+ // We also need to hide the navi pane and turn off switching views.
+ hbMainWindow->setViewSwitchingEnabled(false);
+ hbMainWindow->hideItems(Hb::NaviPaneItem);
+ hbMainWindow->addView(mView);
+ hbMainWindow->setCurrentViewIndex(hbMainWindow->viewCount() - 1);
+ hbMainWindow->show();
+ HSMENUTEST_FUNC_EXIT("HsAppsCheckList::showAppsCheckboxList");
+}
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAppsCheckList::constructControls()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAppsCheckList::constructControls");
+ if (!mActionConfirm) {
+ mActionConfirm = new HbAction(Hb::ConfirmAction, mView);
+ connect(mActionConfirm, SIGNAL(triggered()),SLOT(selectApplicationsDone()));
+ }
+
+ if (!mView) { // it implies that mListView is NULL as well
+
+ bool loadStatusOk = false;
+
+ HbDocumentLoader loader;
+ loader.load(HS_MENU_WORKER_STATE_PROVIDER_LAYOUT, &loadStatusOk);
+
+ Q_ASSERT_X(loadStatusOk,
+ HS_MENU_WORKER_STATE_PROVIDER_LAYOUT,
+ "Error while loading docml file.");
+
+ static const QString VIEW_WIDGET_NAME("view");
+ mView
+ = qobject_cast<HbView *> (loader.findWidget(VIEW_WIDGET_NAME));
+
+ mView->setParent(this);
+ // TODO: configure via docml
+ mView->setTitle(hbTrId("txt_applib_title_select_applications"));
+ static const QString LIST_VIEW_WIDGET_NAME("listView");
+ mListView = qobject_cast<HbListView *> (loader.findWidget(
+ LIST_VIEW_WIDGET_NAME));
+
+ mListView->setModel(mModel);
+ }
+ HSMENUTEST_FUNC_EXIT("HsAppsCheckList::constructControls");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+void HsAppsCheckList::selectApplicationsDone()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAppsCheckList::selectApplicationsDone");
+ // Remove mListView from main window and restore previous view.
+ HbMainWindow *hbMainWindow = mainWindow();
+ hbMainWindow->removeView(mView);
+ hbMainWindow->setCurrentViewIndex(hbMainWindow->viewCount()-1);
+ hbMainWindow->showItems(Hb::NaviPaneItem);
+ hbMainWindow->setViewSwitchingEnabled(true);
+ hbMainWindow->removeSoftKeyAction(Hb::SecondarySoftKey, mActionConfirm);
+
+ QItemSelectionModel *itemSelectionModel = mListView->selectionModel();
+ QList<int> itemsList;
+ if (itemSelectionModel) {
+ QModelIndexList modelIndexList =
+ itemSelectionModel->selectedIndexes();
+ itemsList = getSortedItemsList(modelIndexList);
+ }
+ emit commit(itemsList);
+ HSMENUTEST_FUNC_EXIT("HsAppsCheckList::selectApplicationsDone");
+}
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+QList<int> HsAppsCheckList::getSortedItemsList(
+ const QModelIndexList &modelIndexList)
+{
+ QMap<QString, int> itemsMap;
+
+ foreach(QModelIndex index, modelIndexList) {
+ int itemId = index.data(CaItemModel::IdRole).toInt();
+ QString itemName(index.data(Qt::DisplayRole).toString());
+ if (itemName.isNull()) {
+ itemName
+ = index.data(Qt::DisplayRole).toList()[0].toString();
+ }
+ itemsMap.insertMulti(itemName.toLower(), itemId);
+ }
+
+ QList<int> list = itemsMap.values();
+ if (mSortAttribute == DescendingNameHsSortAttribute) {
+ QList<int> reversedList;
+ int count = list.count();
+ for (int i = 0; i < count; i++) {
+ reversedList.append(list.takeLast());
+ }
+ list = reversedList;
+ }
+ return list;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+HbMainWindow *HsAppsCheckList::mainWindow() const
+{
+ return HbInstance::instance()->allMainWindows().value(0);
+}
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT