diff -r 000000000000 -r 16d8024aca5e src/hbinput/inputwidgets/hbinputsettinglist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hbinput/inputwidgets/hbinputsettinglist.cpp Mon Apr 19 14:02:13 2010 +0300 @@ -0,0 +1,321 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbInput module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#include +#include +#if QT_VERSION >= 0x040600 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "hbinputsettinglist.h" +#include "hbdialog_p.h" + +const QString settingsIcon("qtg_mono_settings"); +const QString inputMethodIcon("qtg_mono_virtual_input"); + +/// @cond + +class HbInputSettingListPrivate : public HbDialogPrivate +{ +public: + HbInputSettingListPrivate(); + + qreal languageNameWidth(); + +public: + HbPushButton *mLanguageButton; + HbPushButton *mPredictionButton; + HbListWidget *mOptionList; + HbInputLanguage mPrimaryLanguage; + HbInputLanguage mSecondaryLanguage; + QList mPredictionValues; +}; + +HbInputSettingListPrivate::HbInputSettingListPrivate() + : mLanguageButton(0), mPredictionButton(0), mOptionList(0) +{ +} + +qreal HbInputSettingListPrivate::languageNameWidth() +{ + qreal nameWidth(0); + QList languages; + HbInputUtils::listSupportedInputLanguages(languages); + QFontMetrics fontMetrics(HbFontSpec(HbFontSpec::Primary).font()); + + foreach (HbInputLanguage language, languages) { + qreal width = fontMetrics.width(language.localisedName()); + if (width > nameWidth) { + nameWidth = width; + } + } + + return nameWidth; +} + +/// @endcond + +/*! +Constructs input setting list +*/ +HbInputSettingList::HbInputSettingList(QGraphicsWidget* parent) + : HbDialog(*new HbInputSettingListPrivate(), parent) +{ + Q_D(HbInputSettingList); + + QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical); + QGraphicsGridLayout *gridLayout = new QGraphicsGridLayout(); + + HbLabel *languageLabel = new HbLabel(tr("Language"), this); + languageLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + d->mLanguageButton = new HbPushButton(QString(), this); + d->mLanguageButton->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + d->mLanguageButton->setObjectName("Language setting button"); + + HbLabel *predictionLabel = new HbLabel(tr("Prediction"), this); + predictionLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + d->mPredictionButton = new HbPushButton(QString(), this); + d->mPredictionButton->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + d->mPredictionButton->setObjectName("Prediction setting button"); + + d->mOptionList = new HbListWidget(this); + d->mOptionList->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + d->mOptionList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + d->mOptionList->setObjectName("Input options list"); + d->mOptionList->addItem(HbIcon(settingsIcon), tr("Input settings")); + + gridLayout->addItem(languageLabel, 0, 0); + gridLayout->addItem(d->mLanguageButton, 0, 1); + gridLayout->addItem(predictionLabel, 1, 0); + gridLayout->addItem(d->mPredictionButton, 1, 1); + + qreal buttonWidth = 30 + d->languageNameWidth(); + gridLayout->setColumnFixedWidth(0, 300 - buttonWidth); + gridLayout->setColumnFixedWidth(1, buttonWidth); + + qreal buttonHeight = buttonWidth * 0.4; + gridLayout->setRowFixedHeight(0, buttonHeight); + gridLayout->setRowFixedHeight(1, buttonHeight); + + mainLayout->addItem(gridLayout); + mainLayout->addItem(d->mOptionList); + setLayout(mainLayout); + + d->mPredictionValues.append(tr("Off")); + d->mPredictionValues.append(tr("On")); + + // set default values for popup + setTimeout(HbDialog::NoTimeout); + setBackgroundFaded(false); + setDismissPolicy(TapOutside); + +#if QT_VERSION >= 0x040600 + // Make sure the custom button list never steals focus. + setFlag(QGraphicsItem::ItemIsPanel, true); + setActive(false); + + // enable drop shadow for the setting list +// Effect deletion is crashing -> Effect temporarily removed +// QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; +// effect->setBlurRadius(8); +// setGraphicsEffect(effect); +#endif + + connect(d->mLanguageButton, SIGNAL(clicked(bool)), this, SLOT(languageButtonClicked())); + connect(d->mPredictionButton, SIGNAL(clicked(bool)), this, SLOT(predictionButtonClicked())); + connect(d->mOptionList, SIGNAL(activated(HbListWidgetItem *)), this, SLOT(listItemActivated(HbListWidgetItem *))); + + HbInputSettingProxy *settings = HbInputSettingProxy::instance(); + connect(settings, SIGNAL(globalInputLanguageChanged(const HbInputLanguage &)), this, SLOT(primaryLanguageChanged(const HbInputLanguage &))); + connect(settings, SIGNAL(globalSecondaryInputLanguageChanged(const HbInputLanguage &)), this, SLOT(secondaryLanguageChanged(const HbInputLanguage &))); + connect(settings, SIGNAL(predictiveInputStateChanged(int)), this, SLOT(predictionStatusChanged(int))); + + connect(this, SIGNAL(aboutToClose()), this, SLOT(saveSettings())); +} + +/*! +Destructs the object. +*/ +HbInputSettingList::~HbInputSettingList() +{ +} + +/*! +Opens the setting list +*/ +void HbInputSettingList::showSettingList() +{ + Q_D(HbInputSettingList); + + HbInputSettingProxy *settings = HbInputSettingProxy::instance(); + d->mPrimaryLanguage = settings->globalInputLanguage(); + d->mSecondaryLanguage = settings->globalSecondaryInputLanguage(); + + d->mLanguageButton->setText(d->mPrimaryLanguage.localisedName()); + d->mPredictionButton->setText(d->mPredictionValues.at(settings->predictiveInputStatus())); + + QList customList = HbInputMethod::listCustomInputMethods(); + bool showInputMethod = true; + if (customList.count() < 1) { + showInputMethod = false; + } + + if (d->mOptionList->count() == 1 && showInputMethod) { + d->mOptionList->insertItem(0, HbIcon(inputMethodIcon), tr("Input methods")); + } else if (d->mOptionList->count() == 2 && !showInputMethod) { + delete d->mOptionList->takeItem(0); + } + + exec(); +} + +/*! +Enables/disables language selection button +*/ +void HbInputSettingList::setLanguageSelectionEnabled(bool enabled) +{ + Q_D(HbInputSettingList); + + d->mLanguageButton->setEnabled(enabled); +} + +/*! +Enables/disables prediction selection button +*/ +void HbInputSettingList::setPredictionSelectionEnabled(bool enabled) +{ + Q_D(HbInputSettingList); + + d->mPredictionButton->setEnabled(enabled); +} + +/*! +Swaps current primary and secondary languages +*/ +void HbInputSettingList::languageButtonClicked() +{ + Q_D(HbInputSettingList); + + if (d->mSecondaryLanguage == HbInputLanguage()) { + emit inputSettingsButtonClicked(); + } else { + HbInputLanguage language = d->mPrimaryLanguage; + d->mPrimaryLanguage = d->mSecondaryLanguage; + d->mSecondaryLanguage = language; + + primaryLanguageChanged(d->mPrimaryLanguage); + } + + close(); +} + +/*! +Toggles prediction state +*/ +void HbInputSettingList::predictionButtonClicked() +{ + HbInputSettingProxy *settings = HbInputSettingProxy::instance(); + settings->setPredictiveInputStatus(!settings->predictiveInputStatus()); + + close(); +} + +/*! +Opens input settings or input method selection +*/ +void HbInputSettingList::listItemActivated(HbListWidgetItem *item) +{ + Q_D(HbInputSettingList); + + if (d->mOptionList->row(item) == d->mOptionList->count() - 1) { + emit inputSettingsButtonClicked(); + } else { + emit inputMethodsButtonClicked(); + } + + close(); +} + +/*! +Sets current primary language and updates the language button text +*/ +void HbInputSettingList::primaryLanguageChanged(const HbInputLanguage &newLanguage) +{ + Q_D(HbInputSettingList); + + d->mPrimaryLanguage = HbInputLanguage(newLanguage); + d->mLanguageButton->setText(d->mPrimaryLanguage.localisedName()); +} + +/*! +Sets current secondary language +*/ +void HbInputSettingList::secondaryLanguageChanged(const HbInputLanguage &newLanguage) +{ + Q_D(HbInputSettingList); + + d->mSecondaryLanguage = HbInputLanguage(newLanguage); +} + +/*! +Updates prediction button text +*/ +void HbInputSettingList::predictionStatusChanged(int newStatus) +{ + Q_D(HbInputSettingList); + + d->mPredictionButton->setText(d->mPredictionValues.at(newStatus)); +} + +/*! +Stores the current language selection +*/ +void HbInputSettingList::saveSettings() +{ + Q_D(HbInputSettingList); + + HbInputSettingProxy *settings = HbInputSettingProxy::instance(); + HbPredictionFactory *predFactory = HbPredictionFactory::instance(); + + if (d->mPrimaryLanguage != settings->globalInputLanguage()) { + settings->setGlobalInputLanguage(d->mPrimaryLanguage); + settings->setGlobalSecondaryInputLanguage(d->mSecondaryLanguage); + if(!predFactory->predictionEngineForLanguage(d->mPrimaryLanguage)) { + predictionStatusChanged(false); + settings->setPredictiveInputStatus(false); + } + } +} + +// End of file +