diff -r 6b911d05207e -r bc5a64e5bc3c phoneapp/phoneuiview2/src/phoneuiqtview.cpp --- a/phoneapp/phoneuiview2/src/phoneuiqtview.cpp Wed Jun 23 18:12:20 2010 +0300 +++ b/phoneapp/phoneuiview2/src/phoneuiqtview.cpp Tue Jul 06 14:15:47 2010 +0300 @@ -15,7 +15,7 @@ * */ #include -#include +#include #include #include #include @@ -36,12 +36,19 @@ PhoneUIQtView::PhoneUIQtView (HbMainWindow &window, QGraphicsItem *parent) : HbView (parent), m_window(window), + m_bubbleManager(0), + m_signalMapper(0), m_volumeSlider (0), m_expandSignalMapper(0), m_participantListSignalMapper(0), m_volumeCommandId(0), + m_backAction(0), + m_dialpad(0), + m_menuSignalMapper(0), m_keyCapture(0), - m_networkInfo(0) + m_networkInfo(0), + m_dialpadKeyHandler(0), + m_restrictedMode(false) { // Set network name m_networkInfo = new QSystemNetworkInfo(this); @@ -49,24 +56,19 @@ if(networkName.isEmpty()) { networkName = m_networkInfo->networkName(QSystemNetworkInfo::GsmMode); } - connect(m_networkInfo, SIGNAL (networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)), this, SLOT(networkNameChanged(QSystemNetworkInfo::NetworkMode, QString))); + connect(m_networkInfo, SIGNAL (networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)), + this, SLOT(networkNameChanged(QSystemNetworkInfo::NetworkMode, QString))); setTitle(networkName); // Capturing long press of end key m_keyCapture = new XqKeyCapture(); - m_keyCapture->captureLongKey(Qt::Key_No); - m_keyCapture->captureKey(Qt::Key_No); // Dialpad m_dialpad = new Dialpad(m_window); m_dialpad->setCallButtonEnabled(false); m_dialpad->setTapOutsideDismiss(true); - connect(&m_dialpad->editor(),SIGNAL(contentsChanged()), - SLOT(onEditorContentChanged())); connect(m_dialpad,SIGNAL(aboutToClose()),this, SLOT(dialpadClosed())); - // enable key sequence handling during a call - new DialpadKeyHandler(m_dialpad, DialpadKeyHandler::KeySequence, this); // Call handling widget m_bubbleManager = new BubbleManager (this); @@ -91,6 +93,9 @@ setNavigationAction(m_backAction); createToolBarActions(); + + // Set restricted mode off, normal state + setRestrictedMode(false); } PhoneUIQtView::~PhoneUIQtView () @@ -405,6 +410,23 @@ return *menu(); } +void PhoneUIQtView::captureKey(Qt::Key key, bool capture) +{ + if (capture) { + if (!m_keyCaptures.contains(key)) { + m_keyCapture->captureLongKey(key); + m_keyCapture->captureKey(key); + m_keyCaptures.append(key); + } + } else { + if (m_keyCaptures.contains(key)) { + m_keyCapture->cancelCaptureKey(key); + m_keyCapture->cancelCaptureLongKey(key); + m_keyCaptures.removeOne(key); + } + } +} + void PhoneUIQtView::handleOrientationChange(Qt::Orientation orientation) { if (orientation==Qt::Horizontal) { @@ -436,20 +458,30 @@ { Q_UNUSED(watched); PHONE_DEBUG2("PhoneUIQtView::eventFilter event type:", event->type()); + + // Allow send key only when there is callbutton enabled or no text in input field + bool sendKeyAllowed = m_dialpad->isCallButtonEnabled() || + (m_dialpad->editor().text().length() == 0); + if(event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); PHONE_DEBUG2("PhoneUIQtView::eventFilter pressed key:", keyEvent->key()); PHONE_DEBUG2("PhoneUIQtView::eventFilter isAutoRepeat:", keyEvent->isAutoRepeat()); - emit keyPressed(keyEvent); - keyEvent->accept(); + if ( (keyEvent->key() != Qt::Key_Yes && keyEvent->key() != Qt::Key_Enter) || + sendKeyAllowed) { + emit keyPressed(keyEvent); + keyEvent->accept(); + } return false; } else if(event->type() == QEvent::KeyRelease) { QKeyEvent *keyEvent = static_cast(event); PHONE_DEBUG2("PhoneUIQtView::eventFilter released key:", keyEvent->key()); - emit keyReleased(keyEvent); - keyEvent->accept(); - + if ( (keyEvent->key() != Qt::Key_Yes && keyEvent->key() != Qt::Key_Enter) || + sendKeyAllowed) { + emit keyReleased(keyEvent); + keyEvent->accept(); + } return false; } else if (event->type() == QEvent::WindowActivate){ PHONE_DEBUG("PhoneUIQtView::eventFilter WindowActivate"); @@ -510,7 +542,34 @@ void PhoneUIQtView::setBackButtonVisible(bool visible) { - m_backAction->setEnabled(visible); + if (!m_restrictedMode) { + m_backAction->setEnabled(visible); + } +} + +void PhoneUIQtView::setRestrictedMode(bool restrictedMode) +{ + m_restrictedMode = restrictedMode; + m_backAction->setEnabled(!restrictedMode); + m_dialpad->setCallButtonEnabled(false); + m_dialpad->editor().setText(""); // Clead dialpad + if (m_restrictedMode) { + delete m_dialpadKeyHandler; + m_dialpadKeyHandler = 0; + m_dialpadKeyHandler = new DialpadKeyHandler( + m_dialpad, DialpadKeyHandler::EmergencyCall, this); + disconnect(&m_dialpad->editor(),SIGNAL(contentsChanged()), + this, SLOT(onEditorContentChanged())); // Let emergency handler do updating + } else { + delete m_dialpadKeyHandler; + m_dialpadKeyHandler = 0; + // enable key sequence handling during a call + m_dialpadKeyHandler = new DialpadKeyHandler( + m_dialpad, DialpadKeyHandler::KeySequence, this); + connect(&m_dialpad->editor(),SIGNAL(contentsChanged()), + SLOT(onEditorContentChanged())); // Update our self + } + } void PhoneUIQtView::networkNameChanged(QSystemNetworkInfo::NetworkMode mode, const QString &netName) @@ -520,3 +579,4 @@ setTitle(netName); } } +