logsui/logsapp/src/logsrecentcallsview.cpp
changeset 25 76a2435edfd4
parent 24 0ba2181d7c28
--- a/logsui/logsapp/src/logsrecentcallsview.cpp	Fri Mar 19 09:27:18 2010 +0200
+++ b/logsui/logsapp/src/logsrecentcallsview.cpp	Fri Apr 16 14:53:18 2010 +0300
@@ -36,16 +36,16 @@
 #include <hbaction.h>
 #include <hbtoolbar.h>
 #include <dialpad.h>
-#include <hbgesturefilter.h>
-#include <hbgesture.h>
 #include <hblineedit.h>
 #include <hbgroupbox.h>
+#include <hbmessagebox.h>
+#include <hbmainwindow.h>
 #include <QTimer>
-#include <hbmessagebox.h>
 
 Q_DECLARE_METATYPE(LogsMatchesModel*)
 
 const int logsMissedCallsMarkingDelayMs = 1000;
+const int logsSwipeAngleDelta = 30; // angle is from 0 to 360
 
 // -----------------------------------------------------------------------------
 // LogsRecentCallsView::LogsRecentCallsView
@@ -263,7 +263,7 @@
        HbAction *selected = note->exec();
 
        if (selected == note->primaryAction()){ 
-        mModel->clearList( mFilter->clearType() );
+           mModel->clearList( mFilter->clearType() );
        }
        delete note;
     }
@@ -317,10 +317,10 @@
 //
 void LogsRecentCallsView::addStringsToMap()
 {
- 	mTitleMap.insert(LogsBaseView::ViewAll, tr("Recent calls"));
- 	mTitleMap.insert(LogsBaseView::ViewCalled, tr("Dialled calls"));
- 	mTitleMap.insert(LogsBaseView::ViewReceived, tr("Received calls"));
-    mTitleMap.insert(LogsBaseView::ViewMissed, tr("Missed calls"));
+    mTitleMap.insert(LogsBaseView::ViewAll, hbTrId("txt_dialer_subhead_recent_calls"));
+    mTitleMap.insert(LogsBaseView::ViewCalled, hbTrId("txt_dialer_subhead_dialled_calls"));
+    mTitleMap.insert(LogsBaseView::ViewReceived, hbTrId("txt_dial_subhead_received_calls"));
+    mTitleMap.insert(LogsBaseView::ViewMissed, hbTrId("txt_dialer_subhead_missed_calls"));
 }
 
 // -----------------------------------------------------------------------------
@@ -338,9 +338,6 @@
      // Optimize memory usage, list reserves only memory for visible items
     mListView->setItemRecycling(true);
     
-    // Optimizes speed as we know that list items have always the same size
-    mListView->setUniformItemSizes(true); 
-    
     connect(mListView, SIGNAL(activated(const QModelIndex)),
             this, SLOT(initiateCallback(const QModelIndex)));
     connect(mListView,
@@ -348,16 +345,12 @@
             this,
             SLOT(showListItemMenu(HbAbstractViewItem*, const QPointF&)));
     
-    connect(mListView,SIGNAL(gestureSceneFilterChanged(HbGestureSceneFilter*)),
-            this,SLOT(initializeGestures(HbGestureSceneFilter*)));
-    
-    // Need to set scrolling style back and forth to force
-    // gestureSceneFilterChanged signal inside which we can
-    // add additional gestures.
-    mListView->setScrollingStyle(HbScrollArea::Pan);
     mListView->setScrollingStyle(HbScrollArea::PanOrFlick); 
+    mListView->setFrictionEnabled(true);
     
     mListViewX = mListView->pos().x();
+    
+    grabGesture(Qt::SwipeGesture);
 
     LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::initListWidget() " );
 }
@@ -401,7 +394,7 @@
 void LogsRecentCallsView::updateViewName()
 {
     if ( mViewName ) {
-       mViewName->setTitleText( mTitleMap.value(mConversionMap.value(mCurrentView))); 
+        mViewName->setHeading( mTitleMap.value(mConversionMap.value(mCurrentView))); 
     }
 }
 
@@ -449,39 +442,69 @@
 }
 
 // -----------------------------------------------------------------------------
-// LogsRecentCallsView::initializeGestures
-// Gestures are added a bit ackwardly as scene (of list) needs to be present
-// at gesture addition phase and we need to add gestures each time list 
-// changes its gesture filter.
+// LogsRecentCallsView::gestureEvent
 // -----------------------------------------------------------------------------
 //
-void LogsRecentCallsView::initializeGestures(HbGestureSceneFilter* filter)
+void LogsRecentCallsView::gestureEvent(QGestureEvent *event)
 {
-    LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::initializeGestures()" );
-    if (filter && mListView){
-        LOGS_QDEBUG( "logs [UI] Adding flick gestures" );
-        HbGesture* gesture = new HbGesture(HbGesture::left, 50);
-        filter->addGesture(gesture);
-        QObject::connect(gesture, SIGNAL(triggered(int)), this, SLOT(leftFlick(int)));
-        
-        gesture = new HbGesture(HbGesture::right, 50);
-        filter->addGesture(gesture);
-        QObject::connect(gesture, SIGNAL(triggered(int)), this, SLOT(rightFlick(int)));
-        
-        mListView->installSceneEventFilter(filter);
+    LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::gestureEvent()" );
+    QGesture* gesture = event->gesture(Qt::SwipeGesture);
+    if (gesture) {
+        QSwipeGesture* swipe = static_cast<QSwipeGesture *>(gesture);
+        if (swipe->state() == Qt::GestureFinished) {
+            QSwipeGesture::SwipeDirection direction = swipeAngleToDirection(
+                    swipe->swipeAngle(), logsSwipeAngleDelta);
+            if (mViewManager.mainWindow().orientation() == Qt::Vertical) {
+                if (direction == QSwipeGesture::Left) {
+                    leftFlick();
+                    event->accept(Qt::SwipeGesture);
+                } else if (direction == QSwipeGesture::Right) {
+                    rightFlick();
+                    event->accept(Qt::SwipeGesture);
+                }
+            } else {
+                if (direction == QSwipeGesture::Down) {
+                    rightFlick();
+                    event->accept(Qt::SwipeGesture);
+                } else if (direction == QSwipeGesture::Up) {
+                    leftFlick();
+                    event->accept(Qt::SwipeGesture);
+                }
+            }
+        }
     }
-    LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::initializeGestures()" );
 }
 
+// -----------------------------------------------------------------------------
+// LogsRecentCallsView::swipeAngleToDirection
+// -----------------------------------------------------------------------------
+//
+QSwipeGesture::SwipeDirection LogsRecentCallsView::swipeAngleToDirection(
+        int angle, int delta)
+{
+    QSwipeGesture::SwipeDirection direction(QSwipeGesture::NoDirection);
+    if ((angle > 90-delta) && (angle < 90+delta)) {
+        direction = QSwipeGesture::Up;
+    } else if ((angle > 270-delta) && (angle < 270+delta)) {
+        direction = QSwipeGesture::Down;
+    } else if (((angle >= 0) && (angle < delta)) 
+            || ((angle > 360-delta) && (angle <= 360))) {
+        direction = QSwipeGesture::Right;
+    } else if ((angle > 180-delta) && (angle < 180+delta)) {
+        direction = QSwipeGesture::Left;
+    }
+    LOGS_QDEBUG_4( "logs [UI] LogsRecentCallsView::swipeAngleToDirection() angle: ",
+            angle, " direction: ", direction );
+    return direction;    
+}
 
 // -----------------------------------------------------------------------------
 // LogsRecentCallsView::leftFlick
 // -----------------------------------------------------------------------------
 //
-void LogsRecentCallsView::leftFlick(int value)
+void LogsRecentCallsView::leftFlick()
 {
     LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::leftFlick()" );
-    Q_UNUSED(value);
 	if ( mConversionMap.value(mCurrentView) + 1 < mTitleMap.count() ){
     	LogsBaseView::LogsViewMap viewmap = 
             static_cast<LogsBaseView::LogsViewMap>(mConversionMap.value(mCurrentView) +1);
@@ -497,10 +520,9 @@
 // LogsRecentCallsView::rightFlick
 // -----------------------------------------------------------------------------
 //
-void LogsRecentCallsView::rightFlick(int value)
+void LogsRecentCallsView::rightFlick()
 {
     LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::rightFlick()" );
-    Q_UNUSED(value);
     if ( mConversionMap.value(mCurrentView) > 0 ){
     	LogsBaseView::LogsViewMap viewmap = 
             static_cast<LogsBaseView::LogsViewMap>(mConversionMap.value(mCurrentView) - 1);
@@ -552,7 +574,7 @@
 
     // Previous view name has dissappeared by fading, set new view name 
     // as it is brought visible by effect
-    mViewName->setTitleText( mTitleMap.value(mConversionMap.value(mAppearingView)) );
+    mViewName->setHeading( mTitleMap.value(mConversionMap.value(mAppearingView)) );
     
     LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::dissappearByFadingComplete()" )
 }
@@ -566,7 +588,7 @@
     LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::dissappearByMovingComplete()" )
     
     updateView( mAppearingView );
-
+    
     LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::dissappearByMovingComplete()" )
 }
 
@@ -606,7 +628,7 @@
     LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::updateWidgetsSizeAndLayout()" );
     if ( mListView ) {
         updateListLayoutName(*mListView);
-        updateListSize(mLayoutSectionName);
+        updateListSize();
     }
     LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::updateWidgetsSizeAndLayout()" );
 }