--- 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);