homescreenapp/stateplugins/hsapplibrarystateplugin/src/hslistviewitem.cpp
branchRCL_3
changeset 82 5f0182e07bfb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hslistviewitem.cpp	Tue Aug 31 15:06:34 2010 +0300
@@ -0,0 +1,131 @@
+/*
+ * 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: List View Item.
+ *
+ */
+
+#include <hbnamespace.h>
+#include <HbAbstractItemView>
+#include <HbStyleLoader>
+#include <QPainter>
+#include <caitemmodel.h>
+#include "hsmenuitemmodel.h"
+
+#include "hslistviewitem.h"
+
+
+// TODO: this is only temporary class for show progress bar.
+// It should be remove when fix from orbit will be in official platfrom.
+// Remove it from header too.
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+void HsProgressBar::paint(QPainter * painter, 
+        const QStyleOptionGraphicsItem * option, 
+        QWidget * widget)
+{
+    Q_UNUSED(widget)
+    QStyleOptionGraphicsItem pixmapOption(*option);
+    foreach (QGraphicsItem *child, childItems()) {
+        painter->save();            
+        painter->translate(child->pos());
+        pixmapOption.exposedRect = child->boundingRect();
+        child->paint(painter, &pixmapOption, 0);
+        
+        foreach (QGraphicsItem *child2, child->childItems()) {
+            if (child2->isVisible()) {
+                painter->save();            
+                painter->translate(child2->pos());
+                pixmapOption.exposedRect = child2->boundingRect();
+                child2->paint(painter, &pixmapOption, 0);
+                painter->restore(); 
+            }
+        }
+        painter->restore();
+    }
+}    
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+
+
+HsListViewItem::HsListViewItem(QGraphicsItem* parent) : 
+    HbListViewItem(parent), progress(0), isProgress(false)
+{   
+    setGraphicsSize(LargeIcon);
+    if (this == prototype()) {
+        HbStyleLoader::registerFilePath(":/layout/hslistviewitem.css");        
+    }
+}
+
+HsListViewItem::~HsListViewItem()
+{
+    if (this == prototype()) {
+        HbStyleLoader::unregisterFilePath(":/layout/hslistviewitem.css");
+        HbStyleLoader::unregisterFilePath(":/layout/hslistviewitem.widgetml");
+    }
+}
+
+void HsListViewItem::updateChildItems()
+{
+    HbListViewItem::updateChildItems();
+
+    EntryFlags flags = modelIndex().data(
+        CaItemModel::FlagsRole).value<EntryFlags> ();
+    isProgress = false;
+    if (flags & UninstallEntryFlag) {
+        isProgress = true;
+        if (!progress) {
+            progress = new HsProgressBar(this);
+            HbStyle::setItemName(progress, "progress"); 
+            progress->setRange(0, 100);
+            HbEffect::disable(progress);  
+            repolish();
+        }
+        int progresVal = modelIndex().data(
+                CaItemModel::UninstalRole).toInt();
+        progress->setProgressValue(progresVal);
+    } else if (progress) {       
+        delete progress;
+        progress = 0;
+        repolish();
+    }
+    // hide text-2 if we have to 
+    foreach (QGraphicsItem * item, this->childItems()) {
+        if (HbStyle::itemName(item) == "text-2") {
+            item->setVisible(!isProgress);            
+            break;
+        } 
+    }
+}
+
+HbAbstractViewItem*  HsListViewItem::createItem()
+{
+    return new HsListViewItem(*this);
+}
+
+
+void HsListViewItem::polish(HbStyleParameters& params)
+{       
+    if (isProgress) {
+        HbStyleLoader::registerFilePath(":/layout/hslistviewitem.widgetml");
+    }
+    HbListViewItem::setProperty("progress", isProgress);
+    HbListViewItem::polish(params);   
+    if (isProgress) {
+        HbStyleLoader::unregisterFilePath(":/layout/hslistviewitem.widgetml");
+    }
+}
+