qtinternetradio/ui/src/irviewmanager.cpp
branchGCC_SURGE
changeset 13 c9471d26c7f2
parent 12 608f67c22514
child 14 896e9dbc5f19
equal deleted inserted replaced
9:bfc95e24a059 13:c9471d26c7f2
    15 *
    15 *
    16 */
    16 */
    17 #include <hbaction.h>
    17 #include <hbaction.h>
    18 #include <QApplication>
    18 #include <QApplication>
    19 #include <QTimer>
    19 #include <QTimer>
       
    20 #include <HbApplication>
       
    21 #include <HbActivityManager>
       
    22 #include <xqserviceutil.h>
       
    23 
    20 
    24 
    21 #include "irviewmanager.h"
    25 #include "irviewmanager.h"
    22 #include "irapplication.h"
    26 #include "irapplication.h"
    23 #include "irmainview.h"
    27 #include "irmainview.h"
    24 #include "ircategoryview.h"
    28 #include "ircategoryview.h"
    44 const int KCrossLineMaxAngle = 75; // degree
    48 const int KCrossLineMaxAngle = 75; // degree
    45 
    49 
    46 static bool crossLineReady(const QLineF &aLine);
    50 static bool crossLineReady(const QLineF &aLine);
    47 static bool crossLineIntersected(const QLineF &aLineA, const QLineF &aLineB);
    51 static bool crossLineIntersected(const QLineF &aLineA, const QLineF &aLineB);
    48 
    52 
       
    53 static const QString KActivityMainView("InternetRadioMainView");
       
    54 static const QString KActivityPlayingView("InternetRadioNowPlayingView");
       
    55 
    49 enum CrossLineAngleType
    56 enum CrossLineAngleType
    50 {
    57 {
    51     EPositiveAngle = 0,  // Line within 1,3 quadrant
    58     EPositiveAngle = 0,  // Line within 1,3 quadrant
    52     ENegativeAngle       // Line within 2,4 quadrant
    59     ENegativeAngle       // Line within 2,4 quadrant
    53 };
    60 };
   122     }
   129     }
   123     
   130     
   124     return NULL;
   131     return NULL;
   125 }
   132 }
   126 
   133 
       
   134 TIRViewId IRViewManager::getExitingView()
       
   135 {
       
   136     if(0 == views().count())
       
   137     {
       
   138         return EIRView_InvalidId;
       
   139     }
       
   140     else
       
   141     {
       
   142         IRBaseView* lastView = static_cast<IRBaseView*>(currentView());
       
   143         if(lastView->testFlag(IRBaseView::EViewFlag_StickyViewEnabled))
       
   144         {
       
   145             return lastView->id();
       
   146         }
       
   147         
       
   148         if(iViewStack.empty())
       
   149         {
       
   150             return EIRView_InvalidId;
       
   151         }
       
   152         
       
   153         for(int i = iViewStack.size()-1; i >= 0 ; i--)
       
   154         {
       
   155             IRBaseView* lastView = iViewStack.at(i);
       
   156             if(lastView->testFlag(IRBaseView::EViewFlag_StickyViewEnabled))
       
   157             {
       
   158                 return lastView->id();
       
   159             }
       
   160         }    
       
   161  
       
   162         return EIRView_InvalidId;
       
   163     }
       
   164 }
       
   165 
   127 /*
   166 /*
   128  * Description : Judge if a view is in the view stack.
   167  * Description : Judge if a view is in the view stack.
   129  * Parameters  : aViewId : the view's id
   168  * Parameters  : aViewId : the view's id
   130  * Return      : true  : the view is in view stack
   169  * Return      : true  : the view is in view stack
   131  *               false : the view is not in view stack
   170  *               false : the view is not in view stack
   174     
   213     
   175     IRBaseView *view = getView(aViewId, true);
   214     IRBaseView *view = getView(aViewId, true);
   176     
   215     
   177     if (view)
   216     if (view)
   178     {
   217     {
   179         if (EViewFlag_ClearStackWhenActivate == view->flag())
   218         if (view->testFlag(IRBaseView::EViewFlag_ClearStackWhenActivate))
   180         {
   219         {
   181             clearStack();
   220             clearStack();
   182         }
   221         }
   183         else
   222         else
   184         {    if (aPushCurrentView)
   223         {    if (aPushCurrentView)
   185              {
   224              {
   186                  if (baseView && EViewFlag_UnStackable != baseView->flag())
   225                  if (baseView && !baseView->testFlag(IRBaseView::EViewFlag_UnStackable))
   187                  {
   226                  {
   188                      iViewStack.push(baseView);
   227                      iViewStack.push(baseView);
   189                  }
   228                  }
   190              }
   229              }
   191         
   230         
   315     
   354     
   316     IRBaseView *curView = getView(aViewId, true);
   355     IRBaseView *curView = getView(aViewId, true);
   317     Q_ASSERT(curView);
   356     Q_ASSERT(curView);
   318     iViewStack.push(curView);
   357     iViewStack.push(curView);
   319 }
   358 }
   320  
   359 
       
   360 void IRViewManager::saveScreenShot()
       
   361 {
       
   362     //if capture screen shot immediately for first view, can't get correct result
       
   363     //use timer as a temp solution, will raise error to Orbit
       
   364     QTimer::singleShot(200, this, SLOT(handleSaveScreenShot()));
       
   365 }
       
   366 
       
   367 void IRViewManager::saveActivity()
       
   368 {
       
   369     HbActivityManager *activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
       
   370     
       
   371     //for embedded applications, don't publish activity. If backup activity is available, need to restore
       
   372     if (XQServiceUtil::isEmbedded())
       
   373     {
       
   374         if (!iActivityBackup.activityId.isEmpty())
       
   375         {
       
   376             QVariantHash metadata;
       
   377             metadata.insert("screenshot", iActivityBackup.screenShot);
       
   378             
       
   379             QByteArray serializedActivity;
       
   380             QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
       
   381             stream<<iActivityBackup.viewId;
       
   382             activityManager->addActivity(iActivityBackup.activityId, serializedActivity, metadata);
       
   383         }
       
   384         return;
       
   385     }
       
   386     
       
   387     removeActivity();
       
   388     
       
   389     
       
   390     QVariantHash metadata;
       
   391         
       
   392     QByteArray serializedActivity;
       
   393     QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
       
   394     
       
   395     TIRViewId viewId = getExitingView();
       
   396     switch (viewId)
       
   397     {
       
   398     case EIRView_MainView:
       
   399     case EIRView_FavoritesView:
       
   400     case EIRView_CategoryView:
       
   401         stream<<viewId;
       
   402         metadata.insert("screenshot", iScreenShots[viewId]);
       
   403         activityManager->addActivity(KActivityMainView, serializedActivity, metadata);
       
   404         break;
       
   405         
       
   406     case EIRView_PlayingView:
       
   407         stream<<viewId;
       
   408         metadata.insert("screenshot", iScreenShots[viewId]);
       
   409         activityManager->addActivity(KActivityPlayingView, serializedActivity, metadata);
       
   410         break;
       
   411         
       
   412     default:
       
   413         break;
       
   414     }
       
   415 }
       
   416 
       
   417 void IRViewManager::removeActivity()
       
   418 {
       
   419     if (XQServiceUtil::isEmbedded())
       
   420     {
       
   421         backupActivity();
       
   422     }
       
   423     
       
   424     HbActivityManager *activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
       
   425     activityManager->removeActivity(KActivityMainView);
       
   426     activityManager->removeActivity(KActivityPlayingView);
       
   427 }
       
   428 
       
   429 void IRViewManager::backupActivity()
       
   430 {
       
   431     HbApplication *hbApp = qobject_cast<HbApplication*>(qApp);
       
   432     HbActivityManager *activityManager = hbApp->activityManager();
       
   433     QList<QVariantHash> params = activityManager->activities();
       
   434     TInt count = params.count();
       
   435     if (count > 0)
       
   436     {
       
   437         QVariantHash activity = params[0];        
       
   438         QString path = activity.value(activity.keys().at(2)).toString();
       
   439         iActivityBackup.screenShot = QPixmap(path);
       
   440         iActivityBackup.activityId = activity.value(activity.keys().at(1)).toString();
       
   441         
       
   442         QByteArray serializedModel = activityManager->activityData(iActivityBackup.activityId).toByteArray();
       
   443         QDataStream stream(&serializedModel, QIODevice::ReadOnly);
       
   444         int id = 0;
       
   445         stream>>id;
       
   446         iActivityBackup.viewId = TIRViewId(id);
       
   447     }
       
   448 }
   321 
   449 
   322 //                                     slot functions
   450 //                                     slot functions
   323 
   451 
   324 /*
   452 /*
   325  * Description : slot function for softkey action.
   453  * Description : slot function for softkey action.
   446 void IRViewManager::updateSoftkey()
   574 void IRViewManager::updateSoftkey()
   447 {
   575 {
   448     IRBaseView *topView = static_cast<IRBaseView*>(currentView());
   576     IRBaseView *topView = static_cast<IRBaseView*>(currentView());
   449     if (topView)
   577     if (topView)
   450     {
   578     {
   451         if (EViewFlag_ClearStackWhenActivate == topView->flag())
   579         if (topView->testFlag(IRBaseView::EViewFlag_ClearStackWhenActivate))
   452         {
   580         {
   453             topView->setNavigationAction(iExitAction);
   581             topView->setNavigationAction(iExitAction);
   454         }
   582         }
   455         else
   583         else
   456         {
   584         {
   457             topView->setNavigationAction(iBackAction);
   585             topView->setNavigationAction(iBackAction);
   458         }
   586         }
       
   587     }
       
   588 }
       
   589 
       
   590 void IRViewManager::handleSaveScreenShot()
       
   591 {
       
   592     if (!XQServiceUtil::isEmbedded())
       
   593     {
       
   594         TIRViewId id = currentViewId();
       
   595         iScreenShots[id] = QPixmap::grabWidget(this, rect());
   459     }
   596     }
   460 }
   597 }
   461 
   598 
   462 void IRViewManager::mousePressEvent(QMouseEvent *aEvent)
   599 void IRViewManager::mousePressEvent(QMouseEvent *aEvent)
   463 {
   600 {
   557 
   694 
   558 void IRViewManager::exitTimeout()
   695 void IRViewManager::exitTimeout()
   559 {
   696 {
   560     crossLineReset();
   697     crossLineReset();
   561     viewport()->repaint();
   698     viewport()->repaint();
       
   699 #ifdef SUBTITLE_STR_BY_LOCID
   562     HbMessageBox::information(hbTrId("txt_common_info_exiting"), (QObject*)NULL, NULL);
   700     HbMessageBox::information(hbTrId("txt_common_info_exiting"), (QObject*)NULL, NULL);
       
   701 #else
       
   702     HbMessageBox::information(hbTrId("Exiting..."), (QObject*)NULL, NULL);    
       
   703 #endif
   563     qApp->quit();
   704     qApp->quit();
   564     iExiting = true;
   705     iExiting = true;
   565 }
   706 }
   566 
   707 
   567 bool IRViewManager::isExiting() const
   708 bool IRViewManager::isExiting() const