src/hbinput/inputwidgets/hbinputbuttongroup.cpp
changeset 30 80e4d18b72f5
parent 23 e6ad4ef83b23
equal deleted inserted replaced
28:b7da29130b0e 30:80e4d18b72f5
    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 }
  1893 {
  1912 {
  1894     Q_D(HbInputButtonGroup);
  1913     Q_D(HbInputButtonGroup);
  1895 
  1914 
  1896     setAcceptTouchEvents(d->mMultiTouchEnabled);
  1915     setAcceptTouchEvents(d->mMultiTouchEnabled);
  1897 
  1916 
       
  1917     if (qApp) {
       
  1918         qApp->installEventFilter(this);
       
  1919     }
       
  1920 
  1898     HbWidget::showEvent(event);
  1921     HbWidget::showEvent(event);
  1899 }
  1922 }
  1900 
  1923 
  1901 /*!
  1924 /*!
  1902 \reimp
  1925 \reimp
  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();