diff -r bab96b7ed1a4 -r f39ed5e045e0 phoneapp/phoneuiview2/src/phoneuiqtview.cpp --- a/phoneapp/phoneuiview2/src/phoneuiqtview.cpp Tue Jun 15 14:14:38 2010 +0100 +++ b/phoneapp/phoneuiview2/src/phoneuiqtview.cpp Thu Jul 22 16:33:21 2010 +0100 @@ -27,6 +27,7 @@ #include #include #include +#include #include "phoneuiqtview.h" #include "phoneaction.h" @@ -35,33 +36,40 @@ 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); - QString networkName = m_networkInfo->networkName(QSystemNetworkInfo::GsmMode); - connect(m_networkInfo, SIGNAL (networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)), this, SLOT(networkNameChanged(QSystemNetworkInfo::NetworkMode, QString))); + QString networkName = m_networkInfo->networkName(QSystemNetworkInfo::WcdmaMode); + if(networkName.isEmpty()) { + networkName = m_networkInfo->networkName(QSystemNetworkInfo::GsmMode); + } + 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())); - + // Call handling widget m_bubbleManager = new BubbleManager (this); setWidget(m_bubbleManager); @@ -85,14 +93,14 @@ setNavigationAction(m_backAction); createToolBarActions(); + + // Set restricted mode off, normal state + setRestrictedMode(false); } PhoneUIQtView::~PhoneUIQtView () { - - foreach (HbAction *action, m_toolbarActions ) { - delete action; - } + qDeleteAll(m_toolbarActions); m_window.removeEventFilter(this); delete m_volumeSlider; delete m_dialpad; @@ -165,9 +173,8 @@ foreach (HbAction *action, m_participantListActions ) { m_participantListSignalMapper->removeMappings(action); - delete action; } - + qDeleteAll(m_participantListActions); m_participantListActions.clear(); delete m_participantListSignalMapper; m_participantListSignalMapper = 0; @@ -365,13 +372,17 @@ void PhoneUIQtView::clearAndHideDialpad() { m_dialpad->editor().setText(QString("")); - hideDialpad(); + m_dialpad->closeDialpad(); +} + +void PhoneUIQtView::clearDialpad() +{ + m_dialpad->editor().setText(QString("")); } void PhoneUIQtView::bringToForeground() { m_window.show(); - m_window.raise(); } void PhoneUIQtView::setMenuActions(const QList& actions) @@ -399,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) { @@ -426,23 +454,34 @@ emit dialpadIsAboutToClose(); } -bool PhoneUIQtView::eventFilter(QObject * /*watched*/, QEvent * event) +bool PhoneUIQtView::eventFilter(QObject *watched, QEvent * event) { + 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"); @@ -459,10 +498,7 @@ void PhoneUIQtView::setDialpadPosition() { - // workaround to tsw error JMKN-83NAPU (fix coming in MCL wk14) - // QRectF screenRect(m_window.layoutRect()); - QRectF screenRect = (m_window.orientation() == Qt::Horizontal) ? - QRectF(0,0,640,360) : QRectF(0,0,360,640); + QRectF screenRect(m_window.layoutRect()); if (m_window.orientation() == Qt::Horizontal) { // dialpad takes half of the screen @@ -506,17 +542,41 @@ void PhoneUIQtView::setBackButtonVisible(bool visible) { - if (visible) { - setNavigationAction(m_backAction); - } - else { - setNavigationAction(0); + 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) { - if(mode == QSystemNetworkInfo::GsmMode) { + if((mode == QSystemNetworkInfo::GsmMode) || + (mode == QSystemNetworkInfo::WcdmaMode)) { setTitle(netName); } } +