phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidget.cpp
changeset 37 ba76fc04e6c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidget.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,993 @@
+/*
+ * Copyright (c) 2009 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 "infowidget.h"
+
+#include <hbanchorlayout.h>
+#include <hbiconitem.h>
+#include <hbmarqueeitem.h>
+#include <hbfontspec.h>
+#include <hbdialog.h>
+#include <hblabel.h>
+#include <hbaction.h>
+#include <hbcheckbox.h>
+#include <hbpushbutton.h>
+#include <hbevent.h>
+#include <hbcolorscheme.h>
+#include <hbmessagebox.h>
+#include <hbframedrawer.h>
+#include <QPainter>
+#include <QPainterPath>
+#include <QBrush>
+#include <QGraphicsLinearLayout>
+#include <QApplication>
+#include <QLocale>
+#include <QTranslator>
+#include "infowidgetlogging.h"
+#include "infowidgetengine.h"
+#include "infowidgetlayoutmanager.h"
+#include "infowidgetpreferences.h"
+
+const int INFOWIDGET_ROUNDING = 15;
+const int INFOWIDGET_DEFAULT_HEIGHT = 100;
+const int INFOWIDGET_DEFAULT_WIDTH = 100;
+const char *TS_FILE_OPERATOR_WIDGET = "operator_widget"; 
+const char *TS_FILE_COMMON = "common";
+const char *BACKGROUND_COLOR_GROUP_ID = "qtc_default_popup_normal"; 
+const char *BACKGROUND_FRAME_NAME = "qtg_fr_hswidget_normal"; 
+
+/*!
+  \class InfoWidget
+  \brief Operator info widget main class. 
+
+   Implements HomeScreen specific slots and 
+   graphical representation of the 
+   Operator Info widget. 
+
+   Derived from HbWidget.
+    
+*/
+
+/*!
+    InfoWidget::InfoWidget() 
+*/
+InfoWidget::InfoWidget(QGraphicsItem* parent, Qt::WindowFlags flags)
+    : HbWidget(parent, flags),
+    m_engine(NULL), 
+    m_preferences(NULL),
+    m_layoutManager(NULL),
+    m_layout(NULL),
+    m_frameDrawer(NULL),
+    m_layoutChanging(false),
+    m_dragEvent(false), 
+    m_initialized(false)
+{
+    INSTALL_TRACE_MSG_HANDLER; 
+    
+    DPRINT << ": IN";
+    
+    // Localization file loading
+    installTranslator(TS_FILE_OPERATOR_WIDGET);
+    installTranslator(TS_FILE_COMMON);
+    
+    m_layoutManager = new InfoWidgetLayoutManager(this);
+    Q_ASSERT(m_layoutManager); 
+    
+    m_engine = new InfoWidgetEngine(this); 
+    Q_ASSERT(m_engine);
+    
+    m_preferences = new InfoWidgetPreferences(this);
+    Q_ASSERT(m_preferences);
+    
+    QObject::connect( m_preferences, SIGNAL(prefChanged(int,int)),
+                    m_engine, SLOT(preferenceChanged(int,int)));
+    
+    // Setup widget main layout 
+    m_layout = new QGraphicsLinearLayout;    
+    m_layout->setSpacing(0); 
+    m_layout->setContentsMargins(0,0,0,0); 
+    setLayout(m_layout);
+
+    // Read color definitions 
+    m_backGroundColor = HbColorScheme::color(
+            BACKGROUND_COLOR_GROUP_ID);
+    if (!m_backGroundColor.isValid()) {
+        m_backGroundColor = Qt::black; 
+    }
+    
+    // Create background frame drawer 
+    m_frameDrawer = new HbFrameDrawer(
+            BACKGROUND_FRAME_NAME, 
+            HbFrameDrawer::NinePieces);
+    Q_ASSERT(m_frameDrawer); 
+    
+    // Set widget initial size
+    resize(INFOWIDGET_DEFAULT_WIDTH,
+           INFOWIDGET_DEFAULT_HEIGHT); 
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::~InfoWidget() 
+*/
+InfoWidget::~InfoWidget()
+{
+    DPRINT << ": IN"; 
+    
+    // Layout manager item cleanup
+    m_layoutManager->destroyObjects(); 
+    
+    if (m_frameDrawer) {
+        delete m_frameDrawer;
+        m_frameDrawer = NULL; 
+    }
+    
+    // Remove and delete language translators 
+    removeTranslators(); 
+    
+    DPRINT << ": OUT"; 
+    UNINSTALL_TRACE_MSG_HANDLER;
+}
+
+/*!
+    InfoWidget::onInitialize()
+    
+    Called by HS framework, saved preference data
+    is available when onInitialize() is called and 
+    meta-object data reading should be done here      
+*/
+void InfoWidget::onInitialize()
+{
+    DPRINT << ": IN";
+    
+    m_initialized = true; 
+    
+    // Initialize preferences from meta-object data
+    if (!readPersistentPreferences()) {
+
+        // Reading failed, initialize default values  
+        m_preferences->setPreference(InfoWidgetPreferences::DisplaySpn, 
+                DISPLAY_SETTING_ON);
+        m_preferences->setPreference(InfoWidgetPreferences::DisplayMcn, 
+                DISPLAY_SETTING_ON);
+        m_preferences->setPreference(InfoWidgetPreferences::DisplaySatText, 
+                DISPLAY_SETTING_ON);
+    } 
+    m_preferences->storePreferences(); 
+    
+    // Layout components 
+    layoutInfoDisplay();
+    m_layout->activate(); 
+    
+    // Read initial data from model
+    updateInfoDisplay(); 
+    
+    // Listen for model changes 
+    QObject::connect(m_engine, SIGNAL(modelChanged()), 
+            this, SLOT(readModel())); 
+
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::onUninitialize() 
+*/
+void InfoWidget::onUninitialize()
+{
+    DPRINT;
+    m_initialized = false; 
+    m_engine->suspend(); 
+}
+
+/*!
+    InfoWidget::onShow() 
+*/
+void InfoWidget::onShow()
+{
+    DPRINT;
+    m_engine->resume(); 
+}
+
+/*!
+    InfoWidget::onHide() 
+*/
+void InfoWidget::onHide()
+{
+    DPRINT;
+    m_engine->suspend(); 
+}
+
+/*!
+    InfoWidget::installTranslator() const
+*/
+bool InfoWidget::installTranslator(QString translationFile)
+{
+    DPRINT << ": IN";
+
+    QString lang = QLocale::system().name();
+    QString path = "z:/resource/qt/translations/";
+    bool translatorLoaded(false);  
+    
+    QTranslator* widgetTranslator = new QTranslator;
+    translatorLoaded = widgetTranslator->load(
+            path + translationFile + "_" + lang);
+    if (translatorLoaded) {
+        qApp->installTranslator(widgetTranslator);
+        m_translators.append(widgetTranslator); 
+        DPRINT << ": translator installed: " << translationFile; 
+    } else {
+        delete widgetTranslator; 
+        widgetTranslator = NULL; 
+    }
+    
+    DPRINT << ": OUT";
+    return translatorLoaded;
+}
+
+/*!
+    InfoWidget::removeTranslators() const
+*/
+void InfoWidget::removeTranslators()
+{
+    DPRINT << ": IN";
+
+    foreach (QTranslator *translator, m_translators) {
+        qApp->removeTranslator(translator);
+    }    
+    qDeleteAll(m_translators);
+    m_translators.clear();
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::boundingRect() const
+*/
+QRectF InfoWidget::boundingRect() const
+{   
+    return rect();
+}
+
+/*!
+    InfoWidget::shape() const
+    
+    Return Operator widget's shape 
+    according to currect display 
+*/
+QPainterPath InfoWidget::shape() const
+{
+    DPRINT;    
+    
+    QPainterPath path;
+    if (m_layoutManager->currentDisplayRole() == 
+                    InfoWidgetLayoutManager::InfoDisplay) {
+        path.addRoundRect(boundingRect(), 
+                INFOWIDGET_ROUNDING, 
+                INFOWIDGET_ROUNDING);
+    } else {
+        path.addRect(boundingRect()); 
+    }
+    return path;
+}
+
+/*!
+    InfoWidget::sizeHint() 
+*/
+QSizeF InfoWidget::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const   
+{
+    Q_UNUSED(which);
+    Q_UNUSED(constraint); 
+    
+    QSizeF requiredSize(
+            INFOWIDGET_DEFAULT_WIDTH,
+            INFOWIDGET_DEFAULT_HEIGHT);
+    
+    if (m_initialized) { 
+        // Read size hint from docml content
+        if (m_layoutManager->currentDisplayRole() == 
+                    InfoWidgetLayoutManager::InfoDisplay) {
+            if (m_layoutManager->contentWidget()) {
+                requiredSize = m_layoutManager->contentWidget()->minimumSize();
+                // Height according number of rows, if 0 or 1 row use minimum size
+                int rowCount = m_preferences->visibleItemCount();
+                if (1 < rowCount) {
+                        requiredSize.rheight() += (rowCount-1)*
+                                m_layoutManager->rowHeight();
+                }
+            }
+        }
+        else if (m_layoutManager->currentDisplayRole() == 
+                InfoWidgetLayoutManager::SettingsDisplay) {
+            if (m_layoutManager->contentWidget()) {
+                requiredSize= m_layoutManager->contentWidget()->size();
+                }
+        } 
+    } 
+    
+    DPRINT << ": returning size: " << requiredSize;
+    return requiredSize; 
+}
+
+/*!
+    InfoWidget::sizePolicy() 
+*/
+QSizePolicy InfoWidget::sizePolicy () const 
+{
+    DPRINT;
+    return QSizePolicy(
+            QSizePolicy::Fixed, 
+            QSizePolicy::Fixed); 
+}
+
+/*!
+    InfoWidget::updateItemsVisibility() 
+*/
+void InfoWidget::updateItemsVisibility()
+{
+    DPRINT <<": IN"; 
+    int layoutRows = 0; 
+    QList<QGraphicsWidget *> widgetsToHide; 
+    
+    // Update layout according to item visibility settings
+    if (m_preferences->preference(InfoWidgetPreferences::DisplaySpn).compare(
+            DISPLAY_SETTING_ON) == 0) {
+        layoutRows++;
+    } else if (m_layoutManager->currentDisplayRole() != InfoWidgetLayoutManager::SettingsDisplay) {
+        m_layoutManager->removeWidget(InfoWidgetLayoutManager::RoleSpnLabel); 
+        m_layoutManager->removeWidget(InfoWidgetLayoutManager::RoleSpnIcon); 
+    }
+
+    if (m_preferences->preference(InfoWidgetPreferences::DisplayMcn).compare(
+            DISPLAY_SETTING_ON) == 0) {
+        layoutRows++;
+    } else if (m_layoutManager->currentDisplayRole() != InfoWidgetLayoutManager::SettingsDisplay) {
+        m_layoutManager->removeWidget(InfoWidgetLayoutManager::RoleMcnMarqueeItem); 
+        m_layoutManager->removeWidget(InfoWidgetLayoutManager::RoleMcnIcon); 
+    }
+    
+    if (m_preferences->preference(InfoWidgetPreferences::DisplaySatText).compare(
+            DISPLAY_SETTING_ON) == 0) {
+        layoutRows++;
+    } else if (m_layoutManager->currentDisplayRole() != InfoWidgetLayoutManager::SettingsDisplay) {
+        m_layoutManager->removeWidget(InfoWidgetLayoutManager::RoleSatMarqueeItem); 
+        m_layoutManager->removeWidget(InfoWidgetLayoutManager::RoleSatTextIcon); 
+    }
+    
+    DPRINT << ": visible layout rows count: " << layoutRows;
+    m_layoutManager->setLayoutRows(layoutRows);
+}
+
+/*!
+    InfoWidget::layoutInfoDisplay()
+    
+    Layout info display    
+*/
+void InfoWidget::layoutInfoDisplay()
+{  
+    startChanges(); 
+    
+    QGraphicsLayout *infoDisplayLayout = 
+        m_layoutManager->layoutInfoDisplay(); 
+    
+    DPRINT << ": IN";
+    if (infoDisplayLayout) {
+        DPRINT << ": infoDisplayLayout has been returned from layout manager";
+
+        QGraphicsWidget *contentWidget = m_layoutManager->contentWidget();
+        if (contentWidget) {
+            DPRINT << ": contentWidget has been returned from layout manager";
+            
+            // Remove old data from layout. 
+            for (int i=0; i < m_layout->count(); i++) {
+                DPRINT << ": item(" << i << ") removed from layout";
+                m_layout->removeAt(i);
+                } 
+            
+            // Add content widget to main layout 
+            m_layout->addItem(contentWidget);
+        }       
+    }
+    
+    m_layoutManager->showAll(); 
+    updateItemsVisibility(); 
+    m_layout->activate(); 
+
+    endChanges(); 
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::layoutSettingsDisplay()
+    
+    Switch to settings display layout   
+*/
+void InfoWidget::layoutSettingsDisplay()
+{  
+    startChanges(); 
+    
+    QGraphicsLayout *settingDisplayLayout = 
+        m_layoutManager->layoutSettingsDisplay(); 
+    
+    DPRINT << ": IN";
+    if (settingDisplayLayout) {
+        DPRINT << ": settingDisplayLayout has been returned from layout manager";
+
+        QGraphicsWidget *contentWidget = m_layoutManager->contentWidget();
+        if (contentWidget) {
+            DPRINT << ": contentWidget has been returned from layout manager";
+                
+            // Remove old data from layout. 
+            for (int i=0; i < m_layout->count(); i++) {
+                DPRINT << ": item(" << i << ") removed from layout";
+                m_layout->removeAt(i);
+                } 
+            
+            // Add content widget to main layout 
+            m_layout->addItem(contentWidget); 
+        }
+        
+        // Connect settings display widget signals 
+        initializeSettingsDisplayItems(); 
+    }
+     
+    m_layoutManager->showAll(); 
+    endChanges(); 
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::initializeInfoDisplayItems()
+*/
+void InfoWidget::initializeInfoDisplayItems()
+{  
+    DPRINT;
+}
+
+/*!
+    InfoWidget::initializeSettingsDisplayItems()
+    
+    Set up initial check box states, lock check boxes 
+    if needed and connect signals to local slots  
+*/
+void InfoWidget::initializeSettingsDisplayItems()
+{  
+    DPRINT << ": IN";
+    
+    HbPushButton *okButton = qobject_cast<HbPushButton *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleOkButton));
+    if (okButton) {
+        QObject::connect(okButton, SIGNAL(clicked()), 
+                this, SLOT(settingsEditingFinished()), Qt::UniqueConnection); 
+    }
+
+    // Connect display setting check boxes
+    HbCheckBox *spnCheckBox = qobject_cast<HbCheckBox *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleSpnCheckBox));
+    if (spnCheckBox) {
+        spnCheckBox->setChecked(m_preferences->isPreferenceSet(
+                InfoWidgetPreferences::DisplaySpn));
+        
+        QObject::connect(spnCheckBox, SIGNAL(stateChanged(int)), 
+                this, SLOT(spnDisplaySettingChanged(int)), Qt::UniqueConnection); 
+    }
+    
+    HbCheckBox *mcnCheckBox = qobject_cast<HbCheckBox *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleMcnCheckBox));
+    if (mcnCheckBox) {
+        mcnCheckBox->setChecked(m_preferences->isPreferenceSet(
+                InfoWidgetPreferences::DisplayMcn));
+        
+        QObject::connect(mcnCheckBox, SIGNAL(stateChanged(int)), 
+                this, SLOT(mcnDisplaySettingChanged(int)), Qt::UniqueConnection); 
+    }
+    
+    HbCheckBox *satTextCheckBox = qobject_cast<HbCheckBox *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleSatTextCheckBox));
+    if (satTextCheckBox) {
+        satTextCheckBox->setChecked(m_preferences->isPreferenceSet(
+                InfoWidgetPreferences::DisplaySatText));
+        
+        QObject::connect(satTextCheckBox, SIGNAL(stateChanged(int)), 
+                this, SLOT(satDisplaySettingChanged(int)), Qt::UniqueConnection); 
+    }
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::updateInfoDisplay() 
+*/
+void InfoWidget::updateInfoDisplay()
+{
+    DPRINT << ": IN"; 
+    
+    if (m_layoutManager->currentDisplayRole() == 
+            InfoWidgetLayoutManager::InfoDisplay )
+        {
+        QString text;
+        InfoWidgetEngine::ModelData modelData = m_engine->modelData(); 
+    
+        HbLabel *spnLabel = qobject_cast<HbLabel *>(m_layoutManager->getWidget(
+                InfoWidgetLayoutManager::RoleSpnLabel));
+        if (spnLabel) {
+            if (m_engine->modelData().serviceProviderNameDisplayRequired()) {
+                text = modelData.serviceProviderName();  
+                spnLabel->setPlainText(text);
+            }
+        }        
+        
+        HbMarqueeItem *mcnMarqueeItem = qobject_cast<HbMarqueeItem *>(m_layoutManager->getWidget(
+                InfoWidgetLayoutManager::RoleMcnMarqueeItem));
+        if (mcnMarqueeItem) {
+            text = modelData.mcnName(); 
+            mcnMarqueeItem->setText(text);
+            
+            // Set marquee animation looping mode to infinite
+            mcnMarqueeItem->setLoopCount(-1); 
+                
+            // Finally, start marquee animation
+            DPRINT << ": mcnMarqueeItem->isAnimating()"; 
+            if (!mcnMarqueeItem->isAnimating()) {
+                DPRINT << ": mcnMarqueeItem->startAnimation()";   
+                mcnMarqueeItem->startAnimation();
+            }
+        }
+    
+        HbMarqueeItem *satMarqueeItem = qobject_cast<HbMarqueeItem *>(m_layoutManager->getWidget(
+                InfoWidgetLayoutManager::RoleSatMarqueeItem));
+        if (satMarqueeItem) {
+            text = modelData.satDisplayText(); 
+    
+            satMarqueeItem->setText(text);
+            
+            // Set marquee animation looping mode to infinite
+            satMarqueeItem->setLoopCount(-1); 
+                        
+            // Finally, start marquee animation
+            DPRINT << ": satMarqueeItem->isAnimating()"; 
+            if (!satMarqueeItem->isAnimating()) {
+                DPRINT << ": mcnMarqueeItem->startAnimation()";   
+                satMarqueeItem->startAnimation();
+            }
+        }
+    }
+}
+
+/*!
+    InfoWidget::readModel() 
+    
+    Read model data. Model's modelChanged - signal is connected to this slot.  
+*/
+void InfoWidget::readModel()
+{
+    DPRINT << ": IN"; 
+
+    if (m_layoutManager->currentDisplayRole() == 
+            InfoWidgetLayoutManager::InfoDisplay) { 
+        updateInfoDisplay(); 
+    }
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::handleModelError() 
+    
+    Model error signal is connected to this slot 
+*/
+void InfoWidget::handleModelError(int operation,int errorCode)
+{
+    Q_UNUSED(operation); 
+    Q_UNUSED(errorCode); 
+    DPRINT;
+}
+
+/*!
+    InfoWidget::paint() 
+*/
+void InfoWidget::paint(QPainter *painter, 
+        const QStyleOptionGraphicsItem *option, 
+        QWidget *widget)
+{
+    Q_UNUSED(option); 
+    Q_UNUSED(widget);
+    DPRINT;
+
+    if (!m_layoutChanging) {
+        painter->save();
+        
+        if (m_layoutManager->currentDisplayRole() == 
+                InfoWidgetLayoutManager::InfoDisplay) { 
+            if (m_frameDrawer) {
+                m_frameDrawer->paint(painter,boundingRect());
+            }
+        } else {            
+            QBrush brush(Qt::black); 
+            QPainterPath path;
+            path.addRoundRect(boundingRect(), 
+                    INFOWIDGET_ROUNDING, 
+                    INFOWIDGET_ROUNDING);
+            painter->fillPath(path, brush);
+        }
+        
+        painter->restore();
+    }
+}
+
+/*!
+    InfoWidget::mousePressEvent() 
+*/
+void InfoWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);
+    
+    // Clear flag 
+    m_dragEvent = false; 
+}
+
+/*!
+    InfoWidget::mouseReleaseEvent() 
+*/
+void InfoWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);
+
+    // If in info display and widget wasn't dragged 
+    // change to settings display
+    if ((!m_dragEvent) && 
+          m_layoutManager->currentDisplayRole() == 
+                  InfoWidgetLayoutManager::InfoDisplay) {
+        DPRINT << ": layout settings display";
+        layoutSettingsDisplay(); 
+    }
+    
+    // Clear flag 
+    m_dragEvent = false; 
+}
+
+/*!
+    InfoWidget::mouseMoveEvent() 
+*/
+void InfoWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);
+    
+    // Mouse is moving 
+    // after mouse press event
+    m_dragEvent = true; 
+}
+
+/*!
+    InfoWidget::spnDisplaySettingChanged() 
+*/
+void InfoWidget::spnDisplaySettingChanged(int state)
+{
+    DPRINT << ": state: " << state;
+    if (state == Qt::Checked){
+        m_preferences->setPreference(InfoWidgetPreferences::DisplaySpn, DISPLAY_SETTING_ON);
+    } else {
+        m_preferences->setPreference(InfoWidgetPreferences::DisplaySpn, DISPLAY_SETTING_OFF);
+    }
+}
+
+/*!
+    InfoWidget::mcnDisplaySettingChanged() 
+*/
+void InfoWidget::mcnDisplaySettingChanged(int state)
+{
+    DPRINT << ": state: " << state; 
+    if (state == Qt::Checked){
+        m_preferences->setPreference(InfoWidgetPreferences::DisplayMcn, DISPLAY_SETTING_ON);
+    } else {
+        m_preferences->setPreference(InfoWidgetPreferences::DisplayMcn, DISPLAY_SETTING_OFF);
+    }
+}
+
+/*!
+    InfoWidget::satDisplaySettingChanged() 
+*/
+void InfoWidget::satDisplaySettingChanged(int state)
+{
+    DPRINT << ": state: " << state; 
+    if (state == Qt::Checked){
+        m_preferences->setPreference(InfoWidgetPreferences::DisplaySatText, DISPLAY_SETTING_ON);
+    } else {
+        m_preferences->setPreference(InfoWidgetPreferences::DisplaySatText, DISPLAY_SETTING_OFF);
+    }
+}
+
+/*!
+    InfoWidget::mcnDisplay() 
+    
+    Getter function for Meta-object property "mcnDisplay"
+*/
+QString InfoWidget::mcnDisplay()
+{
+    DPRINT; 
+    return m_preferences->preference(InfoWidgetPreferences::DisplayMcn); 
+}
+
+/*!
+    InfoWidget::setMcnDisplay() 
+    
+    Setter function for Meta-object property "mcnDisplay"
+*/
+void InfoWidget::setMcnDisplay(QString value)
+{
+    DPRINT;
+    m_preferences->setPreference(InfoWidgetPreferences::DisplayMcn, value);
+    }
+
+/*!
+    InfoWidget::homeZoneDisplay() 
+    
+    Getter function for Meta-object property "homeZoneDisplay"
+*/
+QString InfoWidget::homeZoneDisplay()
+{
+    DPRINT; 
+    return m_preferences->preference(InfoWidgetPreferences::DisplayHomeZone); 
+}
+
+/*!
+    InfoWidget::setHomeZoneDisplay()
+    
+    Setter function for Meta-object property "homeZoneDisplay" 
+*/
+void InfoWidget::setHomeZoneDisplay(QString value)
+{
+    DPRINT; 
+    m_preferences->setPreference(InfoWidgetPreferences::DisplayHomeZone, value);
+}
+
+/*!
+    InfoWidget::activeLineDisplay() 
+    
+    Getter function for Meta-object property "activeLineDisplay"
+*/
+QString InfoWidget::activeLineDisplay()
+{
+    DPRINT; 
+    return m_preferences->preference(InfoWidgetPreferences::DisplayActiveLine);
+}
+
+/*!
+    InfoWidget::setActiveLineDisplay() 
+    
+    Setter function for Meta-object property "activeLineDisplay"
+*/
+void InfoWidget::setActiveLineDisplay(QString value)
+{
+    DPRINT; 
+    m_preferences->setPreference(InfoWidgetPreferences::DisplayActiveLine, value);
+}
+
+/*!
+    InfoWidget::satDisplay()
+    
+    Getter function for Meta-object property "satDisplay" 
+*/
+QString InfoWidget::satDisplay()
+{
+    DPRINT; 
+    return m_preferences->preference(InfoWidgetPreferences::DisplaySatText);
+}
+
+/*!
+    InfoWidget::setSatDisplay()
+    
+    Setter function for Meta-object property "satDisplay" 
+*/
+void InfoWidget::setSatDisplay(QString value)
+{
+    DPRINT;
+    m_preferences->setPreference(InfoWidgetPreferences::DisplaySatText, value);
+}
+
+/*!
+    InfoWidget::spnDisplay()
+    
+    Getter function for Meta-object property "spnDisplay" 
+*/
+QString InfoWidget::spnDisplay()
+{
+    DPRINT; 
+    return m_preferences->preference(InfoWidgetPreferences::DisplaySpn);
+}
+
+/*!
+    InfoWidget::setSpnDisplay()
+    
+    Setter function for Meta-object property "spnDisplay" 
+*/
+void InfoWidget::setSpnDisplay(QString value)
+{
+    DPRINT;
+    m_preferences->setPreference(InfoWidgetPreferences::DisplaySpn, value);
+}
+
+/*!
+    InfoWidget::readPersistentPreferences()
+    
+    Read Meta-object properties and store to preference handler. 
+    Restores preferences from previous session.   
+*/
+bool InfoWidget::readPersistentPreferences()
+{
+    DPRINT << ": IN";
+    bool changed(false); 
+    
+    QString propertyValue;
+    
+    propertyValue = QObject::property("homeZoneDisplay").toString();
+    m_preferences->setPreference(InfoWidgetPreferences::DisplayHomeZone, 
+            propertyValue);
+    
+    propertyValue = QObject::property("mcnDisplay").toString();
+    m_preferences->setPreference(InfoWidgetPreferences::DisplayMcn, 
+            propertyValue);
+    
+    propertyValue = QObject::property("activeLineDisplay").toString();
+    m_preferences->setPreference(InfoWidgetPreferences::DisplayActiveLine, 
+            propertyValue);
+    
+    propertyValue = QObject::property("satDisplay").toString();
+    m_preferences->setPreference(InfoWidgetPreferences::DisplaySatText, 
+            propertyValue);
+
+    propertyValue = QObject::property("spnDisplay").toString();
+    m_preferences->setPreference(InfoWidgetPreferences::DisplaySpn, 
+            propertyValue);
+
+    // Check that at least one item is set visible and  
+    // store preferences if true 
+    if (m_preferences->validate()) {
+        changed = m_preferences->storePreferences(); 
+    } 
+        
+    DPRINT << ": OUT";
+    return changed; 
+}
+
+/*!
+    InfoWidget::initializeCheckBoxStates()
+*/
+void InfoWidget::initializeCheckBoxStates()
+{
+    DPRINT << ": IN";
+
+    HbCheckBox *spnCheckBox = qobject_cast<HbCheckBox *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleSpnCheckBox));
+    if (spnCheckBox) {
+    spnCheckBox->setChecked(m_preferences->isPreferenceSet(
+                InfoWidgetPreferences::DisplaySpn));
+    }
+    
+    HbCheckBox *mcnCheckBox = qobject_cast<HbCheckBox *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleMcnCheckBox));
+    if (mcnCheckBox) {
+        mcnCheckBox->setChecked(m_preferences->isPreferenceSet(
+                InfoWidgetPreferences::DisplayMcn));
+    }
+    
+    HbCheckBox *satTextCheckBox = qobject_cast<HbCheckBox *>(m_layoutManager->getWidget(
+            InfoWidgetLayoutManager::RoleSatTextCheckBox));
+    if (satTextCheckBox) {
+        satTextCheckBox->setChecked(m_preferences->isPreferenceSet(
+                InfoWidgetPreferences::DisplaySatText));
+    }
+        
+    DPRINT << ": OUT"; 
+}
+
+/*!
+    InfoWidget::settingsEditingFinished()
+*/
+void InfoWidget::settingsEditingFinished()
+{
+    DPRINT << ": IN";
+    
+    // Save settings data if validation succeeds 
+    if (m_preferences->validate()) {
+        DPRINT << ": switching to info display";
+        
+        // Store preferences if changed 
+        if (m_preferences->storePreferences()) {
+            // Signal Homescreen FW   
+            emit setPreferences(
+                    m_preferences->preferenceNames());
+            }
+        
+        // ToDo: do only if settings have really changed 
+        m_layoutManager->reloadWidgets(
+                InfoWidgetLayoutManager::InfoDisplay);
+
+        // Switch to info display 
+        layoutInfoDisplay();
+        updateInfoDisplay();
+        
+    } else {
+        DPRINT << ": staying in settings display";    
+        // Display warning note
+        settingsValidationFailed(); 
+        
+        // Restore check box states 
+        initializeCheckBoxStates(); 
+    }
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    InfoWidget::startChanges()
+*/
+void InfoWidget::startChanges()
+{
+    DPRINT;
+    m_layoutChanging = true; 
+}
+
+/*!
+    InfoWidget::endChanges()
+*/
+void InfoWidget::endChanges()
+{
+    DPRINT;
+    m_layoutChanging = false; 
+}
+
+/*!
+   \reimp
+*/
+void InfoWidget::changeEvent(QEvent *event)
+{
+   DPRINT << ": IN";
+   
+   if (event->type() == HbEvent::ThemeChanged) {
+       DPRINT << ": HbEvent::ThemeChanged";
+       m_backGroundColor = HbColorScheme::color(
+               BACKGROUND_COLOR_GROUP_ID);
+       if (!m_backGroundColor.isValid()) {
+           m_backGroundColor = Qt::black; 
+       }
+   }
+   HbWidget::changeEvent(event);
+   
+   DPRINT << ": OUT";
+}
+
+/*!
+   InfoWidget::settingsValidationFailed()
+*/
+void InfoWidget::settingsValidationFailed()
+{
+   DPRINT << ": IN";
+   
+   if (m_layoutManager->currentDisplayRole() == 
+                  InfoWidgetLayoutManager::SettingsDisplay) {
+       HbMessageBox::warning(
+               hbTrId("txt_operatorwidget_info_select_one"));
+   }
+
+   DPRINT << ": OUT";
+}
+
+
+// End of File. 
+