src/hbinput/inputwidgets/hbinputsettinglist.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
child 34 ed14f46c0e55
equal deleted inserted replaced
6:c3690ec91ef8 7:923ff622b8b9
    25 #include "hbinputsettinglist.h"
    25 #include "hbinputsettinglist.h"
    26 
    26 
    27 #include <QGraphicsLinearLayout>
    27 #include <QGraphicsLinearLayout>
    28 #include <QGraphicsGridLayout>
    28 #include <QGraphicsGridLayout>
    29 
    29 
       
    30 #include <hbmainwindow.h>
    30 #include <hblabel.h>
    31 #include <hblabel.h>
    31 #include <hbpushbutton.h>
    32 #include <hbpushbutton.h>
    32 #include <hblistwidget.h>
    33 #include <hblistwidget.h>
    33 #include <hblistwidgetitem.h>
    34 #include <hblistwidgetitem.h>
    34 #include <hbinputmethod.h>
    35 #include <hbinputmethod.h>
    35 #include <hbinputsettingproxy.h>
    36 #include <hbinputsettingproxy.h>
    36 #include <hbinpututils.h>
    37 #include <hbinpututils.h>
    37 #include <hbinputpredictionfactory.h>
    38 #include <hbinputpredictionfactory.h>
    38 #include <hbinputregioncollector_p.h>
    39 #include <hbinputregioncollector_p.h>
       
    40 #include <hbinputmethodselectionlist.h>
    39 
    41 
    40 #include "hbdialog_p.h"
    42 #include "hbdialog_p.h"
    41 
    43 
    42 const QString settingsIcon("qtg_mono_settings");
    44 const QString settingsIcon("qtg_mono_settings");
    43 const QString inputMethodIcon("qtg_mono_virtual_input");
    45 const QString inputMethodIcon("qtg_mono_virtual_input");
    44 
    46 
       
    47 const qreal HbSelectionListMarginInUnits = 0.8;
       
    48 const qreal HbSelectionListLandscapeAlignInUnits = 9.4;
       
    49 
    45 /// @cond
    50 /// @cond
    46 
    51 
    47 class HbInputSettingListPrivate : public HbDialogPrivate
    52 class HbInputSettingListPrivate : public HbDialogPrivate
    48 {
    53 {
       
    54     Q_DECLARE_PUBLIC(HbInputSettingList)
       
    55 
    49 public:
    56 public:
    50     HbInputSettingListPrivate();
    57     HbInputSettingListPrivate();
       
    58     ~HbInputSettingListPrivate();
    51 
    59 
    52     qreal languageNameWidth();
    60     qreal languageNameWidth();
       
    61     void showInputMethodSelectionList();
    53 
    62 
    54 public:
    63 public:
    55     HbPushButton *mLanguageButton;
    64     HbPushButton *mLanguageButton;
    56     HbPushButton *mPredictionButton;
    65     HbPushButton *mPredictionButton;
    57     HbListWidget *mOptionList;
    66     HbListWidget *mOptionList;
    58     HbInputLanguage mPrimaryLanguage;
    67     HbInputLanguage mPrimaryLanguage;
    59     HbInputLanguage mSecondaryLanguage;
    68     HbInputLanguage mSecondaryLanguage;
    60     QList<QString> mPredictionValues;
    69     QList<QString> mPredictionValues;
       
    70     HbInputMethodSelectionList *mInputMethodSelectionList;
    61 };
    71 };
    62 
    72 
    63 HbInputSettingListPrivate::HbInputSettingListPrivate()
    73 HbInputSettingListPrivate::HbInputSettingListPrivate()
    64     : mLanguageButton(0), mPredictionButton(0), mOptionList(0)
    74  : mLanguageButton(0), mPredictionButton(0), mOptionList(0), mInputMethodSelectionList(0)
    65 {
    75 {
       
    76 }
       
    77 
       
    78 HbInputSettingListPrivate::~HbInputSettingListPrivate()
       
    79 {
       
    80     delete mInputMethodSelectionList;
    66 }
    81 }
    67 
    82 
    68 qreal HbInputSettingListPrivate::languageNameWidth()
    83 qreal HbInputSettingListPrivate::languageNameWidth()
    69 {
    84 {
    70     qreal nameWidth(0);
    85     qreal nameWidth(0);
    80     }
    95     }
    81 
    96 
    82     return nameWidth;
    97     return nameWidth;
    83 }
    98 }
    84 
    99 
       
   100 void HbInputSettingListPrivate::showInputMethodSelectionList()
       
   101 {
       
   102     Q_Q(HbInputSettingList);
       
   103 
       
   104     delete mInputMethodSelectionList;
       
   105     mInputMethodSelectionList = new HbInputMethodSelectionList();
       
   106     mInputMethodSelectionList->setObjectName("Input method selection list");
       
   107 
       
   108     qreal unitValue = HbDeviceProfile::profile(q->mainWindow()).unitValue();
       
   109 
       
   110     QPointF position(q->scenePos().x() + q->size().width(),
       
   111                      mOptionList->scenePos().y() - HbSelectionListMarginInUnits * unitValue);
       
   112 
       
   113     if (q->mainWindow()->orientation() == Qt::Horizontal) {
       
   114         position.setX(position.x() - HbSelectionListLandscapeAlignInUnits * unitValue);
       
   115     }
       
   116     
       
   117     mInputMethodSelectionList->setPreferredPos(position, HbPopup::BottomRightCorner);
       
   118 
       
   119     QObject::connect(mInputMethodSelectionList, SIGNAL(inputMethodSelected(const HbInputMethodDescriptor &, const QByteArray &)),
       
   120                      q, SLOT(closeSettings(const HbInputMethodDescriptor &, const QByteArray &)));
       
   121     mInputMethodSelectionList->show();
       
   122 }
       
   123 
    85 /// @endcond
   124 /// @endcond
    86 
   125 
    87 /*!
   126 /*!
    88 Constructs input setting list
   127 Constructs input setting list
    89 */
   128 */
    90 HbInputSettingList::HbInputSettingList(QGraphicsWidget *parent)
   129 HbInputSettingList::HbInputSettingList(QGraphicsWidget *parent)
    91     : HbDialog(*new HbInputSettingListPrivate(), parent)
   130     : HbDialog(*new HbInputSettingListPrivate(), parent)
    92 {
   131 {
    93     Q_D(HbInputSettingList);
   132     Q_D(HbInputSettingList);
    94     HbInputRegionCollector::instance()->attach(this);
   133     HbInputRegionCollector::instance()->attach(this);
       
   134 
       
   135     // Get correct size from style parameters
       
   136     HbStyle style;
       
   137     qreal listWidth(300);
       
   138     style.parameter(QString("expr(var(hb-param-screen-short-edge)-(2*var(hb-param-margin-gene-screen)))"), listWidth);
       
   139     qreal margin(5);
       
   140     style.parameter(QString("hb-param-margin-gene-popup"), margin);
    95 
   141 
    96     QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical);
   142     QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical);
    97     QGraphicsGridLayout *gridLayout = new QGraphicsGridLayout();
   143     QGraphicsGridLayout *gridLayout = new QGraphicsGridLayout();
    98 
   144 
    99     HbLabel *languageLabel = new HbLabel(tr("Language"), this);
   145     HbLabel *languageLabel = new HbLabel(tr("Language"), this);
   111     d->mOptionList = new HbListWidget(this);
   157     d->mOptionList = new HbListWidget(this);
   112     d->mOptionList->setFontSpec(HbFontSpec(HbFontSpec::Primary));
   158     d->mOptionList->setFontSpec(HbFontSpec(HbFontSpec::Primary));
   113     d->mOptionList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
   159     d->mOptionList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
   114     d->mOptionList->setObjectName("Input options list");
   160     d->mOptionList->setObjectName("Input options list");
   115     d->mOptionList->addItem(HbIcon(settingsIcon), tr("Input settings"));
   161     d->mOptionList->addItem(HbIcon(settingsIcon), tr("Input settings"));
   116     d->mOptionList->setPreferredWidth(300);
   162     d->mOptionList->setContentsMargins(0, 0, 0, 0);
       
   163     d->mOptionList->setPreferredWidth(listWidth - 2 * margin);
   117 
   164 
   118     gridLayout->addItem(languageLabel, 0, 0);
   165     gridLayout->addItem(languageLabel, 0, 0);
   119     gridLayout->addItem(d->mLanguageButton, 0, 1);
   166     gridLayout->addItem(d->mLanguageButton, 0, 1);
   120     gridLayout->addItem(predictionLabel, 1, 0);
   167     gridLayout->addItem(predictionLabel, 1, 0);
   121     gridLayout->addItem(d->mPredictionButton, 1, 1);
   168     gridLayout->addItem(d->mPredictionButton, 1, 1);
   122 
   169     gridLayout->setContentsMargins(0, 0, 0, 0);
   123     qreal buttonWidth = 30 + d->languageNameWidth();
   170 
   124     gridLayout->setColumnFixedWidth(0, 300 - buttonWidth);
   171     // Width for language button is based on the width of language name string and button margins
   125     gridLayout->setColumnFixedWidth(1, buttonWidth);
   172     qreal buttonMargin(20);
   126 
   173     style.parameter(QString("expr(var(hb-param-margin-gene-left)+var(hb-param-margin-gene-right))"), buttonMargin);
   127     qreal buttonHeight = buttonWidth * 0.4;
   174     gridLayout->setColumnFixedWidth(1, buttonMargin + d->languageNameWidth());
   128     gridLayout->setRowFixedHeight(0, buttonHeight);
       
   129     gridLayout->setRowFixedHeight(1, buttonHeight);
       
   130 
   175 
   131     mainLayout->addItem(gridLayout);
   176     mainLayout->addItem(gridLayout);
   132     mainLayout->addItem(d->mOptionList);
   177     mainLayout->addItem(d->mOptionList);
       
   178     mainLayout->setContentsMargins(0, 0, 0, 0);
   133     QGraphicsWidget *content = new QGraphicsWidget(this);
   179     QGraphicsWidget *content = new QGraphicsWidget(this);
       
   180     content->setContentsMargins(0, 0, 0, 0);
   134     content->setLayout(mainLayout);
   181     content->setLayout(mainLayout);
   135     setContentWidget(content);
   182     setContentWidget(content);
   136 
   183 
   137     d->mPredictionValues.append(tr("Off"));
   184     d->mPredictionValues.append(tr("Off"));
   138     d->mPredictionValues.append(tr("On"));
   185     d->mPredictionValues.append(tr("On"));
   139 
   186 
   140     // set default values for popup
   187     // set default values for popup
   141     setTimeout(HbDialog::NoTimeout);
   188     setTimeout(HbDialog::NoTimeout);
   142     setBackgroundFaded(false);
   189     setBackgroundFaded(false);
   143     setDismissPolicy(TapOutside);
   190     setDismissPolicy(TapOutside);
   144 
   191     setContentsMargins(margin, margin, margin, margin);
   145     // Make sure the custom button list never steals focus.
   192     setPreferredWidth(listWidth);
       
   193 
       
   194     // Make sure the input settings list never steals focus.
   146     setFlag(QGraphicsItem::ItemIsPanel, true);
   195     setFlag(QGraphicsItem::ItemIsPanel, true);
   147     setActive(false);
   196     setActive(false);
   148 
   197 
   149     connect(d->mLanguageButton, SIGNAL(clicked(bool)), this, SLOT(languageButtonClicked()));
   198     connect(d->mLanguageButton, SIGNAL(clicked(bool)), this, SLOT(languageButtonClicked()));
   150     connect(d->mPredictionButton, SIGNAL(clicked(bool)), this, SLOT(predictionButtonClicked()));
   199     connect(d->mPredictionButton, SIGNAL(clicked(bool)), this, SLOT(predictionButtonClicked()));
   153 
   202 
   154     HbInputSettingProxy *settings = HbInputSettingProxy::instance();
   203     HbInputSettingProxy *settings = HbInputSettingProxy::instance();
   155     connect(settings, SIGNAL(globalInputLanguageChanged(const HbInputLanguage &)), this, SLOT(primaryLanguageChanged(const HbInputLanguage &)));
   204     connect(settings, SIGNAL(globalInputLanguageChanged(const HbInputLanguage &)), this, SLOT(primaryLanguageChanged(const HbInputLanguage &)));
   156     connect(settings, SIGNAL(globalSecondaryInputLanguageChanged(const HbInputLanguage &)), this, SLOT(secondaryLanguageChanged(const HbInputLanguage &)));
   205     connect(settings, SIGNAL(globalSecondaryInputLanguageChanged(const HbInputLanguage &)), this, SLOT(secondaryLanguageChanged(const HbInputLanguage &)));
   157     connect(settings, SIGNAL(predictiveInputStateChanged(HbKeyboardSettingFlags, bool)), this, SLOT(predictionStatusChanged(HbKeyboardSettingFlags, bool)));
   206     connect(settings, SIGNAL(predictiveInputStateChanged(HbKeyboardSettingFlags, bool)), this, SLOT(predictionStatusChanged(HbKeyboardSettingFlags, bool)));
       
   207 
       
   208     connect(this, SIGNAL(aboutToClose()), this, SLOT(aboutToClose()));
   158 }
   209 }
   159 
   210 
   160 /*!
   211 /*!
   161 Destructs the object.
   212 Destructs the object.
   162 */
   213 */
   176     d->mSecondaryLanguage = settings->globalSecondaryInputLanguage();
   227     d->mSecondaryLanguage = settings->globalSecondaryInputLanguage();
   177 
   228 
   178     d->mLanguageButton->setText(d->mPrimaryLanguage.localisedName());
   229     d->mLanguageButton->setText(d->mPrimaryLanguage.localisedName());
   179     d->mPredictionButton->setText(d->mPredictionValues.at(settings->predictiveInputStatusForActiveKeyboard()));
   230     d->mPredictionButton->setText(d->mPredictionValues.at(settings->predictiveInputStatusForActiveKeyboard()));
   180 
   231 
   181     QList<HbInputMethodDescriptor> customList = HbInputMethod::listCustomInputMethods();
   232     QList<HbInputMethodDescriptor> customList = HbInputMethod::listCustomInputMethods(mainWindow()->orientation(), d->mPrimaryLanguage);
   182     bool showInputMethod = true;
   233     bool showInputMethod = true;
   183     if (customList.count() < 1) {
   234     if (customList.count() < 1) {
   184         showInputMethod = false;
   235         showInputMethod = false;
   185     }
   236     }
   186 
   237 
   207 void HbInputSettingList::setPredictionSelectionEnabled(bool enabled)
   258 void HbInputSettingList::setPredictionSelectionEnabled(bool enabled)
   208 {
   259 {
   209     Q_D(HbInputSettingList);
   260     Q_D(HbInputSettingList);
   210 
   261 
   211     d->mPredictionButton->setEnabled(enabled);
   262     d->mPredictionButton->setEnabled(enabled);
       
   263 }
       
   264 
       
   265 /*!
       
   266 Closes input method selection if settings is closed
       
   267 */
       
   268 void HbInputSettingList::aboutToClose()
       
   269 {
       
   270     Q_D(HbInputSettingList);
       
   271 
       
   272     if (d->mInputMethodSelectionList) {
       
   273         d->mInputMethodSelectionList->close();
       
   274     }
   212 }
   275 }
   213 
   276 
   214 /*!
   277 /*!
   215 Swaps current primary and secondary languages
   278 Swaps current primary and secondary languages
   216 */
   279 */
   257 {
   320 {
   258     Q_D(HbInputSettingList);
   321     Q_D(HbInputSettingList);
   259 
   322 
   260     if (d->mOptionList->row(item) == d->mOptionList->count() - 1) {
   323     if (d->mOptionList->row(item) == d->mOptionList->count() - 1) {
   261         emit inputSettingsButtonClicked();
   324         emit inputSettingsButtonClicked();
       
   325         close();
   262     } else {
   326     } else {
   263         emit inputMethodsButtonClicked();
   327         d->showInputMethodSelectionList();
   264     }
   328     }
   265 
       
   266     close();
       
   267 }
   329 }
   268 
   330 
   269 /*!
   331 /*!
   270 Sets current primary language and updates the language button text
   332 Sets current primary language and updates the language button text
   271 */
   333 */
   298 
   360 
   299     bool status = HbInputSettingProxy::instance()->predictiveInputStatusForActiveKeyboard();
   361     bool status = HbInputSettingProxy::instance()->predictiveInputStatusForActiveKeyboard();
   300     d->mPredictionButton->setText(d->mPredictionValues.at(status));
   362     d->mPredictionButton->setText(d->mPredictionValues.at(status));
   301 }
   363 }
   302 
   364 
       
   365 /*!
       
   366 Closes settings and emits inputMethodSelected signal with given parameter
       
   367 */
       
   368 void HbInputSettingList::closeSettings(const HbInputMethodDescriptor &descriptor, const QByteArray &customData)
       
   369 {
       
   370     close();
       
   371     emit inputMethodSelected(descriptor, customData);
       
   372 }
       
   373 
   303 // End of file
   374 // End of file