videocollection/videocollectionview/src/videolistview.cpp
changeset 37 4eb2df7f7cbe
parent 36 8aed59de29f9
child 38 ff53afa8ad05
--- a/videocollection/videocollectionview/src/videolistview.cpp	Fri Apr 16 18:13:14 2010 +0300
+++ b/videocollection/videocollectionview/src/videolistview.cpp	Fri Apr 30 09:52:11 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 97 %
+// Version : %version: 101 %
 
 // INCLUDE FILES
 #include <xqserviceutil.h>
@@ -58,7 +58,6 @@
     , mUiLoader( uiLoader )
     , mIsService( false )
     , mModelReady( false )
-    , mTransitionOngoing( false )
     , mHintLevel( VideoHintWidget::AllVideos )
     , mVideoServices( 0 )
     , mCurrentList( 0 )
@@ -300,6 +299,14 @@
 void VideoListView::modelReadySlot()
 {
 	FUNC_LOG;
+	
+	// if mModelReady is false, then it means that this is the first time modelReady
+	// signal fires. Signaling that view is ready.
+	if(!mModelReady)
+	{
+	    emit viewReady();
+	}
+	
     mModelReady = true;
     
     // since the reset signal arrives after
@@ -539,24 +546,12 @@
     {
         if (show)
         {
-            mToolbarActions[ETBActionRemoveVideos]->setVisible(false);
-
-            if(mCurrentList->getLevel() == VideoCollectionCommon::ELevelDefaultColl) 
-            {
-                mToolbarActions[ETBActionAddVideos]->setVisible(false);
-            } 
+        	mToolbarActions[ETBActionRemoveVideos]->setVisible(false);
         }
-        else
-        {
-            if(mToolbarActions[ETBActionRemoveVideos]->isVisible() == false)
-            {
-                mToolbarActions[ETBActionRemoveVideos]->setVisible(true);
-            }
-            if(mToolbarActions[ETBActionAddVideos]->isVisible() == false) 
-            {
-                mToolbarActions[ETBActionAddVideos]->setVisible(true);
-            }
-        }
+        else if(mToolbarActions[ETBActionRemoveVideos]->isVisible() == false)
+		{
+        	mToolbarActions[ETBActionRemoveVideos]->setVisible(true);
+		}
     }
 
     // prepare sublabel
@@ -728,13 +723,6 @@
                     // no need to deactivate since there cannot be previous widget
                     mCurrentList = collectionContentWidget;
                     
-                    // hide toolbar
-                    HbToolBar *toolBar = this->toolBar();
-                    if (toolBar)
-                    {
-                        toolBar->hide();
-                    }
-                    
                     // resolve collection name
                     if (itemId.iId1 == KVcxMvcCategoryIdDownloads)
                     {
@@ -753,7 +741,37 @@
                     model.openItem(itemId);
                     
                     // sort model
-                    model.doSorting(VideoCollectionCommon::KeyDateTime, Qt::AscendingOrder);
+                    int sortRole = VideoCollectionCommon::KeyDateTime;
+                    if (mIsService &&
+                        mVideoServices)
+                    {
+                        // TODO: sorting roles needs to be defined somewhere
+                        sortRole = mVideoServices->sortRole();
+                        switch (sortRole)
+                        {
+                            // sort by name
+                            case 2:
+                            {
+                                sortRole = VideoCollectionCommon::KeyTitle;
+                                break;
+                            }
+                            // sort by size
+                            case 3:
+                            {
+                                sortRole = VideoCollectionCommon::KeySizeValue;
+                                break;
+                            }
+                            // date & time
+                            case 1:
+                                // fall through
+                            default:
+                            {
+                                sortRole = VideoCollectionCommon::KeyDateTime;
+                                break;
+                            }
+                        }
+                    }
+                    model.doSorting(sortRole, Qt::AscendingOrder);
                     
                     // set hint level to collections
                     setHintLevel(VideoHintWidget::Collection);
@@ -930,8 +948,12 @@
 		mUiLoader->findWidget<VideoListWidget>(DOCML_NAME_VC_VIDEOLISTWIDGET)->getModel().doSorting(role, order);	
 	}
 
-	// save sorting values
-	mUiUtils.saveSortingValues(role, order, mCurrentList->getLevel());
+    // save sorting values only if the application is not started as a service
+	if (!mIsService)
+	{
+	    // save sorting values
+	    mUiUtils.saveSortingValues(role, order, mCurrentList->getLevel());
+	}
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -995,27 +1017,47 @@
         return;
     }
     
-    VideoSortFilterProxyModel &model = mCurrentList->getModel();
-    
-    bool ok = false;
     // query a name for the collection
     QString label(hbTrId("txt_videos_title_enter_name"));
     QString text(hbTrId("txt_videos_dialog_entry_new_collection"));
-    text = HbInputDialog::getText(label, text, &ok);
-    if (ok && text.length())
+    
+    HbInputDialog *dialog = new HbInputDialog();
+    dialog->setAttribute(Qt::WA_DeleteOnClose);
+    dialog->getText(label, this, SLOT(createCollectionDialogFinished(HbAction *)), text);
+}
+
+// -------------------------------------------------------------------------------------------------
+// createCollectionDialogFinished
+// -------------------------------------------------------------------------------------------------
+//
+void VideoListView::createCollectionDialogFinished(HbAction *action)
+{
+    FUNC_LOG;
+    Q_UNUSED(action);
+    
+    HbInputDialog *dialog = static_cast<HbInputDialog*>(sender());
+    
+    QVariant variant = dialog->value();
+    
+    if(dialog->actions().first() == action && variant.isValid())
     {
+        VideoSortFilterProxyModel &model = mCurrentList->getModel();
+
         // resolve collection true name and add new album
-        text = model.resolveAlbumName(text);
+        QString text = model.resolveAlbumName(variant.toString());
         
-        // when collection reports about new collection, we open it right away,
-        // for that, connect to rowsInserted so that the new album can be opened
-        if(!connect(&model, SIGNAL(rowsInserted(const QModelIndex&, int, int)),
-                    this, SLOT(openNewAlbumSlot(const QModelIndex&, int, int))))
+        if(text.length())
         {
-            return;
+            // when collection reports about new collection, we open it right away,
+            // for that, connect to rowsInserted so that the new album can be opened
+            if(!connect(&model, SIGNAL(rowsInserted(const QModelIndex&, int, int)),
+                        this, SLOT(openNewAlbumSlot(const QModelIndex&, int, int))))
+            {
+                return;
+            }
+            
+            model.addNewAlbum(text);
         }
-        
-        model.addNewAlbum(text);
     }
 }
 
@@ -1270,152 +1312,99 @@
     const QModelIndex &index)
 {
 	FUNC_LOG;
-	if(mTransitionOngoing)
-	{
-		return;
-	}
-	else
-	{
-	    // clear toolbar actions.
-	    toolBar()->clearActions();
-	}
+
+    // clear toolbar actions.
+    toolBar()->clearActions();
 
+    VideoListWidget *collectionContentWidget =
+                mUiLoader->findWidget<VideoListWidget>(
+                    DOCML_NAME_VC_COLLECTIONCONTENTWIDGET);
+    
+    if(!collectionContentWidget)
+    {
+        return;
+    }
+    // update collection specific information
+	mCollectionName = collection;
+	
+	// disable collection content animations during widget change        
+	HbAbstractItemView::ItemAnimations animationState = collectionContentWidget->enabledAnimations();
+	collectionContentWidget->setEnabledAnimations(HbAbstractItemView::None);
+	
 	if(collectionOpened)
     {
-        if(!index.isValid())
-        {   
+        // open album view        
+        if (!index.isValid() || !mCurrentList || mCurrentList == collectionContentWidget)
+        {
+            // no currentlist or currentlist is already collection content -list 
+            collectionContentWidget->setEnabledAnimations(animationState);
             return;
         }
         
-        // open album view
-        VideoListWidget *collectionContentWidget =
-            mUiLoader->findWidget<VideoListWidget>(
-                DOCML_NAME_VC_COLLECTIONCONTENTWIDGET);
+        // get item id before deactivating
+        TMPXItemId itemId = mCurrentList->getModel().getMediaIdAtIndex(index);
         
-        if (!mCurrentList || mCurrentList == collectionContentWidget)
+        // get level from the item to be opened only default 
+        // or user defined collections can be activated here
+        VideoCollectionCommon::TCollectionLevels level = VideoCollectionCommon::ELevelInvalid;
+        if(itemId.iId2 == KVcxMvcMediaTypeCategory)
         {
-            // no currentlist or currentlist is already list 
-            // we're about to transit
-            return;
+            level = VideoCollectionCommon::ELevelDefaultColl; 
         }
-
-        // get item id before deactivating
-        TMPXItemId itemId = TMPXItemId::InvalidId();
-        itemId = mCurrentList->getModel().getMediaIdAtIndex(index);
-        
-        // only category or album can be activated here
-        if(itemId == TMPXItemId::InvalidId() ||
-           (itemId.iId2 != KVcxMvcMediaTypeCategory && 
-            itemId.iId2 != KVcxMvcMediaTypeAlbum))
+        else if(itemId.iId2 == KVcxMvcMediaTypeAlbum)
         {
+            level = VideoCollectionCommon::ELevelAlbum; 
+        }
+        else 
+        {
+            collectionContentWidget->setEnabledAnimations(animationState);
             return;
         }
         
-        // Send level that is opened with the effect.
-        QVariant nextLevel;
-        if(itemId.iId2 ==  KVcxMvcMediaTypeCategory)
-        {
-            nextLevel = QVariant(VideoCollectionCommon::ELevelDefaultColl);
-        }
-        else if(itemId.iId2 == KVcxMvcMediaTypeAlbum)
-        {
-            nextLevel = QVariant(VideoCollectionCommon::ELevelAlbum);
-        }            
-        
-        // Start fetching content.
+        // Start fetching content before changing.
         collectionContentWidget->getModel().openItem(itemId);
         
-        HbEffect::start(collectionContentWidget,
-                        EFFECT_SLIDE_IN_TO_LEFT,
-                        this,
-                        "finishCollectionOpenedSlot",
-                        nextLevel);
+        // deactivat current widget.
+        mCurrentList->deactivate();
         
-        mTransitionOngoing = true;
+        // activate video collection content widget and set it as current list.
+        mCurrentList = collectionContentWidget;
+        mCurrentList->activate(level);
+
+        updateSubLabel();
+
+        // setup correct sorting, collection content contains always a list of videos so we use 
+        // ELevelVideos as target for sorting
+        VideoCollectionViewUtils::sortModel(&mCurrentList->getModel(), false, VideoCollectionCommon::ELevelVideos);
+        mCurrentList->getModel().invalidate();
+        
+        // update hint widget for correct content
+        setHintLevel(VideoHintWidget::Collection);
+        showHint();
+
+        // update toolbar for albums, default categories don't have one.
+        if(level == VideoCollectionCommon::ELevelAlbum && 
+           mToolbarCollectionActionGroup && mToolbarActions.contains(ETBActionCollections))
+        {
+            mToolbarActions[ETBActionCollections]->setChecked(false);
+            toolBar()->addActions(mToolbarCollectionActionGroup->actions());
+        }
     }
     else
     {
-        // open categories view.
-        VideoListWidget *collectionContentWidget =
-            mUiLoader->findWidget<VideoListWidget>(
-                DOCML_NAME_VC_COLLECTIONCONTENTWIDGET);
-        
-        HbEffect::start(collectionContentWidget,
-                        EFFECT_SLIDE_OUT_TO_LEFT,
-                        this,
-                        "finishCollectionClosedSlot");
+        // open collection view
+        openCollectionViewSlot();
         
-        mTransitionOngoing = true;
-    }
-	// update collection specific information
-	mCollectionName = collection;
-}
-
-// -------------------------------------------------------------------------------------------------
-// finishCollectionOpenedSlot
-// -------------------------------------------------------------------------------------------------
-//
-void VideoListView::finishCollectionOpenedSlot(const HbEffect::EffectStatus &status)
-{
-	FUNC_LOG;
-    Q_UNUSED(status);
-    
-    mTransitionOngoing = false;
-    
-    // deactivat current widget.
-    mCurrentList->deactivate();
-    
-    // activate video collection content widget.
-    mCurrentList = mUiLoader->findWidget<VideoListWidget>(
-                    DOCML_NAME_VC_COLLECTIONCONTENTWIDGET);
-
-    if(!mCurrentList || !status.userData.isValid())
-    {
-        return;
+        // update toolbar
+        if(mToolbarViewsActionGroup && mToolbarActions.contains(ETBActionCollections))
+        {
+            toolBar()->addActions(mToolbarViewsActionGroup->actions());
+            mToolbarActions[ETBActionCollections]->setChecked(true);
+        }
     }
-    
-    updateSubLabel();
-
-    VideoCollectionCommon::TCollectionLevels level =
-            static_cast<VideoCollectionCommon::TCollectionLevels>(status.userData.toInt());
-	mCurrentList->activate(level);
-
-    VideoCollectionViewUtils::sortModel(&mCurrentList->getModel(), false, VideoCollectionCommon::ELevelVideos);
-    mCurrentList->getModel().invalidate();
-
-    // update hint widget
-    setHintLevel(VideoHintWidget::Collection);
-    showHint();
-
-    // update toolbar for albums, default categories don't have one.
-    if(level == VideoCollectionCommon::ELevelAlbum && 
-       mToolbarCollectionActionGroup && mToolbarActions.contains(ETBActionCollections))
-    {
-        mToolbarActions[ETBActionCollections]->setChecked(false);
-        toolBar()->addActions(mToolbarCollectionActionGroup->actions());
-    }
-}
-
-// -------------------------------------------------------------------------------------------------
-// finishCollectionClosedSlot
-// -------------------------------------------------------------------------------------------------
-//
-void VideoListView::finishCollectionClosedSlot(const HbEffect::EffectStatus &status)
-{
-	FUNC_LOG;
-    Q_UNUSED(status);
-    
-    mTransitionOngoing = false;
-    
-    // open collection view
-    openCollectionViewSlot();
-    
-    // update toolbar
-    if(mToolbarViewsActionGroup && mToolbarActions.contains(ETBActionCollections))
-    {
-        toolBar()->addActions(mToolbarViewsActionGroup->actions());
-        mToolbarActions[ETBActionCollections]->setChecked(true);
-    }
+	// restore animations for collection content widget
+	collectionContentWidget->setEnabledAnimations(animationState);
+	
 }
 
 // -------------------------------------------------------------------------------------------------