homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsinstallationlogstate.cpp
changeset 77 4b195f3bea29
child 96 458d8c8d9580
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsinstallationlogstate.cpp	Wed Aug 18 09:40:07 2010 +0300
@@ -0,0 +1,169 @@
+/*
+ * 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: Menu delete collection item state
+ *
+ */
+
+#include <HbDocumentLoader>
+#include <HbLabel>
+#include <HbMessageBox>
+#include <QAction>
+#include <hsmenuservice.h>
+#include <casoftwareregistry.h>
+
+#include "hsinstallationlogstate.h"
+
+/*!
+ \class HsInstallationLogState
+ \ingroup group_hsworkerstateplugin
+ \brief Uninstall Item State.
+ Deletes app from collection.
+ */
+
+/*!
+ Constructor.
+ \param parent Parent state.
+ */
+HsInstallationLogState::HsInstallationLogState(QState *parent) :
+    QState(parent),
+    mInstalationLogDialog(NULL)
+{
+    construct();
+}
+
+/*!
+ Destructor.
+ */
+HsInstallationLogState::~HsInstallationLogState()
+{
+    cleanUp(); // in case of throw
+}
+
+/*!
+ Constructs contained objects.
+ */
+void HsInstallationLogState::construct()
+{
+    setObjectName("/InstallationLogState");
+    if (this->parent()) {
+        setObjectName(this->parent()->objectName() + objectName());
+    }
+    connect(this, SIGNAL(exited()), SLOT(cleanUp()));
+}
+
+/*!
+ Sets entry event.
+ \param event entry event.
+ */
+void HsInstallationLogState::onEntry(QEvent *event)
+{
+    HSMENUTEST_FUNC_ENTRY("HsInstallationLogState::onEntry");
+    QState::onEntry(event);
+    qDebug("HsInstallationLogState::onEntry()");
+    
+    createInstallationLogDialog();
+
+    HSMENUTEST_FUNC_EXIT("HsInstallationLogState::onEntry");
+}
+
+/*!
+ Invoked on exiting state
+ */
+void HsInstallationLogState::onExit(QEvent *event)
+{
+    QState::onExit(event);
+}
+
+/*!
+ Create installation log dialog.
+ \retval void
+ */
+void HsInstallationLogState::createInstallationLogDialog()
+{
+    QList<CaSoftwareRegistry::DetailMap> detailsList =
+        CaSoftwareRegistry::create()->retrieveLogEntries();
+    
+    HbDocumentLoader loader;
+    bool loadStatusOk = false;
+    loader.load(HS_INSTALLATION_LOG_DIALOG_LAYOUT, &loadStatusOk);
+    Q_ASSERT_X(loadStatusOk, HS_INSTALLATION_LOG_DIALOG_LAYOUT,
+           "Error while loading docml file.");
+
+    mInstalationLogDialog = qobject_cast<HbDialog*>(
+        loader.findWidget(HS_INSTALLATION_LOG_DIALOG_NAME));
+    
+    if (mInstalationLogDialog != NULL) {
+        mInstalationLogDialog->actions()[0]->setParent(mInstalationLogDialog);
+        mInstalationLogDialog->setTimeout(HbPopup::NoTimeout);
+        mInstalationLogDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+    
+        HbLabel* logList;
+        QString applicationsList;
+        QString listElement("%1 (%2)\n%3 - ");
+        QString applicationName;
+        QString version;
+        QString date;
+        QString type;
+        QString installed(hbTrId("txt_applib_dialog_installed"));
+        QString removed(hbTrId("txt_applib_dialog_removed"));
+        QString newLine("\n");
+    
+        logList = qobject_cast<HbLabel*>(
+                loader.findWidget(HS_INSTALLATION_LOG_DIALOG_LOG_LABEL));
+
+        for (int i=0; i<detailsList.count(); i++) {
+            applicationName = detailsList[i].value(CaSoftwareRegistry::componentNameKey());
+            version = detailsList[i].value(CaSoftwareRegistry::componentVersionKey());
+            date = detailsList[i].value(CaSoftwareRegistry::componentTimeKey());
+            QString localListElement(listElement);
+            localListElement = localListElement.arg(applicationName).arg(version).arg(date);
+            type = detailsList[i].value(CaSoftwareRegistry::componentOperationTypeKey());
+            if ((type.compare(CaSoftwareRegistry::componentInstallValue()) == 0) ||
+                (type.compare(CaSoftwareRegistry::componentUpgradeValue()) == 0)) {
+                localListElement = localListElement + installed;
+                applicationsList = applicationsList + localListElement +
+                        newLine + newLine;
+            } else if (type.compare(CaSoftwareRegistry::componentUninstallValue()) == 0) {
+                localListElement = localListElement + removed;
+                applicationsList = applicationsList + localListElement + 
+                        newLine + newLine;
+            }
+        }
+
+        applicationsList.chop(2 * newLine.size());
+        logList->setPlainText(applicationsList);
+    
+        mInstalationLogDialog->open(this, SLOT(stateExited()));
+    }
+}
+
+void HsInstallationLogState::stateExited()
+{
+    mInstalationLogDialog = NULL;
+    emit exit();
+}
+
+/*!
+ Slot launched after state has exited and in destructor.
+ \retval void
+ */
+void HsInstallationLogState::cleanUp()
+{
+    // Close popups if App key was pressed
+    if (mInstalationLogDialog) {
+        mInstalationLogDialog->close();
+        mInstalationLogDialog = NULL;
+    }
+}
+