src/hbinput/inputwidgets/hbinputvkbwidget.cpp
changeset 21 4633027730f5
parent 7 923ff622b8b9
child 23 e6ad4ef83b23
--- a/src/hbinput/inputwidgets/hbinputvkbwidget.cpp	Tue Jul 06 14:36:53 2010 +0300
+++ b/src/hbinput/inputwidgets/hbinputvkbwidget.cpp	Wed Aug 18 10:05:37 2010 +0300
@@ -49,6 +49,7 @@
 #include <hbinputregioncollector_p.h>
 #include <hbfeedbackmanager.h>
 
+#include <hbpushbutton.h>
 #include <hbinputmethod.h>
 #include <hbinputsettingproxy.h>
 #include <hbinpututils.h>
@@ -78,6 +79,8 @@
 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;
@@ -132,15 +135,14 @@
       mFocusedObject(0),
       mCurrentFocusedObject(0),
       mFlickAnimation(false),
-      mSettingsListOpen(false),
+      mSettingsDialogsOpen(0),
       mAnimateWhenDialogCloses(false),
       mKeyboardSize(HbQwerty4x10),
       mCloseHandleHeight(0),
       mCloseHandle(0),
+      mKeyboardDimmed(false),
       mSettingView(0),
-      mCurrentView(0),
-      mKeyboardDimmed(false),
-	  mSettingWidget(0)
+      mSettingPopup(0)
 {
     mScreenshotTimeLine.setUpdateInterval(16);
 }
@@ -149,6 +151,7 @@
 HbInputVkbWidgetPrivate::~HbInputVkbWidgetPrivate()
 {
     delete mSettingList;
+    delete mSettingPopup;
     delete mBackgroundDrawer;
     delete mIconDrawer;
     delete mSmileyPicker;
@@ -370,8 +373,9 @@
     rotateTrans = q->mainWindow()->viewportTransform();
     QRectF transRect = rotateTrans.mapRect(rect);
     QPixmap pixmap;
-    pixmap = QPixmap::grabWidget(q->mainWindow(), (int)transRect.x(), (int)transRect.y(), (int)transRect.width(), (int)transRect.height());
+    pixmap = QPixmap::grabWidget(q->mainWindow(), (int)transRect.x(), (int)transRect.y()+2, (int)transRect.width(), (int)transRect.height());
     pixmap = pixmap.transformed(rotateTrans.inverted());
+    mScreenshotWidget->hide();
     mScreenshotWidget->setScreenshot(pixmap);
 }
 
@@ -539,6 +543,9 @@
 #endif // HB_EFFECTS
 
     setActive(false);
+    if (!d->mOwner) {
+        d->mOwner = HbInputMethod::activeInputMethod();
+    }
 }
 
 /*!
@@ -756,7 +763,7 @@
     d->mCurrentHost = host;
 
     if (d->mSmileyPicker && d->mSmileyPicker->isVisible()) {
-        d->mSmileyPicker->hide();
+        d->mSmileyPicker->close();
     }
     if (d->mSettingList) {
         d->mSettingList->close();
@@ -782,7 +789,7 @@
     Q_D(HbInputVkbWidget);
     HbPredictionFactory *predFactory = HbPredictionFactory::instance();
 
-    d->mSettingsListOpen = true;
+    d->mSettingsDialogsOpen++;
     d->captureScreenshot();
 
     if (!d->mSettingList) {
@@ -831,7 +838,6 @@
 void HbInputVkbWidget::settingsClosed()
 {
     Q_D(HbInputVkbWidget);
-
     HbInputButtonGroup *buttonGroup = static_cast<HbInputButtonGroup *>(contentItem());
     if (buttonGroup) {
         HbInputButton *item = buttonGroup->button(HbInputButton::ButtonKeyCodeSettings);
@@ -840,13 +846,15 @@
             buttonGroup->setButton(item, HbInputButton::ButtonKeyCodeSettings);
         }
     }
-
-    d->mSettingsListOpen = false;
-    if (d->mAnimateWhenDialogCloses) {
-        animKeyboardChange();
-        d->mAnimateWhenDialogCloses = false;
-    } else if (d->mScreenshotTimeLine.state() != QTimeLine::Running) {
-        keypadLanguageChangeFinished();
+    emit settingsListClosed();
+    d->mSettingsDialogsOpen--;
+    if (!d->mSettingsDialogsOpen){
+        if (d->mAnimateWhenDialogCloses) {
+            animKeyboardChange();
+            d->mAnimateWhenDialogCloses = false;
+        } else if (d->mScreenshotTimeLine.state() != QTimeLine::Running) {
+            keypadLanguageChangeFinished();
+        }
     }
 }
 
@@ -866,37 +874,38 @@
 {
     Q_D(HbInputVkbWidget);
 
-    /*
-    Added for vanilla input
-    When settings dialog is launched, keypad is not closed.
-    */
-    HbInputFocusObject *focusObject = 0;
-    if (!d->mOwner || !(focusObject = d->mOwner->focusObject())) {
-        return;
-    }
-    HbVkbHost *vkbHost = focusObject->editorInterface().vkbHost();
-    if (vkbHost && vkbHost->keypadStatus() != HbVkbHost::HbVkbStatusClosed) {
-        vkbHost->closeKeypad();
-    }
-    d->mCurrentFocusedObject = focusObject->object();
-
+    d->mSettingsDialogsOpen++;
     closeSettingList();
-    if(!d->mSettingView) {
-        d->mSettingView = new HbView(this);
-        HbAction *backAction = new HbAction(Hb::BackNaviAction, d->mSettingView);
-        backAction->setText(tr("Back"));
-        connect(backAction, SIGNAL(triggered(bool)), this, SLOT(closeSettingsView()));
-        d->mSettingView->setNavigationAction(backAction);
-        HbDataForm *dataForm = new HbDataForm();
-        d->mSettingView->setWidget(dataForm);
-        d->mSettingWidget = new HbInputSettingWidget(dataForm, d->mSettingView);        
-    }    
-    d->mSettingWidget->initializeWidget();
+
+    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();
+
+    layout->addItem(button);
+    layout->setAlignment(button, Qt::AlignRight);
+    layout->addItem(dataForm);
+    d->mSettingView->setLayout(layout);
     HbInputRegionCollector::instance()->attach(d->mSettingView);
-    d->mSettingView->setTitle(tr("Input Settings"));
-    mainWindow()->addView(d->mSettingView);
-    d->mCurrentView = mainWindow()->currentView();
-    mainWindow()->setCurrentView(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);
+    d->mSettingPopup->show();
 }
 
 /*!
@@ -905,19 +914,18 @@
 void HbInputVkbWidget::closeSettingsView()
 {
     Q_D(HbInputVkbWidget);
-
-    mainWindow()->setCurrentView(d->mCurrentView);
-    mainWindow()->removeView(d->mSettingView);
-    if (d->mSettingView->scene()) {
-        d->mSettingView->scene()->removeItem(d->mSettingView);
-    }
     HbInputRegionCollector::instance()->detach(d->mSettingView);
-    d->mSettingWidget->resetWidget();
-
-    if (d->mCurrentFocusedObject) {
-        HbInputFocusObject *focusObject = new HbInputFocusObject(d->mCurrentFocusedObject);
-        d->mOwner->setFocusObject(focusObject);
-        d->mCurrentFocusedObject = 0;
+    d->mSettingPopup->close();
+    d->mSettingPopup->deleteLater();
+    d->mSettingPopup = 0;
+    d->mSettingsDialogsOpen--;
+    if (!d->mSettingsDialogsOpen){
+        if (d->mAnimateWhenDialogCloses) {
+            animKeyboardChange();
+            d->mAnimateWhenDialogCloses = false;
+        } else if (d->mScreenshotTimeLine.state() != QTimeLine::Running) {
+            keypadLanguageChangeFinished();
+        }
     }
 }
 
@@ -1201,7 +1209,7 @@
 {
     Q_D(HbInputVkbWidget);
     if (mainWindow()) {
-        if (d->mSettingsListOpen) {
+        if (d->mSettingsDialogsOpen) {
             d->mAnimateWhenDialogCloses = true;
         } else {
             if (!d->mAnimateWhenDialogCloses) {
@@ -1209,6 +1217,7 @@
             }
             connect(&d->mScreenshotTimeLine, SIGNAL(valueChanged(qreal)), this, SLOT(keypadLanguageChangeAnimationUpdate(qreal)));
             connect(&d->mScreenshotTimeLine, SIGNAL(finished()), this, SLOT(keypadLanguageChangeFinished()));
+            d->mScreenshotWidget->show();
             d->mScreenshotTimeLine.start();
         }
     }
@@ -1262,6 +1271,11 @@
 {
     Q_D(HbInputVkbWidget);
 
+    // Ignore gesture events if previous flick event is being handled
+    if (d->mFlickDirection != HbFlickDirectionNone) {
+        return;
+    }
+
     if (HbSwipeGesture *gesture = qobject_cast<HbSwipeGesture *>(event->gesture(Qt::SwipeGesture))) {
         if (gesture->state() == Qt::GestureFinished) {
             HbWidgetFeedback::triggered(this, Hb::InstantFlicked);