35 |
35 |
36 #include <hbmainwindow.h> |
36 #include <hbmainwindow.h> |
37 #include <hbaction.h> |
37 #include <hbaction.h> |
38 #include <hbevent.h> |
38 #include <hbevent.h> |
39 #include <hbcolorscheme.h> |
39 #include <hbcolorscheme.h> |
40 #include <hbdialog.h> |
40 #include <hbinputpopupbase.h> |
41 #include <hbframeitem.h> |
41 #include <hbframeitem.h> |
42 #include <hbwidgetfeedback.h> |
42 #include <hbwidgetfeedback.h> |
43 #include <hbdeviceprofile.h> |
43 #include <hbdeviceprofile.h> |
44 #include <hbinputregioncollector_p.h> |
44 #include <hbinputregioncollector_p.h> |
45 #include <hbinputsettingproxy.h> |
45 #include <hbinputsettingproxy.h> |
46 #include "hbframedrawerpool_p.h" |
46 #include "hbframedrawerpool_p.h" |
47 |
47 |
48 #include "hbinputbutton.h" |
48 #include "hbinputbutton.h" |
|
49 |
|
50 /*! |
|
51 @stable |
|
52 @hbinput |
|
53 \class HbInputButtonGroup |
|
54 \brief A widget presenting group of buttons for virtual keyboards. |
|
55 |
|
56 HbInputButtonGroup is a widget displaying a mat of buttons, performance-optimized |
|
57 as a single widget instead of multiple separate button widgets. |
|
58 |
|
59 \sa HbInputButton |
|
60 */ |
49 |
61 |
50 /// @cond |
62 /// @cond |
51 |
63 |
52 const QString HbNormalBackground("qtg_fr_input_btn_keypad_normal"); |
64 const QString HbNormalBackground("qtg_fr_input_btn_keypad_normal"); |
53 const QString HbNormalPressedBackground("qtg_fr_input_btn_keypad_pressed"); |
65 const QString HbNormalPressedBackground("qtg_fr_input_btn_keypad_pressed"); |
96 const qreal HbTouchAreaSizeInUnits = 8; |
108 const qreal HbTouchAreaSizeInUnits = 8; |
97 |
109 |
98 HbInputButtonGroupPrivate::HbInputButtonGroupPrivate() |
110 HbInputButtonGroupPrivate::HbInputButtonGroupPrivate() |
99 : mUnitValue(0), mGridSize(1, 1), mButtonBorderSize(1.0), mEnabled(true), |
111 : mUnitValue(0), mGridSize(1, 1), mButtonBorderSize(1.0), mEnabled(true), |
100 mButtonPreviewEnabled(false), mCharacterSelectionPreviewEnabled(false), |
112 mButtonPreviewEnabled(false), mCharacterSelectionPreviewEnabled(false), |
101 mMultiTouchEnabled(true), mCharacterSelectionPreview(0), mBackground(0) |
113 mMultiTouchEnabled(true), mCharacterSelectionPreview(0), mBackground(0), |
|
114 mHasMouseGrab(false) |
102 { |
115 { |
103 for (int i = 0; i < HbTextLayoutCount; ++i) { |
116 for (int i = 0; i < HbTextLayoutCount; ++i) { |
104 mTextLayouts.append(0); |
117 mTextLayouts.append(0); |
105 } |
118 } |
106 |
119 |
419 mProbabilities.clear(); |
432 mProbabilities.clear(); |
420 q->cancelButtonPress(); |
433 q->cancelButtonPress(); |
421 |
434 |
422 // Create and initialize character preview |
435 // Create and initialize character preview |
423 if (!mCharacterSelectionPreview) { |
436 if (!mCharacterSelectionPreview) { |
424 mCharacterSelectionPreview = new HbDialog(); |
437 mCharacterSelectionPreview = new HbInputPopupBase(); |
425 HbInputRegionCollector::instance()->attach(mCharacterSelectionPreview); |
438 HbInputRegionCollector::instance()->attach(mCharacterSelectionPreview); |
426 mCharacterSelectionPreview->setModal(true); |
439 mCharacterSelectionPreview->setModal(true); |
427 mCharacterSelectionPreview->setBackgroundFaded(false); |
440 mCharacterSelectionPreview->setBackgroundFaded(false); |
428 mCharacterSelectionPreview->setTimeout(HbPopup::NoTimeout); |
441 mCharacterSelectionPreview->setTimeout(HbPopup::NoTimeout); |
429 mCharacterSelectionPreview->setDismissPolicy(HbPopup::TapAnywhere); |
442 mCharacterSelectionPreview->setDismissPolicy(HbPopup::TapAnywhere); |
430 mCharacterSelectionPreview->setFlag(QGraphicsItem::ItemIsPanel, true); |
|
431 mCharacterSelectionPreview->setActive(false); |
|
432 qreal margin = HbPreviewMarginInUnits * mUnitValue * 0.5; |
443 qreal margin = HbPreviewMarginInUnits * mUnitValue * 0.5; |
433 mCharacterSelectionPreview->setContentsMargins(margin, 0, margin, 0); |
444 mCharacterSelectionPreview->setContentsMargins(margin, 0, margin, 0); |
434 } |
445 } |
435 |
446 |
436 HbInputButtonGroup *group = new HbInputButtonGroup(QSize(item->mappedCharacters().count(), 1)); |
447 HbInputButtonGroup *group = new HbInputButtonGroup(QSize(item->mappedCharacters().count(), 1)); |
1821 d->moveEvent(mouseEvent->lastPos(), mouseEvent->pos()); |
1832 d->moveEvent(mouseEvent->lastPos(), mouseEvent->pos()); |
1822 d->releaseEvent(mouseEvent->pos()); |
1833 d->releaseEvent(mouseEvent->pos()); |
1823 break; |
1834 break; |
1824 } |
1835 } |
1825 |
1836 |
|
1837 case QEvent::GrabMouse: |
|
1838 d->mHasMouseGrab = true; |
|
1839 break; |
|
1840 |
|
1841 case QEvent::UngrabMouse: |
|
1842 d->mHasMouseGrab = false; |
|
1843 break; |
|
1844 |
1826 default: |
1845 default: |
1827 return HbWidget::event(event); |
1846 return HbWidget::event(event); |
1828 } |
1847 } |
1829 return true; |
1848 return true; |
1830 } |
1849 } |
1905 */ |
1928 */ |
1906 void HbInputButtonGroup::hideEvent(QHideEvent *event) |
1929 void HbInputButtonGroup::hideEvent(QHideEvent *event) |
1907 { |
1930 { |
1908 cancelButtonPress(); |
1931 cancelButtonPress(); |
1909 |
1932 |
|
1933 if (qApp) { |
|
1934 qApp->removeEventFilter(this); |
|
1935 } |
|
1936 |
1910 HbWidget::hideEvent(event); |
1937 HbWidget::hideEvent(event); |
|
1938 } |
|
1939 |
|
1940 /*! |
|
1941 Releases all pressed buttons when deactivated. |
|
1942 */ |
|
1943 bool HbInputButtonGroup::eventFilter(QObject *obj, QEvent *event) |
|
1944 { |
|
1945 Q_UNUSED(obj); |
|
1946 |
|
1947 if (event->type() == QEvent::ApplicationDeactivate) { |
|
1948 cancelButtonPress(); |
|
1949 } |
|
1950 return false; |
1911 } |
1951 } |
1912 |
1952 |
1913 /*! |
1953 /*! |
1914 Emits buttonPressed signal. |
1954 Emits buttonPressed signal. |
1915 */ |
1955 */ |
1961 */ |
2001 */ |
1962 void HbInputButtonGroup::cancelButtonPress() |
2002 void HbInputButtonGroup::cancelButtonPress() |
1963 { |
2003 { |
1964 Q_D(HbInputButtonGroup); |
2004 Q_D(HbInputButtonGroup); |
1965 |
2005 |
1966 ungrabMouse(); |
2006 if (d->mHasMouseGrab) { |
|
2007 ungrabMouse(); |
|
2008 } |
1967 |
2009 |
1968 d->mActiveButtons.clear(); |
2010 d->mActiveButtons.clear(); |
1969 |
2011 |
1970 // Cancel long press timers |
2012 // Cancel long press timers |
1971 d->mLongPressButtons.clear(); |
2013 d->mLongPressButtons.clear(); |