phoneapp/phoneuiview2/src/phoneuiqtview.cpp
branchGCC_SURGE
changeset 51 f39ed5e045e0
parent 30 ebdbd102c78a
parent 46 bc5a64e5bc3c
--- 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 <xqserviceutil.h>
 #include <xqkeycapture.h>
 #include <dialpad.h>
+#include <dialpadkeyhandler.h>
 
 #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<PhoneAction*>& 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<QKeyEvent*>(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<QKeyEvent*>(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);
     }	
 }
+