diff -r 11d3954df52a -r 627c4a0fd0e7 src/hbplugins/inputmethods/touchinput/hbinputtouchkeypadbutton.cpp --- a/src/hbplugins/inputmethods/touchinput/hbinputtouchkeypadbutton.cpp Thu May 27 13:10:59 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,454 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (developer.feedback@nokia.com) -** -** This file is part of the HbPlugins module of the UI Extensions for Mobile. -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at developer.feedback@nokia.com. -** -****************************************************************************/ -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#ifdef HB_EFFECTS -#include -#endif -#include - -#include "hbinputtouchkeypadbutton.h" -#include "hbinputvkbwidget.h" -#include "hbinputvkbwidget_p.h" - -/// @cond - -/*! -@proto -@hbinput -\class HbTouchKeypadButton -\brief A button widget to be used in touch keypads. - -Expands HbPushButton functionality to suit touch keypad purposes. It handles virtual keyboard closing gesture -that is initiated from within the button area and knows how to act as a sticky input button. Sticky buttons propagate -mouse press state to neighboring button when a drag event crosses widget boundary. This is needed for example in virtual qwerty where -user must be able to slide finger across the keyboard. -*/ - -const QString HbNormalBackground("qtg_fr_input_btn_keypad_normal"); -const QString HbNormalPressedBackground("qtg_fr_input_btn_keypad_pressed"); -const QString HbNormalInActiveBackground("qtg_fr_input_btn_keypad_disabled"); -const QString HbNormalLatchedBackground("qtg_fr_input_btn_keypad_latched"); - -const QString HbFunctionBackground("qtg_fr_input_btn_function_normal"); -const QString HbFunctionPressedBackground("qtg_fr_input_btn_function_pressed"); -const QString HbFuncInActiveBackground("qtg_fr_input_btn_function_disabled"); -const QString HbFunctionLatchedBackground("qtg_fr_input_btn_function_latched"); - -inline HbTouchKeypadButton* hbtouchkeypadbutton_cast(QGraphicsItem *item) -{ - if( item->isWidget() && qobject_cast(static_cast(item)) ) { - return static_cast(item); - } - return 0; -} - -class HbTouchKeypadButtonPrivate -{ -public: - HbTouchKeypadButtonPrivate(HbInputVkbWidget* owner) - : mOwner(owner), - mFaded(false), - mButtonType(HbTouchKeypadButton::HbTouchButtonNormal), - mFrameIcon(0), - mStickyKey(false), - mLatch(false) - {} - -public: - HbInputVkbWidget* mOwner; - bool mFaded; - HbTouchKeypadButton::HbTouchButtonType mButtonType; - HbFrameItem *mFrameIcon; - bool mStickyKey; - bool mLatch; - int mKeyCode; -}; - -HbTouchKeypadButton::HbTouchKeypadButton(HbInputVkbWidget *owner, - const QString &text, - QGraphicsWidget *parent) - : HbPushButton(text, parent), d_ptr(new HbTouchKeypadButtonPrivate(owner)) -{ - #ifdef HB_EFFECTS - HbEffect::disable(this); - #endif - - this->setToolTip(QString()); - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - setProperty("buttonType", "normal"); -} - -HbTouchKeypadButton::HbTouchKeypadButton(HbInputVkbWidget *owner, - const HbIcon &icon, - const QString &text, - QGraphicsItem *parent) - : HbPushButton(icon, text, parent), d_ptr(new HbTouchKeypadButtonPrivate(owner)) -{ - #ifdef HB_EFFECTS - HbEffect::disable(this); - #endif - - this->setToolTip(QString()); - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - setProperty("buttonType", "normal"); -} - -HbTouchKeypadButton::~HbTouchKeypadButton() -{ - delete d_ptr; -} - -void HbTouchKeypadButton::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - Q_UNUSED(event) -} - -void HbTouchKeypadButton::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - Q_UNUSED(event) -} - -void HbTouchKeypadButton::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ - Q_UNUSED(event) -} - -void HbTouchKeypadButton::gestureEvent(QGestureEvent *event) -{ - Q_D(HbTouchKeypadButton); - if (HbTapGesture *tap = qobject_cast(event->gesture(Qt::TapGesture))) { - switch(tap->state()) { - case Qt::GestureStarted: - if (d->mOwner && d->mOwner->d_func()) { - d->mOwner->d_func()->updateMouseHitItem(this, tap->scenePosition()); - } - if (!(d->mButtonType == HbTouchButtonNormalInActive && text().isEmpty())) { - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonPressed); - } - break; - case Qt::GestureUpdated: - // Handle tap-and-hold? - break; - case Qt::GestureFinished: - if (!(d->mButtonType == HbTouchButtonNormalInActive && text().isEmpty())) { - if (d->mLatch) { - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonLatched); - } else { - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - } - break; - case Qt::GestureCanceled: - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - break; - default: - break; - } - } - } - HbPushButton::gestureEvent(event); -} - -void HbTouchKeypadButton::resizeEvent(QGraphicsSceneResizeEvent *event) -{ - Q_D(HbTouchKeypadButton); - - HbPushButton::resizeEvent(event); - - // setting the draw rect for the frameitem in this button - // get the new size, and use the new size to the frameitem - if (d->mFrameIcon ) { - QSizeF mySize = event->newSize(); - QRectF rect = QRectF(mySize.width()*0.1, mySize.height()*0.3, mySize.width()*0.8, mySize.height()); - d->mFrameIcon->setGeometry( rect ); - } -} - -bool HbTouchKeypadButton::isFaded() -{ - Q_D(HbTouchKeypadButton); - return d->mFaded; -} - -void HbTouchKeypadButton::setFade(bool fade) -{ - Q_D(HbTouchKeypadButton); - if (d->mFaded == fade) { - return; - } - - d->mFaded = fade; - - // now set button's text, type and background attributes based on d->mFaded value - if(d->mFaded) { - if (d->mFrameIcon) { - d->mFrameIcon->setOpacity(0.2); - } - if(HbTouchButtonNormal == getButtonType() ){ - setButtonType(HbTouchKeypadButton::HbTouchButtonNormalInActive); - } else if(HbTouchButtonFunction == getButtonType()) { - setButtonType(HbTouchKeypadButton::HbTouchButtonFnInActive); - } - } else { - if (d->mFrameIcon) { - d->mFrameIcon->setOpacity(1.0); - } - if(HbTouchButtonNormalInActive == getButtonType()){ - setButtonType(HbTouchKeypadButton::HbTouchButtonNormal); - } else if(HbTouchButtonFnInActive == getButtonType()) { - setButtonType(HbTouchKeypadButton::HbTouchButtonFunction); - } - } - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); -} - -void HbTouchKeypadButton::setButtonType(HbTouchButtonType buttonType) -{ - Q_D(HbTouchKeypadButton); - d->mButtonType = buttonType; - if (buttonType == HbTouchButtonNormal || - buttonType == HbTouchButtonNormalInActive) { - setProperty("buttonType", "normal"); - } else if (buttonType == HbTouchButtonFunction || - buttonType == HbTouchButtonFnInActive){ - setProperty("buttonType", "function"); - } -} - -int HbTouchKeypadButton::getButtonType() -{ - Q_D(HbTouchKeypadButton); - return d->mButtonType; -} - -HbFrameItem * HbTouchKeypadButton::getFrameIcon() -{ - Q_D(HbTouchKeypadButton); - return d->mFrameIcon; -} - -void HbTouchKeypadButton::setBackgroundAttributes(HbTouchButtonState buttonState) -{ - Q_D(HbTouchKeypadButton); - - if(d->mButtonType == HbTouchButtonNormal) { - if(buttonState == HbTouchKeypadButton::HbTouchButtonPressed) { - setBackground(HbNormalPressedBackground); - } else if (buttonState == HbTouchKeypadButton::HbTouchButtonLatched) { - setBackground(HbNormalLatchedBackground); - } else { - setBackground(HbNormalBackground); - } - } else if(d->mButtonType == HbTouchButtonFunction) { - if(buttonState == HbTouchKeypadButton::HbTouchButtonPressed) { - setBackground(HbFunctionPressedBackground); - } else if (buttonState == HbTouchKeypadButton::HbTouchButtonLatched) { - setBackground(HbFunctionLatchedBackground); - } else{ - setBackground(HbFunctionBackground); - } - } else if(d->mButtonType == HbTouchButtonFnInActive){ - setBackground(HbFuncInActiveBackground); - } else if(d->mButtonType == HbTouchButtonNormalInActive) { - setBackground(HbNormalInActiveBackground); - } else { - setBackground(HbFuncInActiveBackground); - } -} - -void HbTouchKeypadButton::setBackground(const QString& backgroundFrameFilename) -{ - HbFrameDrawer* drawer = frameBackground(); - if (!drawer || drawer->frameGraphicsName() != backgroundFrameFilename) { - setFrameBackground(HbFrameDrawerPool::get(backgroundFrameFilename, HbFrameDrawer::NinePieces, size())); - update(); - } -} - -void HbTouchKeypadButton::setFrameIcon(const QString& frameIconFileName ) -{ - Q_D(HbTouchKeypadButton); - - if (!d->mFrameIcon ) { - d->mFrameIcon = new HbFrameItem(this); - HbFrameDrawer *framedrawer = new HbFrameDrawer(frameIconFileName, HbFrameDrawer::ThreePiecesHorizontal); - d->mFrameIcon->setFrameDrawer(framedrawer); - } else { - d->mFrameIcon->frameDrawer().setFrameGraphicsName(frameIconFileName); - } -} - -int HbTouchKeypadButton::type() const -{ - Q_D(const HbTouchKeypadButton); - - if (d->mButtonType == HbTouchButtonFunction || - d->mButtonType == HbTouchButtonFnInActive) { - return Hb::ItemType_InputFunctionButton; - } else if (d->mButtonType == HbTouchButtonNormal || - d->mButtonType == HbTouchButtonNormalInActive) { - return Hb::ItemType_InputCharacterButton; - } else { - return Hb::ItemType_InputCharacterButton; - } -} - -void HbTouchKeypadButton::setAsStickyButton(bool isSticky) -{ - Q_D(HbTouchKeypadButton); - d->mStickyKey = isSticky; -} - -bool HbTouchKeypadButton::isStickyButton() const -{ - Q_D(const HbTouchKeypadButton); - return d->mStickyKey; -} - -void HbTouchKeypadButton::setLatch(bool enable) -{ - Q_D(HbTouchKeypadButton); - - d->mLatch = enable; - if (d->mLatch) { - setProperty("state", "latched"); - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonLatched); - } else { - setProperty("state", "normal"); - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - } -} - -bool HbTouchKeypadButton::isLatched() const -{ - Q_D(const HbTouchKeypadButton); - return d->mLatch; -} - -int HbTouchKeypadButton::keyCode() const -{ - Q_D(const HbTouchKeypadButton); - return d->mKeyCode; -} - -void HbTouchKeypadButton::setKeyCode(int code) -{ - Q_D(HbTouchKeypadButton); - d->mKeyCode = code; -} - -void HbTouchKeypadButton::setText(const QString &text) -{ - // Workaround for pushbutton feature - if (!text.isNull()) { - HbPushButton::setText(text); - } else { - HbPushButton::setText(QString("")); - } -} - -void HbTouchKeypadButton::setAdditionalText(const QString &additionalText) -{ - if (!additionalText.isNull()) { - HbPushButton::setAdditionalText(additionalText); - } else { - HbPushButton::setAdditionalText(QString("")); - } -} - -void HbTouchKeypadButton::changeEvent( QEvent *event ) -{ - if ( event->type() == HbEvent::ThemeChanged ) { - updatePrimitives(); - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - } - HbPushButton::changeEvent(event); -} - -void HbTouchKeypadButton::updatePrimitives() -{ - Q_D(HbTouchKeypadButton); - HbPushButton::updatePrimitives(); - - if (d->mFrameIcon && d->mFaded) { - d->mFrameIcon->setOpacity(0.2); - } -} - -QSizeF HbTouchKeypadButton::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const -{ - QSizeF sh; - switch (which) { - case Qt::MinimumSize: - sh = QSizeF(50, 50); - break; - case Qt::PreferredSize: - sh = HbAbstractButton::sizeHint(which, constraint); - break; - case Qt::MaximumSize: - sh = QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); - break; - default: - sh = HbAbstractButton::sizeHint(which, constraint); - break; - } - return sh; -} - -QVariant HbTouchKeypadButton::itemChange( GraphicsItemChange change, const QVariant & value ) -{ - // If the button is being hidden and it has the press background, - // need to set it to released background. This fix is needed for the error: - // In ITU-T long press * key and then return back to alpha mode, the * key - // has button pressed background. - if (QGraphicsItem::ItemVisibleHasChanged == change && !value.toBool()) { - if (isDown()) { - setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased); - } - } - return HbPushButton::itemChange(change, value); -} - -void HbTouchKeypadButton::setInitialSize(const QSizeF& initialSize) -{ - setPreferredSize(initialSize); - QGraphicsItem* backgroundPrimitive = primitive(HbStyle::P_PushButton_background); - if (backgroundPrimitive) { - HbIconItem *iconItem = static_cast(backgroundPrimitive); - iconItem->setSize(initialSize); - } -} - -/// @endcond - -// End of file