videocollection/videocollectionview/src/videocollectionviewutils.cpp
branchRCL_3
changeset 56 839377eedc2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/videocollectionview/src/videocollectionviewutils.cpp	Tue Aug 31 15:15:55 2010 +0300
@@ -0,0 +1,458 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: video collection view plugin's ui utils class
+*
+*/
+
+// Version : %version: 47 %
+
+// INCLUDE FILES
+#include <hbglobal.h>
+#include <hblistview.h>
+#include <hbscrollbar.h>
+#include <hblistviewitem.h>
+#include <hbdialog.h>
+#include <hbmessagebox.h>
+#include <hbnotificationdialog.h>
+#include <hbparameterlengthlimiter.h>
+#include <xqsettingsmanager.h>
+#include <vcxmyvideosdefs.h>
+
+#include "videocollectioncommon.h"
+#include "videocollectionviewutils.h"
+#include "videosortfilterproxymodel.h"
+#include "videoactivitystate.h"
+#include "videocollectioncenrepdefs.h"
+#include "videocollectiontrace.h"
+
+// Object names.
+const char* const VIEW_UTILS_OBJECT_NAME_STATUS_MSG          = "vc:ViewUtilsStatusMessage";
+const char* const VIEW_UTILS_OBJECT_NAME_MESSAGE_BOX_WARNING = "vc:ViewUtilsMessageBoxWarning";
+
+const int KAddToCollectionDataCount(2);
+const int KAddToCollectionCountIndex(0);
+const int KAddToCollectionNameIndex(1);
+
+// type of collectionview plugin's widget level(int): 
+// all videos, collections or collection video list
+static const QString KEY_WIDGET_LEVEL    = "_VideoActivity_widget_level_";
+
+// id of the collection whose videolist is to be shown (int).
+static const QString KEY_COLLECTION_ID   = "_VideoActivity_collection_id_";
+
+// name of the collection whose videolist is to be shown (QString)
+static const QString KEY_COLLECTION_NAME = "_VideoActivity_collection_name_";
+
+
+// ---------------------------------------------------------------------------
+// instance
+// ---------------------------------------------------------------------------
+//
+VideoCollectionViewUtils& VideoCollectionViewUtils::instance()
+{
+    FUNC_LOG;
+    static VideoCollectionViewUtils _popupInstance;
+    return _popupInstance;
+}
+
+// ---------------------------------------------------------------------------
+// VideoCollectionViewUtils
+// ---------------------------------------------------------------------------
+//
+VideoCollectionViewUtils::VideoCollectionViewUtils():
+    mVideosSortRole(-1),
+    mCollectionsSortRole(-1),
+    mVideosSortOrder(Qt::AscendingOrder),
+    mCollectionsSortOrder(Qt::AscendingOrder)
+{
+	FUNC_LOG;
+}
+
+// ---------------------------------------------------------------------------
+// ~VideoCollectionViewUtils
+// ---------------------------------------------------------------------------
+//
+VideoCollectionViewUtils::~VideoCollectionViewUtils()
+{
+	FUNC_LOG;
+}
+
+// ---------------------------------------------------------------------------
+// saveSortingValues
+// ---------------------------------------------------------------------------
+//
+int VideoCollectionViewUtils::saveSortingValues(int role, Qt::SortOrder order, VideoCollectionCommon::TCollectionLevels target)
+{
+	FUNC_LOG;
+	INFO_3("VideoCollectionViewUtils::saveSortingValues() saving: role: %d, order: %d, target: %d", role, order, target);
+
+    int status = -1;
+    if (target != VideoCollectionCommon::ELevelInvalid)
+	{
+		int *rolePtr            = &mVideosSortRole;
+		Qt::SortOrder *orderPtr = &mVideosSortOrder;
+
+		int roleKey(KVideoCollectionViewCenrepVideoSortingRoleKey);
+		int orderKey(KVideoCollectionViewCenrepVideoSortingOrderKey);
+
+		if(target == VideoCollectionCommon::ELevelCategory)
+	    {
+	    	rolePtr  = &mCollectionsSortRole;
+	    	orderPtr = &mCollectionsSortOrder;
+
+	    	roleKey  = KVideoCollectionViewCenrepCollectionsSortingRoleKey;
+			orderKey = KVideoCollectionViewCenrepCollectionsSortingOrderKey;
+	    }
+		XQSettingsManager mgr;
+		XQCentralRepositorySettingsKey crRoleKey(KVideoCollectionViewCenrepUid, roleKey);
+		XQCentralRepositorySettingsKey crOrderKey(KVideoCollectionViewCenrepUid, orderKey);
+		QVariant value;
+		value = role;
+		if(!mgr.writeItemValue(crRoleKey, value))
+		{
+		    return -1;
+		}
+		value = order;
+		if(!mgr.writeItemValue(crOrderKey, value))
+        {
+            return -1;
+        }
+	    *rolePtr = role;
+	    *orderPtr = order;
+	    status = 0;
+	}
+    return status;
+}
+
+// ---------------------------------------------------------------------------
+// loadSortingValues
+// ---------------------------------------------------------------------------
+//
+int VideoCollectionViewUtils::loadSortingValues(int &role, Qt::SortOrder &order, VideoCollectionCommon::TCollectionLevels target)
+{
+	FUNC_LOG;
+
+    if ((target > VideoCollectionCommon::ELevelCategory) &&
+		(mVideosSortRole != -1))
+    {
+    	role = mVideosSortRole;
+    	order = mVideosSortOrder;
+    }
+    else if ((target == VideoCollectionCommon::ELevelCategory) &&
+			 (mCollectionsSortRole != -1))
+    {
+    	role = mCollectionsSortRole;
+    	order = mCollectionsSortOrder;
+    }
+    else if (target != VideoCollectionCommon::ELevelInvalid)
+    {
+        int roleKey(KVideoCollectionViewCenrepVideoSortingRoleKey);
+        int orderKey(KVideoCollectionViewCenrepVideoSortingOrderKey);
+    	
+        int *rolePtr             = &mVideosSortRole;
+    	Qt::SortOrder *orderPtr  = &mVideosSortOrder;
+    	    	
+    	if(target == VideoCollectionCommon::ELevelCategory)
+        {
+    		roleKey  = KVideoCollectionViewCenrepCollectionsSortingRoleKey;
+    		orderKey = KVideoCollectionViewCenrepCollectionsSortingOrderKey;
+        	rolePtr  = &mCollectionsSortRole;
+        	orderPtr = &mCollectionsSortOrder;
+        }
+
+    	*rolePtr       = getCenRepIntValue(roleKey);
+    	int orderValue = getCenRepIntValue(orderKey);
+
+    	if(*rolePtr < 0 || (orderValue < Qt::AscendingOrder || orderValue > Qt::DescendingOrder))
+    	{
+    	    *rolePtr  = -1;
+    	    return -1;
+    	}
+    	orderValue == Qt::AscendingOrder ? 
+    	        *orderPtr = Qt::AscendingOrder : *orderPtr = Qt::DescendingOrder;
+    	        
+		role  = *rolePtr;
+		order = *orderPtr;
+    }
+    INFO_3("VideoCollectionViewUtils::loadSortingValues() loaded: role: %d, order: %d, target: %d", role, order, target);
+    return 0;
+}
+
+// ---------------------------------------------------------------------------
+// getCenrepStringValue
+// ---------------------------------------------------------------------------
+//
+QString VideoCollectionViewUtils::getCenRepStringValue(int key)
+{
+    FUNC_LOG;
+    XQCentralRepositorySettingsKey crKey(KVideoCollectionViewCenrepUid, key);
+    XQSettingsManager mgr;
+    QVariant value = mgr.readItemValue(crKey, XQSettingsManager::TypeString);
+    return value.toString();
+}
+
+// ---------------------------------------------------------------------------
+// getCenRepIntValue
+// ---------------------------------------------------------------------------
+//
+int VideoCollectionViewUtils::getCenRepIntValue(int key)
+{
+    FUNC_LOG;
+    XQCentralRepositorySettingsKey crKey(KVideoCollectionViewCenrepUid, key);
+    XQSettingsManager mgr;
+    QVariant value = mgr.readItemValue(crKey, XQSettingsManager::TypeInt);
+    int uid = -1;
+    if(value.isValid())
+    {
+        uid = value.toInt();
+    }
+    return uid;
+}
+
+// ---------------------------------------------------------------------------
+// initListView
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::initListView(HbListView *view)
+{
+	FUNC_LOG;
+    if (view)
+    {
+        HbListViewItem *prototype = view->listItemPrototype();
+        if(prototype)
+        {
+            //Use image layout in prototype
+            prototype->setGraphicsSize(HbListViewItem::WideThumbnail);
+        }
+        view->setItemRecycling(true);
+        view->setClampingStyle(HbScrollArea::BounceBackClamping);
+        view->setScrollingStyle(HbScrollArea::PanWithFollowOn);
+        view->setFrictionEnabled(true);
+        view->setUniformItemSizes(true);  
+        view->setSelectionMode(HbAbstractItemView::NoSelection);
+        
+        //Use scrollbar
+        HbScrollBar *scrollBar = view->verticalScrollBar();
+        if (scrollBar)
+        {
+            scrollBar->setInteractive(true);
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// sortModel
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::sortModel(
+    VideoSortFilterProxyModel *model,
+    bool async,
+    VideoCollectionCommon::TCollectionLevels target)
+{
+	FUNC_LOG;
+    if (model)
+    {
+        // setup sorting order for model
+        int sortRole(VideoCollectionCommon::KeyDateTime);
+
+        // default for categories
+        if(target == VideoCollectionCommon::ELevelCategory)
+        {
+            sortRole = VideoCollectionCommon::KeyTitle;
+        }
+
+        Qt::SortOrder sortOrder(Qt::AscendingOrder);
+
+        // return value ignored, as in case of error the sortRole and sortOrder variables
+        // stay at their predefined values, and in error cases those are the sorting values
+        // that are used.
+        VideoCollectionViewUtils &self = VideoCollectionViewUtils::instance();
+        self.loadSortingValues(sortRole, sortOrder, target);
+
+        model->doSorting(sortRole, sortOrder, async);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// setWidgetActivityLevel
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::setWidgetActivityLevel(
+        const VideoCollectionCommon::TCollectionLevels &level)
+{
+    FUNC_LOG; 
+    QVariant data = int(level);
+    VideoActivityState::instance().setActivityData(data, KEY_WIDGET_LEVEL);
+
+    if(level != VideoCollectionCommon::ELevelDefaultColl && 
+       level != VideoCollectionCommon::ELevelAlbum)
+    {
+        // no need to save collection related data, clear them
+        data.clear();
+        VideoActivityState::instance().setActivityData(data, KEY_COLLECTION_ID);    
+        VideoActivityState::instance().setActivityData(data, KEY_COLLECTION_NAME);   
+    }
+}
+
+// ---------------------------------------------------------------------------
+// getActivityWidgetLevel
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::getActivityWidgetLevel(VideoCollectionCommon::TCollectionLevels &level)
+{
+    FUNC_LOG;
+    // default value is all videos list level
+    level = VideoCollectionCommon::ELevelVideos;
+    QVariant data = VideoActivityState::instance().getActivityData(KEY_WIDGET_LEVEL);
+    
+    int value = data.toInt();
+    if(value == VideoCollectionCommon::ELevelCategory)
+    {
+        level = VideoCollectionCommon::ELevelCategory;
+    }
+    else if(value == VideoCollectionCommon::ELevelDefaultColl)
+    {
+        level = VideoCollectionCommon::ELevelDefaultColl;
+    }
+    else if(value == VideoCollectionCommon::ELevelAlbum)
+    {
+        level = VideoCollectionCommon::ELevelAlbum;
+    }
+}
+ 
+// ---------------------------------------------------------------------------
+// setCollectionActivityData
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::setCollectionActivityData(const TMPXItemId &id, const QString &name)
+{
+    FUNC_LOG;
+    QVariant data = int(id.iId1);
+    VideoActivityState::instance().setActivityData(data, KEY_COLLECTION_ID);
+    data.clear();
+    data = name;
+    VideoActivityState::instance().setActivityData(data, KEY_COLLECTION_NAME);
+}
+
+// ---------------------------------------------------------------------------
+// getCollectionActivityData
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::getCollectionActivityData(TMPXItemId &id, QString &name)
+{
+    FUNC_LOG;
+    id = TMPXItemId::InvalidId();
+    name = "";
+    VideoCollectionCommon::TCollectionLevels level = VideoCollectionCommon::ELevelVideos;
+    getActivityWidgetLevel(level); 
+    
+    if(level == VideoCollectionCommon::ELevelDefaultColl)
+    {
+        id.iId2 = KVcxMvcMediaTypeCategory; 
+    }
+    else if(level == VideoCollectionCommon::ELevelAlbum)
+    {
+        id.iId2 = KVcxMvcMediaTypeAlbum;
+    }
+    if(id.iId2 != KMaxTUint32)
+    {
+        QVariant data = VideoActivityState::instance().getActivityData(KEY_COLLECTION_ID);
+        id.iId1 = data.toInt();
+        data = VideoActivityState::instance().getActivityData(KEY_COLLECTION_NAME);
+        name = data.toString();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// showStatusMsgSlot
+// ---------------------------------------------------------------------------
+//
+void VideoCollectionViewUtils::showStatusMsgSlot(int statusCode, QVariant &additional)
+{
+	FUNC_LOG;
+    QString msg("");
+    QString format("");
+    bool error(true);
+    switch(statusCode)
+    {
+        case VideoCollectionCommon::statusSingleDeleteFail:
+            format = hbTrId("txt_videos_info_unable_to_delete_1_it_is_current");
+            if(additional.isValid())
+            {
+                msg = HbParameterLengthLimiter(format).arg(additional.toString());
+            }
+        break;
+        case VideoCollectionCommon::statusMultipleDeleteFail:
+            msg = hbTrId("txt_videos_info_unable_to_delete_some_items_which");
+        break;
+        case VideoCollectionCommon::statusSingleRemoveFail:
+            format = hbTrId("txt_videos_info_unable_to_remove_collection_1");
+            if(additional.isValid())
+            {
+                msg = format.arg(additional.toString());
+            }
+        break;
+        case VideoCollectionCommon::statusMultiRemoveFail:
+            msg = hbTrId("txt_videos_info_unable_to_remove_some_collections");
+        break;
+        case VideoCollectionCommon::statusVideosAddedToCollection:            
+            // videos added to collection - status should containg both count and collection name
+            if(additional.isValid() && additional.toList().count() == KAddToCollectionDataCount)
+            {
+                int count = additional.toList().at(KAddToCollectionCountIndex).toInt();
+                QString name = additional.toList().at(KAddToCollectionNameIndex).toString();
+                if(count && name.length())
+                {
+                    msg = hbTrId("txt_videos_dpopinfo_ln_videos_added_to_1", count).arg(name);
+                }
+            }
+            error = false;
+        break;
+        case VideoCollectionCommon::statusAllVideosAlreadyInCollection:
+            msg = hbTrId("txt_videos_info_all_videos_already_added_to_this_c");
+        break;
+        case VideoCollectionCommon::statusDeleteInProgress:
+            if(additional.isValid())
+            {
+                msg = hbTrId("txt_videos_dpopinfo_ln_videos_are_being_deleted", additional.toInt());
+            }
+            error = false;
+        break;
+        default: // no msg to show
+        return;
+    }
+
+    if(msg.count() > 0)
+    {
+        if(error)
+        {
+            HbMessageBox *messageBox = new HbMessageBox(msg, HbMessageBox::MessageTypeWarning);
+            messageBox->setAttribute(Qt::WA_DeleteOnClose);
+            messageBox->setObjectName(VIEW_UTILS_OBJECT_NAME_MESSAGE_BOX_WARNING);
+            messageBox->show();
+        }
+        else
+        {
+            HbNotificationDialog *infoNote = new HbNotificationDialog();
+            infoNote->setAttribute(Qt::WA_DeleteOnClose);
+            // only title can be two rows for HbNotificationDialog
+            infoNote->setTitleTextWrapping(Hb::TextWordWrap);
+            infoNote->setTitle(msg);
+            infoNote->setObjectName(VIEW_UTILS_OBJECT_NAME_STATUS_MSG);
+            infoNote->show();
+        }
+    }
+}
+
+// End of file