src/silentwidget.cpp
changeset 0 6be25656cbbb
--- /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 <HbPushButton>
+#include <QGraphicsLinearLayout>
+#include <HbStyle>
+#include <HbDocumentLoader>
+#include <HbFrameItem>
+#include <HbFrameDrawer>
+#include <xqsettingsmanager.h>
+#include <ProfileEngineInternalCRKeys.h>
+
+// 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()
+{
+}