src/hbinput/inputwidgets/hbinputvkbwidget.cpp
changeset 30 80e4d18b72f5
parent 28 b7da29130b0e
--- a/src/hbinput/inputwidgets/hbinputvkbwidget.cpp	Fri Sep 17 08:32:10 2010 +0300
+++ b/src/hbinput/inputwidgets/hbinputvkbwidget.cpp	Mon Oct 04 00:38:12 2010 +0300
@@ -45,18 +45,15 @@
 #include <hbeffect.h>
 #include <hbframedrawer.h>
 #include <hbevent.h>
-#include <hbdataform.h>
 #include <hbinputregioncollector_p.h>
 #include <hbfeedbackmanager.h>
 
-#include <hbpushbutton.h>
 #include <hbinputmethod.h>
 #include <hbinputsettingproxy.h>
 #include <hbinpututils.h>
 #include <hbinputdef.h>
 #include <hbinputvkbhost.h>
 #include <hbinputvkbhostbridge.h>
-#include <hbinputsettingwidget.h>
 #include <hbinputcommondialogs.h>
 #include <hbinputkeymap.h>
 #include <hbinputkeymapfactory.h>
@@ -73,14 +70,13 @@
 #include "hbinputmodeindicator.h"
 #include "hbinputsmileypicker.h"
 #include "hbinputscreenshotwidget.h"
+#include "hbinputsettingpopup.h"
 
 const int HB_DIGIT_LATIN_START_VALUE          = 0x0030;
 const int HB_DIGIT_ARABIC_INDIC_START_VALUE   = 0x0660;
 const int HB_DIGIT_EASTERN_ARABIC_START_VALUE = 0x06F0;
 const int HB_DIGIT_DEVANAGARI_START_VALUE     = 0x0966;
 
-const int HbTitlePaneHeight = 20;
-
 const qreal HbPortraitSmileyPickerHeightInUnits = 43.7;
 const qreal HbPortraitSmileyPickerWidthInUnits = 47.8;
 const qreal HbLandscapeSmileyPickerHeightInUnits = 31.9;
@@ -89,7 +85,7 @@
 
 
 /*!
-@proto
+@stable
 @hbinput
 \class HbInputVkbWidget
 \brief A base class for touch keypads.
@@ -97,7 +93,7 @@
 This class implements default mechanisms for opening and closing touch keypads.
 It know how to operate in landscape and in portait modes and it know how
 implement split view -mechasnism for S60 QT UI's Hb library. It also implements
-closing mechansim, where used is able to close the touch keypad by sliding it downwards
+closing mechanism, where used is able to close the touch keypad by sliding it downwards
 with a finger. This class also implements background drawing for touch keypads.
 */
 
@@ -141,7 +137,6 @@
       mCloseHandleHeight(0),
       mCloseHandle(0),
       mKeyboardDimmed(false),
-      mSettingView(0),
       mSettingPopup(0)
 {
     mScreenshotTimeLine.setUpdateInterval(16);
@@ -151,7 +146,6 @@
 HbInputVkbWidgetPrivate::~HbInputVkbWidgetPrivate()
 {
     delete mSettingList;
-    delete mSettingPopup;
     delete mBackgroundDrawer;
     delete mIconDrawer;
     delete mSmileyPicker;
@@ -425,8 +419,18 @@
     if (!descriptor.isEmpty() && mOwner) {
         // Set as active input method.
         HbInputSettingProxy::instance()->setPreferredInputMethod(q->mainWindow()->orientation(), descriptor, customData);
-        // Activate immediately.
-        mOwner->activateInputMethod(descriptor);
+        if (HbInputSettingProxy::instance()->globalInputLanguage().language() == QLocale::Chinese &&
+            q->mainWindow()->orientation() ==  Qt::Vertical) {
+            HbInputLanguage primaryInputLanguage = HbInputSettingProxy::instance()->globalInputLanguage();
+            mOwner->activateState(HbInputState(HbInputModeDefault,
+                                   HbTextCaseAutomatic,
+                                   HbKeyboardTouchPortrait,
+                                   primaryInputLanguage));
+            HbInputMethod::activeInputMethod()->activateInputMethod(descriptor);
+        } else {
+            // Activate immediately.
+            mOwner->activateInputMethod(descriptor);
+        }
     }
 }
 
@@ -786,7 +790,7 @@
         }
 
         if (focusObject->editorInterface().isPredictionAllowed() &&
-            predFactory->predictionEngineForLanguage(HbInputSettingProxy::instance()->globalInputLanguage())) {
+            predFactory->predictionEngineForLanguage(d->mOwner->inputState().language())) {
             d->mSettingList->setPredictionSelectionEnabled(true);
         } else {
             d->mSettingList->setPredictionSelectionEnabled(false);
@@ -855,34 +859,9 @@
     d->mSettingsDialogsOpen++;
     closeSettingList();
 
-    d->mSettingPopup = new HbDialog();
-
-    HbPushButton *button = new HbPushButton();
-    HbIcon backIcon = HbIcon("qtg_mono_back");
-    button->setIcon(backIcon);
-    button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-    connect(button, SIGNAL(clicked()), this, SLOT(closeSettingsView()));
-    d->mSettingView = new HbView();
-    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
-    HbDataForm *dataForm = new HbDataForm();
-    HbInputSettingWidget *settingWidget = new HbInputSettingWidget(dataForm, d->mSettingView);
-    settingWidget->initializeWidget();
+    d->mSettingPopup = new HbInputSettingPopup();
 
-    layout->addItem(button);
-    layout->setAlignment(button, Qt::AlignRight);
-    layout->addItem(dataForm);
-    d->mSettingView->setLayout(layout);
-    HbInputRegionCollector::instance()->attach(d->mSettingView);
-
-    d->mSettingPopup->setContentWidget(d->mSettingView);
-    d->mSettingPopup->setModal(true);
-    d->mSettingPopup->setPreferredPos(QPoint(0,HbTitlePaneHeight));
-    d->mSettingPopup->setPreferredSize(QSize(mainWindow()->width(), mainWindow()->height()-HbTitlePaneHeight));
-    QSizeF popupSize = static_cast<QSizeF>(HbDeviceProfile::profile(mainWindow()).logicalSize());
-    
-    d->mSettingPopup->setPreferredSize(popupSize);
-    d->mSettingPopup->setDismissPolicy(HbPopup::NoDismiss);
-    d->mSettingPopup->setTimeout(HbPopup::NoTimeout);
+    connect(d->mSettingPopup, SIGNAL(dialogClosed()), this, SLOT(closeSettingsView()));
     d->mSettingPopup->show();
 }
 
@@ -892,8 +871,6 @@
 void HbInputVkbWidget::closeSettingsView()
 {
     Q_D(HbInputVkbWidget);
-    HbInputRegionCollector::instance()->detach(d->mSettingView);
-    d->mSettingPopup->close();
     d->mSettingPopup->deleteLater();
     d->mSettingPopup = 0;
     d->mSettingsDialogsOpen--;
@@ -1043,6 +1020,10 @@
 
         if (!smileys.isEmpty()) {
             d->mSmileyPicker = new HbInputSmileyPicker(rows, columns, 0, smileys);
+            // workaround start
+            QEvent event(QEvent::Polish);
+            QApplication::sendEvent(d->mSmileyPicker, &event);
+            // workaround end
             d->mSmileyPicker->setObjectName("vkbwidget_smiley_picker");
             connect(d->mSmileyPicker, SIGNAL(selected(QString)), this, SIGNAL(smileySelected(QString)));
         }
@@ -1243,10 +1224,10 @@
 
     if (HbSwipeGesture *gesture = qobject_cast<HbSwipeGesture *>(event->gesture(Qt::SwipeGesture))) {
         if (gesture->state() == Qt::GestureFinished) {
-            HbWidgetFeedback::triggered(this, Hb::InstantFlicked);
             // vertical swipes
             if (gesture->sceneVerticalDirection() == QSwipeGesture::Down) {
                 d->mFlickDirection = HbFlickDirectionDown;
+                HbWidgetFeedback::triggered(this, Hb::InstantFlicked);
                 emit flickEvent(d->mFlickDirection);
                 emit keypadCloseEventDetected(HbVkbCloseMethodCloseGesture);
             } else if (gesture->sceneVerticalDirection() != QSwipeGesture::Up) {