src/hbinput/inputwidgets/hbinputsettinglist.cpp
changeset 34 ed14f46c0e55
parent 7 923ff622b8b9
equal deleted inserted replaced
31:7516d6d86cf5 34:ed14f46c0e55
    37 #include <hbinpututils.h>
    37 #include <hbinpututils.h>
    38 #include <hbinputpredictionfactory.h>
    38 #include <hbinputpredictionfactory.h>
    39 #include <hbinputregioncollector_p.h>
    39 #include <hbinputregioncollector_p.h>
    40 #include <hbinputmethodselectionlist.h>
    40 #include <hbinputmethodselectionlist.h>
    41 
    41 
    42 #include "hbdialog_p.h"
    42 #include "hbinputpopupbase_p.h"
       
    43 
       
    44 /*!
       
    45 @stable
       
    46 @hbinput
       
    47 \class HbInputSettingList
       
    48 \brief Input options popup opened from virtual keyboards.
       
    49 */
    43 
    50 
    44 const QString settingsIcon("qtg_mono_settings");
    51 const QString settingsIcon("qtg_mono_settings");
    45 const QString inputMethodIcon("qtg_mono_virtual_input");
    52 const QString inputMethodIcon("qtg_mono_virtual_input");
    46 
    53 
    47 const qreal HbSelectionListMarginInUnits = 0.8;
    54 const qreal HbSelectionListMarginInUnits = 0.8;
    48 const qreal HbSelectionListLandscapeAlignInUnits = 9.4;
    55 const qreal HbSelectionListLandscapeAlignInUnits = 9.4;
    49 
    56 
    50 /// @cond
    57 /// @cond
    51 
    58 
    52 class HbInputSettingListPrivate : public HbDialogPrivate
    59 class HbInputSettingListPrivate : public HbInputPopupBasePrivate
    53 {
    60 {
    54     Q_DECLARE_PUBLIC(HbInputSettingList)
    61     Q_DECLARE_PUBLIC(HbInputSettingList)
    55 
    62 
    56 public:
    63 public:
    57     HbInputSettingListPrivate();
    64     HbInputSettingListPrivate();
    66     HbListWidget *mOptionList;
    73     HbListWidget *mOptionList;
    67     HbInputLanguage mPrimaryLanguage;
    74     HbInputLanguage mPrimaryLanguage;
    68     HbInputLanguage mSecondaryLanguage;
    75     HbInputLanguage mSecondaryLanguage;
    69     QList<QString> mPredictionValues;
    76     QList<QString> mPredictionValues;
    70     HbInputMethodSelectionList *mInputMethodSelectionList;
    77     HbInputMethodSelectionList *mInputMethodSelectionList;
       
    78     bool mIsPredictionDisabled;
    71 };
    79 };
    72 
    80 
    73 HbInputSettingListPrivate::HbInputSettingListPrivate()
    81 HbInputSettingListPrivate::HbInputSettingListPrivate()
    74  : mLanguageButton(0), mPredictionButton(0), mOptionList(0), mInputMethodSelectionList(0)
    82  : mLanguageButton(0), mPredictionButton(0), mOptionList(0), mInputMethodSelectionList(0), mIsPredictionDisabled(false)
    75 {
    83 {
    76 }
    84 }
    77 
    85 
    78 HbInputSettingListPrivate::~HbInputSettingListPrivate()
    86 HbInputSettingListPrivate::~HbInputSettingListPrivate()
    79 {
    87 {
   125 
   133 
   126 /*!
   134 /*!
   127 Constructs input setting list
   135 Constructs input setting list
   128 */
   136 */
   129 HbInputSettingList::HbInputSettingList(QGraphicsWidget *parent)
   137 HbInputSettingList::HbInputSettingList(QGraphicsWidget *parent)
   130     : HbDialog(*new HbInputSettingListPrivate(), parent)
   138     : HbInputPopupBase(*new HbInputSettingListPrivate(), parent)
   131 {
   139 {
   132     Q_D(HbInputSettingList);
   140     Q_D(HbInputSettingList);
   133     HbInputRegionCollector::instance()->attach(this);
   141     HbInputRegionCollector::instance()->attach(this);
   134 
   142 
   135     // Get correct size from style parameters
   143     // Get correct size from style parameters
   136     HbStyle style;
       
   137     qreal listWidth(300);
   144     qreal listWidth(300);
   138     style.parameter(QString("expr(var(hb-param-screen-short-edge)-(2*var(hb-param-margin-gene-screen)))"), listWidth);
   145     style()->parameter(QString("expr(var(hb-param-screen-short-edge)-(2*var(hb-param-margin-gene-screen)))"), listWidth);
   139     qreal margin(5);
   146     qreal margin(5);
   140     style.parameter(QString("hb-param-margin-gene-popup"), margin);
   147     style()->parameter(QString("hb-param-margin-gene-popup"), margin);
   141 
   148 
   142     QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical);
   149     QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical);
   143     QGraphicsGridLayout *gridLayout = new QGraphicsGridLayout();
   150     QGraphicsGridLayout *gridLayout = new QGraphicsGridLayout();
   144 
   151 
   145     HbLabel *languageLabel = new HbLabel(tr("Language"), this);
   152     HbLabel *languageLabel = new HbLabel(tr("Language"), this);
   168     gridLayout->addItem(d->mPredictionButton, 1, 1);
   175     gridLayout->addItem(d->mPredictionButton, 1, 1);
   169     gridLayout->setContentsMargins(0, 0, 0, 0);
   176     gridLayout->setContentsMargins(0, 0, 0, 0);
   170 
   177 
   171     // Width for language button is based on the width of language name string and button margins
   178     // Width for language button is based on the width of language name string and button margins
   172     qreal buttonMargin(20);
   179     qreal buttonMargin(20);
   173     style.parameter(QString("expr(var(hb-param-margin-gene-left)+var(hb-param-margin-gene-right))"), buttonMargin);
   180     style()->parameter(QString("expr(var(hb-param-margin-gene-left)+var(hb-param-margin-gene-right))"), buttonMargin);
   174     gridLayout->setColumnFixedWidth(1, buttonMargin + d->languageNameWidth());
   181     gridLayout->setColumnFixedWidth(1, buttonMargin + d->languageNameWidth());
   175 
   182 
   176     mainLayout->addItem(gridLayout);
   183     mainLayout->addItem(gridLayout);
   177     mainLayout->addItem(d->mOptionList);
   184     mainLayout->addItem(d->mOptionList);
   178     mainLayout->setContentsMargins(0, 0, 0, 0);
   185     mainLayout->setContentsMargins(0, 0, 0, 0);
   189     setBackgroundFaded(false);
   196     setBackgroundFaded(false);
   190     setDismissPolicy(TapOutside);
   197     setDismissPolicy(TapOutside);
   191     setContentsMargins(margin, margin, margin, margin);
   198     setContentsMargins(margin, margin, margin, margin);
   192     setPreferredWidth(listWidth);
   199     setPreferredWidth(listWidth);
   193 
   200 
   194     // Make sure the input settings list never steals focus.
       
   195     setFlag(QGraphicsItem::ItemIsPanel, true);
       
   196     setActive(false);
       
   197 
       
   198     connect(d->mLanguageButton, SIGNAL(clicked(bool)), this, SLOT(languageButtonClicked()));
   201     connect(d->mLanguageButton, SIGNAL(clicked(bool)), this, SLOT(languageButtonClicked()));
   199     connect(d->mPredictionButton, SIGNAL(clicked(bool)), this, SLOT(predictionButtonClicked()));
   202     connect(d->mPredictionButton, SIGNAL(clicked(bool)), this, SLOT(predictionButtonClicked()));
   200     connect(d->mOptionList, SIGNAL(activated(HbListWidgetItem *)), this, SLOT(listItemActivated(HbListWidgetItem *)));
   203     connect(d->mOptionList, SIGNAL(activated(HbListWidgetItem *)), this, SLOT(listItemActivated(HbListWidgetItem *)));
   201     connect(d->mOptionList, SIGNAL(longPressed(HbListWidgetItem *, const QPointF &)), this, SLOT(listItemActivated(HbListWidgetItem *)));
   204     connect(d->mOptionList, SIGNAL(longPressed(HbListWidgetItem *, const QPointF &)), this, SLOT(listItemActivated(HbListWidgetItem *)));
   202 
   205 
   238     if (d->mOptionList->count() == 1 && showInputMethod) {
   241     if (d->mOptionList->count() == 1 && showInputMethod) {
   239         d->mOptionList->insertItem(0, HbIcon(inputMethodIcon), tr("Input methods"));
   242         d->mOptionList->insertItem(0, HbIcon(inputMethodIcon), tr("Input methods"));
   240     } else if (d->mOptionList->count() == 2 && !showInputMethod) {
   243     } else if (d->mOptionList->count() == 2 && !showInputMethod) {
   241         delete d->mOptionList->takeItem(0);
   244         delete d->mOptionList->takeItem(0);
   242     }
   245     }
       
   246 
       
   247     HbInputMethod* input = HbInputMethod::activeInputMethod();
       
   248 
       
   249     if (input && input->focusObject() && input->focusObject()->editorInterface().inputConstraints() & HbEditorConstraintLatinAlphabetOnly){
       
   250         setLanguageSelectionEnabled(false);
       
   251     } else {
       
   252         setLanguageSelectionEnabled(true);
       
   253     }
       
   254 
   243 }
   255 }
   244 
   256 
   245 /*!
   257 /*!
   246 Enables/disables language selection button
   258 Enables/disables language selection button
   247 */
   259 */
   285     HbPredictionFactory *predFactory = HbPredictionFactory::instance();
   297     HbPredictionFactory *predFactory = HbPredictionFactory::instance();
   286     if (d->mSecondaryLanguage == HbInputLanguage()) {
   298     if (d->mSecondaryLanguage == HbInputLanguage()) {
   287         emit inputSettingsButtonClicked();
   299         emit inputSettingsButtonClicked();
   288     } else {
   300     } else {
   289         HbInputLanguage language = d->mPrimaryLanguage;
   301         HbInputLanguage language = d->mPrimaryLanguage;
   290         bool oldPLangSupportsPrediction = (predFactory->predictionEngineForLanguage(language) != NULL);
       
   291         d->mPrimaryLanguage = d->mSecondaryLanguage;
   302         d->mPrimaryLanguage = d->mSecondaryLanguage;
   292         d->mSecondaryLanguage = language;
   303         d->mSecondaryLanguage = language;
   293 
   304 
   294         HbInputSettingProxy::instance()->setGlobalInputLanguage(d->mPrimaryLanguage);
   305         HbInputSettingProxy::instance()->setGlobalInputLanguage(d->mPrimaryLanguage);
   295         bool langSupportsPrediction = (predFactory->predictionEngineForLanguage(d->mPrimaryLanguage) != NULL);
   306         bool langSupportsPrediction = (predFactory->predictionEngineForLanguage(d->mPrimaryLanguage) != NULL);
   296         HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(d->mSecondaryLanguage);
   307         HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(d->mSecondaryLanguage);
   297 
   308 
   298         if (oldPLangSupportsPrediction != langSupportsPrediction) {
   309         bool predictionStatus = settings->predictiveInputStatusForActiveKeyboard();
   299             settings->setPredictiveInputStatusForActiveKeyboard(langSupportsPrediction);
   310         if (!langSupportsPrediction && predictionStatus) {
       
   311             d->mIsPredictionDisabled = true;
       
   312             settings->setPredictiveInputStatusForActiveKeyboard(false);
       
   313         } else if(d->mIsPredictionDisabled){
       
   314             settings->setPredictiveInputStatusForActiveKeyboard(true);
       
   315             d->mIsPredictionDisabled = false;
   300         }
   316         }
   301     }
   317     }
   302 
   318 
   303     close();
   319     close();
   304 }
   320 }