iaupdate/IAD/ui/src/iaupdatemainview.cpp
branchRCL_3
changeset 25 7333d7932ef7
parent 19 f8cf9d484c15
child 26 8b7f4e561641
--- a/iaupdate/IAD/ui/src/iaupdatemainview.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/ui/src/iaupdatemainview.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -11,1021 +11,1183 @@
 *
 * Contributors:
 *
-* Description:   This module contains the implementation of CIAUpdateMainView class 
-*                member functions.
+* Description:   This module contains the implementation of IAUpdateMainView
+*                class member functions.
 *
 */
 
+#include <hbaction.h>
+#include <QGraphicsWidget>
+#include <QGraphicsLayout>
+#include <QGraphicsLayoutItem>
+#include <QGraphicsLinearLayout>
 
- 
-#include <eikmenup.h>
-#include <aknViewAppUi.h> 
-#include <akntitle.h> 
-#include <aknnavi.h> // CAknNavigationControlContainer
-#include <aknnavide.h> // CAknNavigationDecorator
-#include <AknUtils.h>
-#include <aknmessagequerydialog.h>      // CAknMessageQueryDialog
-#include <akntoolbar.h> 
-#include <StringLoader.h>
-#include <featmgr.h>  
-#include <iaupdate.rsg>
+#include <hbdockwidget.h>
+#include <hblistwidget.h>
+#include <hblistviewitem.h>
+#include <hblistwidgetitem.h>
+#include <hbtoolbar.h>
+#include <hbmenu.h>
+#include <hbdocumentloader.h>
+#include <xqconversions.h>
+#include <hbmessagebox.h>
+#include <hblabel.h>
+#include <hbgroupbox.h>
+#include <hbdataform.h>
+#include <hbtranslator.h>
 
-#include "iaupdate.hrh"
 #include "iaupdatemainview.h"
-#include "iaupdatemaincontainer.h"
-#include "iaupdatenode.h"
-#include "iaupdatefwnode.h"
-#include "iaupdatebasenode.h"
+#include "iaupdateengine.h"
+#include "iaupdateagreement.h"
+#include "iaupdatedeputils.h"
 #include "iaupdatedialogutil.h"
-#include "iaupdatestatusdialog.h"
-#include "iaupdateappui.h"
-#include "iaupdateuicontroller.h"
-#include "iaupdatedeputils.h"
+#include "iaupdateversion.h"
+
 #include "iaupdatedebug.h"
-#include "iaupdatefwupdatehandler.h"
-
-//CONSTANTS
-const TInt KKiloByte = 1024;
-const TInt KMegaByte = 1024 * 1024;
-const TInt KMaxShownInKiloBytes = 10 * KMegaByte;
-const TInt KSelInfoArrayGranularity = 3;
-
-//MACROS
-_LIT( KSpace, " " );
-
-// ============================ MEMBER FUNCTIONS ===============================
 
 
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView* CIAUpdateMainView::NewL( const TRect& aRect )
-    {
-    CIAUpdateMainView* self = CIAUpdateMainView::NewLC( aRect );
-    CleanupStack::Pop(self);
-    return self;
-    }
+const int KKiloByte = 1024;
+const int KMegaByte = 1024 * 1024;
+const int KMaxShownInKiloBytes = 10 * KMegaByte;
+const QString KTranslationsPath = "/resource/qt/translations/";
+const QString KTranslationsFile = "swupdate";
+
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::NewLC
-// 
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView* CIAUpdateMainView::NewLC( const TRect& aRect )
-    {
-    CIAUpdateMainView* self = new (ELeave) CIAUpdateMainView();
-    CleanupStack::PushL( self );
-    self->ConstructL( aRect );
-    return self;
-    }
+IAUpdateMainView::IAUpdateMainView(IAUpdateEngine *engine):
+mEngine(engine)        
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::IAUpdateMainView() begin");
+    mFwListView = NULL;
+    mApplicationUpdatesGroupBox = NULL;;
+    mFwNSUGroupBox = NULL;
+    mContentDataForm = NULL;
+    mDialogUtil = NULL;
+    mDialogState = NoDialog;
+    mPrimaryAction = NULL;
+    mNode = NULL;
+    mSelectionUpdate = false;
+    mSelectionConnect = false;
+    mTranslator = NULL;
+        
+    //mTranslator = new HbTranslator(KTranslationsPath, KTranslationsFile);
+    
+    HbDocumentLoader loader;
+    bool ok = false;
+    loader.load(":/xml/iaupdate_mainview.docml", &ok);
+        
+    // Exit if the file format is invalid
+    Q_ASSERT_X(ok, "Software update", "Invalid docml file");
+    // Create the view from DocML
+    
+    HbView* loadedWidget = qobject_cast<HbView*>(loader.findWidget("view"));
+    Q_ASSERT_X(loadedWidget != 0, "Software update", "View not found");
+    QString viewTitle(loadedWidget->title());
+    // Set the IAUpdateMainView view to be the widget that was loaded from the xml
+    setWidget(loadedWidget);
+    setTitle(viewTitle);
+      
+    HbToolBar *toolBar = qobject_cast< HbToolBar*>( loader.findWidget("viewToolbar") );
+    //setToolBar(toolBar);
+    
+    HbMenu *menu = qobject_cast< HbMenu*>( loader.findWidget("viewMenu") );
+    setMenu(menu);
+    
+    //Get the Action objects from the docml file
+    HbAction *action = qobject_cast<HbAction*>(loader.findObject("action"));
+    HbAction *action_1 = qobject_cast<HbAction*>(loader.findObject("action_1"));
+    HbAction *action_2 = qobject_cast<HbAction*>(loader.findObject("action_2"));
+    
+    connect(action, SIGNAL(triggered()), this, SLOT(handleStartUpdate()));
+    connect(action_1, SIGNAL(triggered()), this, SLOT(handleSettings()));
+    connect(action_2, SIGNAL(triggered()), this, SLOT(handleDisclaimer()));
+        
+    mContent = qobject_cast< HbWidget*>( loader.findWidget("content") );
+           
+    mListView = qobject_cast<HbListWidget*>( loader.findWidget("listWidget") );
+    mListView->setSelectionMode( HbAbstractItemView::MultiSelection );
+    
+    connect( mListView, SIGNAL( longPressed( HbAbstractViewItem *, const QPointF & ) ),
+            this, SLOT( handleDetails( HbAbstractViewItem *, const QPointF & ) ) ); 
+        
+    HbListViewItem *prototype = mListView->listItemPrototype();
+
+    prototype->setGraphicsSize(HbListViewItem::LargeIcon);
+    
+    HbDockWidget *dock = new HbDockWidget(this);
+    HbWidget *dockContainer = new HbWidget(dock);
+    QGraphicsLinearLayout *dockLayout = new QGraphicsLinearLayout(dockContainer);
+    dockLayout->setOrientation(Qt::Vertical);
+    dockContainer->setLayout(dockLayout);
+    
+    mSelections = new HbGroupBox(dockContainer);
+    mSelections->setHeading("Selected 0/0 (0 kB)");
+    //QString selectedString = QString(hbTrId("txt_software_subhead_selected_1l_2l_3l_kb")).arg(0).arg(0).arg(0);
+    //mSelections->setHeading(selectedString);                                            
+    
+    dockLayout->addItem( mSelections);
+    
+    dockLayout->addItem(toolBar);
+    
+    dock->setWidget(dockContainer);
+    
+    setDockWidget(dock);
+
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::IAUpdateMainView() end");
+}
+    
+IAUpdateMainView::~IAUpdateMainView()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::~IAUpdateMainView() begin");
+    //delete mTranslator;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::~IAUpdateMainView() end");
+}
 
 // -----------------------------------------------------------------------------
-// CIAUpdateMainView::CIAUpdateMainView
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView::CIAUpdateMainView()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::~CIAUpdateMainView
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CIAUpdateMainView::~CIAUpdateMainView()
-    {
-    delete iDecorator;
-    iAllNodes.Close();
-    if ( iContainer )
-        {
-    	AppUi()->RemoveFromStack( iContainer );
-    	delete iContainer;
-        }
-    delete iFwUpdateHandler;
-    }
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::ConstructL( const TRect& /*aRect*/ )
-    {
-    BaseConstructL( R_IAUPDATE_MAIN_VIEW );
-    Toolbar()->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue, ETrue );
-    Toolbar()->SetItemDimmed( EIAUpdateCmdMarkedUpdateDetails, ETrue, ETrue );
-    Toolbar()->SetItemDimmed( EIAUpdateCmdUpdateHistory, ETrue, ETrue );
-    Toolbar()->SetToolbarObserver( this ); 
-    iFwUpdateHandler = CIAUpdateFWUpdateHandler::NewL();
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::RefreshL
+// IAUpdateMainView::refresh
 // Refreshes update list
 // -----------------------------------------------------------------------------
 //    
-void CIAUpdateMainView::RefreshL( const RPointerArray<MIAUpdateNode>& aNodes,
-                                  const RPointerArray<MIAUpdateFwNode>& aFwNodes,
-                                  TInt aError  )
-    {   
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL begin");
-    iRefreshError = aError;    
-    iAllNodes.Reset();
+void IAUpdateMainView::refresh(const RPointerArray<MIAUpdateNode> &nodes,
+                               const RPointerArray<MIAUpdateFwNode> &fwNodes,
+                               int error)
+{   
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh() begin");
+    removeCurrentContentLayout();
         
-    if ( aFwNodes.Count() > 0 )
+    refreshFirmwareUpdates(fwNodes);
+    
+    refreshApplicationUpdates(nodes);
+    
+    if (nodes.Count() == 0 && fwNodes.Count() == 0 && 
+        error != KErrCancel && error != KErrAbort)
+    {    
+        if (!mContentDataForm)
+        {
+            mContentDataForm  = new HbDataForm(mContent); 
+        }
+        QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+        linearLayout->addItem(mContentDataForm);
+        QString formText;
+        
+        if (error == KErrNone)
+        {
+            formText = QString("Applications are up to date");
+            //formText = hbTrId("txt_software_formlabel_applications_are_up_to_date");
+        }
+        else
         {
-        IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL hard code importance");
-        //hardcode the importance of firmware as Critical
-        for ( TInt i = 0; i < aFwNodes.Count(); i++ )
-             {
-             aFwNodes[i]->Base().SetImportance( MIAUpdateBaseNode::ECritical );
-             }
-         
-        //either NSU or FOTA available
-        if ( aFwNodes.Count() == 1 )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL either NSU or FOTA available");
-            MIAUpdateAnyNode* node = aFwNodes[0];
-            User::LeaveIfError( iAllNodes.Append( node ) );
-            }
-        
-        //both NSU and FOTA available, show only FOTA node
-        if ( aFwNodes.Count() == 2 )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] CIAUpdateMainView::RefreshL both NSU and FOTA available");
-            MIAUpdateAnyNode* node1 = aFwNodes[0];
-            MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( node1 );
-            if ( fwnode->FwType() == MIAUpdateFwNode::EFotaDp2  )
-                {
-                User::LeaveIfError( iAllNodes.Append( node1 ) );
-                }
-            else
-                {
-                MIAUpdateAnyNode* node2 = aFwNodes[1];
-                User::LeaveIfError( iAllNodes.Append( node2 ) );
-                }
+            formText = QString("Refreshing failed. Try again later.");
+        }
+        mContentDataForm->setDescription(formText);
+    }
+    updateSelectionInfoInDock();  
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh() end");
+}
+
+
+
+
+void IAUpdateMainView::handleStartUpdate()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleStartUpdate() begin");
+    mEngine->StartUpdate(fotaSelected());
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleStartUpdate() end");
+}
+
+
+void IAUpdateMainView::handleSettings()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSettings() begin");
+    emit toSettingView();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSettings() end");
+}
+
+void IAUpdateMainView::handleDisclaimer()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDisclaimer() begin");
+    if (!mDialogUtil)
+    {
+        mDialogUtil = new IAUpdateDialogUtil(this);
+    }
+    if (mDialogUtil)
+    {
+        HbAction *primaryAction = new HbAction(hbTrId("txt_common_button_ok"));
+        mDialogUtil->showAgreement(primaryAction);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDisclaimer() end");
+}
+
+void IAUpdateMainView::handleDetails(HbAbstractViewItem * item, const QPointF &)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDetails() begin");
+    int ind = item->modelIndex().row();
+    if (getApplicationNode(ind) != NULL)
+    {    
+        showDetails(*getApplicationNode(ind));
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDetails() end");
+}
+
+void IAUpdateMainView::handleFotaDetails(HbAbstractViewItem *, const QPointF &)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFotaDetails begin");
+    //only one FOTA item in a list, just use it
+    for (int i = 0; i < mFwNodes.Count(); i++)
+    {
+        if (mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            showDetails(*mFwNodes[i]);
+        }
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFotaDetails end");
+}
+
+
+void IAUpdateMainView::handleSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSelectionChanged begin");
+    if (!mSelectionUpdate)
+    {
+        bool changedItemFound = false; 
+        QModelIndexList indexList = selected.indexes();
+        for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+        {    
+            changedItemFound = true;
+            markListItem(true, indexList.at(i).row());
+        }
+        if (!changedItemFound)
+        {
+            indexList = deselected.indexes();
+            for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+            {    
+                changedItemFound = true;
+                markListItem(false, indexList.at(i).row());
             }
         }
-    
-   
-    for( TInt i = 0; i < aNodes.Count(); ++i ) 
-        {
-        MIAUpdateAnyNode* node = aNodes[i];
-        User::LeaveIfError( iAllNodes.Append( node ) );
-        }
-        
-    if( iContainer )
-        {        
-        iContainer->RefreshL( iAllNodes, iRefreshError );  
-        SetSelectedIndicesL();     
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        }    
-     Toolbar()->SetItemDimmed( EIAUpdateCmdUpdateHistory, EFalse, ETrue );
-     }
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetCurrentNode
-// 
-// -----------------------------------------------------------------------------
-//    
-MIAUpdateAnyNode* CIAUpdateMainView::GetCurrentNode()
-   {
-   if ( iContainer )
-      {
-   	  return iContainer->GetCurrentNode( iAllNodes ); 	 
-      }
-   return NULL;   
-   }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetSelectedNode
-// 
-// -----------------------------------------------------------------------------
-//    
-MIAUpdateAnyNode* CIAUpdateMainView::GetSelectedNode()
-   {
-   MIAUpdateAnyNode* selectedNode = NULL;
-   for( TInt i = 0; i < iAllNodes.Count() && !selectedNode ; ++i )
-       {
-       if ( iAllNodes[i]->Base().IsSelected() )
-           {
-           selectedNode = iAllNodes[i];
-           }
-       }
-    return selectedNode;   
-   }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::Id
-// Get Uid of this view
-// -----------------------------------------------------------------------------
-//       
-TUid CIAUpdateMainView::Id() const
-    {
-    return TUid::Uid( EIAUpdateMainViewId );
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSelectionChanged end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::HandleCommandL
-// 
-// -----------------------------------------------------------------------------
-// 
-void CIAUpdateMainView::HandleCommandL( TInt aCommand )
+void IAUpdateMainView::handleFwSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFwSelectionChanged begin");
+    if (!mSelectionUpdate)
     {
-    switch( aCommand ) 
-        {  
-        case EIAUpdateCmdStartUpdate:
-            {
-            RPointerArray<MIAUpdateAnyNode> selectedNodes;
-            CleanupClosePushL( selectedNodes );
-            GetSelectedNodesL( selectedNodes ); 
-            if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                {
-                //the marking logic will make sure firmware won't be marked with normal sis updates
-                //at the same time.
-                iFwUpdateHandler->FirmWareUpdatewithFOTA();
-                }
-            else
-                {
-                AppUi()->HandleCommandL( aCommand );
-                }
-            CleanupStack::PopAndDestroy( &selectedNodes );
-            break;    
-            }
-        case EIAUpdateCmdUpdateWithPC:
-            {
-            iFwUpdateHandler->FirmWareUpdatewithNSU();
-            break;
-            }
-        case EIAUpdateCmdSettings:
-            {
-            Toolbar()->SetToolbarVisibility( EFalse );
-            AppUi()->HandleCommandL( aCommand );
-            Toolbar()->SetToolbarVisibility( ETrue );
-            break;
-            }
-        case EAknSoftkeyMark:
-            {
-            iContainer->HandleMarkCommandL( EAknCmdMark );
-            break;	
-            }
-        case EAknSoftkeyUnmark:
-            {
-            iContainer->HandleMarkCommandL( EAknCmdUnmark );
-            break;	
-            }
-        case EAknCmdMark:        
-        case EAknCmdUnmark:
-            {
-            iContainer->HandleMarkCommandL( aCommand );
-            break;	
-            }
-        default:
-            { 
-            AppUi()->HandleCommandL( aCommand );
-            break;
+        bool changedItemFound = false; 
+        QModelIndexList indexList = selected.indexes();
+        for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+        {    
+            changedItemFound = true;
+            markFotaItem(true);
+        }
+        if (!changedItemFound)
+        {
+            indexList = deselected.indexes();
+            for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+            {    
+                changedItemFound = true;
+                markFotaItem(false);
             }
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFwSelectionChanged end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DynInitMenuPaneL
-// Dim options which are not availble in empty list.
-// Set Mark/Unmark option
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateMainView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+
+void IAUpdateMainView::dialogFinished(HbAction *action)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::dialogFinished begin");
+    DialogState dialogState = mDialogState;
+    mDialogState = NoDialog;
+    
+    switch ( dialogState )
     {
-    if( aResourceId == R_IAUPDATE_MAIN_MENU ) 
-        {
-        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        case Dependencies:
+            if (action == mPrimaryAction)
             {
-            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+                updateSelectionsToNodeArray(*mNode,mMark);
             }
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        CleanupClosePushL( selectedNodes );
-        GetSelectedNodesL( selectedNodes ); 
-                    
-        if ( selectedNodes.Count() )
+            updateSelectionsToList();
+            updateSelectionInfoInDock();
+            break;
+        case CannotOmit:    
+            break;
+        case Details:
+            break; 
+        default: 
+            break;
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::dialogFinished end");
+}
+
+bool IAUpdateMainView::fotaSelected() const
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() begin");
+    bool selected = false;
+    for (int i = 0; i < mFwNodes.Count() && !selected; ++i)
+    {
+        if ( mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2 && mFwNodes[i]->Base().IsSelected() )
+        {    
+            selected = true;
+        }
+    }
+    if (selected)
+        {
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() Fota item is selected");
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() end");
+    return selected;
+}
+
+
+
+void IAUpdateMainView::markListItem(bool mark, int index)
+{
+    IAUPDATE_TRACE_2("[IAUPDATE] IAUpdateMainView::markListItem() begin mark: %d index %d", mark, index);
+    if (mark)
+    {
+        //It's Mark Command
+        if (fotaSelected())
+        {    
+            //FOTA item is selected, unmark FOTA item
+            //FOTA item and application update items can't be selected at the same time 
+            markFotaItem(false);
+        }    
+    }
+       
+    bool accepted = false;
+        
+    if(index > -1)
+    {
+        accepted = true;
+        MIAUpdateNode* node = mNodes[index];
+        RPointerArray<MIAUpdateNode> mands;
+        RPointerArray<MIAUpdateNode> deps;
+           
+        if (mark)
+        {
+            TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*node, mNodes, deps));
+            if (err != KErrNone)
             {
-            if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            if (!getMandatoryNodes(mands))
                 {
-                //firmware is selected
-                MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( selectedNodes[0] );
-            
-                if ( node->FwType() == MIAUpdateFwNode::EFotaDp2 )
-                    {
-                    aMenuPane->SetItemDimmed( EIAUpdateCmdUpdateWithPC, ETrue );
-                    }
-                    
-                if ( node->FwType() == MIAUpdateFwNode::EFotiNsu )
-                    {
-                    aMenuPane->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue );
+                // error when creating mandatory node list
+                mands.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+                }
+        }
+        else
+        {
+            //mandatory item is not allowed to be unmarked
+            if (mNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+            {
+                //show dialog  
+                showUpdateCannotOmitDialog();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            TRAPD(err,IAUpdateDepUtils::GetDependantsL(*node, mNodes, deps));  
+            if (err != KErrNone)
+            {
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            // item is not allowed to be unmarked if its dependant is mandatory
+            bool mandatoryDependantFound = false;
+            for(int i = 0; i < deps.Count() && !mandatoryDependantFound; i++)
+            {
+                if (deps[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+                {
+                    mandatoryDependantFound = true;
+                }
+            }
+            if (mandatoryDependantFound)
+            {
+                showUpdateCannotOmitDialog();
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+        }
+             
+        int depCount = deps.Count();
+           
+        if (depCount > 0)
+        {
+            QString text;
+            QString names;
+            MIAUpdateNode* depNode = NULL;
+            QString separator(",");
+                       
+            for(int i = 0; i < depCount; i++)  
+            {
+                depNode = deps[i];
+                if (i > 0)
+                {
+                    names.append(separator);
+                    names.append(QString(" "));
+                }
+                names.append(XQConversions::s60DescToQString(depNode->Base().Name()));
+            }
+
+            if (mark)
+            {
+                if (depCount > 1) 
+                {
+                    text.append("This update needs also updates "); 
+                    text.append(names);
+                    text.append(" for working");
+                } 
+                else
+                {
+                    text.append("This update needs also \""); 
+                    text.append(names);
+                    text.append("\" for working");
                     }
                 }
             else
+            {
+                if (depCount > 1) 
                 {
-                //firmware is not selected, only sis
-                aMenuPane->SetItemDimmed( EIAUpdateCmdUpdateWithPC, ETrue );
-                }
+                    text.append("Updates "); 
+                    text.append(names);
+                    text.append(" need this update for working");
+                } 
+                else
+                {
+                    text.append("Update \""); 
+                    text.append(names);
+                    text.append("\" needs this update for working");
+                }   
             }
-        else
+                
+            if (mark && mNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+            {
+                // depencencies of mandatory update are also selected without showing dialog
+                accepted = true;
+            }
+            else
             {
-            aMenuPane->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue );
-            aMenuPane->SetItemDimmed( EIAUpdateCmdUpdateWithPC, ETrue );
+                mNode = node;
+                mMark = mark;
+                accepted = false;
+                showDependenciesFoundDialog(text);
             }
-        CleanupStack::PopAndDestroy( &selectedNodes );
+        }
+        if (accepted)
+        {    
+            updateSelectionsToNodeArray(*node, mark);   
         }
     }
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DoActivateL
-// Activate view
-// -----------------------------------------------------------------------------
-// 
-void  CIAUpdateMainView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
-                                      TUid /*aCustomMessageId*/, 
-                                      const TDesC8& /*aCustomMessage*/ )
-    {
-    UpdateStatusPaneL();
-    Toolbar()->SetToolbarVisibility( ETrue );
-    if( !iContainer )
-        {    
-        iContainer = CIAUpdateMainContainer::NewL( ClientRect(), *this );
-   
-        if( iAllNodes.Count() > 0 )
-            {            
-            iContainer->RefreshL( iAllNodes, iRefreshError );
-            }
-  
-        SetSelectedIndicesL();  
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        AppUi()->AddToStackL( iContainer ); 
-        }
-    else
-        {
-        UpdateSelectionInfoInNaviPaneL();	
-        }
+    if (accepted)
+    {    
+        updateSelectionsToList();
+        updateSelectionInfoInDock();
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() end");
+}       
+
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DoDeactivate()
-// Container is deleted in deactivation
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::DoDeactivate()
-    {
-    RemoveSelectionInfoInNaviPane();
-    Toolbar()->SetToolbarVisibility( EFalse );
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::DynInitToolbarL()
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar )
+void IAUpdateMainView::markFotaItem(bool mark)
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateMainView::markFotaItem() begin mark: %d", mark);
+    if (mark)
     {
-    if ( aResourceId == R_IAUPDATE_MAIN_TOOLBAR )
+        //It's Mark Command
+                
+        //if some of application update item(s) are selected, unmark them
+        //FOTA item and application update items can't be selected at the same time 
+        bool deselected = false;
+        for (int i = 0; i < mNodes.Count(); ++i)
         {
-        if ( iContainer )
+            if (mNodes[i]->Base().IsSelected())
             {
-            if ( CountOfSelectedItems() > 0 )
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdStartUpdate, EFalse, ETrue );
-                }
+                mNodes[i]->Base().SetSelected(false);
+            }
+        } 
+        if (deselected)
+        {    
+            // umnmarked items to be updated also to UI
+            updateSelectionsToList();
+        }    
+    }
+    for (int j = 0; j < mFwNodes.Count(); ++j)
+    {    
+        if (mFwNodes[j]->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            mFwNodes[j]->Base().SetSelected(mark);
+            if (mark)
+            {
+                mFwListView->selectionModel()->select(mFwListView->model()->index(0,0),QItemSelectionModel::Select);
+            }
             else
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdStartUpdate, ETrue, ETrue );
-                }
-            if ( CountOfSelectedItems() == 1 )
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdMarkedUpdateDetails, EFalse, ETrue );
-                }
-            else
-                {
-                aToolbar->SetItemDimmed( EIAUpdateCmdMarkedUpdateDetails, ETrue, ETrue );
-                }
+            {
+                mFwListView->selectionModel()->select(mFwListView->model()->index(0,0),QItemSelectionModel::Deselect);
             }
         }
     }
+    updateSelectionInfoInDock();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markFotaItem() end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::OfferToolbarEventL()
-//
-// -----------------------------------------------------------------------------
-//            
-void CIAUpdateMainView::OfferToolbarEventL( TInt aCommand )
-    {
-    if ( aCommand == EIAUpdateCmdStartUpdate )
-        {
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        CleanupClosePushL( selectedNodes );
-        GetSelectedNodesL( selectedNodes ); 
-        
-        if ( selectedNodes.Count() )
-            {
-            if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                {
-                //firmware is selected
-                MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( selectedNodes[0] );
-            
-                if ( node->FwType() == MIAUpdateFwNode::EFotaDp2 )
-                    {
-                    aCommand = EIAUpdateCmdStartUpdate;
-                    }
-                    
-                if ( node->FwType() == MIAUpdateFwNode::EFotiNsu )
-                    {
-                    aCommand = EIAUpdateCmdUpdateWithPC;
-                    }
-                }
-            else
-                {
-                //firmware is not selected, only sis
-                aCommand = EIAUpdateCmdStartUpdate;
-                }
-            }
-        else
-            {
-             MIAUpdateAnyNode* currentNode = GetCurrentNode(); 
-             if ( currentNode->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                 {
-                 MIAUpdateFwNode* node = static_cast<MIAUpdateFwNode*>( currentNode );
-                 if ( node->FwType() == MIAUpdateFwNode::EFotiNsu )
-                     {
-                     aCommand = EIAUpdateCmdUpdateWithPC;
-                     }
-                 } 
-            }
 
-        CleanupStack::PopAndDestroy( &selectedNodes );   
-        }
-    HandleCommandL( aCommand );
-    }
 
 
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::MarkListItemL
-// Mark list item
-// -----------------------------------------------------------------------------
-//    
-TBool CIAUpdateMainView::MarkListItemL( TBool aMark, TInt aIndex )
+void IAUpdateMainView::updateSelectionsToNodeArray(MIAUpdateNode &node, bool mark)   
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToNodeArray() begin");
+    RPointerArray<MIAUpdateNode> deps;  
+    TInt err = KErrNone;
+    if (mark)
     {
-    if ( aMark )
+        TRAP(err,IAUpdateDepUtils::GetDependenciesL(node, mNodes, deps));
+    }
+    else
+    {
+        TRAP(err,IAUpdateDepUtils::GetDependantsL(node, mNodes, deps)); 
+    }
+    if (err  == KErrNone )
+    {    
+        int depCount = deps.Count(); 
+        for(int i = 0; i < depCount; i++)
         {
-        //It's Mark Command
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        CleanupClosePushL( selectedNodes );
-        GetSelectedNodesL( selectedNodes ); 
-        
-        //There are selected items already and type are different with the current one
-        if ( selectedNodes.Count() > 0 && (iAllNodes[aIndex]->NodeType() != selectedNodes[0]->NodeType() ) )
-            {       
-            /*HBufC* msgText = StringLoader::LoadLC(R_IAUPDATE_FIRMWARE_WITH_OTHERS);
-
-            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-       
-            dlg->ExecuteLD( R_IAUPDATE_INFORMATION_QUERY, *msgText );
-            
-            CleanupStack::PopAndDestroy( msgText );*/
-            
-            //clean all of the current selection(s)
-            iContainer->CleanAllSelection();
-            
-            // firmware item and normal sis items can't be selected at the same time
-            // unmark the selected nodes.
-            for ( TInt i = 0; i < selectedNodes.Count(); i++ )
-                {                
-                TInt index = iAllNodes.Find( selectedNodes[i]);
-                iAllNodes[index]->Base().SetSelected( EFalse );
-                }
-            }
-        
-        CleanupStack::PopAndDestroy( &selectedNodes );
+            int depNodeInd = mNodes.Find(deps[i]);
+            mNodes[depNodeInd]->Base().SetSelected(mark);
         }
+        deps.Close();
+        int nodeInd = mNodes.Find(&node);
+        mNodes[nodeInd]->Base().SetSelected(mark);
+    }                
     
-    //there is no selected items or the type is the same with the current one
-    
-    if ( iAllNodes[aIndex]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
+    //mark all of the mandatory items
+    if ( mark )
+    {    
+        RPointerArray<MIAUpdateNode> mands;    
+        if (getMandatoryNodes(mands))
         {
-        iAllNodes[aIndex]->Base().SetSelected( aMark );       
-        
-        if ( aMark )
-            {
-            SetMiddleSKTextL( ETrue, ETrue );
-            }
-        else
+            int mandCount = mands.Count();
+            if (mandCount > 0)
             {
-            SetMiddleSKTextL( ETrue, EFalse );  
-            }  
-        UpdateSelectionInfoInNaviPaneL();
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        return ETrue;
-        }
-    
-    if ( iAllNodes[aIndex]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-        {
-        TBool accepted = EFalse;
-        
-        if( aIndex > -1 )
-            {
-            accepted = ETrue;
-            
-            MIAUpdateNode* node = static_cast<MIAUpdateNode*>( iAllNodes[aIndex] );
-            RPointerArray<MIAUpdateAnyNode> mands;
-            RPointerArray<MIAUpdateNode> deps;
-           
-            if ( aMark )
+                for(int i = 0; i < mandCount; i++)
                 {
-                CleanupClosePushL( mands );
-                CleanupClosePushL( deps );
-                IAUpdateDepUtils::GetDependenciesL( *node, iAllNodes, deps );
-                GetMandatoryNodesL( mands );
-                }
-            else
-                {
-                //mandatory item is not allowed to be unmarked
-                if ( iAllNodes[aIndex]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
+                    int mandNodeInd = mNodes.Find(mands[i]);
+                    mNodes[mandNodeInd]->Base().SetSelected(mark);
+                    if (mNodes[mandNodeInd]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
                     {
-                    //show dialog  
-                    ShowUpdateCannotOmitDialogL();
-                    return EFalse;
-                    }
-                
-                CleanupClosePushL( deps );
-                IAUpdateDepUtils::GetDependantsL( *node, iAllNodes, deps );  
-                // item is not allowed to be unmarked if its dependant is mandatory
-                TBool mandatoryDependantFound = EFalse;
-                for( TInt i = 0; i < deps.Count() && !mandatoryDependantFound; i++ )
-                     {
-                     if ( deps[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
-                         {
-                         mandatoryDependantFound = ETrue;
-                         }
-                     }
-                if ( mandatoryDependantFound )
-                    {
-                    ShowUpdateCannotOmitDialogL();
-                    CleanupStack::PopAndDestroy( &deps );
-                    return EFalse;
+                        // mark also all dependencies of a mandatory item
+                        MIAUpdateNode* dependencyNode = mNodes[mandNodeInd];
+                        RPointerArray<MIAUpdateNode> dependencies;
+                        TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*dependencyNode, mNodes, dependencies));
+                        if (err)
+                        {
+                            dependencies.Close(); 
+                            mands.Close();
+                            return;
+                        }
+                        for(int j = 0; j < dependencies.Count(); j++)
+                        {
+                            int depNodeInd = mNodes.Find(dependencies[j]);
+                            mNodes[depNodeInd]->Base().SetSelected(true);
+                        }
+                        dependencies.Close();
                     }
                 }
-             
-            TInt depCount = deps.Count();
-           
-            if ( depCount > 0 )
-                {
-                HBufC* text = NULL;
-                HBufC* names = NULL;
-                MIAUpdateNode* depNode = NULL;
-                HBufC* separator = NULL;
-                
-                if ( depCount > 1 )
-                    {                                 
-                    separator = StringLoader::LoadLC( R_IAUPDATE_SEPARATOR );
-                    }
-                
-                names = HBufC::NewLC( 0 );
-                       
-                for( TInt i = 0; i < depCount; i++ )  
-                    {
-                    depNode = deps[i];
-                    HBufC* temp = NULL;
-                    if ( separator )
-                        {
-                        temp = names->ReAllocL( names->Length() + 
-                                                depNode->Base().Name().Length() +
-                                                separator->Length() +
-                                                KSpace.iTypeLength );
-                        }
-                    else
-                        {
-                        temp = names->ReAllocL( names->Length() + 
-                                                depNode->Base().Name().Length() +
-                                                KSpace.iTypeLength );
-                        }
-                   
-                    CleanupStack::Pop( names );
-                    names = temp; 
-                    CleanupStack::PushL( names ); 
-                    
-                    if (  i > 0 )
-                        {
-                        names->Des() += *separator;
-                        names->Des() += KSpace; 
-                        }
-                    names->Des() += depNode->Base().Name();
-                    }
-                
-                TInt resourceId = 0;    
-                if ( aMark )
-                    {
-                    if ( depCount > 1 ) 
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_MARK_MANY;
-                        } 
-                    else
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_MARK_ONE;    
-                        }
-                    }
-                else
-                    {
-                    if ( depCount > 1 ) 
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_UNMARK_MANY;
-                        } 
-                    else
-                        {
-                        resourceId = R_IAUPDATE_DEPENDENCY_UNMARK_ONE;  
-                        }   
-                    }
-                text = StringLoader::LoadLC( resourceId, *names );
-                
-                if ( aMark && iAllNodes[aIndex]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
-                    {
-                    // depencencies of mandatory update are also selected without showing dialog
-                    accepted = ETrue;
-                    }
-                else
-                    {
-                    accepted = ShowDependenciesFoundDialogL( *text );
-                    }
-                CleanupStack::PopAndDestroy( text );
-                CleanupStack::PopAndDestroy( names );
-                
-                if ( separator )
-                    {
-                    CleanupStack::PopAndDestroy( separator );
-                    }
-                }
-            
-            if ( accepted )
-                {
-                for( TInt j = 0; j < depCount; j++ )
-                    {
-                    TInt depNodeInd = iAllNodes.Find( deps[j] );
-                    iAllNodes[depNodeInd]->Base().SetSelected( aMark );
-                    }
-                CleanupStack::PopAndDestroy( &deps );
-                
-                TInt nodeInd = iAllNodes.Find( node );
-                iAllNodes[nodeInd]->Base().SetSelected( aMark );
-                }
-            else
-                {
-                //user rejects the dependency dialog
-                CleanupStack::PopAndDestroy( &deps );
-                if ( aMark )
-                    {
-                    CleanupStack::PopAndDestroy( &mands );
-                    }
-                return EFalse;
-                }
-                
-            //mark all of the mandatory items
-            TInt mandCount = mands.Count();
-            if ( mandCount > 0 && aMark )
-                {
-                for( TInt j = 0; j < mandCount; j++ )
-                    {
-                    TInt mandNodeInd = iAllNodes.Find( mands[j] );
-                    iAllNodes[mandNodeInd]->Base().SetSelected( aMark );
-                    if ( iAllNodes[mandNodeInd]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-                        {
-                        // mark also all dependencies of a mandatory item
-                        MIAUpdateNode* dependencyNode = static_cast<MIAUpdateNode*>( iAllNodes[mandNodeInd] );
-                        RPointerArray<MIAUpdateNode> dependencies;
-                        CleanupClosePushL( dependencies );
-                        IAUpdateDepUtils::GetDependenciesL( *dependencyNode, iAllNodes, dependencies );
-                        for( TInt k = 0; k < dependencies.Count(); k++ )
-                            {
-                            TInt depNodeInd = iAllNodes.Find( dependencies[k] );
-                            iAllNodes[depNodeInd]->Base().SetSelected( ETrue );
-                            }
-                        CleanupStack::PopAndDestroy( &dependencies );
-                        }
-                    }
-                }
-            if ( aMark )
-                {
-                CleanupStack::PopAndDestroy( &mands );
-                }
-            
-            if ( depCount > 0 || mandCount > 0 )
-                {
-                SetSelectedIndicesL();
-                }
-            else
-                {
-                UpdateSelectionInfoInNaviPaneL();   
-                }
-               
-            if ( aMark )
-                {
-                SetMiddleSKTextL( ETrue, ETrue );
-                }
-            else
-                {
-                SetMiddleSKTextL( ETrue, EFalse );  
-                }        
-            }  
-        DynInitToolbarL( R_IAUPDATE_MAIN_TOOLBAR, Toolbar() );
-        return ETrue;
+            }
         }
-    return EFalse;
+        mands.Close();
     }
-    
-    
-   
-    
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::SetMiddleSKTextL
-// Middle soft key label to be set 
-// -----------------------------------------------------------------------------
-//    
-void CIAUpdateMainView::SetMiddleSKTextL( TBool aVisible, TBool aSelected )
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToNodeArray() end");
+}
+
+
+bool IAUpdateMainView::getMandatoryNodes(RPointerArray<MIAUpdateNode> &mandNodes) const
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getMandatoryNodes() begin");
+    bool ret = true;
+    for(int i = 0; i < mNodes.Count(); ++i)
     {
-	CEikButtonGroupContainer* cbaGroup = Cba();
-	if ( cbaGroup )
+        if (mNodes[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
         {
-        cbaGroup->RemoveCommandFromStack( CEikButtonGroupContainer::EMiddleSoftkeyPosition, iLastCommandId );
-        if ( aVisible )
+            if (mandNodes.Append(mNodes[i]) != KErrNone)
             {
-        	HBufC* middleSKText = NULL;
-    	    if ( aSelected )
-        	    {
-        	    middleSKText = StringLoader::LoadLC( R_IAUPDATE_MSK_UNMARK );
-                TPtr mskPtr = middleSKText->Des();
-    	        cbaGroup->AddCommandToStackL(  
-    	                    CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
-    	                    EAknSoftkeyUnmark, 
-    	                    mskPtr );
-    	        iLastCommandId = EAknSoftkeyUnmark;            
-                }
-            else
-                {
-                middleSKText = StringLoader::LoadLC( R_IAUPDATE_MSK_MARK );
-        	    TPtr mskPtr = middleSKText->Des();
-    	        cbaGroup->AddCommandToStackL( 
-    	                  CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
-    	                  EAknSoftkeyMark, 
-    	                  mskPtr );
-    	        iLastCommandId = EAknSoftkeyMark;
-        	    }
-        	CleanupStack::PopAndDestroy( middleSKText );
+                ret = false; 
             }
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getMandatoryNodes() end");
+    return ret;
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetSelectedNodesL
-// Get selected (marked) nodes
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::GetSelectedNodesL( RPointerArray<MIAUpdateAnyNode>& aSelectedNodes ) const
+void IAUpdateMainView::showUpdateCannotOmitDialog()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showUpdateCannotOmitDialog() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    messageBox->setText(QString("This required update cannot be omitted"));
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    HbAction *okAction = NULL;
+    okAction = new HbAction("Ok");
+    messageBox->addAction(okAction);
+    messageBox->setTimeout(HbPopup::StandardTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = CannotOmit;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showUpdateCannotOmitDialog() end");
+}
+
+void IAUpdateMainView::showDependenciesFoundDialog(QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDependenciesFoundDialog() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Depencencies"));
+    messageBox->setHeadingWidget(label);
+    //messageBox->setIconVisible(false);
+        
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    mPrimaryAction = NULL;
+    mPrimaryAction = new HbAction("Continue");
+    HbAction *secondaryAction = NULL;
+    secondaryAction = new HbAction("Cancel");
+    messageBox->addAction(mPrimaryAction);
+    messageBox->addAction(secondaryAction);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = Dependencies;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDependenciesFoundDialog() end");
+}
+
+void IAUpdateMainView::updateSelectionsToList()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToList() begin");
+    mSelectionUpdate = true;
+    for(int i = 0; i < mNodes.Count(); ++i)
     {
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
-        {
-        if ( iAllNodes[i]->Base().IsSelected() )
+        if ( mNodes[i]->Base().IsSelected() != mListView->selectionModel()->isSelected(mListView->model()->index(i,0)))
+        {    
+            QItemSelectionModel::SelectionFlag selectionFlag;
+            if ( mNodes[i]->Base().IsSelected())
             {
-        	User::LeaveIfError( aSelectedNodes.Append( iAllNodes[i] ) );
+                selectionFlag = QItemSelectionModel::Select;
             }
+            else
+            {
+                selectionFlag = QItemSelectionModel::Deselect;
+            }
+            mListView->selectionModel()->select(mListView->model()->index(i,0),selectionFlag);   
         }
     }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::GetMandatoryItemsL
-// Get selected (marked) nodes
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateMainView::GetMandatoryNodesL( RPointerArray<MIAUpdateAnyNode>& aMandNodes ) const
-    {
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
-        {
-        if ( iAllNodes[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory )
-            {
-            User::LeaveIfError( aMandNodes.Append( iAllNodes[i] ) );
-            }
-        }
-    }
-
+    mSelectionUpdate = false;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToList() end");
+}
 
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::SetSelectedIndicesL
-// Indices of selected items are passed to container 
-// -----------------------------------------------------------------------------
-//  
-void CIAUpdateMainView::SetSelectedIndicesL()
+MIAUpdateNode* IAUpdateMainView::getApplicationNode(int index) const
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateMainView::getApplicationNode() begin index: %d", index);
+    MIAUpdateNode *currentNode = NULL;
+     
+    if (index >= 0 && index < mNodes.Count())
     {
-    RArray<TInt> indices;
+        currentNode = mNodes[index];
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getApplicationNode() end");
+    return currentNode;
+}
+                
+void IAUpdateMainView::showDetails(MIAUpdateAnyNode& node)
+{  
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDetails() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Details"));
+    messageBox->setHeadingWidget(label);
+       
+    messageBox->setIconVisible(false);
+            
+    QString text;
+    constructDetailsText(node,text); 
+    messageBox->setText(text);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = Details;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDetails() end");
+}                
         
-    CleanupClosePushL( indices );
 
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
-        {
-    	if ( iAllNodes[i]->Base().IsSelected() )
-    	    {
-    		User::LeaveIfError( indices.Append( i ) );
-    	    }
-        }
+void IAUpdateMainView::constructDetailsText(MIAUpdateAnyNode &node, QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::constructDetailsText() begin");
+    text.append(QString("Name:"));
+    text.append(QString("<br />"));
+    QString name = XQConversions::s60DescToQString(node.Base().Name());
+    text.append(name);
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {    
+        name.append(QString(" Device software"));
+    }
         
-    iContainer->SetSelectedIndicesL( indices );
-    UpdateSelectionInfoInNaviPaneL();
- 
-    CleanupStack::PopAndDestroy( &indices );
+    text.append(QString("<br />"));
+    text.append(QString("<br />"));
+    
+    text.append(QString("Description:"));
+    text.append(QString("<br />"));
+    QString description;
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {
+        description = QString("This update improves your device performance and brings you latest features.");
     }
+    else
+    {    
+        description = XQConversions::s60DescToQString(node.Base().Description());
+    }    
+    text.append(description);
+    text.append(QString("<br />"));
+    text.append(QString("<br />"));
+    
+    
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
+    {
+        MIAUpdateNode *iaupdateNode = static_cast<MIAUpdateNode*> (&node);
+        if (iaupdateNode->Type()!= MIAUpdateNode::EPackageTypeServicePack)
+        {
+            text.append(QString("Version:"));
+            text.append(QString("<br />"));
+            QString textVersion;
+            versionText(node.Base().Version(), textVersion);
+            text.append(textVersion);
+            text.append(QString("<br />"));
+            text.append(QString("<br />"));
+        }
+    }
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {    
+        MIAUpdateFwNode *fwNode = static_cast<MIAUpdateFwNode*> (&node);
+        text.append(QString("Version:"));
+        text.append(QString("<br />"));
+        QString textVersion = XQConversions::s60DescToQString(fwNode->FwVersion1());
+        text.append(textVersion);
+        text.append(QString("<br />"));
+        text.append(QString("<br />"));
+    }
+    
+    int contentSize = node.Base().ContentSizeL();
+    if (contentSize > 0)
+    {
+        text.append(QString("Size:"));
+        text.append(QString("<br />"));
+        QString textFileSize;
+        fileSizeText(contentSize, textFileSize);
+        text.append(textFileSize);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::constructDetailsText() end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::NodeIndex
-// Get index of node 
-// -----------------------------------------------------------------------------
-//  
-TInt CIAUpdateMainView::NodeIndex( const MIAUpdateAnyNode& aNode ) const
-    {
-    TInt result = -1;
+void IAUpdateMainView::versionText(const TIAUpdateVersion &version, QString &versionText)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::versionText() begin");
+    QString stringMajor;
+    stringMajor.setNum(version.iMajor);
+    versionText.append(stringMajor);
+    versionText.append(QString("."));
+    QString stringMinor;
+    stringMinor.setNum(version.iMinor);
+    versionText.append(stringMinor);
+    versionText.append(QString("("));
+    QString stringBuild;
+    stringBuild.setNum(version.iBuild);
+    versionText.append(stringBuild);
+    versionText.append(QString(")"));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::versionText() end");
+}
+
+void IAUpdateMainView::fileSizeText(int fileSize, QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fileSizeText() begin");
+    int size = 0;
+    QString stringUnit;
     
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
+    if (fileSize >= KMaxShownInKiloBytes )
         {
-        if( &aNode == iAllNodes[i] )
+        stringUnit.append(" MB");
+        size = fileSize / KMegaByte;
+        if ( fileSize % KMegaByte != 0 )
             {
-            result = i;
-            break;
+            size++;
             }
         }
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::UpdateStatusPaneL
-// Update title in status pane
-// -----------------------------------------------------------------------------
-// 
-    
-void CIAUpdateMainView::UpdateStatusPaneL()
-    {
-    CAknTitlePane* titlePane = 
-            static_cast< CAknTitlePane* >( StatusPane()->ControlL(
-                                           TUid::Uid( EEikStatusPaneUidTitle ) ) );
-    HBufC* text = StringLoader::LoadLC( R_IAUPDATE_TEXT_TITLE_MAIN_VIEW );
-    titlePane->SetTextL( *text );
-    CleanupStack::PopAndDestroy( text );        
-    }
-
+    else
+        {
+        stringUnit.append(" kB");
+        size = fileSize / KKiloByte;
+        if ( fileSize % KKiloByte != 0 )
+            {
+            size++;
+            }   
+        }
+    text.setNum(size);
+    text.append(stringUnit); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fileSizeText() end");
+}
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::UpdateSelectionInfoInNaviPaneL
-// Update selection information in status pane
-// -----------------------------------------------------------------------------
-// 
-//
-void CIAUpdateMainView::UpdateSelectionInfoInNaviPaneL()
+void IAUpdateMainView::setImportance(MIAUpdateAnyNode *node, QString &importanceDescription)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() begin");
+    int sizeInBytes = node->Base().ContentSizeL();
+    int size = 0;
+    bool shownInMegabytes = false;        
+    if (sizeInBytes >= KMaxShownInKiloBytes)
+    {
+        shownInMegabytes = true;
+        size = sizeInBytes / KMegaByte;
+        if (sizeInBytes % KMegaByte != 0)
+        {
+           size++;
+        }
+    }
+    else 
     {
-    RemoveSelectionInfoInNaviPane();
-    
-    if ( iAllNodes.Count() > 0 )
+        size = sizeInBytes / KKiloByte;
+        if (sizeInBytes % KKiloByte != 0)
+        {
+            size++;
+        }  
+    }
+    QString sizeString;
+    sizeString.setNum(size);     
+    switch(node->Base().Importance())
+    {        
+        case MIAUpdateBaseNode::EMandatory:
         {
-        //show empty navi pane when firmware is selected but no size info or it is NSU
-        if ( (iAllNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw) && iAllNodes[0]->Base().IsSelected() )
+            importanceDescription = "Required ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
             {
-            MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( iAllNodes[0] );
-            if ( (iAllNodes[0]->Base().ContentSizeL() == 0) || (fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)  )
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
+                
+        case MIAUpdateBaseNode::ECritical:
+        {
+            bool isNSU = false;
+            if(node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+            {
+                MIAUpdateFwNode *fwnode = static_cast<MIAUpdateFwNode*>(node);          
+                if (fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)
                 {
-                return;
+                   isNSU = true;
                 }
             }
-        
-        if ( !iNaviPane )
+            importanceDescription = "Important ";
+            if (!size || isNSU)
             {
-    	    iNaviPane = static_cast<CAknNavigationControlContainer*>
-               ( StatusPane()->ControlL( TUid::Uid(EEikStatusPaneUidNavi ) ) );
+                //for firmware when size info is not provided by server
             }
-        TInt selectedSizeInBytes = 0;
-        for( TInt i = 0; i < iAllNodes.Count(); ++i )
+            else
             {
-            if ( iAllNodes[i]->Base().IsSelected() )
+                importanceDescription.append(sizeString);
+                if (shownInMegabytes)
                 {
-            	selectedSizeInBytes += iAllNodes[i]->Base().ContentSizeL();
+                    importanceDescription.append(" MB" );
                 }
-            }
-                
-        
-        TInt resourceId = 0;
-        TInt selectedSize;
-        if ( selectedSizeInBytes >= KMaxShownInKiloBytes )
-            {
-    	    resourceId = R_IAUPDATE_NAVIPANE_MEGABYTE;
-    	    selectedSize = selectedSizeInBytes / KMegaByte;
-    	    if ( selectedSizeInBytes % KMegaByte != 0 )
-    	        {
-    	    	selectedSize++;
-    	        }
+                else 
+                {
+                    importanceDescription.append(" kB" );
+                } 
             }
-        else 
+            break;
+        }
+            
+        case MIAUpdateBaseNode::ERecommended:
+        {
+            importanceDescription = "Recommended ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
             {
-    	    resourceId = R_IAUPDATE_NAVIPANE_KILOBYTE;
-    	    selectedSize = selectedSizeInBytes / KKiloByte;
-    	    if ( selectedSizeInBytes % KKiloByte != 0 )
-    	        {
-    	    	selectedSize++;
-    	        }
+                importanceDescription.append(" MB" );
             }
-     
-        CArrayFix<TInt>* numberArray = 
-                 new ( ELeave ) CArrayFixFlat<TInt>( KSelInfoArrayGranularity );
-        CleanupStack::PushL( numberArray );
-        numberArray->AppendL( CountOfSelectedItems() ); 
-        numberArray->AppendL( iAllNodes.Count() );
-        numberArray->AppendL( selectedSize );
-    
-        HBufC* selectionInfo = StringLoader::LoadLC( resourceId, 
-                                                     *numberArray );
-        TPtr ptr = selectionInfo->Des();
-        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
             
-        iDecorator = iNaviPane->CreateNavigationLabelL( *selectionInfo );
+        case MIAUpdateBaseNode::ENormal:
+        {
+            importanceDescription = "Optional ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
 
-        iNaviPane->PushL( *iDecorator );
-        
-        CleanupStack::PopAndDestroy( selectionInfo ); 
-        CleanupStack::PopAndDestroy( numberArray );	
+        default:
+        {
+            break;
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() end");
+}    
 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::RemoveSelectionInfoInNaviPane
-// Remove existing selection info (created by main view) from navi pane
-// -----------------------------------------------------------------------------
-// 
+void IAUpdateMainView::removeCurrentContentLayout()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::removeCurrentContentLayout() begin");
+    int itemCount = mContent->layout()->count();
+    for (int i = 0; i < itemCount; i++)    
+    {
+        mContent->layout()->removeAt(i);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::removeCurrentContentLayout() end");    
+}
+
+void IAUpdateMainView::refreshFirmwareUpdates(const RPointerArray<MIAUpdateFwNode> &fwNodes)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFirmwareUpdates() begin");
+    mFwNodes.Reset();
+            
+    for (int i = 0; i < fwNodes.Count(); i++)
+    {
+        MIAUpdateFwNode *fwnode = (fwNodes[i]);
+        mFwNodes.Append(fwnode);
+        fwnode->Base().SetImportance(MIAUpdateBaseNode::ECritical);
+        if (fwnode->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            refreshFotaUpdate(*fwnode );
+        }
+        else if (fwNodes.Count() == 1 && fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)
+        {
+            refreshNsuUpdate();
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFirmwareUpdates() end");    
+    }    
+}
+
+void IAUpdateMainView::refreshFotaUpdate(MIAUpdateFwNode& fwNode)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFotaUpdate() begin");
+    if (!mFwListView)
+    {
+        mFwListView  = new HbListWidget(mContent);
+        mFwListView->setSelectionMode( HbAbstractItemView::MultiSelection );
+        connect( mFwListView, SIGNAL( longPressed( HbAbstractViewItem *, const QPointF & ) ),
+        this, SLOT( handleFotaDetails( HbAbstractViewItem *, const QPointF & ) ) ); 
+        mFwListView->listItemPrototype()->setGraphicsSize(HbListViewItem::LargeIcon);   
+        mFwListView->listItemPrototype()->setStretchingStyle(HbListViewItem::NoStretching);
+        connect(mFwListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+        this, SLOT(handleFwSelectionChanged(QItemSelection,QItemSelection)));     
+    }
+    QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+    linearLayout->addItem(mFwListView);
+    mFwListView->clear();
+    QItemSelectionModel *selectionModel = mFwListView->selectionModel();  
+    selectionModel->clear();
+    HbListWidgetItem *fwItem = new HbListWidgetItem();
+    QString name(XQConversions::s60DescToQString(fwNode.Base().Name()));
+    name.append(" DEVICE SOFTWARE");
+    fwItem->setText(name);
+    QString importanceDescription;
+    setImportance(&fwNode, importanceDescription);
+    fwItem->setSecondaryText(importanceDescription);
+    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
+    fwItem->setIcon(icon);
+    if (fwNode.Base().IsSelected())
+    {
+        QModelIndex modelIndex = mFwListView->model()->index(0,0);
+        selectionModel->select(modelIndex, QItemSelectionModel::Select);
+    }
+    mFwListView->addItem(fwItem); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFotaUpdate() end");
+}
 
-void CIAUpdateMainView::RemoveSelectionInfoInNaviPane()
+void IAUpdateMainView::refreshNsuUpdate()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshNsuUpdate() begin");
+    if (!mFwNSUGroupBox)
     {
-    if ( iNaviPane && iDecorator )
+        mFwNSUGroupBox = new HbGroupBox(mContent);
+        mFwNSUGroupBox->setHeading("Device software available");
+        HbDataForm *dataForm  = new HbDataForm(mFwNSUGroupBox); 
+        mFwNSUGroupBox->setContentWidget(dataForm);
+        dataForm->setDescription("Use your PC to update the device software ([version %L]) from address www.nokia.com/softwareupdate");
+    }
+    QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+    linearLayout->addItem(mFwNSUGroupBox);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshNsuUpdate() end");
+}
+
+void IAUpdateMainView::refreshApplicationUpdates(const RPointerArray<MIAUpdateNode> &nodes)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshApplicationUpdates() begin");
+    if (nodes.Count() > 0)
+    {
+        if (!mApplicationUpdatesGroupBox)
         {
-    	iNaviPane->Pop( iDecorator );
-    	delete iDecorator;
-    	iDecorator = NULL;
+            mApplicationUpdatesGroupBox = new HbGroupBox(mContent);
+            mApplicationUpdatesGroupBox->setHeading("Application updates");
+        }
+        QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+        linearLayout->addItem(mApplicationUpdatesGroupBox);
+        linearLayout->addItem(mListView);
+    }
+    mListView->clear();
+    QItemSelectionModel *selectionModel = mListView->selectionModel();  
+    selectionModel->clear();
+    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
+    mNodes.Reset();
+    for(int i = 0; i < nodes.Count(); ++i) 
+    {
+        MIAUpdateNode *node = nodes[i];
+        mNodes.Append(node);
+        QString importanceDescription;
+        MIAUpdateNode::TUIUpdateState uiState = node->UiState();
+        if (uiState == MIAUpdateNode::ENormal)
+        {
+            setImportance(node, importanceDescription);
+        }
+        else if (uiState == MIAUpdateNode::EUpdated)
+        {
+            importanceDescription = "Updated";
+        }
+        else if (uiState == MIAUpdateNode::EFailed)
+        {
+            importanceDescription = "Failed";
+        }
+        else if (uiState == MIAUpdateNode::EDownloaded)
+        {
+            importanceDescription = "Downloaded";
+        }
+        HbListWidgetItem *item = new HbListWidgetItem();    
+        QString name;
+        if (uiState == MIAUpdateNode::EDownloading)
+        {
+            name = QString("Downloading ");
+        }
+        else if (uiState == MIAUpdateNode::EInstalling)
+        {
+            name = QString("Installing ");
+        }
+        name.append(XQConversions::s60DescToQString(node->Base().Name()));
+        item->setText(name);
+        item->setSecondaryText(importanceDescription);
+        item->setIcon(icon);
+        mListView->addItem(item); 
+         
+        if (node->Base().IsSelected())
+        {
+            int count = mListView->count();
+            QModelIndex modelIndex = mListView->model()->index(count-1,0);
+            selectionModel->select(modelIndex, QItemSelectionModel::Select);
         }
     }
- 
-// -----------------------------------------------------------------------------
-// CIAUpdateMainView::ShowDependenciesFoundDialogL
-// 
-// -----------------------------------------------------------------------------
-//  
-TBool CIAUpdateMainView::ShowDependenciesFoundDialogL( TDesC& aText ) const
+    if (!mSelectionConnect)
+    {    
+        mSelectionConnect = connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+                        this, SLOT(handleSelectionChanged(QItemSelection,QItemSelection)));     
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshApplicationUpdates() end");
+}
+
+void IAUpdateMainView::updateSelectionInfoInDock()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionInfoInDock() begin");
+    int countOfSelectedItems = 0;
+    int countOfAllItems = 0;
+    int selectedSizeInBytes = 0;
+    for (int i = 0; i < mFwNodes.Count(); ++i)
     {
-	CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( aText );
-    dlg->PrepareLC( R_IAUPDATE_MESSAGE_QUERY );
-    CAknPopupHeadingPane* headingPane = dlg->Heading();
-    HBufC* title = StringLoader::LoadLC( R_IAUPDATE_DEPENDENCY_TITLE );
-    headingPane->SetTextL( *title );
-    CleanupStack::PopAndDestroy( title );
-  
-    dlg->ButtonGroupContainer().SetCommandSetL( 
-                                  R_IAUPDATE_SOFTKEYS_CONTINUE_CANCEL__CONTINUE );
-
-    return( dlg->RunLD() == EAknSoftkeyOk );
-    }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateMainView::CountOfSelectedItems
-// 
-// ---------------------------------------------------------------------------
-//     
-TInt CIAUpdateMainView::CountOfSelectedItems() const
-    {
-    TInt countOfSelectedItems = 0; 
-    for( TInt i = 0; i < iAllNodes.Count(); ++i )
+        if (mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2)
         {
-        if ( iAllNodes[i]->Base().IsSelected() )
+            countOfAllItems++;
+            if (mFwNodes[i]->Base().IsSelected())
             {
-        	countOfSelectedItems++;
+                countOfSelectedItems++;
+                selectedSizeInBytes += mFwNodes[i]->Base().ContentSizeL();
             }
         }
-    return countOfSelectedItems;   	
+    } 
+    countOfAllItems += mNodes.Count();
+    for (int j = 0; j < mNodes.Count(); ++j)
+    {    
+        if (mNodes[j]->Base().IsSelected())
+        {
+            countOfSelectedItems++;
+            selectedSizeInBytes += mNodes[j]->Base().ContentSizeL();
+        }
+    }    
+    
+    int selectedSize = 0;
+    QString unit;
+    if (selectedSizeInBytes >= KMaxShownInKiloBytes)
+    {
+        unit = "MB";
+        selectedSize = selectedSizeInBytes / KMegaByte;
+        if (selectedSizeInBytes % KMegaByte != 0)
+        {
+            selectedSize++;
+        }
     }
-
-// ---------------------------------------------------------------------------
-// CIAUpdateMainView::ShowUpdateCannotOmitDialogL
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateMainView::ShowUpdateCannotOmitDialogL() const
+    else 
     {
-    HBufC* msgText = StringLoader::LoadLC( R_IAUPDATE_CANNOT_OMIT );
-    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-    dlg->ExecuteLD( R_IAUPDATE_INFORMATION_QUERY, *msgText  );         
-    CleanupStack::PopAndDestroy( msgText );
+        unit = "kB";
+        selectedSize = selectedSizeInBytes / KKiloByte;
+        if (selectedSizeInBytes % KKiloByte != 0)
+        {
+            selectedSize++;
+        }
     }
-    
-// End of File
-    
+    QString selectionString; 
+    selectionString.append("Selected ");
+    QString numText;
+    numText.setNum(countOfSelectedItems);
+    selectionString.append(numText);
+    selectionString.append("/");
+    numText.setNum(countOfAllItems);
+    selectionString.append(numText);
+    if (selectedSize > 0)
+    {
+        selectionString.append(" (");
+        numText.setNum(selectedSize);
+        selectionString.append(numText);
+        selectionString.append(" ");
+        selectionString.append(unit);
+        selectionString.append(")");
+    }
+    mSelections->setHeading(selectionString);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionInfoInDock() end");
+}