diff --git a/src/systemui/statusindicatormenu/statusindicatormenu.cpp b/src/systemui/statusindicatormenu/statusindicatormenu.cpp index 962dc8b8..2f40ab45 100644 --- a/src/systemui/statusindicatormenu/statusindicatormenu.cpp +++ b/src/systemui/statusindicatormenu/statusindicatormenu.cpp @@ -17,6 +17,7 @@ ** ****************************************************************************/ #include +#include #include "statusindicatormenu.h" #include "statusindicatormenudropdownview.h" @@ -25,6 +26,9 @@ const QString StatusIndicatorMenu::CONTROL_PANEL_SERVICE_NAME = "com.nokia.DuiCo StatusIndicatorMenu::StatusIndicatorMenu(QGraphicsItem *parent) : MApplicationMenu() { +#ifdef HAVE_QMSYSTEM + m_State = NULL; +#endif Q_UNUSED(parent); } @@ -51,6 +55,23 @@ void StatusIndicatorMenu::launchControlPanelAndHide() hideStatusIndicatorMenu(); } +void StatusIndicatorMenu::launchPowerOffDialog() +{ + // % "Are you sure you want to power off the device?" + MMessageBox box(qtTrId("qtn_stat_menu_poweroff_query"), M::YesButton | M::NoButton); + int result = box.exec(); + if (result == QMessageBox::Yes) { +#ifdef HAVE_QMSYSTEM + if (m_State == NULL) { + m_State = new MeeGo::QmSystemState(this); + } + m_State->set(MeeGo::QmSystemState::ShuttingDown); +#else + start("halt -p"); +#endif + } +} + void StatusIndicatorMenu::showStatusIndicatorMenu() { emit showRequested(); diff --git a/src/systemui/statusindicatormenu/statusindicatormenu.h b/src/systemui/statusindicatormenu/statusindicatormenu.h index dcaf719f..dbac9ae7 100644 --- a/src/systemui/statusindicatormenu/statusindicatormenu.h +++ b/src/systemui/statusindicatormenu/statusindicatormenu.h @@ -23,6 +23,10 @@ #include #include "mstatusindicatormenuextensioninterface.h" +#ifdef HAVE_QMSYSTEM +#include +#endif + class StatusIndicatorMenuWindow; /*! @@ -73,11 +77,22 @@ private slots: */ void launchControlPanelAndHide(); + /*! + * \brief Slot for getting information about poweroff button clicks + */ + void launchPowerOffDialog(); + + private: // methods //! The name of the control panel service const static QString CONTROL_PANEL_SERVICE_NAME; +#ifdef HAVE_QMSYSTEM + //! System state + MeeGo::QmSystemState *m_State; +#endif + #ifdef UNIT_TEST friend class Ut_StatusIndicatorMenu; #endif diff --git a/src/systemui/statusindicatormenu/statusindicatormenudropdownview.cpp b/src/systemui/statusindicatormenu/statusindicatormenudropdownview.cpp index 3567b28b..29ace311 100644 --- a/src/systemui/statusindicatormenu/statusindicatormenudropdownview.cpp +++ b/src/systemui/statusindicatormenu/statusindicatormenudropdownview.cpp @@ -131,13 +131,22 @@ QGraphicsWidget* StatusIndicatorMenuDropDownView::createTopRow() settingsButton->setIconID("icon-m-status-menu-settings"); connect(settingsButton, SIGNAL(clicked()), controller, SLOT(launchControlPanelAndHide())); - // Put the extension area and the settings button to a horizontal layout + // Create a button for triggering the powerOff dialog + //% "Power off" + MButton *powerOffButton = new MButton(qtTrId("qtn_stat_menu_poweroff")); + powerOffButton->setObjectName("StatusIndicatorMenuTopRowExtensionButton"); + powerOffButton->setViewType(MButton::iconType); + powerOffButton->setIconID("icon-m-status-menu-poweroff"); + connect(powerOffButton, SIGNAL(clicked()), controller, SLOT(launchPowerOffDialog())); + + // Put the extension area and the buttons to a horizontal layout QGraphicsLinearLayout *topRowLayout = new QGraphicsLinearLayout(Qt::Horizontal); topRowLayout->setContentsMargins(0, 0, 0, 0); topRowLayout->setSpacing(0); topRowLayout->addStretch(); topRowLayout->addItem(settingsPluginsExtensionArea); topRowLayout->addItem(settingsButton); + topRowLayout->addItem(powerOffButton); topRowLayout->addStretch(); // Create a container widget for extension area and settings button layout diff --git a/src/systemui/systemui.conf b/src/systemui/systemui.conf index 5b5b61d3..ba9c919d 100644 --- a/src/systemui/systemui.conf +++ b/src/systemui/systemui.conf @@ -10,6 +10,9 @@ + diff --git a/tests/stubs/statusindicatormenu_stub.h b/tests/stubs/statusindicatormenu_stub.h index 2984fc48..d18b42eb 100644 --- a/tests/stubs/statusindicatormenu_stub.h +++ b/tests/stubs/statusindicatormenu_stub.h @@ -15,6 +15,7 @@ class StatusIndicatorMenuStub : public StubBase { virtual void hideStatusIndicatorMenu(); virtual void setStatusIndicatorMenuInterface(MApplicationExtensionInterface *extension); virtual void launchControlPanelAndHide(); + virtual void launchPowerOffDialog(); }; // 2. IMPLEMENT STUB @@ -44,6 +45,10 @@ void StatusIndicatorMenuStub::launchControlPanelAndHide() { stubMethodEntered("launchControlPanelAndHide"); } +void StatusIndicatorMenuStub::launchPowerOffDialog() { + stubMethodEntered("launchPowerOffDialog"); +} + // 3. CREATE A STUB INSTANCE StatusIndicatorMenuStub gDefaultStatusIndicatorMenuStub; @@ -76,4 +81,8 @@ void StatusIndicatorMenu::launchControlPanelAndHide() { gStatusIndicatorMenuStub->launchControlPanelAndHide(); } +void StatusIndicatorMenu::launchPowerOffDialog() { + gStatusIndicatorMenuStub->launchPowerOffDialog(); +} + #endif diff --git a/tests/ut_statusindicatormenu/ut_statusindicatormenu.cpp b/tests/ut_statusindicatormenu/ut_statusindicatormenu.cpp index b8983be9..bd0cfdaa 100644 --- a/tests/ut_statusindicatormenu/ut_statusindicatormenu.cpp +++ b/tests/ut_statusindicatormenu/ut_statusindicatormenu.cpp @@ -70,6 +70,7 @@ void Ut_StatusIndicatorMenu::init() { statusIndicatorMenu = new StatusIndicatorMenu(); connect(this, SIGNAL(settingsButtonClicked()), statusIndicatorMenu, SLOT(launchControlPanelAndHide())); + connect(this, SIGNAL(powerOffButtonClicked()), statusIndicatorMenu, SLOT(launchPowerOffDialog())); connect(this, SIGNAL(extensionInstantiated(MApplicationExtensionInterface*)), statusIndicatorMenu, SLOT(setStatusIndicatorMenuInterface(MApplicationExtensionInterface*))); } @@ -98,6 +99,13 @@ void Ut_StatusIndicatorMenu::testSettingsButtonClicked() QVERIFY(mApplicationIfProxyLaunchCalled); } +void Ut_StatusIndicatorMenu::testPowerOffButtonClicked() +{ + emit powerOffButtonClicked(); + + QVERIFY(mApplicationIfProxyLaunchCalled); +} + void Ut_StatusIndicatorMenu::testExtensionInstantiated() { TestStatusIndicatorMenuExtensionInterface extension; diff --git a/tests/ut_statusindicatormenu/ut_statusindicatormenu.h b/tests/ut_statusindicatormenu/ut_statusindicatormenu.h index 0778986d..361caee2 100644 --- a/tests/ut_statusindicatormenu/ut_statusindicatormenu.h +++ b/tests/ut_statusindicatormenu/ut_statusindicatormenu.h @@ -31,6 +31,7 @@ class Ut_StatusIndicatorMenu : public QObject signals: void settingsButtonClicked(); + void powerOffButtonClicked(); void extensionInstantiated(MApplicationExtensionInterface*); private: @@ -49,6 +50,7 @@ private slots: // Test cases void testSettingsButtonClicked(); + void testPowerOffButtonClicked(); void testExtensionInstantiated(); void testSignals(); };