ipsservices/nmipssettings/src/nmipssettingslabeledcombobox.cpp
changeset 18 578830873419
child 20 ecc8def7944a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/nmipssettings/src/nmipssettingslabeledcombobox.cpp	Fri Apr 16 14:51:52 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* 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 <qgraphicslinearlayout.h>
+#include <hbcombobox.h>
+#include <hblabel.h>
+
+#include "nmipssettingslabeledcombobox.h"
+
+/*!
+    \class NmIpsSettingsLabelItem
+    \brief The class implements a custom HbDataFormViewItem that combines a HbComboBox and HbLabel
+    widgets that are linked. I.e. When the user selects changes the combobox's value, the label
+    text is updated accordingly.
+
+*/
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+    Constructor of NmIpsSettingsLabeledComboBox.
+*/
+NmIpsSettingsLabeledComboBox::NmIpsSettingsLabeledComboBox(QGraphicsItem *parent, Qt::WindowFlags wFlags)
+: HbWidget(parent, wFlags)
+{
+    // Create widget layout.
+    QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical);
+    this->setLayout(layout); // Takes ownership
+
+    // Create combobox.
+    mComboBox = new HbComboBox();
+    layout->addItem(mComboBox); // Takes ownership
+
+    // Create label.
+    mLabel = new HbLabel();
+    mLabel->setElideMode(Qt::ElideNone);
+    mLabel->setTextWrapping(Hb::TextWordWrap);
+    HbFontSpec spec(HbFontSpec::PrimarySmall);
+    mLabel->setFontSpec(spec);
+    layout->addItem(mLabel); // Takes ownership
+
+    // Connect signals and slots.
+    connect(mComboBox, SIGNAL(currentIndexChanged(int)), 
+        this, SLOT(comboBoxIndexChanged(int)), Qt::UniqueConnection);
+    connect(mComboBox, SIGNAL(currentIndexChanged(int)), 
+        this, SIGNAL(currentIndexChanged(int)), Qt::UniqueConnection);
+}
+
+/*!
+    Destructor of NmIpsSettingsLabeledComboBox.
+*/
+NmIpsSettingsLabeledComboBox::~NmIpsSettingsLabeledComboBox()
+{
+}
+
+/*!
+    Sets the current combobox index.
+    \param index Combobox index to set.
+*/
+void NmIpsSettingsLabeledComboBox::setCurrentIndex(int index)
+{
+    // Change is not signaled outside via currentIndexChanged.
+    disconnect(mComboBox, SIGNAL(currentIndexChanged(int)), 
+        this, SIGNAL(currentIndexChanged(int)));
+    mComboBox->setCurrentIndex(index);
+
+    // Force refreshing the label text when the new index is same as current index.
+    if (mComboBox->currentIndex() == index) {
+        comboBoxIndexChanged(index);
+        }
+
+    // Reconnect the slot to signal changes outside.
+    connect(mComboBox, SIGNAL(currentIndexChanged(int)),
+            this, SIGNAL(currentIndexChanged(int)), Qt::UniqueConnection);
+}
+
+/*!
+    Sets the combobox items and corresponding texts for the label.
+    \param texts Item texts.
+*/
+void NmIpsSettingsLabeledComboBox::setItems(QStringList comboBoxItems,
+                                            QStringList texts)
+{
+    // Set the combobox items without signaling index change.
+    disconnect(mComboBox, SIGNAL(currentIndexChanged(int)), 
+        this, SIGNAL(currentIndexChanged(int)));
+    mComboBox->setItems(comboBoxItems);
+    connect(mComboBox, SIGNAL(currentIndexChanged(int)),
+        this, SIGNAL(currentIndexChanged(int)), Qt::UniqueConnection);
+
+    // Set the corresponding texts for the label.
+    mLabelTexts.clear();
+    for (int i=0; i<comboBoxItems.count(); ++i) {
+        mLabelTexts.insert(i, texts.at(i));
+    }
+}
+
+/*!
+    Updates the label text based on the combobox's value.
+    \param index Current combobox index.
+*/
+void NmIpsSettingsLabeledComboBox::comboBoxIndexChanged(int index)
+{
+    mLabel->setPlainText(mLabelTexts.value(index));
+}