--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcontentwidget.cpp Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,677 @@
+/*
+* 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: Software install notification content widget.
+*
+*/
+
+#include "sifuidialogcontentwidget.h"
+#include <QGraphicsLinearLayout>
+#include <hbstackedwidget.h>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hbcombobox.h>
+#include <hbprogressbar.h>
+#include <QPixmap>
+#include <qsysteminfo.h> // QSystemStorageInfo
+#include <qvaluespacepublisher.h> // QValueSpacePublisher
+#include <qvaluespacesubscriber.h> // QValueSpaceSubscriber
+#if defined(Q_OS_SYMBIAN)
+#include <driveinfo.h> // DriveInfo
+#include <fbs.h> // CFbsBitmap
+#endif // Q_OS_SYMBIAN
+
+QTM_USE_NAMESPACE
+
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application";
+const char KSifUiErrorIcon[] = "qtg_large_warning";
+
+const int KSifUiKilo = 1024;
+const int KSifUiMega = 1024*1024;
+
+const int KAppNameIndex = 0;
+const int KAppSizeIndex = 1;
+
+enum TSifUiDriveName {
+ EPhoneMemory,
+ EMassStorage,
+ EMemoryCard,
+ EOtherDrive
+};
+
+const char KInitialDefaultDrive = 'C';
+
+// Path and value name for QValueSpacePublisher/QValueSpaceSubscriber.
+const QString KSifUiCenRepPath = "/KCRUIDSifUiDefaults";
+const QString KSifUiCenRepDefaultDrive = "KCRUIDSifUiDefaultDrive";
+
+// TODO: replace with proper logging
+#ifdef _DEBUG
+#define FLOG1(x) qDebug() << (x)
+#define FLOG2(x,y) qDebug() << (x) << (y)
+#define FLOG3(x,y,z) qDebug() << (x) << (y) << (z)
+#else
+#define FLOG1(x)
+#define FLOG2(x,y)
+#define FLOG3(x,y,z)
+#endif
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// fbsBitmap()
+// ----------------------------------------------------------------------------
+//
+CFbsBitmap *fbsBitmap(int handle)
+{
+ CFbsBitmap *bitmap = 0;
+#if defined(Q_OS_SYMBIAN)
+ bitmap = new CFbsBitmap;
+ if (bitmap) {
+ if (!bitmap->Duplicate(handle)) {
+ delete bitmap;
+ bitmap = 0;
+ }
+ }
+#endif // Q_OS_SYMBIAN
+ return bitmap;
+}
+
+// ----------------------------------------------------------------------------
+// driveName()
+// ----------------------------------------------------------------------------
+//
+TSifUiDriveName driveName(const QChar& volume)
+{
+#if defined(Q_OS_SYMBIAN)
+ int err = 0;
+ TChar drive;
+ err = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultPhoneMemory, drive);
+ if (!err && volume.toAscii() == drive) {
+ return EPhoneMemory;
+ }
+ err = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, drive);
+ if (!err && volume.toAscii() == drive) {
+ return EMassStorage;
+ }
+ err = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRemovableMassStorage, drive);
+ if (!err && volume.toAscii() == drive) {
+ return EMemoryCard;
+ }
+#endif // Q_OS_SYMBIAN
+ return EOtherDrive;
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::SifUiDialogContentWidget()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogContentWidget::SifUiDialogContentWidget(QGraphicsItem *parent,
+ Qt::WindowFlags flags) : HbWidget(parent, flags),
+ mAppIcon(0), mAppName(0), mAppSize(0),
+ mMainLayout(0), mAppDetailsLayout(0), mStackedWidget(0),
+ mMemorySelection(0), mProgressBar(0), mErrorText(0),
+ mBitmap(0), mMask(0), mPublisher(0), mSubscriber(0)
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::~SifUiDialogContentWidget()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogContentWidget::~SifUiDialogContentWidget()
+{
+ delete mBitmap;
+ delete mMask;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::constructFromParameters()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::constructFromParameters(const QVariantMap ¶meters)
+{
+ FLOG1("SifUiDialogContentWidget::constructFromParameters");
+
+ Q_ASSERT(mMainLayout == 0);
+ mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+
+ // Application icon
+ QGraphicsLinearLayout *iconAndAppLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+ Q_ASSERT(mAppIcon == 0);
+ mAppIcon = new HbLabel;
+ updateAppIcon(parameters);
+ iconAndAppLayout->addItem(mAppIcon);
+
+ // Application name and version
+ Q_ASSERT(mAppDetailsLayout == 0);
+ mAppDetailsLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ createAppName(applicationName(parameters));
+ mAppDetailsLayout->addItem(mAppName);
+
+ // Application size
+ Q_ASSERT(mAppSize == 0);
+ updateAppSize(parameters);
+
+ // Other application details
+ if (parameters.contains(KSifUiApplicationDetails)) {
+ addDetails(parameters.value(KSifUiApplicationDetails).toStringList());
+ }
+ iconAndAppLayout->addItem(mAppDetailsLayout);
+ mMainLayout->addItem(iconAndAppLayout);
+
+ // Memory selection, progress bar, and error text within a stacked widget
+ Q_ASSERT(mStackedWidget == 0);
+ mStackedWidget = new HbStackedWidget;
+
+ Q_ASSERT(mMemorySelection == 0);
+ mMemorySelection = new HbComboBox;
+ mStackedWidget->addWidget(mMemorySelection);
+
+ Q_ASSERT(mProgressBar == 0);
+ mProgressBar = new HbProgressBar;
+ mProgressBar->setRange(0,0); // busy indicator by default
+ mStackedWidget->addWidget(mProgressBar);
+
+ Q_ASSERT(mErrorText == 0);
+ mErrorText = new HbLabel;
+ mStackedWidget->addWidget(mErrorText);
+
+ mMainLayout->addItem(mStackedWidget);
+ if (!updateErrorText(parameters) &&
+ !updateProgressBar(parameters) &&
+ !updateMemorySelection(parameters)) {
+ mStackedWidget->hide();
+ }
+
+ setLayout(mMainLayout);
+ }
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateFromParameters()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::updateFromParameters(const QVariantMap ¶meters)
+{
+ FLOG1("SifUiDialogContentWidget::updateFromParameters");
+
+ // Application icon
+ updateAppIcon(parameters);
+
+ // Application name and version
+ if (parameters.contains(KSifUiApplicationName)) {
+ QString appNameStr = applicationName(parameters);
+ if (mAppName) {
+ if (mAppName->plainText() != appNameStr) {
+ mAppName->setPlainText(appNameStr);
+ }
+ } else {
+ createAppName(appNameStr);
+ mAppDetailsLayout->insertItem(KAppNameIndex, mAppName);
+ }
+ }
+
+ // Application size
+ updateAppSize(parameters);
+
+ // Other application details
+ if (parameters.contains(KSifUiApplicationDetails)) {
+ removeDetails();
+ addDetails(parameters.value(KSifUiApplicationDetails).toStringList());
+ }
+
+ // Stacked widgets: memory selection, progress bar and error text
+ if (updateErrorText(parameters) ||
+ updateProgressBar(parameters) ||
+ updateMemorySelection(parameters)) {
+ if (!mStackedWidget->isVisible()) {
+ mStackedWidget->show();
+ }
+ } else {
+ if (mStackedWidget->isVisible()) {
+ mStackedWidget->hide();
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::changeType()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::changeType(SifUiDeviceDialogType type)
+{
+ FLOG2("SifUiDialogContentWidget::changeType", type);
+
+ switch (type) {
+ case SifUiConfirmationQuery:
+ mStackedWidget->setCurrentWidget(mMemorySelection);
+ break;
+ case SifUiProgressNote:
+ mStackedWidget->setCurrentWidget(mProgressBar);
+ break;
+ case SifUiCompleteNote:
+ break;
+ case SifUiErrorNote:
+ mStackedWidget->setCurrentWidget(mErrorText);
+ break;
+ default:
+ break;
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::applicationName()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogContentWidget::applicationName() const
+{
+ if (mAppName) {
+ return mAppName->plainText();
+ }
+ return QString();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::handleMemorySelectionChange()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::handleMemorySelectionChange(int selectedIndex)
+{
+ FLOG2("SifUiDialogContentWidget::handleMemorySelectionChange", selectedIndex);
+
+ QChar selectedDrive = mDriveLetterList[selectedIndex][0];
+ saveSelectedDriveAsDefault( selectedDrive );
+ emit memorySelectionChanged( selectedDrive );
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::applicationName()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogContentWidget::applicationName(const QVariantMap ¶meters)
+{
+ QString appName = "";
+ if (parameters.contains(KSifUiApplicationName)) {
+ QString nameParam = parameters.value(KSifUiApplicationName).toString();
+ if (parameters.contains(KSifUiApplicationVersion)) {
+ QString versionParam = parameters.value(KSifUiApplicationVersion).toString();
+ //: Custom layout ID parent. Template for application name and version in SW install
+ //: confirmation query. %1 is the application name and %2 is the version number.
+ //: Version number consist of major, minor, and build numbers.
+ //: For example: "Chess (v 1.01(123))".
+ // TODO: use hbTrId when arg() starts to work with limited length arguments like "%[99]1"
+ //appName = hbTrId("txt_installer_list_appname_version").arg(nameParam, versionParam);
+ appName = QString("%1 (v %2)").arg(nameParam, versionParam);
+ } else {
+ appName = nameParam;
+ }
+ }
+ return appName;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::applicationSize()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogContentWidget::applicationSize(const QVariantMap ¶meters)
+{
+ QString appSize = "";
+ if (parameters.contains(KSifUiApplicationSize)) {
+ bool ok = false;
+ uint size = parameters.value(KSifUiApplicationSize).toUInt(&ok);
+ if (ok) {
+ if (size > KSifUiMega) {
+ //: Application size in SW install confirmation query, %1 is in megabytes
+ appSize = hbTrId("txt_installer_list_appsize_mb").arg(size/KSifUiMega);
+ } else if(size > KSifUiKilo) {
+ //: Application size in SW install confirmation query, %1 is in kilobytes
+ appSize = hbTrId("txt_installer_list_appsize_kb").arg(size/KSifUiKilo);
+ } else {
+ //: Application size in SW install confirmation query, %1 is in bytes
+ appSize = hbTrId("txt_installer_list_appsize_b").arg(size);
+ }
+ }
+ }
+ return appSize;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::removeDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::removeDetails()
+{
+ int firstDetailsItemIndex = ( mAppName ? 1 : 0 ) + ( mAppSize ? 1 : 0 );
+ QGraphicsLayoutItem *item = 0;
+ for (int i = 0; i < mAppDetailsLayout->count(); ++i) {
+ if (i >= firstDetailsItemIndex) {
+ item = mAppDetailsLayout->itemAt(i);
+ mAppDetailsLayout->removeAt(i);
+ delete item;
+ item = 0;
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::addDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::addDetails(const QStringList &detailList)
+{
+ QStringListIterator detailsIter(detailList);
+ while (detailsIter.hasNext())
+ {
+ addDetail(detailsIter.next());
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::addDetail()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::addDetail(const QString &detailText)
+{
+ Q_ASSERT(mAppDetailsLayout != 0);
+ HbLabel *detailItem = new HbLabel(detailText);
+ detailItem->setTextWrapping(Hb::TextWordWrap);
+ detailItem->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+ mAppDetailsLayout->addItem(detailItem);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::createAppName()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::createAppName(const QString &appName)
+{
+ Q_ASSERT(mAppName == 0);
+ mAppName = new HbLabel(appName);
+ mAppName->setTextWrapping(Hb::TextWordWrap);
+ mAppName->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateAppIcon()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::updateAppIcon(const QVariantMap ¶meters)
+{
+ Q_ASSERT(mAppIcon != 0);
+
+ // TODO: proper icon handling
+ if (parameters.contains(KSifUiDialogType) &&
+ (parameters.value(KSifUiDialogType).toInt() == SifUiErrorNote)) {
+ mAppIcon->setIcon(HbIcon(KSifUiErrorIcon));
+ } else if (parameters.contains(KSifUiApplicationIconHandle) &&
+ parameters.contains(KSifUiApplicationIconMaskHandle)) {
+ int iconHandle = parameters.value(KSifUiApplicationIconHandle).toInt();
+ int maskHandle = parameters.value(KSifUiApplicationIconMaskHandle).toInt();
+ QPixmap pixmap;
+ delete mBitmap;
+ mBitmap = fbsBitmap(iconHandle);
+ delete mMask;
+ mMask = fbsBitmap(maskHandle);
+ if (mBitmap && mMask) {
+ pixmap = QPixmap::fromSymbianCFbsBitmap(mBitmap);
+ pixmap.setAlphaChannel(QPixmap::fromSymbianCFbsBitmap(mMask));
+ }
+ mAppIcon->setIcon(HbIcon(pixmap));
+ } else {
+ if (mAppIcon->icon().isNull()) {
+ mAppIcon->setIcon(HbIcon(KSifUiDefaultApplicationIcon));
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateAppSize()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::updateAppSize(const QVariantMap ¶meters)
+{
+ if (parameters.contains(KSifUiApplicationSize)) {
+ QString appSizeStr = applicationSize(parameters);
+ if (appSizeStr.length() > 0) {
+ if (mAppSize) {
+ if (mAppSize->plainText() != appSizeStr) {
+ mAppSize->setPlainText(appSizeStr);
+ }
+ } else {
+ HbLabel *appSize = new HbLabel(appSizeStr);
+ appSize->setTextWrapping(Hb::TextWordWrap);
+ appSize->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+ mAppDetailsLayout->insertItem(KAppSizeIndex, appSize);
+ mAppSize = appSize;
+ }
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateMemorySelection()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialogContentWidget::updateMemorySelection(const QVariantMap ¶meters)
+{
+ if (parameters.contains(KSifUiMemorySelection)) {
+ QString drives = parameters.value(KSifUiMemorySelection).toString();
+ mDriveLetterList = drives.split(",");
+
+ QChar defaultDrive = readDefaultSelectedDrive();
+ int defaultDriveIndex = 0;
+
+ QStringList driveList;
+ QSystemStorageInfo info;
+ QStringList volumeList = info.logicalDrives();
+ foreach (QString volume, volumeList) {
+ if (mDriveLetterList.contains(volume)) {
+ qlonglong size = info.availableDiskSpace(volume);
+
+ QChar driveLetter(volume[0]);
+ switch (driveName(driveLetter)) {
+ case EPhoneMemory:
+ if (size > KSifUiMega) {
+ //: Drive name for internal phone memory with megabytes of free space.
+ //: %1 is replaced with drive letter (usually 'C')
+ //: %2 is replaced with available free space (in megabytes, MB)
+ //TODO: enable when available
+ //driveList.append(hbTrId("txt_installer_device_memory_mb")
+ // .arg(volume).arg(size/KSifUiMega));
+ driveList.append(tr("%1: Phone mem. (%L2 MB)"
+ ).arg(volume).arg(size/KSifUiMega));
+ } else {
+ //: Drive name for internal phone memory with kilobytes of free space.
+ //: %1 is replaced with drive letter (usually 'C')
+ //: %2 is replaced with available free space (in kilobytes, kB)
+ //TODO: enable when available
+ //driveList.append(hbTrId("txt_installer_device_memory_kb")
+ // .arg(volume).arg(size/KSifUiKilo));
+ driveList.append(tr("%1: Phone mem. (%L2 kB)"
+ ).arg(volume).arg(size/KSifUiKilo));
+ }
+ break;
+
+ case EMassStorage:
+ if (size > KSifUiMega) {
+ //: Drive name for mass storage with megabytes of free space.
+ //: %1 is replaced with drive letter (usually 'E')
+ //: %2 is replaced with available free space (in megabytes, MB)
+ // TODO: enable when available
+ //driveList.append(hbTrId("txt_installer_mass_storage_mb")
+ // .arg(volume).arg(size/KSifUiMega));
+ driveList.append(tr("%1: Mass.mem (%L2 MB)"
+ ).arg(volume).arg(size/KSifUiMega));
+ } else {
+ //: Drive name for mass storage with kilobytes of free space.
+ //: %1 is replaced with drive letter (usually 'E')
+ //: %2 is replaced with available free space (in kilobytes, kB)
+ // TODO: enable when available
+ //driveList.append(hbTrId("txt_installer_mass_storage_kb")
+ // .arg(volume).arg(size/KSifUiKilo));
+ driveList.append(tr("%1: Mass.mem (%L2 kB)"
+ ).arg(volume).arg(size/KSifUiKilo));
+ }
+ break;
+
+ case EMemoryCard:
+ if (size > KSifUiMega) {
+ //: Drive name for memory card with megabytes of free space.
+ //: %1 is replaced with drive letter (usually 'F')
+ //: %2 is replaced with available free space (in megabytes, MB)
+ // TODO: enable when available
+ //driveList.append(hbTrId("txt_installer_memory_card_mb")
+ // .arg(volume).arg(size/KSifUiMega));
+ driveList.append(tr("%1: Mem.card (%L2 MB)"
+ ).arg(volume).arg(size/KSifUiMega));
+ } else {
+ //: Drive name for memory card with kilobytes of free space.
+ //: %1 is replaced with drive letter (usually 'F')
+ //: %2 is replaced with available free space (in kilobytes, kB)
+ // TODO: enable when available
+ //driveList.append(hbTrId("txt_installer_memory_card_kb")
+ // .arg(volume).arg(size/KSifUiKilo));
+ driveList.append(tr("%1: Mem.card (%L2 kB)"
+ ).arg(volume).arg(size/KSifUiKilo));
+ }
+ break;
+
+ case EOtherDrive:
+ default:
+ if (size > KSifUiMega) {
+ //: Generic drive name for other removable drives, like
+ //: USB memories attached via USB OTG adapter.
+ // TODO: proper localisation needed
+ driveList.append(tr("%1: Drive (%L2 MB)"
+ ).arg(volume).arg(size/KSifUiMega));
+ } else {
+ //: Generic drive name for other removable drives, like
+ //: USB memories attached via USB OTG adapter.
+ // TODO: proper localisation needed
+ driveList.append(tr("%1: Drive (%L2 kB)"
+ ).arg(volume).arg(size/KSifUiKilo));
+ }
+ break;
+ }
+
+ if (driveLetter == defaultDrive) {
+ defaultDriveIndex = driveList.count() - 1;
+ }
+ }
+ }
+
+ disconnect(mMemorySelection, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(handleMemorySelectionChange(int)));
+ mMemorySelection->setItems(driveList);
+ if (defaultDriveIndex) {
+ FLOG2("SifUiDialogContentWidget::updateMemorySelection, setCurrentIndex",
+ defaultDriveIndex);
+ mMemorySelection->setCurrentIndex(defaultDriveIndex);
+ }
+ connect(mMemorySelection, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(handleMemorySelectionChange(int)));
+ mStackedWidget->setCurrentWidget(mMemorySelection);
+
+ return true;
+ }
+ return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateProgressBar()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialogContentWidget::updateProgressBar(const QVariantMap ¶meters)
+{
+ bool progressBarChanged = false;
+ if (parameters.contains(KSifUiProgressNoteFinalValue)) {
+ mProgressBar->setMaximum(parameters.value(KSifUiProgressNoteFinalValue).toInt());
+ progressBarChanged = true;
+ }
+ if (parameters.contains(KSifUiProgressNoteValue)) {
+ int newValue = mProgressBar->progressValue();
+ bool ok = false;
+ newValue += parameters.value(KSifUiProgressNoteValue).toInt(&ok);
+ if (ok) {
+ mProgressBar->setProgressValue(newValue);
+ progressBarChanged = true;
+ }
+ }
+ if (progressBarChanged) {
+ mStackedWidget->setCurrentWidget(mProgressBar);
+ }
+ return progressBarChanged;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::updateErrorText()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialogContentWidget::updateErrorText(const QVariantMap ¶meters)
+{
+ // TODO: move default error messages (category based) here
+ if (parameters.contains(KSifUiErrorMessage)) {
+ QString errorText = parameters.value(KSifUiErrorMessage).toString();
+ mErrorText->setPlainText(errorText);
+ mStackedWidget->setCurrentWidget(mErrorText);
+ return true;
+ }
+ return false;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::saveSelectedDriveAsDefault()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::saveSelectedDriveAsDefault(const QChar& drive)
+{
+ if (drive != readDefaultSelectedDrive()) {
+ if (!mPublisher) {
+ mPublisher = new QValueSpacePublisher(KSifUiCenRepPath, this);
+ }
+ FLOG2("SifUiDialogContentWidget::saveSelectedDriveAsDefault", drive);
+ // QValueSpacePublisher supports integer and byte array types in Symbian
+ int asciiValue = drive.toAscii();
+ mPublisher->setValue(KSifUiCenRepDefaultDrive, asciiValue);
+ mPublisher->sync();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::readDefaultSelectedDrive()
+// ----------------------------------------------------------------------------
+//
+QChar SifUiDialogContentWidget::readDefaultSelectedDrive()
+{
+ QChar selectedDrive = KInitialDefaultDrive;
+
+ if (!mSubscriber) {
+ mSubscriber = new QValueSpaceSubscriber(KSifUiCenRepPath, this);
+ }
+ QVariant variant = mSubscriber->value(KSifUiCenRepDefaultDrive);
+ if (variant.isValid() && !variant.isNull()) {
+ bool ok = false;
+ int asciiValue = variant.toInt(&ok);
+ if (ok) {
+ selectedDrive = QChar(asciiValue);
+ }
+ }
+
+ FLOG2("SifUiDialogContentWidget::readDefaultSelectedDrive", selectedDrive);
+ return selectedDrive;
+}
+