--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/devicepowermenuplugin/src/hbdevicepowermenuwidegt.cpp Wed Jun 23 18:22:59 2010 +0300
@@ -0,0 +1,481 @@
+/*
+ * 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 "hbdevicepowermenuwidegt_p.h"
+#include "hbdevicepowermenupluginerrors_p.h"
+#include <HbInstance.h>
+
+//resuorces
+QString POWER_MENU_DOCML(":/xml/powermenu.docml");
+QString VOLUME_DECREASE_ICON(":/images/decrement.svg");
+QString VOLUME_INCREASE_ICON(":/images/increment.svg");
+QString VOLUME_UNMUTE_ICON(":/images/unmuted.svg");
+QString VOLUME_MUTE_ICON(":/images/muted.svg");
+//For Localization
+QString LOCALE_PATH("/resource/qt/translations/");
+QString TS_FILE("power_menu");
+
+//Widget names
+QString MAIN_DLG("maindialog");
+QString PWR_SILENCE("Silence");
+QString PWR_VOLUME("Volume");
+QString PWR_VIBARTE("Vibrate");
+QString PWR_OFFLINE("Offline");
+QString PWR_POWEROFF("PowerOff");
+QString PWR_CONTAINER("container_1");
+
+//DO not modify these strings
+QString KVolumeLevel("VolumeLevel");
+QString KSilenceLatchOn("SilenceLatchOn"); //Used to latch silencebutton
+QString KVibrationEnable("VibrationEnable");
+QString KOfflineEnable("OfflineEnable");
+QString KCypherOff("CypherOff"); //used to poweroffButtonEnabled/Disabled
+QString KShutDown("ShutDown");
+
+//Used for Orientation of PowerMenu
+qreal KVerticalX = 175;
+//width of PowerMenu
+qreal KPMWidth = 360;
+/**
+ * Constructor
+ */
+HbDevicePowerMenuWidget::HbDevicePowerMenuWidget(const QVariantMap ¶meters)
+ :mDeviceDialogError(NoError),
+ mVolumeLevel(0),
+ mShowVolume(false),
+ mVibrationChecked(true),
+ mOfflineChecked(true),
+ mSilencelatched(true),
+ mCypherOff(true),
+ mDialogWidget(NULL),
+ mSilenceButton(NULL),
+ mVolumeSlider(NULL),
+ mVibarte(NULL),
+ mOffline(NULL),
+ mPowerOffButton(NULL),
+ mLoader(NULL),
+ mHbTranslator(NULL)
+ {
+ // mMainWindow(NULL),
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::Constructor:Begin") ) );
+ if (preConstructDialog())
+ {
+ //Translator loaded succesfully then olny construct widgets
+ constructDialog(parameters);
+ }
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::Constructor:End") ) );
+ }
+
+/**
+ * Destructor
+ */
+HbDevicePowerMenuWidget::~HbDevicePowerMenuWidget()
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::Destructor()") ) );
+ delete mLoader;
+ delete mHbTranslator;
+ }
+
+/**
+ * Implementation of HbDeviceDialogInterface method
+ * sets parameters of custom widget
+ */
+bool HbDevicePowerMenuWidget::setDeviceDialogParameters(const QVariantMap ¶meters)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setDeviceDialogParameters:Begin") ) );
+ if(parameters.contains(KVolumeLevel))
+ {
+ mVolumeLevel = parameters.value(KVolumeLevel).toInt();
+ }
+ if(parameters.contains(KSilenceLatchOn))
+ {
+ mSilencelatched = parameters.value(KSilenceLatchOn).toBool();
+ //If SilenceMode is Enabled then MasterVolume control is Disabled
+ mShowVolume = mSilencelatched? false:true;
+ }
+ if(parameters.contains(KVibrationEnable))
+ {
+ mVibrationChecked = parameters.value(KVibrationEnable).toBool();
+ }
+ if(parameters.contains(KOfflineEnable))
+ {
+ mOfflineChecked = parameters.value(KOfflineEnable).toBool();
+ }
+ if(parameters.contains(KCypherOff))
+ {
+ mCypherOff = parameters.value(KCypherOff).toBool();
+ }
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setDeviceDialogParameters:End") ) );
+ return true;
+ }
+
+/**
+ * Returns error code
+ */
+int HbDevicePowerMenuWidget::deviceDialogError() const
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::deviceDialogError") ) );
+ return mDeviceDialogError;
+ }
+
+/**
+ * Close DeviceDialog
+ */
+void HbDevicePowerMenuWidget::closeDeviceDialog(bool byClient)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::closeDeviceDialog:Begin") ) );
+ Q_UNUSED(byClient);
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::closeDeviceDialog:End") ) );
+ mDialogWidget->close();
+ }
+
+/**
+ * Implementation of HbDeviceDialogInterface method
+ */
+HbPopup* HbDevicePowerMenuWidget::deviceDialogWidget() const
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::deviceDialogWidget") ) );
+ return mDialogWidget;
+ }
+
+/**
+ * Implementation of HbDeviceDialogInterface method
+ * to get signals from action events
+ */
+QObject* HbDevicePowerMenuWidget::signalSender() const
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::signalSender") ) );
+ return const_cast<HbDevicePowerMenuWidget*>(this);
+ }
+
+/**
+ * Before loading docml and widgets Translator must be loaded
+ */
+bool HbDevicePowerMenuWidget::preConstructDialog()
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::preConstructDialog:Begin") ) );
+ //Translator
+ mHbTranslator = new HbTranslator(LOCALE_PATH,TS_FILE);
+ if(!mHbTranslator)
+ {
+ //Translator is failed to create
+ mDeviceDialogError = UnknownDeviceDialogError;
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::preConstructDialog:MemoryAllocation Failed") ) );
+ return false;
+ }
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::preConstructDialog:End") ) );
+ return true;
+ }
+
+/**
+ * Constrcuts customized widget dialog by loading the UI from docml and
+ * initializes all parameters and attributes.
+ * Throws bad-memory on Un-succesful memory allocations
+ */
+void HbDevicePowerMenuWidget::constructDialog(const QVariantMap ¶meters)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:Begin") ) );
+ bool dialogLoaded(false);
+ //Docml loader
+ mLoader = new HbDocumentLoader();
+ if(!mLoader)
+ {
+ //Document Loader failed to create
+ mDeviceDialogError = UnknownDeviceDialogError;
+ cleanupMemory();
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:mLoader::MemoryAllocation Failed") ) );
+ return;
+ }
+ mLoader->load(POWER_MENU_DOCML, &dialogLoaded);
+ Q_ASSERT_X(dialogLoaded, "HbDevicePowerMenuWidget", "Invalid xml file");
+ //Widgets
+ if (dialogLoaded)
+ {
+ //Dialog loaded succesfully from docml
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:dialogLoaded:Begin") ) );
+
+ //Initialize Parameters received
+ setDeviceDialogParameters(parameters);
+ mDialogWidget = qobject_cast <HbDialog *>(mLoader->findWidget(MAIN_DLG));
+ //Find the handles for all widget items
+ mSilenceButton = qobject_cast <HbPushButton *>(mLoader->findWidget(PWR_SILENCE));
+ mVolumeSlider = qobject_cast <HbSlider *>(mLoader->findWidget(PWR_VOLUME));
+ mVibarte = qobject_cast <HbCheckBox *>(mLoader->findWidget(PWR_VIBARTE));
+ mOffline = qobject_cast <HbCheckBox *>(mLoader->findWidget(PWR_OFFLINE));
+ mPowerOffButton = qobject_cast <HbPushButton *>(mLoader->findWidget(PWR_POWEROFF));
+ QGraphicsWidget *widget(NULL);
+ widget = mLoader->findWidget(PWR_CONTAINER);
+ if (!(IsValidHandles()&&(widget)))
+ {
+ //Atleast, One of the Handles are not allocated memory
+ mDeviceDialogError = UnknownDeviceDialogError;
+ cleanupMemory();
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:Widgets::MemoryAllocation Failed") ) );
+ return;
+ }
+ //Sets Speaker icon
+ setSpeakerIcon();
+ //Customize slider to VolumeSlider
+ customizeVolumeSlider();
+ mDialogWidget->setContentWidget(widget);
+ //SetWidget Attributes
+ //1. Volume
+ mVolumeSlider->setSliderPosition(mVolumeLevel);
+ mVolumeSlider->setEnabled(mShowVolume);
+ //This will avoid IPC calls while dragging the Slider
+ mVolumeSlider->setTracking(false);
+ bool ok = connect(mVolumeSlider,SIGNAL(valueChanged(int)) , this , SLOT(handleVolumeChanged(int)));
+ Q_ASSERT_X(ok, "VolumeSlider", "Invalid IncrementDecrement Change");
+
+ //2.Silence Mode
+ mSilenceButton->setDown(mSilencelatched);
+ ok = connect(mSilenceButton,SIGNAL(clicked(bool)) , this , SLOT(handleSilenceMode(bool)));
+ Q_ASSERT_X(ok, "SilenceButton", "Invalid Clicked");
+
+ //3.Master Vibration
+ mVibarte->setChecked(mVibrationChecked);
+ ok = connect(mVibarte,SIGNAL(stateChanged(int)) , this , SLOT(handleVibrationToggled(int)));
+ Q_ASSERT_X(ok, "Vibrator", "Invalid Vibrator Toggeld");
+
+ //4.Offline
+ mOffline->setChecked(mOfflineChecked);
+ ok = connect(mOffline,SIGNAL(stateChanged(int)) , this , SLOT(handleOfflineToggled(int)));
+ Q_ASSERT_X(ok, "Vibrator", "Invalid Offline Toggeld");
+
+ //5.Power off
+ mPowerOffButton->setEnabled(mCypherOff);
+ ok = connect(mPowerOffButton,SIGNAL(clicked(bool)) , this , SLOT(handlePowerOff(bool)));
+ Q_ASSERT_X(ok, "PowerOffButton", "Invalid Clicked");
+
+ //Dialog dismiss only with Tap outside
+ mDialogWidget->setTimeout(HbPopup::NoTimeout);
+ mDialogWidget->setDismissPolicy(HbPopup::TapOutside);
+ mDialogWidget->setPreferredWidth(KPMWidth);
+ //Sets Dialog position on screen
+/*
+ HbInstance* instance = HbInstance::instance();
+ mMainWindow = instance->allMainWindows().first();
+ ok = connect(mMainWindow , SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setDialogWidget(Qt::Orientation)));
+ //This is required to launch menu in right place for very first time
+ setDialogWidget(mMainWindow->orientation());
+
+ Q_ASSERT_X(ok, "Orientation", "Invalid Orientation");
+*/
+ connect(mDialogWidget,SIGNAL(aboutToClose()),this, SLOT(closedialog()));
+
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:dialogLoaded:End") ) );
+ }
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::constructDialog:End") ) );
+ }
+
+/**
+ * Checks whether all Hadles for widgets DialogWidget,
+ * SilenceButton, Vibrate, Offline and Poweroff Button allocated memory.
+ * Returns True, if all Handles allocated memory.
+ * Flase, atleast one of them NOT allocated memory.
+ */
+bool HbDevicePowerMenuWidget::IsValidHandles()
+ {
+ if((!mDialogWidget) || (!mSilenceButton) || (!mVolumeSlider)||(!mVibarte) || (!mOffline) || (!mPowerOffButton))
+ {
+ return false;
+ }
+ else{
+ //All handles are allocated memory
+ return true;
+ }
+ }
+
+/**
+ * Sets Mute/Unmute icon for Volume slider
+ * Mute/Unmute icon to display the current status of Silence Mode.
+ * Mute icon dispalyed when Device in Silence mode.
+ * Unmute icon dispalyed when Device Non-Silence mode.
+ */
+void HbDevicePowerMenuWidget::setSpeakerIcon()
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setSpeakerIcon:Begin") ) );
+ QString speakerIcon= ( mSilencelatched )? VOLUME_MUTE_ICON : VOLUME_UNMUTE_ICON ;
+ mVolumeSlider->setElementIcon(HbSlider:: IconElement,HbIcon(speakerIcon));
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setSpeakerIcon:End") ) );
+ }
+
+
+/**
+ * Customizes the slider to Vloume Slider
+ */
+void HbDevicePowerMenuWidget::customizeVolumeSlider()
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::customizeVolumeSlider:Begin") ) );
+ //Construct Volume Slider from the HbSlider
+ mVolumeSlider->setSliderElements(QList<QVariant>()
+ << HbSlider::DecreaseElement
+ << HbSlider::TrackElement
+ << HbSlider::IncreaseElement
+ << HbSlider::IconElement );
+
+ // To set DecreaseIcon and IncreseIcon
+ mVolumeSlider->setElementIcon(HbSlider::DecreaseElement, HbIcon(VOLUME_DECREASE_ICON));
+ mVolumeSlider->setElementIcon(HbSlider:: IncreaseElement, HbIcon(VOLUME_INCREASE_ICON));
+ //set Range of volume
+ mVolumeSlider->setRange(1,10);
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::customizeVolumeSlider:End") ) );
+ }
+
+/**
+ * Widget is about to hide.
+ * This method is dervied from HBpopUp
+ *
+ */
+void HbDevicePowerMenuWidget::hideEvent(QHideEvent *event)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::hideEvent:Begin") ) );
+ Q_UNUSED(event);
+ //emit deviceDialogClosed();
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::hideEvent:End") ) );
+ }
+
+void HbDevicePowerMenuWidget::closedialog()
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::closedialog:Begin") ) );
+ emit deviceDialogClosed();
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::closedialog:Begin") ) );
+ }
+/**
+ * Widget is about to show
+ * This method is dervied from HBpopUp
+ */
+void HbDevicePowerMenuWidget::showEvent(QShowEvent *event)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::showEvent") ) );
+ Q_UNUSED(event);
+ }
+
+/**
+ * Slot
+ */
+void HbDevicePowerMenuWidget::handleVolumeChanged(int aVolume)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleVolumeChanged:Begin") ) );
+ mVolumeLevel = aVolume;
+ //inform the client may be through data changed etc.
+ QVariantMap mDataToSend;
+ QVariant volume(mVolumeLevel);
+ mDataToSend.insert(KVolumeLevel, volume);
+ emit deviceDialogData(mDataToSend);
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleVolumeChanged:Begin") ) );
+ }
+
+/**
+ * Slot
+ * Switch between the states to latch down and latch up.
+ * In case of Silence mode, The Silence button id latched down and Disables Volume control.
+ * In case of Non-Silence mode, The Silence button id latched Up and enables Volume control.
+ */
+void HbDevicePowerMenuWidget::handleSilenceMode(bool aState)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleSilenceMode:Begin") ) );
+ Q_UNUSED(aState);
+ mShowVolume = !(mShowVolume);
+ mSilencelatched = !(mSilencelatched);
+ mSilenceButton->setDown(mSilencelatched);
+ mVolumeSlider->setEnabled(mShowVolume);
+ setSpeakerIcon();
+ //inform the client may be through data changed etc.
+ QVariantMap mDataToSend;
+ QVariant silence(mSilencelatched);
+ mDataToSend.insert(KSilenceLatchOn, silence);
+ emit deviceDialogData(mDataToSend);
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleSilenceMode:End") ) );
+ }
+
+/**
+ * Slot
+ */
+void HbDevicePowerMenuWidget::handlePowerOff(bool aState)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handlePowerOff:Begin") ) );
+ Q_UNUSED(aState);
+ QVariantMap mDataToSend;
+ QVariant shutdown(true);
+ mDataToSend.insert(KShutDown, shutdown);
+ emit deviceDialogData(mDataToSend);
+ emit deviceDialogClosed();
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handlePowerOff:End") ) );
+ }
+
+/**
+ * Slot
+ */
+void HbDevicePowerMenuWidget::handleOfflineToggled(int aOfflineToggel)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleOfflineToggled:Begin") ) );
+ mOfflineChecked = aOfflineToggel;
+ QVariantMap mDataToSend;
+ QVariant offline(mOfflineChecked);
+ mDataToSend.insert(KOfflineEnable, offline);
+ emit deviceDialogData(mDataToSend);
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleOfflineToggled:End") ) );
+ }
+
+/**
+ * Slot
+ */
+void HbDevicePowerMenuWidget::handleVibrationToggled(int aVibrationToggel)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleVibrationToggled:Begin") ) );
+ mVibrationChecked = aVibrationToggel;
+ QVariantMap mDataToSend;
+ QVariant vibration(mVibrationChecked);
+ mDataToSend.insert(KVibrationEnable, vibration);
+ emit deviceDialogData(mDataToSend);
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::handleVibrationToggled:End") ) );
+ }
+
+void HbDevicePowerMenuWidget::cleanupMemory()
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::cleanupMemory:Begin") ) );
+ if(mLoader)
+ {
+ delete mLoader;
+ }
+ if(mHbTranslator)
+ {
+ delete mHbTranslator;
+ }
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::cleanupMemory:End") ) );
+ }
+
+/**
+ * Slot
+ * Sets Dialog position on screen
+ */
+/*void HbDevicePowerMenuWidget::setDialogWidget(Qt::Orientation aOrientation)
+ {
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setDialogWidget:Begin") ) );
+ if (aOrientation == Qt::Vertical)
+ {
+ mDialogWidget->setPreferredPos(QPointF(0,0),HbPopup::TopLeftCorner);
+ }
+ else
+ {
+ mDialogWidget->setPreferredPos(QPointF(KVerticalX,0),HbPopup::TopLeftCorner);
+ }
+ TRACES( RDebug::Print( _L("HbDevicePowerMenuWidget::setDialogWidget:End") ) );
+ }*/
+