diff -r 000000000000 -r 6be25656cbbb src/silentwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/silentwidget.cpp Fri Sep 17 09:20:19 2010 +0300 @@ -0,0 +1,203 @@ +/* +* 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: Silent widget +* +*/ + +// System includes +#include +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "silentwidget.h" +#include "silentwidgetconsts.h" +#include "silentmodel.h" +#include "silentobserver.h" + +/*! + \class SilentWidget + \implementation for silent widget + + This class is used to create silent widget +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constructor +*/ +SilentWidget::SilentWidget(QGraphicsItem* parent, Qt::WindowFlags flags) + : HbWidget(parent, flags), + mButton(0), + mModel(new SilentModel), + mObserver(new SilentObserver(this)) +{ + QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout( + Qt::Vertical, this); + + // load the widget from .docml + HbDocumentLoader loader; + bool ok = false; + loader.load(":/docml/silentdocml", &ok); + if (!ok) { + // fail to load .docml file + return; + } + mButton = (HbPushButton *) loader.findWidget("pushButton"); + if (!mButton) { + // fail to find push button + return; + } + + // set icon and background + HbFrameDrawer *background = new HbFrameDrawer("qtg_fr_hsshortcut_normal", + HbFrameDrawer::NinePieces); + mButton->setFrameBackground(background); + HbFrameDrawer *foreground; + if (mModel->silenceMode()) { + foreground = new HbFrameDrawer("qtg_large_tone_off", + HbFrameDrawer::NinePieces); + } else { + foreground = new HbFrameDrawer("qtg_large_tone", + HbFrameDrawer::NinePieces); + } + HbFrameItem* frameItem = new HbFrameItem(foreground); + mButton->setBackgroundItem(frameItem); + + mButton->setCheckable(true); + mainLayout->addItem(mButton); + + connect(mButton, SIGNAL(toggled(bool)), this, SLOT(handleClickEvent(bool))); + setLayout(mainLayout); + + // create XQSettingsManager, monitor KProEngSilenceMode + mSettingManager = new XQSettingsManager(); + XQCentralRepositorySettingsKey silenceKey(KCRUidProfileEngine.iUid, + KProEngSilenceMode); + mSettingManager->startMonitoring(silenceKey, XQSettingsManager::TypeInt); + connect(mSettingManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)), + this, SLOT(settingValueChanged(XQSettingsKey, QVariant))); +} + +/*! + Monitor KProEngSilenceMode +*/ +void SilentWidget::settingValueChanged(const XQSettingsKey &key, + const QVariant &value) +{ + // change icon according to latest silence mode + if (key.uid() == KCRUidProfileEngine.iUid && key.key() == KProEngSilenceMode) { + HbFrameDrawer *foreground; + if (value.toBool()) { + foreground = new HbFrameDrawer("qtg_large_tone_off", + HbFrameDrawer::NinePieces); + } else { + foreground = new HbFrameDrawer("qtg_large_tone", + HbFrameDrawer::NinePieces); + } + HbFrameItem* frameItem = new HbFrameItem(foreground); + mButton->setBackgroundItem(frameItem); + } +} + +/*! + Handle click events +*/ +void SilentWidget::handleClickEvent(bool /*state*/) +{ + // switch icon and activate silece state + HbFrameDrawer *foreground; + if (!mModel->silenceMode()) { + mModel->setSilenceMode(true); + foreground = new HbFrameDrawer("qtg_large_tone_off", + HbFrameDrawer::NinePieces); + } else { + mModel->setSilenceMode(false); + foreground = new HbFrameDrawer("qtg_large_tone", + HbFrameDrawer::NinePieces); + } + HbFrameItem* frameItem = new HbFrameItem(foreground); + mButton->setBackgroundItem(frameItem); +} + +/*! + Change icon according to observer event +*/ +void SilentWidget::changeIcon() +{ + HbFrameDrawer *foreground; + if (mModel->silenceMode()) { + foreground = new HbFrameDrawer("qtg_large_tone_off", + HbFrameDrawer::NinePieces); + } else { + foreground = new HbFrameDrawer("qtg_large_tone", + HbFrameDrawer::NinePieces); + } + HbFrameItem* frameItem = new HbFrameItem(foreground); + mButton->setBackgroundItem(frameItem); +} + +/*! + Destructor +*/ +SilentWidget::~SilentWidget() +{ + if (mModel) { + delete mModel; + mModel = NULL; + } + + if (mSettingManager) { + delete mSettingManager; + mSettingManager = NULL; + } +} + +/*! + Return bounding rect +*/ +QRectF SilentWidget::boundingRect() const +{ + return childrenBoundingRect(); +} + +/*! + Return shape +*/ +QPainterPath SilentWidget::shape() const +{ + QPainterPath path; + path.addRect(boundingRect()); + return path; +} + +/*! + Called when widget is shown in the home screen +*/ +void SilentWidget::onShow() +{ +} + +/*! + Called when widget is hidden from the home screen +*/ +void SilentWidget::onHide() +{ +}