diff -r f7ac710697a9 -r 06ff229162e9 src/hbinput/inputwidgets/hbinputvkbwidget.cpp --- a/src/hbinput/inputwidgets/hbinputvkbwidget.cpp Mon May 03 12:48:33 2010 +0300 +++ b/src/hbinput/inputwidgets/hbinputvkbwidget.cpp Fri May 14 16:09:54 2010 +0300 @@ -29,8 +29,8 @@ #include #include #include +#include #include -#include #include #include @@ -38,11 +38,8 @@ #include #include #include -#include -#include #include #include -#include #include #include #include @@ -58,23 +55,21 @@ #include #include #include +#include +#include #include #include #include "hbinputvirtualrocker.h" #include "hbinputvkbwidget.h" #include "hbinputvkbwidget_p.h" -#include "hbinputtouchkeypadbutton.h" #include "hbinputsettinglist.h" #include "hbinputmodeindicator.h" #include #include "hbinputsmileypicker.h" #include "hbinputscreenshotwidget.h" -const qreal HbMouseDragDelta = 0.4; + const qreal HbRockerWidth = 50.0; -const int MaxSweepTime = 500; -const int SweepLength = 150; - /*! @proto @@ -105,8 +100,6 @@ mKeymap(0), mModifiers(0), mInputModeIndicator(0), -mApplicationButton(0), -mSettingsButton(0), mSettingList(0), mButtonLayout(0), mRocker(0), @@ -148,6 +141,28 @@ delete mScreenshotWidget; } +void HbInputVkbWidgetPrivate::initLayout() +{ + Q_Q(HbInputVkbWidget); + + mLayout = new QGraphicsLinearLayout(Qt::Vertical); + mLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0); + mLayout->setSpacing(0.0); + + qreal unitValue = HbDeviceProfile::profile(q->mainWindow()).unitValue(); + mCloseHandleHeight = HbCloseHandleHeightInUnits * unitValue; + mCloseHandleWidth = HbCloseHandleWidthInUnits * unitValue; + + mCloseHandle = new QGraphicsWidget(); + mCloseHandle->setObjectName("vkbHandle"); + mCloseHandle->setMinimumHeight(mCloseHandleHeight); + mCloseHandle->setMaximumHeight(mCloseHandleHeight); + mLayout->addItem(mCloseHandle); + + q->setContentItem(new HbInputButtonGroup()); + q->setLayout(mLayout); +} + void HbInputVkbWidgetPrivate::init() { Q_Q(HbInputVkbWidget); @@ -168,7 +183,7 @@ mBackgroundDrawer->setFrameGraphicsName(backgroundGraphics); mBackgroundDrawer->setFrameType(HbFrameDrawer::ThreePiecesVertical); mBackgroundDrawer->setFillWholeRect(true); - mBackgroundDrawer->setBorderWidths(0.0, HbCloseHandleHeight, 0.0, HbCloseHandleHeight); + mBackgroundDrawer->setBorderWidths(0.0, mCloseHandleHeight, 0.0, mCloseHandleHeight); mIconDrawer = new HbFrameDrawer(); mIconDrawer->setFrameType(HbFrameDrawer::OnePiece); @@ -242,10 +257,87 @@ q_ptr->mouseReleaseEvent(aEvent); } -void HbInputVkbWidgetPrivate::applyEditorConstraints() { +void HbInputVkbWidgetPrivate::applyEditorConstraints() +{ // no default implementaiton as of now. } +void HbInputVkbWidgetPrivate::updateKeyCodes() +{ + Q_Q(HbInputVkbWidget); + + HbInputButtonGroup *buttonGroup = static_cast(q->contentItem()); + if (buttonGroup) { + int key = 0; + QList buttons = buttonGroup->buttons(); + for (int i = 0; i < buttons.count(); ++i) { + if (keyCode(i) == HbInputButton::ButtonKeyCodeCharacter) { + HbInputButton *item = buttons.at(i); + + const HbKeyboardMap *keyboardMap = mKeymap->keyboard(q->keyboardType()); + if (keyboardMap && key < keyboardMap->keys.count()) { + item->setKeyCode(keyboardMap->keys.at(key)->keycode.unicode()); + } else { + item->setKeyCode(-1); + } + ++key; + } + } + } +} + +void HbInputVkbWidgetPrivate::updateButtons() +{ + Q_Q(HbInputVkbWidget); + + HbInputButtonGroup *buttonGroup = static_cast(q->contentItem()); + if (buttonGroup) { + int key = 0; + QList buttons = buttonGroup->buttons(); + for (int i = 0; i < buttons.count(); ++i) { + if (keyCode(i) == HbInputButton::ButtonKeyCodeCharacter) { + HbInputButton *item = buttons.at(i); + + const HbKeyboardMap *keyboardMap = mKeymap->keyboard(q->keyboardType()); + if (keyboardMap && key < keyboardMap->keys.count()) { + QString keydata = keyboardMap->keys.at(key)->characters(mModifiers); + item->setText(keydata.at(0), HbInputButton::ButtonTextIndexPrimary); + + QString mappedCharacters; + keydata.append(keyboardMap->keys.at(key)->characters(mModifiers | HbModifierFnPressed)); + for (int i = 0; i < keydata.length(); ++i) { + if (mOwner->focusObject() && + mOwner->focusObject()->characterAllowedInEditor(keydata.at(i))) { + mappedCharacters.append(keydata.at(i)); + } + } + item->setMappedCharacters(mappedCharacters); + } else { + item->setText("", HbInputButton::ButtonTextIndexPrimary); + item->setMappedCharacters(""); + } + ++key; + } + } + buttonGroup->setButtons(buttons); + } +} + +void HbInputVkbWidgetPrivate::settingListPosition(QPointF &position, HbPopup::Placement &placement) +{ + Q_Q(HbInputVkbWidget); + + HbInputButtonGroup *buttonGroup = static_cast(q->contentItem()); + if (buttonGroup) { + HbInputButton *item = buttonGroup->button(HbInputButton::ButtonKeyCodeSettings); + if (item) { + position.setX(buttonGroup->scenePos().x() + item->boundingRect().x() + item->boundingRect().width()); + position.setY(buttonGroup->scenePos().y() + item->boundingRect().y()); + placement = HbPopup::BottomRightCorner; + } + } +} + void HbInputVkbWidgetPrivate::setRockerPosition() { Q_Q(HbInputVkbWidget); @@ -256,10 +348,6 @@ (padArea.height() * 0.5) - (mRocker->size().height() * 0.5)); point.setY(point.y() + mCloseHandleHeight); - if (q->keypadLayout() && q->keypadLayout()->geometry().height()) { - point.setX(((padArea.width() * 0.5) - (mRocker->size().width() * 0.5))); - point.setY(((q->keypadLayout()->geometry().height() * 0.5) - (mRocker->size().height() * 0.5) + mCloseHandleHeight)); - } mRocker->setPos(point); } @@ -332,6 +420,7 @@ { Q_D(HbInputVkbWidget); d->q_ptr = this; + d->initLayout(); d->init(); setFocusPolicy(Qt::ClickFocus); @@ -354,6 +443,7 @@ { Q_D(HbInputVkbWidget); d->q_ptr = this; + d->initLayout(); d->init(); setFocusPolicy(Qt::ClickFocus); @@ -415,36 +505,6 @@ } /*! -\deprecated HbInputVkbWidget::mousePressEvent(QGraphicsSceneMouseEvent*) - is deprecated. -*/ -void HbInputVkbWidget::mousePressEvent(QGraphicsSceneMouseEvent* event) -{ - Q_UNUSED(event); -} - -/*! -\deprecated HbInputVkbWidget::mappedKeyPress(int) - is deprecated. -*/ -void HbInputVkbWidget::mappedKeyPress(int buttonid) -{ - Q_D(HbInputVkbWidget); - d->handleStandardButtonPress(buttonid); -} - -/*! -\deprecated HbInputVkbWidget::mappedKeyRelease(int) - is deprecated. -*/ -void HbInputVkbWidget::mappedKeyRelease(int buttonid) -{ - Q_D(HbInputVkbWidget); - d->handleStandardButtonRelease(buttonid); -} - - -/*! The paint method. Draws the widget. */ void HbInputVkbWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) @@ -459,10 +519,51 @@ d->mBackgroundDrawer->paint(painter, rect); } - rect.setLeft(rect.width()/2 - d->mCloseHandleHeight*3); - rect.setWidth(d->mCloseHandleHeight*6); + painter->save(); + painter->translate(rect.width() / 2 - d->mCloseHandleWidth / 2, 0); + rect.setWidth(d->mCloseHandleWidth); rect.setHeight(d->mCloseHandleHeight); d->mIconDrawer->paint(painter, rect); + painter->restore(); +} + +/*! +Sets the content item which will fill the content area of this widget. Content item is +a single input button group by default. +If null is given then the old content item is deleted and content area is cleared. +Takes ownership of the given item. + +\sa updateKeyCodes +\sa updateButtons +\sa setKeyboardDimmed +\sa probableKeypresses +*/ +void HbInputVkbWidget::setContentItem(QGraphicsLayoutItem *item) +{ + Q_D(HbInputVkbWidget); + if (d->mLayout->count() > 1) { + QGraphicsLayoutItem *oldItem = d->mLayout->itemAt(d->mLayout->count() - 1); + d->mLayout->removeItem(oldItem); + delete oldItem; + } + if (item) { + d->mLayout->addItem(item); + } +} + +/*! +Returns current content item or null if not set. +Ownership is not transferred. +*/ +QGraphicsLayoutItem *HbInputVkbWidget::contentItem() const +{ + Q_D(const HbInputVkbWidget); + + QGraphicsLayoutItem *item(0); + if (d->mLayout->count() > 1) { + item = d->mLayout->itemAt(d->mLayout->count() - 1); + } + return item; } /*! @@ -511,8 +612,20 @@ void HbInputVkbWidget::setMode(HbKeypadMode mode, HbModifiers modifiers) { Q_D(HbInputVkbWidget); + d->mMode = mode; d->mModifiers = modifiers; - d->mMode = mode; + + d->updateButtons(); + d->applyEditorConstraints(); + + HbInputButtonGroup *buttonGroup = static_cast(contentItem()); + if (buttonGroup && d->mOwner->focusObject()) { + buttonGroup->setCustomButtonActions(d->mOwner->focusObject()->editorInterface().actions()); + } + + if (d->mInputModeIndicator) { + d->mInputModeIndicator->updateIndicator(); + } } /*! @@ -524,6 +637,14 @@ Q_D(HbInputVkbWidget); if (keymap) { d->mKeymap = keymap; + d->updateKeyCodes(); + + HbInputState newState = d->mOwner->inputState(); + if (newState.textCase() == HbTextCaseUpper || newState.textCase() == HbTextCaseAutomatic) { + setMode(d->mMode, HbModifierShiftPressed); + } else { + setMode(d->mMode, HbModifierNone); + } } } @@ -536,32 +657,10 @@ d->mCurrentHost = host; - if (!d->mLayout) { - // get preferred size from vkbhost and set it to vkb. - // Keypad buttons will flicker while vkb opening (when we open keypad for first time ) - // if we dont set size to vkb before seting layout to vkb. - resize(preferredKeyboardSize()); - d->mLayout = new QGraphicsLinearLayout(Qt::Vertical); - d->mLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0); - d->mLayout->setSpacing(0.0); - - setLayout(d->mLayout); - - d->mCloseHandle = new QGraphicsWidget(); - d->mCloseHandle->setObjectName("vkbHandle"); - d->mCloseHandleHeight = (int)HbCloseHandleHeight; - d->mCloseHandle->setMinimumHeight(d->mCloseHandleHeight); - d->mCloseHandle->setMaximumHeight(d->mCloseHandleHeight); - - d->mLayout->addItem(d->mCloseHandle); - d->mLayout->addItem(keypadLayout()); - } - - if (d->mOwner && d->mOwner->focusObject()) { qreal vkbZValue = d->mOwner->focusObject()->findVkbZValue(); setZValue(vkbZValue); - d->mRocker->setZValue(vkbZValue+0.5); + d->mRocker->setZValue(vkbZValue + 0.5); } show(); @@ -587,21 +686,10 @@ */ void HbInputVkbWidget::setKeyboardDimmed(bool dimmed) { - Q_D(HbInputVkbWidget); - d->mKeyboardDimmed = dimmed; - if (keypadLayout()) { - int itemCount = keypadLayout()->count(); - for (int i=0; i(keypadLayout()->itemAt(i)); - button->setFade(dimmed); - } + HbInputButtonGroup *buttonGroup = static_cast(contentItem()); + if (buttonGroup) { + buttonGroup->setEnabled(!dimmed); } - if (!dimmed) { - // when we undimmed the keyboard, all the buttons will be enabled by default. - // we need to call applyEditorConstraints on the keyboard to apply constraints - d->applyEditorConstraints(); - } - } /*! @@ -630,10 +718,19 @@ d->mSettingList->setPredictionSelectionEnabled(false); } - d->mSettingsButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonLatched); - qreal x = d->mSettingsButton->scenePos().x() + d->mSettingsButton->rect().width(); - qreal y = d->mSettingsButton->scenePos().y(); - d->mSettingList->setPreferredPos(QPointF(x, y), HbPopup::BottomRightCorner); + HbInputButtonGroup *buttonGroup = static_cast(contentItem()); + if (buttonGroup) { + HbInputButton *item = buttonGroup->button(HbInputButton::ButtonKeyCodeSettings); + if (item) { + item->setState(HbInputButton::ButtonStateLatched); + buttonGroup->setButton(item, HbInputButton::ButtonKeyCodeSettings); + } + } + + QPointF position; + HbPopup::Placement placement; + d->settingListPosition(position, placement); + d->mSettingList->setPreferredPos(position, placement); d->mSettingList->updateSettingList(); d->mSettingList->open(this, SLOT(settingsClosed())); } @@ -645,7 +742,14 @@ { Q_D(HbInputVkbWidget); - d->mSettingsButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); + HbInputButtonGroup *buttonGroup = static_cast(contentItem()); + if (buttonGroup) { + HbInputButton *item = buttonGroup->button(HbInputButton::ButtonKeyCodeSettings); + if (item) { + item->setState(HbInputButton::ButtonStateReleased); + buttonGroup->setButton(item, HbInputButton::ButtonKeyCodeSettings); + } + } d->mSettingsListOpen = false; if ( d->mAnimateWhenDialogCloses ) { @@ -663,26 +767,6 @@ { Q_D(HbInputVkbWidget); d->mSettingList->close(); - d->mSettingsButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); -} - -/*! -\deprecated HbInputVkbWidget::togglePredictionStatus() - is deprecated. -*/ -void HbInputVkbWidget::togglePredictionStatus() -{ - closeSettingList(); - HbInputSettingProxy::instance()->togglePrediction(); - update(); -} - -/*! -\deprecated HbInputVkbWidget::executeSettingsDialog() - is deprecated. Use showSettingsView instead. -*/ -void HbInputVkbWidget::executeSettingsDialog() -{ } /*! @@ -741,16 +825,6 @@ } /*! -\deprecated HbInputVkbWidget::keypadLayout() - is deprecated. -*/ -QGraphicsLayout *HbInputVkbWidget::keypadLayout() -{ - Q_D(HbInputVkbWidget); - return d->mButtonLayout; -} - -/*! \reimp */ QWidget* HbInputVkbWidget::asWidget() @@ -820,163 +894,19 @@ d->mDrawbackground = backgroundEnabled; } + /*! Returns all possible keys those the user could have intended to press for the last registered touch along with their corresponding probability. -One issue of thecurrent API implementation is that it does not always -sum up the probabilities to 1.0, but sometimes it returns.999999899 etc. -Need to be careful about it! */ QList HbInputVkbWidget::probableKeypresses() { - Q_D(HbInputVkbWidget); - - QList probableKeys; - int totalItems = d->mButtonLayout->count(); - QRectF buttonRect = d->mMostRecentlyAccessedButton->geometry(); - //The overlaying rectangle is the test rectangle that is used for finding - //intersactions with other buttons. - QRectF overlayingRect(d->mMostRecentlyClickedLocation.x()-buttonRect.width()/2,d->mMostRecentlyClickedLocation.y()-buttonRect.height()/2, buttonRect.width(), buttonRect.height()); - QPainterPath path(overlayingRect.topLeft()); - path.addRect(overlayingRect); - for(int count=0; count < totalItems; count++) { - QGraphicsItem *item = d->mButtonLayout->itemAt(count)->graphicsItem(); - QPainterPath testPath = item->mapFromScene(path); - HbTouchKeypadButton *buttonItem = 0; - if(item->isWidget()){ - buttonItem = qobject_cast(static_cast(item)); - } - if(!buttonItem) { - continue; - } - - //Checkif the button collides with the path, if yes,it means that the colliding - //key also could have been clicked by the user. The probability of the button being - //clickedin that case willdependon the area of the intersaction rectangle. - if(buttonItem->collidesWithPath(testPath)) { - //Initiallylet the intersaction be same as the overlaying rectangle,later we will - //shrink the rectangle and find the actual intersected rectangle. - QRectF intersactionRect = overlayingRect; - //The overlaying rectangle is in scene coordinates, map it to the item coordinates. - intersactionRect.moveTopLeft(buttonItem->mapFromScene(overlayingRect.topLeft())); - int width = (int)intersactionRect.width(); - int height = (int)intersactionRect.height(); - qreal probability = 0.0; - //Shrink based on the size of the intersaction - if (intersactionRect.topLeft().x() > 0) { - width -= (int)intersactionRect.topLeft().x(); - } else { - width += (int)intersactionRect.topLeft().x(); - } - if (intersactionRect.topLeft().y() > 0) { - height -= (int)intersactionRect.topLeft().y(); - } else { - height += (int)intersactionRect.topLeft().y(); - } - //The probabilty of the key is based on the intersaction area. - probability = (height * width) / (intersactionRect.width()* intersactionRect.height()); - HbKeyPressProbability probablekey; - probablekey.keycode = d->keyCode(buttonItem); - probablekey.probability = probability; - - if(probablekey.keycode && (probablekey.probability>0)) { - probableKeys.append(probablekey); - } - } - } - //Normalize makes sure that all probability summation is 1.0. - d->normalizeProbabilities(probableKeys); - return probableKeys; -} - -/*! -\deprecated HbInputVkbWidget::setupToolCluster() - is deprecated. -*/ -void HbInputVkbWidget::setupToolCluster() -{ - Q_D(HbInputVkbWidget); - if(!d->mOwner || !d->mOwner->focusObject()) { - return; + QList probabilities; + HbInputButtonGroup *buttonGroup = static_cast(contentItem()); + if (buttonGroup) { + probabilities = buttonGroup->buttonProbabilities(); } - - // Create settings button if it does not exist - if (!d->mSettingsButton) { - d->mSettingsButton = new HbTouchKeypadButton(this, QString("")); - d->mInputModeIndicator = new HbInputModeIndicator(*d->mSettingsButton, this); - d->mSettingsButton->setButtonType(HbTouchKeypadButton::HbTouchButtonFunction); - d->mSettingsButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - - connect(d->mSettingsButton, SIGNAL(clicked()), this, SLOT(showSettingList())); - - connect(d->mSettingsButton, SIGNAL(pressed()), d->mPressMapper, SLOT(map())); - connect(d->mSettingsButton, SIGNAL(released()), d->mReleaseMapper, SLOT(map())); - d->mPressMapper->setMapping(d->mSettingsButton, -1); - d->mReleaseMapper->setMapping(d->mSettingsButton, -1); - } else { - d->mInputModeIndicator->updateIndicator(); - } - - // If there's a application specific button defined, create new button with the properties - // or update the existing one. Otherwise create an empty button or clean the properties of an existing one. - if (!d->mOwner->focusObject()->editorInterface().actions().isEmpty()) { - QList actions = d->mOwner->focusObject()->editorInterface().actions(); - if (d->mApplicationButtonAction != actions.first()) { - if (d->mApplicationButton) { - d->mApplicationButton->setText(actions.first()->text()); - d->mApplicationButton->setIcon(actions.first()->icon()); - d->mApplicationButton->disconnect(SIGNAL(clicked())); - d->mApplicationButton->disconnect(SIGNAL(pressed())); - d->mApplicationButton->disconnect(SIGNAL(released())); - - // disconnects old signal - disconnect(d->mApplicationButtonAction, SIGNAL(changed()), this, SLOT(refreshApplicationButton())); - disconnect(d->mApplicationButton, SIGNAL(clicked()), d->mApplicationButtonAction, SLOT(trigger())); - } else { - d->mApplicationButton = new HbTouchKeypadButton(this, actions.first()->icon(), actions.first()->text()); - } - d->mApplicationButtonAction = actions.first(); - // Connect to enabling signal and check its value - connect(actions.first(), SIGNAL(changed()), this, SLOT(refreshApplicationButton())); - - if (actions.first()->isEnabled()) { - // action is enabled - connect(d->mApplicationButton, SIGNAL(clicked()), d->mApplicationButtonAction, SLOT(trigger())); - - connect(d->mApplicationButton, SIGNAL(pressed()), d->mPressMapper, SLOT(map())); - connect(d->mApplicationButton, SIGNAL(released()), d->mReleaseMapper, SLOT(map())); - d->mPressMapper->setMapping(d->mApplicationButton, -1); - d->mReleaseMapper->setMapping(d->mApplicationButton, -1); - - d->mApplicationButton->setToolTip(actions.first()->toolTip()); - d->mApplicationButton->setButtonType(HbTouchKeypadButton::HbTouchButtonFunction); - d->mApplicationButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - } else { - // action is disabled - d->mApplicationButton->setButtonType(HbTouchKeypadButton::HbTouchButtonFnInActive); - d->mApplicationButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonPressed); - } - d->mApplicationButton->setToolTip(actions.first()->toolTip()); - } - } else { - if (d->mApplicationButton) { - if (d->mApplicationButtonAction) { - disconnect(d->mApplicationButtonAction, SIGNAL(changed()), this, SLOT(refreshApplicationButton())); - } - d->mApplicationButton->disconnect(SIGNAL(clicked())); - d->mApplicationButton->disconnect(SIGNAL(pressed())); - d->mApplicationButton->disconnect(SIGNAL(released())); - d->mApplicationButton->setText(QString()); - d->mApplicationButton->setIcon(HbIcon()); - d->mApplicationButton->setToolTip(QString()); - d->mApplicationButtonAction = 0; - } else { - d->mApplicationButton = new HbTouchKeypadButton(this, QString()); - d->mApplicationButton->setButtonType(HbTouchKeypadButton::HbTouchButtonFunction); - d->mApplicationButton->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - } - d->mApplicationButtonAction = 0; - } + return probabilities; } /*! @@ -1034,13 +964,14 @@ d->mSmileyPicker->setGeometry(QRectF(0, pos().y(), geometry().width(), geometry().height())); d->mSmileyPicker->show(); + + HbInputButtonGroup *buttonGroup = static_cast(contentItem()); + if (buttonGroup) { + buttonGroup->cancelButtonPress(); + } } } -/*! -\deprecated HbInputVkbWidget::flickDirection() - is deprecated. -*/ HbInputVkbWidget::HbFlickDirection HbInputVkbWidget::flickDirection() { Q_D(HbInputVkbWidget); @@ -1048,27 +979,68 @@ } /*! -\deprecated HbInputVkbWidget::refreshApplicationButton() - is deprecated. +Sends key event to owning input method. +*/ +void HbInputVkbWidget::sendKeyPressEvent(const QKeyEvent &event) +{ + Q_D(HbInputVkbWidget); + + if (d->mOwner) { + d->mOwner->filterEvent(&event); + } +} + +/*! +Sends key event to owning input method. */ -void HbInputVkbWidget::refreshApplicationButton() +void HbInputVkbWidget::sendKeyDoublePressEvent(const QKeyEvent &event) +{ + Q_D(HbInputVkbWidget); + + if (d->mOwner) { + d->mOwner->filterEvent(&event); + } +} + +/*! +Sends key event to owning input method. +*/ +void HbInputVkbWidget::sendKeyReleaseEvent(const QKeyEvent &event) { Q_D(HbInputVkbWidget); - d->mApplicationButton->setText(d->mApplicationButtonAction->text()); - d->mApplicationButton->setIcon(d->mApplicationButtonAction->icon()); + if (event.key() == HbInputButton::ButtonKeyCodeSettings) { + showSettingList(); + } else { + if (d->mOwner) { + d->mOwner->filterEvent(&event); + } + } +} + +/*! +Sends key event to owning input method. +*/ +void HbInputVkbWidget::sendLongPressEvent(const QKeyEvent &event) +{ + Q_D(HbInputVkbWidget); - if (d->mApplicationButton->getButtonType() == HbTouchKeypadButton::HbTouchButtonFnInActive - && d->mApplicationButtonAction->isEnabled()) { - // action has been enabled - connect(d->mApplicationButton, SIGNAL(clicked()), d->mApplicationButtonAction, SLOT(trigger())); - d->mApplicationButton->setToolTip(d->mApplicationButtonAction->toolTip()); - d->mApplicationButton->setFade(false); - } else if (d->mApplicationButton->getButtonType() == HbTouchKeypadButton::HbTouchButtonFunction - && !d->mApplicationButtonAction->isEnabled()) { - // action has been disabled - d->mApplicationButton->disconnect(SIGNAL(clicked())); - d->mApplicationButton->setFade(true); + if (d->mOwner) { + d->mOwner->filterEvent(&event); + } +} + +/*! +Sends key event to owning input method. +Releae event is ignored. +*/ +void HbInputVkbWidget::sendKeyChangeEvent(const QKeyEvent &releaseEvent, const QKeyEvent &pressEvent) +{ + Q_D(HbInputVkbWidget); + Q_UNUSED(releaseEvent); + + if (d->mOwner) { + d->mOwner->filterEvent(&pressEvent); } } @@ -1077,7 +1049,7 @@ Q_D(HbInputVkbWidget); int direction = 1; - if (flickDirection() == HbFlickDirectionLeft) { + if (d->mFlickDirection == HbFlickDirectionLeft) { direction = -1; } @@ -1167,13 +1139,13 @@ if (gesture->state() == Qt::GestureFinished) { HbWidgetFeedback::triggered(this, Hb::InstantFlicked); // vertical swipes - if (gesture->sceneSwipeAngle() > 250 && gesture->sceneSwipeAngle() < 290 && - gesture->sceneVerticalDirection() == QSwipeGesture::Down) { + if (gesture->sceneVerticalDirection() == QSwipeGesture::Down) { d->mFlickDirection = HbFlickDirectionDown; + emit flickEvent(d->mFlickDirection); emit keypadCloseEventDetected(HbVkbCloseMethodCloseGesture); - } else if (gesture->sceneSwipeAngle() > 70 && gesture->sceneSwipeAngle() < 110 && - gesture->sceneVerticalDirection() == QSwipeGesture::Up) { + } else if (gesture->sceneVerticalDirection() == QSwipeGesture::Up) { d->mFlickDirection = HbFlickDirectionUp; + emit flickEvent(d->mFlickDirection); d->mCurrentHost->openKeypad(d->mCurrentHost->activeKeypad(), d->mOwner); } else { d->mFlickDirection = (HbInputVkbWidget::HbFlickDirection)gesture->sceneHorizontalDirection();