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 } |