cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp
branchRCL_3
changeset 49 09b1ac925e3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp	Tue Aug 31 16:04:40 2010 +0300
@@ -0,0 +1,922 @@
+/*
+* Copyright (c) 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""
+* 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 <QStringList>
+#include <QGraphicsLinearLayout>
+#include <QModelIndex>
+
+#include <hblineedit.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <hbdataformmodelitem.h>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <HbListWidget>
+#include <HbListWidgetItem>
+#include <HbGroupBox>
+#include <hbpushbutton.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <hbdataformmodelitem.h>
+#include <hbabstractviewitem.h>
+#include <hbtextitem.h>
+#include <hbmainwindow.h>
+#include <hblistview.h>
+#include <QStandardItemModel>
+#include <QModelIndexList>
+#include <hbmessagebox.h>
+#include <memory>
+#include <../../inc/cpsecplugins.h>
+#include "cpcertdetailview.h"
+#include "cpcertview.h"
+#include "cpcertdatacontainer.h"
+#include "cpcerttrustview.h"
+#include "cpcertmanuisyncwrapper.h"
+
+
+CpCertView::CpCertView(const QModelIndex& modelIndex, QGraphicsItem *parent /*= 0*/)
+	: CpBaseSettingView(0,parent),
+	  mPopup(NULL),
+	  mPrevView(NULL),
+	  mCurrentView(NULL),
+	  mRefreshedView(NULL),
+	  mListView(NULL),
+	  mSelectAllView(NULL),
+	  mOriginalView(NULL),
+	  mNote(NULL)
+	{
+	RDEBUG("0", 0);
+	mOriginalView = mainWindow()->currentView();
+	
+	HbMenu* menu = this->menu();   
+	std::auto_ptr<HbAction> deleteAction(new HbAction(hbTrId("txt_common_menu_delete")));
+	connect(deleteAction.get(), SIGNAL(triggered()), this, SLOT(deleteList()));    
+	menu->addAction(deleteAction.get());
+	deleteAction.release();
+	
+	std::auto_ptr<QGraphicsLinearLayout> layout(new QGraphicsLinearLayout(Qt::Vertical));
+	
+	HbDataForm *form = q_check_ptr(new HbDataForm(this));
+	std::auto_ptr<HbDataFormModel> formModel(q_check_ptr(new HbDataFormModel()));
+	form->setModel(formModel.get());
+	formModel.release();
+	
+	HbListWidget* certificateList = q_check_ptr(new HbListWidget(this)); 
+		
+	CpCertView::TCertificateViews currentView = (CpCertView::TCertificateViews)modelIndex.row(); 
+	QString title;
+	if(currentView == EPersonalView)
+		{
+		title = "Move to Device";
+		}
+	else if(currentView == EDeviceView)
+		{
+		title = "Move to Personal";  
+		}
+	RDEBUG("0", 0);
+	if(currentView == EPersonalView || currentView == EDeviceView)
+		{
+		std::auto_ptr<HbAction> moveToDeviceAction(q_check_ptr(new HbAction(title)));   
+		connect(moveToDeviceAction.get(), SIGNAL(triggered()), this, SLOT(moveCert()));    
+		menu->addAction(moveToDeviceAction.get());
+		moveToDeviceAction.release();
+		}	
+	
+	setDetails(currentView);
+	TInt count = 0;
+	try
+		{
+		QT_TRAP_THROWING(mCertDataContainer = CpCertDataContainer::NewL());
+		QT_TRAP_THROWING(count = refreshListL());
+		}
+	catch(const std::exception& exception)
+		{
+		HbMessageBox::information(exception.what());
+		throw(exception);
+		}
+	RDEBUG("0", 0);
+	for(int index = 0; index< count; index++)
+		{
+		QString certificateLabel = certLabel(index);
+		std::auto_ptr<HbListWidgetItem> singleCert(q_check_ptr(new HbListWidgetItem()));
+		singleCert->setText(certificateLabel);
+		certificateList->addItem(singleCert.get());
+		singleCert.release();
+		}  // End of FOR loop
+	
+	connect(certificateList, SIGNAL(activated(QModelIndex)), this, SLOT(openCertFromList(QModelIndex)));   
+	connect(certificateList, SIGNAL(longPressed(HbAbstractViewItem*, QPointF )), this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF))); 
+	
+	layout->addItem(certificateList);
+	setLayout(layout.get());
+	layout.release();
+	
+	mPopup = q_check_ptr(new HbDialog());
+	mContextMenu = q_check_ptr(new HbMenu());
+	
+	RDEBUG("0", 0);
+	}
+
+CpCertView::~CpCertView()
+	{
+	delete mCertDataContainer;
+	mCertDataContainer = NULL;
+	RDEBUG("0", 0);
+	if(mPrevView)
+		{
+		mPrevView->deleteLater();
+		mPrevView= NULL;
+		}
+	if(mCurrentView)
+		{
+		mCurrentView->deleteLater();
+		mCurrentView= NULL;
+		}
+	if(mRefreshedView)
+		{
+		mRefreshedView->deleteLater();
+		mRefreshedView= NULL;
+		}
+	if(mListView)
+		{
+		mListView->deleteLater();
+		mListView= NULL;
+		}
+		
+	if(mSelectAllView)
+	{
+	mSelectAllView->deleteLater();
+	mSelectAllView = NULL;
+	}
+	
+	mSelectionIndex.Close();
+	
+	mIndexList.Close();
+	
+	delete mPopup;
+	
+	delete mNote;
+	mNote = NULL;
+	
+	delete mContextMenu;
+	
+	}
+	
+void CpCertView::setDetails(CpCertView::TCertificateViews currentView)
+	{
+	RDEBUG("0", 0);
+	switch(currentView)
+		{
+		case EAuthorityView:
+		setTitle(hbTrId("txt_certificate_manager_list_authority_certificate"));
+		mCertView = EAuthorityView;
+		break;
+		
+		case ETrustedView:
+		setTitle(hbTrId("txt_certificate_manager_list_trusted_site_certific"));
+		mCertView = ETrustedView;
+		break;
+		
+		case EPersonalView:
+		setTitle(hbTrId("txt_certificate_manager_list_personal_certificates"));
+		mCertView = EPersonalView;
+		break;
+		
+		case EDeviceView:
+		setTitle(hbTrId("txt_certificate_manager_list_device_certificates"));
+		mCertView = EDeviceView;
+		break;
+		}
+	}
+
+void CpCertView::indicateLongPress(HbAbstractViewItem *item,QPointF coords)
+	{
+	RDEBUG("0", 0);
+	mPos = item->modelIndex().row();   // Pos will tell you what is the certificate clicked in particular view.
+	
+	mContextMenu->clearActions();
+	std::auto_ptr<HbAction> open(q_check_ptr(new HbAction(hbTrId("txt_common_menu_open"))));
+	connect(open.get(), SIGNAL(triggered()), this, SLOT( openCertificate()));
+	mContextMenu->addAction(open.get());			
+	open.release();
+	
+	QString moveTitle;
+	
+	if(mCertView == EAuthorityView)
+		{
+		std::auto_ptr<HbAction> trustSettings(q_check_ptr(new HbAction(hbTrId("txt_certificate_manager_menu_trust_settings")))); 
+		connect(trustSettings.get(), SIGNAL(triggered()), this, SLOT(showTrustSettings()));    
+		mContextMenu->addAction(trustSettings.get());
+		trustSettings.release();
+		}
+	else if(mCertView == EPersonalView)
+		{
+		moveTitle = hbTrId("txt_certificate_manager_menu_move_to_device_certif");
+		}
+	else if(mCertView == EDeviceView)
+		{
+		moveTitle = hbTrId("txt_certificate_manager_menu_move_to_personal_cert");
+		}	
+	
+	if(mCertView == EPersonalView || mCertView == EDeviceView )
+		{
+		std::auto_ptr<HbAction> moveCert(q_check_ptr(new HbAction(moveTitle)));     
+		connect(moveCert.get(), SIGNAL(triggered()), this, SLOT(moveSelectedCert()));    
+		mContextMenu->addAction(moveCert.get());
+		moveCert.release();
+		}
+	
+	RDEBUG("0", 0);
+	if( certAt(mPos)->IsDeletable() )
+		{
+		std::auto_ptr<HbAction> menuDelete(q_check_ptr(new HbAction(hbTrId("txt_common_menu_delete")))); 
+		connect(menuDelete.get(), SIGNAL(triggered()), this, SLOT(deleteCertificate()));    
+		mContextMenu->addAction(menuDelete.get());
+		menuDelete.release();
+		}
+	mContextMenu->setPreferredPos(coords);
+	mContextMenu->open();
+	}
+
+void CpCertView::openCertFromList(const QModelIndex& modelIndex)
+	{	
+	RDEBUG("0", 0);
+	// Pos will tell you what is the certificate clicked in particular view.
+	mPos = modelIndex.row();   
+	openCertificate();
+	}
+
+void CpCertView::openCertificate()
+	{
+	RDEBUG("0", 0);
+	mCurrentView = q_check_ptr(new CpCertDetailView(mCertView,mPos,*mCertDataContainer));    
+	connect(mCurrentView, SIGNAL(aboutToClose()), this, SLOT(displayPreviousView()));
+	mPrevView = mainWindow()->currentView();   
+	mainWindow()->addView(mCurrentView);
+	mainWindow()->setCurrentView(mCurrentView);  		
+	}
+	
+void CpCertView::displayPreviousView()  
+	{
+	RDEBUG("0", 0);
+	mainWindow()->removeView(mCurrentView);    
+	mCurrentView->deleteLater();
+	mCurrentView= NULL;
+	mainWindow()->setCurrentView(mPrevView);  	
+	}
+	
+void CpCertView::deleteCertificate()
+	{
+	RDEBUG("0", 0);
+	RArray<TInt> pos;
+	pos.Append(mPos);
+	QT_TRAP_THROWING(deleteCertsL(pos));
+	}		
+	
+void CpCertView::deleteList()
+	{
+	RDEBUG("0", 0);
+	mSelectAll = EFalse;
+	mPopup->setDismissPolicy(HbDialog::NoDismiss);
+	// Set the label as heading widget
+	mPopup->setHeadingWidget(q_check_ptr(new HbLabel(hbTrId("txt_certificate_manager_setlabel_certificates"))));
+	
+	std::auto_ptr<QGraphicsLinearLayout> layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical)));
+		
+	mSelectAllView = q_check_ptr(new HbListView(this));
+	QStandardItemModel* selectAllModel = q_check_ptr(new QStandardItemModel(this));
+	// Populate the model with content
+	std::auto_ptr<QStandardItem> selectAllItem(q_check_ptr(new QStandardItem()));
+	selectAllItem->setData(QString("Select All"),Qt::DisplayRole);
+	selectAllModel->appendRow(selectAllItem.get());
+	selectAllItem.release();
+	
+	connect(mSelectAllView, SIGNAL(activated(QModelIndex)), this, SLOT(selectAll()));
+	mSelectAllView->setModel(selectAllModel);
+	mSelectAllView->setSelectionMode(HbListView::MultiSelection);
+	layout->addItem(mSelectAllView);
+	
+	mListView = q_check_ptr(new HbListView(this));
+	// Connect to "activated" signal
+	connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex)));
+	
+	// Create a model
+	QStandardItemModel* model = q_check_ptr(new QStandardItemModel(this));
+	TInt count=0;
+	QT_TRAP_THROWING( count = refreshListL());
+	RDEBUG("0", 0);
+	for(TInt index = 0; index < count ; ++index)
+		{
+		const CCTCertInfo* cert = certAt(index);
+		if( cert->IsDeletable() )
+			{
+			// Populate the model with content
+			std::auto_ptr<QStandardItem> certItem(q_check_ptr(new QStandardItem()));
+			QString certificateLabel = certLabel(index);
+			certItem->setData( certificateLabel, Qt::DisplayRole);
+			model->appendRow(certItem.get());
+			mSelectionIndex.Append(index);
+			certItem.release();
+			}
+		}	
+	// Set the model to the list view
+	mListView->setModel(model);
+	mListView->setSelectionMode(HbListView::MultiSelection);
+	layout->addItem(mListView);
+	
+	std::auto_ptr<HbWidget> widget( q_check_ptr(new HbWidget()));
+	widget->setLayout(layout.get());
+	layout.release();
+	mPopup->setContentWidget(widget.get());
+	widget.release();
+	
+	mPopup->setPrimaryAction(q_check_ptr(new HbAction(hbTrId("txt_common_opt_delete"))));
+	mPopup->setSecondaryAction(q_check_ptr(new HbAction(hbTrId("txt_common_button_cancel"))));
+	mPopup->setTimeout(HbPopup::NoTimeout);
+	RDEBUG("0", 0);
+	// Launch popup syncronously
+	mPopup->open(this, SLOT(handleMultipleDelete(HbAction*)));
+
+}
+
+void CpCertView::handleMultipleDelete(HbAction* action)
+{
+	RDEBUG("0", 0);
+	if(action == mPopup->primaryAction())
+		{
+		QItemSelectionModel *selectionModel = mListView->selectionModel();
+		QModelIndexList mWidgetItemsToRemove = selectionModel->selectedIndexes();
+		TInt deleteCount = mWidgetItemsToRemove.count();
+		// start deleting from end of array so that the indexes do not changes of the ones
+		// at the front.
+		RArray<TInt> actualIndex;
+		QT_TRAP_THROWING
+			(
+			CleanupClosePushL(actualIndex);
+			for (TInt index = deleteCount-1; index>= 0 ; --index) 
+				{
+				TInt selectedItemIndex = mWidgetItemsToRemove[index].row();
+				actualIndex.Append( mSelectionIndex[selectedItemIndex] );
+				}
+			deleteCertsL(actualIndex);
+			CleanupStack::PopAndDestroy(&actualIndex);
+			) // QT_TRAP_THROWING
+		}
+	RDEBUG("0", 0);
+	mListView->deleteLater();
+	mListView = NULL;
+	mSelectAllView->deleteLater();
+	mSelectAllView = NULL; 
+	}
+
+void CpCertView::moveCert()
+	{
+	RDEBUG("0", 0);
+	mSelectAll = EFalse;
+	mPopup->setDismissPolicy(HbDialog::NoDismiss);
+	// Set the label as heading widget
+	if(mCertView == EPersonalView)
+		{
+		mPopup->setHeadingWidget(q_check_ptr(new HbLabel(tr("Move To Device"))));
+		}
+	else if(mCertView == EDeviceView)
+		{
+		mPopup->setHeadingWidget(q_check_ptr(new HbLabel(tr("Move To Personal"))));
+		}
+		
+	std::auto_ptr<QGraphicsLinearLayout> layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical)));
+			
+	mSelectAllView = q_check_ptr(new HbListView(this));
+	QStandardItemModel* selectAllModel = q_check_ptr(new QStandardItemModel(this));
+	// Populate the model with content
+	std::auto_ptr<QStandardItem> selectAllItem(q_check_ptr(new QStandardItem()));
+	selectAllItem->setData(QString("Select All"),Qt::DisplayRole);
+	selectAllModel->appendRow(selectAllItem.get());
+	selectAllItem.release();
+	connect(mSelectAllView, SIGNAL(activated(QModelIndex)), this, SLOT(selectAll()));
+	mSelectAllView->setModel(selectAllModel);
+	mSelectAllView->setSelectionMode(HbListView::MultiSelection);
+	layout->addItem(mSelectAllView);
+	
+	mListView = q_check_ptr(new HbListView(this));
+	// Connect to "activated" signal
+	connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex)));
+	
+	// Create a model
+	QStandardItemModel* model = q_check_ptr(new QStandardItemModel(this));
+	TInt count =0;
+	RDEBUG("0", 0);
+	QT_TRAP_THROWING(count = refreshListL());
+	for(TInt index = 0; index < count ; ++index)
+		{
+		// Populate the model with content
+		std::auto_ptr<QStandardItem> certItem(q_check_ptr(new QStandardItem()));
+		QString certificateLabel = certLabel(index);
+		certItem->setData( certificateLabel, Qt::DisplayRole);
+		model->appendRow(certItem.get());
+		mSelectionIndex.Append(index);
+		certItem.release();
+		}	
+	
+	// Set the model to the list view
+	mListView->setModel(model);
+	mListView->setSelectionMode(HbListView::MultiSelection);
+	layout->addItem(mListView);
+	
+	std::auto_ptr<HbWidget> widget(q_check_ptr(new HbWidget()));
+	widget->setLayout(layout.get());	
+	layout.release();
+	mPopup->setContentWidget(widget.get());
+	widget.release();
+	RDEBUG("0", 0);
+	mPopup->setPrimaryAction(q_check_ptr(new HbAction(tr("Yes"))));
+	mPopup->setSecondaryAction(q_check_ptr(new HbAction(tr("No"))));
+	mPopup->setTimeout(HbPopup::NoTimeout);
+	
+	// Launch popup syncronously
+	 mPopup->open(this, SLOT(handleMoveCertDialog(HbAction*)));
+	 RDEBUG("0", 0);
+}
+
+void CpCertView::handleMoveCertDialog(HbAction* action)
+{	
+	RDEBUG("0", 0);
+	if(action == mPopup->primaryAction())
+		{
+		QItemSelectionModel *selectionModel = mListView->selectionModel();
+		QModelIndexList mWidgetItemsToRemove = selectionModel->selectedIndexes();
+		TInt deleteCount = mWidgetItemsToRemove.count();
+		// start deleting from end of array so that the indexes do not changes of the ones
+		// at the front.
+		RArray<TInt> actualIndex;
+		RDEBUG("0", 0);
+		QT_TRAP_THROWING
+			(
+			CleanupClosePushL(actualIndex);
+			 for (TInt index = deleteCount-1; index>= 0 ; --index) 
+				 {
+				 TInt selectedItemIndex = mWidgetItemsToRemove[index].row();
+				 actualIndex.Append(mSelectionIndex[selectedItemIndex]);	 
+				 }
+			 moveCertList(actualIndex);
+			 CleanupStack::PopAndDestroy(&actualIndex);
+			 )
+		}
+	mListView->deleteLater();
+	mListView = NULL;	
+	mSelectAllView->deleteLater();
+	mSelectAllView = NULL;
+	RDEBUG("0", 0);
+	}
+
+void CpCertView::selectAll()
+	{
+	RDEBUG("0", 0);
+	if(mSelectAll == EFalse)
+		{
+		mListView->selectAll();
+		mSelectAll= ETrue;
+		}
+	else
+		{
+		mListView->clearSelection();
+		mSelectAll= EFalse;
+		}
+	}
+
+void CpCertView::deleteCertsL( RArray<TInt>& indexList )
+    {
+    RDEBUG("0", 0);
+    TInt count = indexList.Count();
+    for(int index = 0;index <count;++index )
+    	{
+		mIndexList.Append(indexList[index]);
+    	}
+    
+  	mNote = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+	QString deleteMsg;
+	QString sCount;
+	if(count == 1)
+		{
+		deleteMsg = "Delete %1?";
+		const CCTCertInfo* entry = certAt(indexList[0]);
+		sCount = QString((QChar*)entry->Label().Ptr(),entry->Label().Length());
+		}
+	else
+		{
+		deleteMsg = "Delete %1 items?";
+		sCount.setNum(count);
+		}
+	RDEBUG("0", 0);
+	deleteMsg = deleteMsg.arg(sCount);
+	mNote->setText(deleteMsg);
+	mNote->setTimeout(HbPopup::NoTimeout);
+	mNote->open(this,SLOT(handleDeleteDialog(HbAction*)));
+
+}
+
+void CpCertView::handleDeleteDialog(HbAction* action)
+{
+	RDEBUG("0", 0);
+	TInt count = mIndexList.Count();
+	
+	if (action != mNote->primaryAction() || count == 0 )
+		{
+		return;
+		}
+		
+    RPointerArray<CCTCertInfo> errCerts;
+    QT_TRAP_THROWING(
+    		CleanupClosePushL(errCerts);
+    
+		for(TInt index = 0; index < count; ++index)
+			{
+			const CCTCertInfo* entry = certAt(mIndexList[index]);
+			
+			if( mCertView == EPersonalView || mCertView == EAuthorityView )
+				{
+				mCertDataContainer->iWrapper->DeleteCertL( 
+							mCertDataContainer->CertManager(), *entry );
+				}
+			else if( mCertView == ETrustedView )
+				{
+				mCertDataContainer->iWrapper->DeleteCertL( 
+							mCertDataContainer->CertManager(),*entry, KCMTrustedServerTokenUid );
+				}
+			else if( mCertView == EDeviceView )
+				{
+				mCertDataContainer->iWrapper->DeleteCertL(
+							mCertDataContainer->CertManager(), *entry, KCMDeviceCertStoreTokenUid );
+				}	
+			errCerts.AppendL(entry);
+			}
+		RDEBUG("0", 0);
+		if(errCerts.Count() > 0)
+			{
+			QString message("Unable to delete the following certificate: \n");
+			TInt count = errCerts.Count();
+			for(TInt index=0;index<count;++index)
+				{
+				const TDesC& certLabel = errCerts[index]->Label();
+				QString certName = QString((QChar*)certLabel.Ptr(),certLabel.Length());
+				message.append(certName).append("\n");
+				}
+			HbMessageBox::warning(message);
+			}
+		count = refreshListL();
+		refreshView(count);
+		
+		CleanupStack::PopAndDestroy(&errCerts);
+		) // QT_TRAP_THROWING
+    
+	delete mNote;
+	mNote = NULL;
+	RDEBUG("0", 0);
+    }
+
+const CCTCertInfo* CpCertView::certAt(TInt index) const
+	{
+	RDEBUG("0", 0);
+	CCTCertInfo* currentCert = NULL;
+	switch(mCertView)
+		{
+		case EAuthorityView:
+			{
+			currentCert = mCertDataContainer->iCALabelEntries[ index ]->iCAEntry;
+			break;
+			}
+		case ETrustedView:
+			{
+			currentCert = mCertDataContainer->iPeerLabelEntries[ index ]->iPeerEntry;
+			break;
+			}
+		case EDeviceView:
+			{
+			currentCert = mCertDataContainer->iDeviceLabelEntries[ index ]->iDeviceEntry;
+			break;
+			}
+		case EPersonalView:
+			{
+			currentCert = mCertDataContainer->iUserLabelEntries[ index ]->iUserEntry;
+			break;
+			}
+		};
+	return currentCert;
+	}
+
+QString CpCertView::certLabel(TInt index) const
+	{
+	RDEBUG("0", 0);
+	CpCertManUICertData* certData = NULL;
+	HBufC* label = NULL;
+	TInt length = 0;
+	switch(mCertView)
+		{
+		case EAuthorityView:
+			{
+			certData = mCertDataContainer->iCALabelEntries[index];
+			label = certData->iCAEntryLabel;
+			length = certData->iCAEntryLabel->Length();
+			break;
+			}
+		case ETrustedView:
+			{
+			certData = mCertDataContainer->iPeerLabelEntries[index];
+			label = certData->iPeerEntryLabel;
+			length = certData->iPeerEntryLabel->Length();
+			break;
+			}
+		case EPersonalView:
+			{
+			certData = mCertDataContainer->iUserLabelEntries[index];
+			label = certData->iUserEntryLabel;
+			length = certData->iUserEntryLabel->Length();
+			break;
+			}
+		case EDeviceView:
+			{
+			certData = mCertDataContainer->iDeviceLabelEntries[index];
+			label = certData->iDeviceEntryLabel;
+			length = certData->iDeviceEntryLabel->Length();
+			break;
+			}
+		}
+	return QString((QChar*)label->Des().Ptr(), length);
+	}
+
+TInt CpCertView::refreshListL()
+	{
+	RDEBUG("0", 0);
+	TInt count = 0;
+	switch(mCertView)
+		{
+		case EAuthorityView:
+			mCertDataContainer->RefreshCAEntriesL();
+			count = mCertDataContainer->iCALabelEntries.Count();
+			break;
+		case ETrustedView:
+			mCertDataContainer->RefreshPeerCertEntriesL();
+			count = mCertDataContainer->iPeerLabelEntries.Count();
+			break;
+		case EPersonalView:
+			mCertDataContainer->RefreshUserCertEntriesL();
+			count = mCertDataContainer->iUserLabelEntries.Count();
+			break;
+		case EDeviceView:
+			mCertDataContainer->RefreshDeviceCertEntriesL();
+			count = mCertDataContainer->iDeviceLabelEntries.Count();
+			break;
+		};
+	return count;
+	}
+
+
+void CpCertView::refreshView( TInt count )
+	{
+	RDEBUG("0", 0);
+	if(mRefreshedView)
+		{
+		mRefreshedView->deleteLater();
+		mRefreshedView = NULL;
+		}
+
+	mRefreshedView = q_check_ptr(new CpBaseSettingView());  
+	switch(mCertView)
+		{
+		case EAuthorityView:
+			{
+			mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_authority_certificate"));
+			break;
+			}
+		case ETrustedView:
+			{
+			mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_trusted_site_certific"));				
+			break;
+			}
+		case EPersonalView:
+			{
+			mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_personal_certificates"));				
+			break;
+			}
+		case EDeviceView:
+			{
+			mRefreshedView->setTitle(hbTrId("txt_certificate_manager_list_device_certificates"));				
+			break;
+			}
+		}	
+	
+	HbMenu* menu = mRefreshedView->menu();   
+	RDEBUG("0", 0);
+	std::auto_ptr<HbAction> endAction( q_check_ptr(new HbAction(hbTrId("txt_common_opt_delete"))) );
+	connect(endAction.get(), SIGNAL(triggered()), this, SLOT(deleteList()));    
+	menu->addAction(endAction.get());
+	endAction.release();
+	
+	QString title;
+	if(mCertView == EPersonalView)
+		{
+		title = "Move to Device";   
+		}
+	else if(mCertView == EDeviceView)
+		{
+		title = "Move to Personal";  
+		}
+	std::auto_ptr<HbAction> moveAction(q_check_ptr(new HbAction(title)));
+	connect(moveAction.get(), SIGNAL(triggered()), this, SLOT(moveCert()));    
+	menu->addAction(moveAction.get());
+	moveAction.release();
+	RDEBUG("0", 0);
+	std::auto_ptr<QGraphicsLinearLayout> layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical)));
+			
+	HbListWidget* mCertificateList = q_check_ptr(new HbListWidget(this)); 
+
+	for(int index = 0; index< count; index++)
+		{
+		QString certificateLabel = certLabel(index);
+		std::auto_ptr<HbListWidgetItem> singleCert(q_check_ptr(new HbListWidgetItem()));
+		singleCert->setText(certificateLabel);
+		mCertificateList->addItem(singleCert.get());
+		singleCert.release();
+		}  // end of for loop
+	
+	connect(mCertificateList, SIGNAL(activated(QModelIndex)), this, SLOT(openCertFromList(QModelIndex)));   
+	connect(mCertificateList, SIGNAL(longPressed(HbAbstractViewItem*, QPointF )), this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF))); 
+	
+	layout->addItem(mCertificateList);
+	RDEBUG("0", 0);
+	// Refresh current view
+	QObject::connect(mRefreshedView , SIGNAL(aboutToClose()), this, SLOT(viewDone()));
+	mPrevView = mainWindow()->currentView();   
+	mainWindow()->addView(mRefreshedView);
+	mainWindow()->setCurrentView(mRefreshedView); 
+	mRefreshedView->setLayout(layout.get());
+	layout.release();
+	RDEBUG("0", 0);
+	}
+
+
+void CpCertView::viewDone()  
+	{
+	RDEBUG("0", 0);
+	mCurrentView = mainWindow()->currentView();
+	mCurrentView->deleteLater();
+	mCurrentView= NULL;
+	mainWindow()->setCurrentView(mOriginalView);  	
+	}
+void CpCertView::showTrustSettings()
+	{
+	RDEBUG("0", 0);
+	mCurrentView = q_check_ptr(new CpCertTrustView(mPos, *mCertDataContainer));    
+	connect(mCurrentView , SIGNAL(aboutToClose()), this, SLOT(saveTrustSettings()));
+	mPrevView = mainWindow()->currentView();   
+	mainWindow()->addView(mCurrentView);
+	mainWindow()->setCurrentView(mCurrentView); 
+	}	
+
+void CpCertView::saveTrustSettings()
+	{
+	((CpCertTrustView*)mCurrentView)->saveTrustSettings();
+	displayPreviousView();
+	}
+
+void CpCertView::moveSelectedCert()
+	{
+	RDEBUG("0", 0);
+	RArray<TInt> pos;
+	pos.Append(mPos);
+	moveCertList(pos);
+	}
+
+void CpCertView::moveCertList(RArray<TInt>& indexList)
+	{
+	RDEBUG("0", 0);
+	mIndexList = indexList;
+	mNote = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+	mNote->setHeadingWidget(q_check_ptr(new HbLabel(hbTrId("txt_certificate_manager_info_move"))));
+	if( mCertView == EPersonalView )
+		{
+		mNote->setText(hbTrId("txt_certificate_manager_info_device_certificates_c"));
+		}
+	else if( mCertView == EDeviceView )
+		{
+		mNote->setText("Use of Personal certificates may require user confirmation. Proceed?");
+		}
+	
+	mNote->setTimeout(HbPopup::NoTimeout);
+	mNote->setIconVisible (EFalse);
+	mNote->open(this,SLOT(handleMoveDialog(HbAction*)));
+	RDEBUG("0", 0);
+}
+
+void CpCertView::handleMoveDialog(HbAction* action)
+{
+	RDEBUG("0", 0);
+	if (action != mNote->primaryAction())
+	    {
+		return;
+	    }
+	
+	TInt count = mIndexList.Count();
+	
+	for(TInt index = 0 ; index < count; ++index)
+		{
+		CCTCertInfo* entry = NULL;
+		if(mCertView == EPersonalView)
+			{
+			entry = mCertDataContainer->iUserLabelEntries[ mIndexList[index] ]->iUserEntry;
+			}
+		else if(mCertView == EDeviceView)
+			{
+			entry = mCertDataContainer->iDeviceLabelEntries[ mIndexList[index] ]->iDeviceEntry;
+			}
+			
+		// Move key first
+		TCTKeyAttributeFilter keyFilter;
+		keyFilter.iKeyId = entry->SubjectKeyId();
+		keyFilter.iPolicyFilter =  TCTKeyAttributeFilter::EAllKeys;
+		RDEBUG("0", 0);
+		TUid sourceCertStoreUid = TUid::Uid(0);
+		TUid targetCertStoreUid = TUid::Uid(0);
+		TUid sourceKeyStoreUid = TUid::Uid(0);
+		TUid targetKeyStoreUid = TUid::Uid(0);
+				
+		if(mCertView == EPersonalView)
+			{
+			sourceKeyStoreUid = KCMFileKeyStoreTokenUid;
+			targetKeyStoreUid = KCMDeviceKeyStoreTokenUid;
+			sourceCertStoreUid = KCMFileCertStoreTokenUid;
+			targetCertStoreUid = KCMDeviceCertStoreTokenUid;
+			}
+		else if(mCertView == EDeviceView)
+			{
+			sourceKeyStoreUid = KCMDeviceKeyStoreTokenUid;
+			targetKeyStoreUid = KCMFileKeyStoreTokenUid;
+			sourceCertStoreUid = KCMDeviceCertStoreTokenUid;
+			targetCertStoreUid = KCMFileCertStoreTokenUid;
+			}
+		RDEBUG("0", 0);
+		try
+			{
+			
+			QT_TRAP_THROWING( mCertDataContainer->iWrapper->MoveKeyL( 
+					mCertDataContainer->KeyManager(), keyFilter, sourceKeyStoreUid, targetKeyStoreUid ));
+			
+			// Move certificate
+			QT_TRAP_THROWING( mCertDataContainer->iWrapper->MoveCertL( 
+					mCertDataContainer->CertManager(), *entry, sourceCertStoreUid, targetCertStoreUid ) );
+
+			}
+		catch(const std::exception& exception)
+			{
+			QString error(exception.what());
+			QT_TRAP_THROWING(mCertDataContainer->ShowErrorNoteL( error.toInt() ));
+			User::Exit( KErrNone );
+			}
+		RDEBUG("0", 0);
+		try
+			{
+			if(mCertView == EPersonalView)
+				{
+				QT_TRAP_THROWING( mCertDataContainer->RefreshUserCertEntriesL() );
+				}
+			else if(mCertView == EDeviceView)
+				{
+				QT_TRAP_THROWING( mCertDataContainer->RefreshDeviceCertEntriesL() );
+				}
+			}
+		catch(const std::exception& exception)
+			{
+			QString error(exception.what());
+			if (  error.toInt() == KErrCorrupt )
+				{
+				QT_TRAP_THROWING(mCertDataContainer->ShowErrorNoteL( error.toInt()) );
+				User::Exit( KErrNone );
+				}
+			// have to call straight away the Exit
+			// showing any error notes would corrupt the display
+			User::Exit( error.toInt() );	
+			}
+		} // for
+	// Refresh current view
+	QT_TRAP_THROWING(refreshView(refreshListL()));	
+	delete mNote;
+	mNote = NULL;
+	RDEBUG("0", 0);
+	}
+