videocollection/videocollectionview/src/videolistselectiondialog.cpp
author hgs
Fri, 15 Oct 2010 16:29:10 +0300
changeset 67 72c709219fcd
parent 66 adb51f74b890
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:   videolist selection dialog implementation
hgs
parents:
diff changeset
    15
* 
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
67
hgs
parents: 66
diff changeset
    18
// Version : %version: 30.1.7 %
36
hgs
parents: 35
diff changeset
    19
hgs
parents: 35
diff changeset
    20
// INCLUDE FILES
hgs
parents: 35
diff changeset
    21
#include <qgraphicsitem.h>
67
hgs
parents: 66
diff changeset
    22
#include <qtimer.h>
hgs
parents: 66
diff changeset
    23
hgs
parents: 66
diff changeset
    24
#include <vcxmyvideosdefs.h>
hgs
parents: 66
diff changeset
    25
30
hgs
parents:
diff changeset
    26
#include <hbaction.h>
34
hgs
parents: 30
diff changeset
    27
#include <hbabstractitemview.h>
hgs
parents: 30
diff changeset
    28
#include <hbinputdialog.h>
67
hgs
parents: 66
diff changeset
    29
#include <hbwidget.h>
hgs
parents: 66
diff changeset
    30
#include <hblistview.h>
hgs
parents: 66
diff changeset
    31
#include <hblistviewitem.h>
34
hgs
parents: 30
diff changeset
    32
58
hgs
parents: 55
diff changeset
    33
#include "videoproxymodelgeneric.h"
30
hgs
parents:
diff changeset
    34
#include "videolistselectiondialog.h"
34
hgs
parents: 30
diff changeset
    35
#include "videocollectionwrapper.h"
hgs
parents: 30
diff changeset
    36
#include "videocollectionviewutils.h"
hgs
parents: 30
diff changeset
    37
#include "videocollectionclient.h"
36
hgs
parents: 35
diff changeset
    38
#include "videocollectiontrace.h"
67
hgs
parents: 66
diff changeset
    39
#include "videothumbnaildata.h"
34
hgs
parents: 30
diff changeset
    40
38
hgs
parents: 37
diff changeset
    41
// Object names.
hgs
parents: 37
diff changeset
    42
const char* const SELECTION_DIALOG_OBJECT_NAME_NEW_COLLECTION = "vc:SelectionDialogNewCollection";
40
hgs
parents: 38
diff changeset
    43
const char* const LIST_VIEW_OBJECT_NAME_CREATE_COLLECTION     = "vc::ListViewInputDialogCreateCollection";
38
hgs
parents: 37
diff changeset
    44
const char* const SELECTION_DIALOG_OBJECT_NAME_BUTTON_OK      = "vc:SelectionDialogButtonOk";
hgs
parents: 37
diff changeset
    45
const char* const SELECTION_DIALOG_OBJECT_NAME_BUTTON_CANCEL  = "vc:SelectionDialogButtonCancel";
hgs
parents: 37
diff changeset
    46
67
hgs
parents: 66
diff changeset
    47
// Interval in ms to report the scroll position.
hgs
parents: 66
diff changeset
    48
const int SCROLL_POSITION_TIMER_TIMEOUT = 100;
hgs
parents: 66
diff changeset
    49
34
hgs
parents: 30
diff changeset
    50
/**
hgs
parents: 30
diff changeset
    51
 * global qHash function required fo creating hash values for TMPXItemId -keys
hgs
parents: 30
diff changeset
    52
 */
hgs
parents: 30
diff changeset
    53
inline uint qHash(TMPXItemId key) 
hgs
parents: 30
diff changeset
    54
{ 
hgs
parents: 30
diff changeset
    55
    QPair<uint, uint> keyPair(key.iId1, key.iId2); 
hgs
parents: 30
diff changeset
    56
hgs
parents: 30
diff changeset
    57
    return qHash(keyPair);
hgs
parents: 30
diff changeset
    58
}
30
hgs
parents:
diff changeset
    59
40
hgs
parents: 38
diff changeset
    60
/**
hgs
parents: 38
diff changeset
    61
 * Helper function for creating a new album name query dialog 
hgs
parents: 38
diff changeset
    62
 */
hgs
parents: 38
diff changeset
    63
HbInputDialog* gCreateNewAlbumNameDialog(const char* objectName)
hgs
parents: 38
diff changeset
    64
{
hgs
parents: 38
diff changeset
    65
    QString label(hbTrId("txt_videos_title_enter_name"));
hgs
parents: 38
diff changeset
    66
    QString text(hbTrId("txt_videos_dialog_entry_new_collection"));
hgs
parents: 38
diff changeset
    67
    HbInputDialog *dialog = new HbInputDialog();
hgs
parents: 38
diff changeset
    68
    dialog->setAttribute(Qt::WA_DeleteOnClose);
hgs
parents: 38
diff changeset
    69
    dialog->setObjectName(objectName);
hgs
parents: 38
diff changeset
    70
    dialog->setPromptText(label);
hgs
parents: 38
diff changeset
    71
    dialog->setValue(text);
hgs
parents: 38
diff changeset
    72
    return dialog;
hgs
parents: 38
diff changeset
    73
}
hgs
parents: 38
diff changeset
    74
30
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    76
// VideoListSelectionDialog
hgs
parents:
diff changeset
    77
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
//
67
hgs
parents: 66
diff changeset
    79
VideoListSelectionDialog::VideoListSelectionDialog( QGraphicsItem *parent)
hgs
parents: 66
diff changeset
    80
    : HbSelectionDialog( parent )
hgs
parents: 66
diff changeset
    81
    , mTypeOfSelection( ENoFunction )
36
hgs
parents: 35
diff changeset
    82
    , mModel( 0 )
50
hgs
parents: 40
diff changeset
    83
    , mModelReady( false )
hgs
parents: 40
diff changeset
    84
    , mAlbumListReady( false )
67
hgs
parents: 66
diff changeset
    85
    , mListInitialised( false )
36
hgs
parents: 35
diff changeset
    86
    , mPrimaryAction( 0 )
hgs
parents: 35
diff changeset
    87
    , mSecondaryAction( 0 )
67
hgs
parents: 66
diff changeset
    88
    , mScrollPositionTimer( 0 )
30
hgs
parents:
diff changeset
    89
{
36
hgs
parents: 35
diff changeset
    90
	FUNC_LOG;
37
hgs
parents: 36
diff changeset
    91
67
hgs
parents: 66
diff changeset
    92
    // create model and init list, this will create listview in HbSelectionDialog
hgs
parents: 66
diff changeset
    93
    mModel = VideoCollectionWrapper::instance().getGenericModel();
hgs
parents: 66
diff changeset
    94
    initList(0);
30
hgs
parents:
diff changeset
    95
}
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
// ~VideoListSelectionDialog
hgs
parents:
diff changeset
    99
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   100
//
hgs
parents:
diff changeset
   101
VideoListSelectionDialog::~VideoListSelectionDialog() 
hgs
parents:
diff changeset
   102
{
36
hgs
parents: 35
diff changeset
   103
	FUNC_LOG;
67
hgs
parents: 66
diff changeset
   104
hgs
parents: 66
diff changeset
   105
	delete mScrollPositionTimer;
hgs
parents: 66
diff changeset
   106
    delete mPrimaryAction;
hgs
parents: 66
diff changeset
   107
    delete mSecondaryAction;
30
hgs
parents:
diff changeset
   108
}
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   111
// setupContent
30
hgs
parents:
diff changeset
   112
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   113
//
67
hgs
parents: 66
diff changeset
   114
void VideoListSelectionDialog::setupContent(VideoListSelectionDialog::TSelectionFunction type, TMPXItemId activeItem)
30
hgs
parents:
diff changeset
   115
{
36
hgs
parents: 35
diff changeset
   116
	FUNC_LOG;
hgs
parents: 35
diff changeset
   117
	INFO_1("VideoListSelectionDialog::setupContent() type: %d", type);
67
hgs
parents: 66
diff changeset
   118
    if(type == ENoFunction)
30
hgs
parents:
diff changeset
   119
    {
34
hgs
parents: 30
diff changeset
   120
        return;
hgs
parents: 30
diff changeset
   121
    }
hgs
parents: 30
diff changeset
   122
   
hgs
parents: 30
diff changeset
   123
    mTypeOfSelection = type; 
hgs
parents: 30
diff changeset
   124
    if(!initDialog())
hgs
parents: 30
diff changeset
   125
    {
36
hgs
parents: 35
diff changeset
   126
        ERROR(-1, "VideoListSelectionDialog::setupContent() dialog init failed.");
30
hgs
parents:
diff changeset
   127
        return;
hgs
parents:
diff changeset
   128
    }
34
hgs
parents: 30
diff changeset
   129
    mSelectedVideos.clear();
hgs
parents: 30
diff changeset
   130
    mSelectedAlbumId = TMPXItemId::InvalidId();
40
hgs
parents: 38
diff changeset
   131
    mNewAlbumText = QString();
30
hgs
parents:
diff changeset
   132
    
34
hgs
parents: 30
diff changeset
   133
    // if provided "owner" is album or category    
hgs
parents: 30
diff changeset
   134
    if(activeItem != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   135
    {
hgs
parents: 30
diff changeset
   136
        // if album, set as "selected"
hgs
parents: 30
diff changeset
   137
        if(activeItem.iId2 == KVcxMvcMediaTypeAlbum)
hgs
parents: 30
diff changeset
   138
        {
hgs
parents: 30
diff changeset
   139
            mSelectedAlbumId = activeItem;
hgs
parents: 30
diff changeset
   140
        }
hgs
parents: 30
diff changeset
   141
        else if(activeItem.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   142
        {
hgs
parents: 30
diff changeset
   143
            mSelectedVideos.insert(activeItem);
hgs
parents: 30
diff changeset
   144
        }
hgs
parents: 30
diff changeset
   145
    }
hgs
parents: 30
diff changeset
   146
    // set (or reset) generic id filter
35
hgs
parents: 34
diff changeset
   147
    bool filterValue = true;
40
hgs
parents: 38
diff changeset
   148
    if(mTypeOfSelection == EAddToCollection || 
hgs
parents: 38
diff changeset
   149
       mTypeOfSelection == ESelectCollection ||
hgs
parents: 38
diff changeset
   150
       mTypeOfSelection == ECreateCollection)
35
hgs
parents: 34
diff changeset
   151
    {
hgs
parents: 34
diff changeset
   152
        filterValue = false;
hgs
parents: 34
diff changeset
   153
    }
hgs
parents: 34
diff changeset
   154
    mModel->setGenericIdFilter(activeItem, filterValue);    
34
hgs
parents: 30
diff changeset
   155
    activateSelection();
hgs
parents: 30
diff changeset
   156
}
hgs
parents: 30
diff changeset
   157
hgs
parents: 30
diff changeset
   158
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   159
// initDialog
hgs
parents: 30
diff changeset
   160
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   161
//
hgs
parents: 30
diff changeset
   162
bool VideoListSelectionDialog::initDialog()
hgs
parents: 30
diff changeset
   163
{
36
hgs
parents: 35
diff changeset
   164
	FUNC_LOG;
34
hgs
parents: 30
diff changeset
   165
    if(!mModel)
hgs
parents: 30
diff changeset
   166
    {
58
hgs
parents: 55
diff changeset
   167
        mModel = VideoCollectionWrapper::instance().getGenericModel();
34
hgs
parents: 30
diff changeset
   168
        if (!mModel)
hgs
parents: 30
diff changeset
   169
        {
hgs
parents: 30
diff changeset
   170
           return false;
hgs
parents: 30
diff changeset
   171
        }
35
hgs
parents: 34
diff changeset
   172
    }  
67
hgs
parents: 66
diff changeset
   173
hgs
parents: 66
diff changeset
   174
    if(!mScrollPositionTimer)
34
hgs
parents: 30
diff changeset
   175
    {
67
hgs
parents: 66
diff changeset
   176
        mScrollPositionTimer = new QTimer();
hgs
parents: 66
diff changeset
   177
        mScrollPositionTimer->setSingleShot(true);
hgs
parents: 66
diff changeset
   178
    }
hgs
parents: 66
diff changeset
   179
    return true;
hgs
parents: 66
diff changeset
   180
}
hgs
parents: 66
diff changeset
   181
hgs
parents: 66
diff changeset
   182
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   183
// initList
hgs
parents: 66
diff changeset
   184
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   185
//
hgs
parents: 66
diff changeset
   186
bool VideoListSelectionDialog::initList(VideoProxyModelGeneric *model)
hgs
parents: 66
diff changeset
   187
{
hgs
parents: 66
diff changeset
   188
    FUNC_LOG;
hgs
parents: 66
diff changeset
   189
hgs
parents: 66
diff changeset
   190
    setModel(model);
hgs
parents: 66
diff changeset
   191
hgs
parents: 66
diff changeset
   192
    if(!mListInitialised)
hgs
parents: 66
diff changeset
   193
    {
hgs
parents: 66
diff changeset
   194
        HbWidget* content = static_cast<HbWidget*>(this->primitive("content"));
hgs
parents: 66
diff changeset
   195
        if(content)
35
hgs
parents: 34
diff changeset
   196
        {
67
hgs
parents: 66
diff changeset
   197
            HbListView* view = static_cast<HbListView*>(content->primitive("list"));
hgs
parents: 66
diff changeset
   198
            if (view)
35
hgs
parents: 34
diff changeset
   199
            {
67
hgs
parents: 66
diff changeset
   200
                HbListViewItem *prototype = view->listItemPrototype();
hgs
parents: 66
diff changeset
   201
                if(prototype)
hgs
parents: 66
diff changeset
   202
                {
hgs
parents: 66
diff changeset
   203
                    prototype->setGraphicsSize(HbListViewItem::WideThumbnail);
hgs
parents: 66
diff changeset
   204
                }
hgs
parents: 66
diff changeset
   205
                view->setItemRecycling(true);
hgs
parents: 66
diff changeset
   206
                view->setClampingStyle(HbScrollArea::BounceBackClamping);
hgs
parents: 66
diff changeset
   207
                view->setScrollingStyle(HbScrollArea::PanWithFollowOn);
hgs
parents: 66
diff changeset
   208
                view->setFrictionEnabled(true);
hgs
parents: 66
diff changeset
   209
                view->setUniformItemSizes(true);
hgs
parents: 66
diff changeset
   210
                view->setSelectionMode(HbAbstractItemView::NoSelection);
hgs
parents: 66
diff changeset
   211
                view->setItemPixmapCacheEnabled(true);
hgs
parents: 66
diff changeset
   212
                view->setEnabledAnimations(HbAbstractItemView::None);
hgs
parents: 66
diff changeset
   213
hgs
parents: 66
diff changeset
   214
                mListInitialised = true;
35
hgs
parents: 34
diff changeset
   215
            }
hgs
parents: 34
diff changeset
   216
        }
34
hgs
parents: 30
diff changeset
   217
    }
67
hgs
parents: 66
diff changeset
   218
    return mListInitialised;
34
hgs
parents: 30
diff changeset
   219
}
hgs
parents: 30
diff changeset
   220
hgs
parents: 30
diff changeset
   221
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   222
// activateSelection
hgs
parents: 30
diff changeset
   223
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   224
//
67
hgs
parents: 66
diff changeset
   225
void VideoListSelectionDialog::activateSelection(bool changeMode)
34
hgs
parents: 30
diff changeset
   226
{
36
hgs
parents: 35
diff changeset
   227
	FUNC_LOG;
67
hgs
parents: 66
diff changeset
   228
    QString headingTxt("");
hgs
parents: 66
diff changeset
   229
    QString primaryTxt("");
hgs
parents: 66
diff changeset
   230
    // create texts
hgs
parents: 66
diff changeset
   231
    switch(mTypeOfSelection)
hgs
parents: 66
diff changeset
   232
    {
hgs
parents: 66
diff changeset
   233
        case EDeleteVideos:
hgs
parents: 66
diff changeset
   234
            primaryTxt = hbTrId("txt_common_button_delete");
hgs
parents: 66
diff changeset
   235
            headingTxt = hbTrId("txt_videos_title_delete_videos");
hgs
parents: 66
diff changeset
   236
        break;
hgs
parents: 66
diff changeset
   237
        case EAddToCollection:
hgs
parents: 66
diff changeset
   238
            primaryTxt = hbTrId("txt_common_button_add");
hgs
parents: 66
diff changeset
   239
            headingTxt = hbTrId("txt_videos_title_add_videos");
hgs
parents: 66
diff changeset
   240
        break;
hgs
parents: 66
diff changeset
   241
        case ECreateCollection:
hgs
parents: 66
diff changeset
   242
            primaryTxt = hbTrId("txt_common_button_ok");
hgs
parents: 66
diff changeset
   243
            headingTxt = hbTrId("txt_videos_title_add_videos");
hgs
parents: 66
diff changeset
   244
        break;
hgs
parents: 66
diff changeset
   245
        case ERemoveFromCollection:
hgs
parents: 66
diff changeset
   246
            primaryTxt = hbTrId("txt_common_button_remove");
hgs
parents: 66
diff changeset
   247
            headingTxt = hbTrId("txt_videos_title_remove_videos");
hgs
parents: 66
diff changeset
   248
        break;
hgs
parents: 66
diff changeset
   249
        case ESelectCollection:
hgs
parents: 66
diff changeset
   250
            primaryTxt = hbTrId("txt_videos_button_new");
hgs
parents: 66
diff changeset
   251
            headingTxt = hbTrId("txt_videos_title_select_collection");
hgs
parents: 66
diff changeset
   252
        break;
hgs
parents: 66
diff changeset
   253
        default:
hgs
parents: 66
diff changeset
   254
        break;
hgs
parents: 66
diff changeset
   255
    }
hgs
parents: 66
diff changeset
   256
hgs
parents: 66
diff changeset
   257
    mModelReady = false;
hgs
parents: 66
diff changeset
   258
    mAlbumListReady = false;
hgs
parents: 66
diff changeset
   259
    setModel(0);
hgs
parents: 66
diff changeset
   260
hgs
parents: 66
diff changeset
   261
    if(mTypeOfSelection == ESelectCollection)
hgs
parents: 66
diff changeset
   262
    {
hgs
parents: 66
diff changeset
   263
        mModel->open(VideoCollectionCommon::ELevelCategory);
hgs
parents: 66
diff changeset
   264
        VideoCollectionViewUtils::sortModel(mModel, false, VideoCollectionCommon::ELevelCategory);
hgs
parents: 66
diff changeset
   265
hgs
parents: 66
diff changeset
   266
        setModel(mModel);
hgs
parents: 66
diff changeset
   267
        setSelectionMode(HbAbstractItemView::NoSelection);
hgs
parents: 66
diff changeset
   268
hgs
parents: 66
diff changeset
   269
        if(changeMode)
hgs
parents: 66
diff changeset
   270
        {
hgs
parents: 66
diff changeset
   271
            removeAction(mSecondaryAction);
hgs
parents: 66
diff changeset
   272
            if(!mPrimaryAction)
hgs
parents: 66
diff changeset
   273
            {
hgs
parents: 66
diff changeset
   274
                mPrimaryAction = new HbAction();
hgs
parents: 66
diff changeset
   275
                mPrimaryAction->setObjectName(SELECTION_DIALOG_OBJECT_NAME_BUTTON_OK);
hgs
parents: 66
diff changeset
   276
                addAction(mPrimaryAction);
hgs
parents: 66
diff changeset
   277
            }
hgs
parents: 66
diff changeset
   278
            // New collection button is always enabled for collection selection.
hgs
parents: 66
diff changeset
   279
            mPrimaryAction->setDisabled(false);
hgs
parents: 66
diff changeset
   280
        }
hgs
parents: 66
diff changeset
   281
        else
hgs
parents: 66
diff changeset
   282
        {
hgs
parents: 66
diff changeset
   283
            clearActions();
hgs
parents: 66
diff changeset
   284
hgs
parents: 66
diff changeset
   285
            if(!mPrimaryAction)
hgs
parents: 66
diff changeset
   286
            {
hgs
parents: 66
diff changeset
   287
                mPrimaryAction = new HbAction(primaryTxt);
hgs
parents: 66
diff changeset
   288
                mPrimaryAction->setObjectName(SELECTION_DIALOG_OBJECT_NAME_BUTTON_OK);
hgs
parents: 66
diff changeset
   289
            }
hgs
parents: 66
diff changeset
   290
            else
hgs
parents: 66
diff changeset
   291
            {
hgs
parents: 66
diff changeset
   292
                mPrimaryAction->setText(primaryTxt);
hgs
parents: 66
diff changeset
   293
            }
hgs
parents: 66
diff changeset
   294
            addAction(mPrimaryAction);
hgs
parents: 66
diff changeset
   295
hgs
parents: 66
diff changeset
   296
            if(!mSecondaryAction)
hgs
parents: 66
diff changeset
   297
            {
hgs
parents: 66
diff changeset
   298
                mSecondaryAction = new HbAction(hbTrId("txt_common_button_cancel"));
hgs
parents: 66
diff changeset
   299
                mSecondaryAction->setObjectName(SELECTION_DIALOG_OBJECT_NAME_BUTTON_CANCEL);
hgs
parents: 66
diff changeset
   300
            }
hgs
parents: 66
diff changeset
   301
            addAction(mSecondaryAction);
hgs
parents: 66
diff changeset
   302
hgs
parents: 66
diff changeset
   303
            // New collection button is always enabled for collection selection.
hgs
parents: 66
diff changeset
   304
            mPrimaryAction->setDisabled(false);
hgs
parents: 66
diff changeset
   305
        }
hgs
parents: 66
diff changeset
   306
    }
hgs
parents: 66
diff changeset
   307
    else
hgs
parents: 66
diff changeset
   308
    {
hgs
parents: 66
diff changeset
   309
        mModel->open(VideoCollectionCommon::ELevelVideos);
hgs
parents: 66
diff changeset
   310
        VideoCollectionViewUtils::sortModel(mModel, false, VideoCollectionCommon::ELevelVideos);
hgs
parents: 66
diff changeset
   311
hgs
parents: 66
diff changeset
   312
        setModel(mModel);
hgs
parents: 66
diff changeset
   313
        setSelectionMode(HbAbstractItemView::MultiSelection);
hgs
parents: 66
diff changeset
   314
        clearActions();
hgs
parents: 66
diff changeset
   315
hgs
parents: 66
diff changeset
   316
        if(!mPrimaryAction)
hgs
parents: 66
diff changeset
   317
        {
hgs
parents: 66
diff changeset
   318
            mPrimaryAction = new HbAction(primaryTxt);
hgs
parents: 66
diff changeset
   319
            mPrimaryAction->setObjectName(SELECTION_DIALOG_OBJECT_NAME_BUTTON_OK);
hgs
parents: 66
diff changeset
   320
        }
hgs
parents: 66
diff changeset
   321
        else
hgs
parents: 66
diff changeset
   322
        {
hgs
parents: 66
diff changeset
   323
            mPrimaryAction->setText(primaryTxt);
hgs
parents: 66
diff changeset
   324
        }
hgs
parents: 66
diff changeset
   325
        addAction(mPrimaryAction);
hgs
parents: 66
diff changeset
   326
hgs
parents: 66
diff changeset
   327
        // Add button will be enabled when videos are selected from the list.
hgs
parents: 66
diff changeset
   328
        mPrimaryAction->setDisabled(mTypeOfSelection != ECreateCollection);
hgs
parents: 66
diff changeset
   329
hgs
parents: 66
diff changeset
   330
        if(!mSecondaryAction)
hgs
parents: 66
diff changeset
   331
        {
hgs
parents: 66
diff changeset
   332
            mSecondaryAction = new HbAction(hbTrId("txt_common_button_cancel"));
hgs
parents: 66
diff changeset
   333
            mSecondaryAction->setObjectName(SELECTION_DIALOG_OBJECT_NAME_BUTTON_CANCEL);
hgs
parents: 66
diff changeset
   334
        }
hgs
parents: 66
diff changeset
   335
        addAction(mSecondaryAction);
hgs
parents: 66
diff changeset
   336
    }
hgs
parents: 66
diff changeset
   337
    setHeadingText(headingTxt);
hgs
parents: 66
diff changeset
   338
40
hgs
parents: 38
diff changeset
   339
    // "add to collection", "remove from collection" and "create collection" -selections
67
hgs
parents: 66
diff changeset
   340
    // needs additional functionality for primary key
34
hgs
parents: 30
diff changeset
   341
    if(mTypeOfSelection == EAddToCollection ||
40
hgs
parents: 38
diff changeset
   342
       mTypeOfSelection == ERemoveFromCollection ||
hgs
parents: 38
diff changeset
   343
       mTypeOfSelection == ECreateCollection)
34
hgs
parents: 30
diff changeset
   344
    {
36
hgs
parents: 35
diff changeset
   345
        mPrimaryAction->disconnect(SIGNAL(triggered()));
hgs
parents: 35
diff changeset
   346
        connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(primaryActionTriggeredSlot()));
30
hgs
parents:
diff changeset
   347
    }
hgs
parents:
diff changeset
   348
}
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   351
// exec
hgs
parents:
diff changeset
   352
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   353
//
35
hgs
parents: 34
diff changeset
   354
void VideoListSelectionDialog::exec()
30
hgs
parents:
diff changeset
   355
{
36
hgs
parents: 35
diff changeset
   356
	FUNC_LOG;
67
hgs
parents: 66
diff changeset
   357
hgs
parents: 66
diff changeset
   358
	connectSignals();
50
hgs
parents: 40
diff changeset
   359
55
hgs
parents: 50
diff changeset
   360
    if(mTypeOfSelection == ECreateCollection)
35
hgs
parents: 34
diff changeset
   361
    {
55
hgs
parents: 50
diff changeset
   362
        // note this does not leak memory as the dialog will destroy itself upon close.
hgs
parents: 50
diff changeset
   363
        HbInputDialog *dialog = gCreateNewAlbumNameDialog(LIST_VIEW_OBJECT_NAME_CREATE_COLLECTION);
hgs
parents: 50
diff changeset
   364
        dialog->open(this, SLOT(newAlbumNameDialogFinished(HbAction *)));
hgs
parents: 50
diff changeset
   365
    }
hgs
parents: 50
diff changeset
   366
    else if(mModel->rowCount())
hgs
parents: 50
diff changeset
   367
    {
hgs
parents: 50
diff changeset
   368
        // show dialog
67
hgs
parents: 66
diff changeset
   369
        VideoThumbnailData::instance().enableBackgroundFetching(true);
hgs
parents: 66
diff changeset
   370
        fetchThumbnailsForVisibleItems();
hgs
parents: 66
diff changeset
   371
        HbSelectionDialog::open();
35
hgs
parents: 34
diff changeset
   372
    }
50
hgs
parents: 40
diff changeset
   373
    else if((mModelReady && mTypeOfSelection != ESelectCollection) || 
hgs
parents: 40
diff changeset
   374
            (mAlbumListReady && mTypeOfSelection == ESelectCollection))
35
hgs
parents: 34
diff changeset
   375
    {
36
hgs
parents: 35
diff changeset
   376
        INFO("VideoListSelectionDialog::exec(): nothing to show, finishing.")
35
hgs
parents: 34
diff changeset
   377
        // no items, finish right away
36
hgs
parents: 35
diff changeset
   378
        finishedSlot(mPrimaryAction);
35
hgs
parents: 34
diff changeset
   379
    }
hgs
parents: 34
diff changeset
   380
}
hgs
parents: 34
diff changeset
   381
hgs
parents: 34
diff changeset
   382
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
   383
// finishedSlot
hgs
parents: 34
diff changeset
   384
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
   385
//
hgs
parents: 34
diff changeset
   386
void VideoListSelectionDialog::finishedSlot(HbAction *action)
hgs
parents: 34
diff changeset
   387
{
36
hgs
parents: 35
diff changeset
   388
	FUNC_LOG;
30
hgs
parents:
diff changeset
   389
    disconnectSignals();
67
hgs
parents: 66
diff changeset
   390
    if(mScrollPositionTimer)
hgs
parents: 66
diff changeset
   391
    {
hgs
parents: 66
diff changeset
   392
        if(mScrollPositionTimer->isActive())
hgs
parents: 66
diff changeset
   393
        {
hgs
parents: 66
diff changeset
   394
            mScrollPositionTimer->stop();
hgs
parents: 66
diff changeset
   395
        }
hgs
parents: 66
diff changeset
   396
        delete mScrollPositionTimer;
hgs
parents: 66
diff changeset
   397
        mScrollPositionTimer = 0;
hgs
parents: 66
diff changeset
   398
    }
hgs
parents: 66
diff changeset
   399
    if(action != mPrimaryAction)
35
hgs
parents: 34
diff changeset
   400
    {
67
hgs
parents: 66
diff changeset
   401
        if(mTypeOfSelection == ESelectCollection)
hgs
parents: 66
diff changeset
   402
        {
hgs
parents: 66
diff changeset
   403
            QModelIndexList selection = selectedModelIndexes();
hgs
parents: 66
diff changeset
   404
            int count(selection.count());
hgs
parents: 66
diff changeset
   405
hgs
parents: 66
diff changeset
   406
            if((count == 1) && (selection.at(0).isValid()))
hgs
parents: 66
diff changeset
   407
           {
hgs
parents: 66
diff changeset
   408
               mSelectedAlbumId = mModel->getMediaIdAtIndex(selection.at(0));
hgs
parents: 66
diff changeset
   409
           }
hgs
parents: 66
diff changeset
   410
            else
hgs
parents: 66
diff changeset
   411
            {
hgs
parents: 66
diff changeset
   412
                INFO("VideoListSelectionDialog::exec(): secondary action triggered.")
hgs
parents: 66
diff changeset
   413
                return;
hgs
parents: 66
diff changeset
   414
            }
hgs
parents: 66
diff changeset
   415
        }
hgs
parents: 66
diff changeset
   416
        else
hgs
parents: 66
diff changeset
   417
        {
hgs
parents: 66
diff changeset
   418
            INFO("VideoListSelectionDialog::exec(): secondary action triggered.")
hgs
parents: 66
diff changeset
   419
            return;
hgs
parents: 66
diff changeset
   420
        }
35
hgs
parents: 34
diff changeset
   421
    }
40
hgs
parents: 38
diff changeset
   422
    
38
hgs
parents: 37
diff changeset
   423
    if(mTypeOfSelection == ESelectCollection)
34
hgs
parents: 30
diff changeset
   424
    {
37
hgs
parents: 36
diff changeset
   425
        mTypeOfSelection = EAddToCollection;
38
hgs
parents: 37
diff changeset
   426
        if(mSelectedAlbumId == TMPXItemId::InvalidId())
35
hgs
parents: 34
diff changeset
   427
        {
50
hgs
parents: 40
diff changeset
   428
            close(); // closes selection dialog if it's open.
hgs
parents: 40
diff changeset
   429
            
40
hgs
parents: 38
diff changeset
   430
            // note this does not leak memory as the dialog will destroy itself upon close.
hgs
parents: 38
diff changeset
   431
            HbInputDialog *dialog = gCreateNewAlbumNameDialog(SELECTION_DIALOG_OBJECT_NAME_NEW_COLLECTION);
38
hgs
parents: 37
diff changeset
   432
            dialog->open(this, SLOT(newAlbumNameDialogFinished(HbAction *)));
37
hgs
parents: 36
diff changeset
   433
       }
hgs
parents: 36
diff changeset
   434
       else
hgs
parents: 36
diff changeset
   435
       {
hgs
parents: 36
diff changeset
   436
           finalize();
35
hgs
parents: 34
diff changeset
   437
       }
37
hgs
parents: 36
diff changeset
   438
    }
hgs
parents: 36
diff changeset
   439
    else
hgs
parents: 36
diff changeset
   440
    {
hgs
parents: 36
diff changeset
   441
        finalize();
35
hgs
parents: 34
diff changeset
   442
    }
37
hgs
parents: 36
diff changeset
   443
}
hgs
parents: 36
diff changeset
   444
hgs
parents: 36
diff changeset
   445
// ---------------------------------------------------------------------------
hgs
parents: 36
diff changeset
   446
// newAlbumNameDialogFinished
hgs
parents: 36
diff changeset
   447
// ---------------------------------------------------------------------------
hgs
parents: 36
diff changeset
   448
//
hgs
parents: 36
diff changeset
   449
void VideoListSelectionDialog::newAlbumNameDialogFinished(HbAction *action)
hgs
parents: 36
diff changeset
   450
{
hgs
parents: 36
diff changeset
   451
    FUNC_LOG;
hgs
parents: 36
diff changeset
   452
    Q_UNUSED(action);
36
hgs
parents: 35
diff changeset
   453
    
37
hgs
parents: 36
diff changeset
   454
    HbInputDialog *dialog = static_cast<HbInputDialog*>(sender());
hgs
parents: 36
diff changeset
   455
    
hgs
parents: 36
diff changeset
   456
    QVariant variant = dialog->value();
hgs
parents: 36
diff changeset
   457
    
hgs
parents: 36
diff changeset
   458
    if(dialog->actions().first() == action && variant.isValid())
hgs
parents: 36
diff changeset
   459
    {
hgs
parents: 36
diff changeset
   460
        QString text = mModel->resolveAlbumName(variant.toString());
50
hgs
parents: 40
diff changeset
   461
        if(!text.isEmpty())
37
hgs
parents: 36
diff changeset
   462
        {
55
hgs
parents: 50
diff changeset
   463
            if(mSelectedVideos.count() == 0 && mModel->rowCount())
40
hgs
parents: 38
diff changeset
   464
            {
hgs
parents: 38
diff changeset
   465
                mNewAlbumText = text;
hgs
parents: 38
diff changeset
   466
                // show video selection dialog
67
hgs
parents: 66
diff changeset
   467
                VideoThumbnailData::instance().enableBackgroundFetching(true);
hgs
parents: 66
diff changeset
   468
                fetchThumbnailsForVisibleItems();
hgs
parents: 66
diff changeset
   469
                HbSelectionDialog::open();
40
hgs
parents: 38
diff changeset
   470
            }
hgs
parents: 38
diff changeset
   471
            else
hgs
parents: 38
diff changeset
   472
            {
hgs
parents: 38
diff changeset
   473
                mSelectedAlbumId = mModel->addNewAlbum(text);
hgs
parents: 38
diff changeset
   474
                finalize(text);
hgs
parents: 38
diff changeset
   475
            }
37
hgs
parents: 36
diff changeset
   476
        }
50
hgs
parents: 40
diff changeset
   477
        else
hgs
parents: 40
diff changeset
   478
        {
hgs
parents: 40
diff changeset
   479
            // new album name empty, effectively cancel, so disconnect signals.
hgs
parents: 40
diff changeset
   480
            disconnectSignals();
hgs
parents: 40
diff changeset
   481
        }
hgs
parents: 40
diff changeset
   482
    }
hgs
parents: 40
diff changeset
   483
    else
hgs
parents: 40
diff changeset
   484
    {
hgs
parents: 40
diff changeset
   485
        // new album dialog cancelled, disconnect signals.
hgs
parents: 40
diff changeset
   486
        disconnectSignals();
37
hgs
parents: 36
diff changeset
   487
    }
hgs
parents: 36
diff changeset
   488
}
hgs
parents: 36
diff changeset
   489
hgs
parents: 36
diff changeset
   490
// ---------------------------------------------------------------------------
hgs
parents: 36
diff changeset
   491
// finalize
hgs
parents: 36
diff changeset
   492
// ---------------------------------------------------------------------------
hgs
parents: 36
diff changeset
   493
//
hgs
parents: 36
diff changeset
   494
void VideoListSelectionDialog::finalize(QString albumName)
hgs
parents: 36
diff changeset
   495
{
67
hgs
parents: 66
diff changeset
   496
    close();
hgs
parents: 66
diff changeset
   497
    
36
hgs
parents: 35
diff changeset
   498
    // Must be checked again if type was ESelectCollection
40
hgs
parents: 38
diff changeset
   499
    if(mTypeOfSelection == EAddToCollection ||
hgs
parents: 38
diff changeset
   500
       mTypeOfSelection == ECreateCollection)
hgs
parents: 38
diff changeset
   501
    {
hgs
parents: 38
diff changeset
   502
        if(mTypeOfSelection == ECreateCollection)
hgs
parents: 38
diff changeset
   503
        {
hgs
parents: 38
diff changeset
   504
            mSelectedAlbumId = mModel->addNewAlbum(mNewAlbumText);
hgs
parents: 38
diff changeset
   505
            albumName = mNewAlbumText;
hgs
parents: 38
diff changeset
   506
        }
hgs
parents: 38
diff changeset
   507
        
35
hgs
parents: 34
diff changeset
   508
        if(mSelectedAlbumId != TMPXItemId::InvalidId() && mSelectedVideos.count())
hgs
parents: 34
diff changeset
   509
        {
hgs
parents: 34
diff changeset
   510
            if(mModel->addItemsInAlbum(mSelectedAlbumId, mSelectedVideos.toList()) == 0)
hgs
parents: 34
diff changeset
   511
            {
hgs
parents: 34
diff changeset
   512
                if(!albumName.length())
34
hgs
parents: 30
diff changeset
   513
                {
35
hgs
parents: 34
diff changeset
   514
                    albumName = getSelectedName();
34
hgs
parents: 30
diff changeset
   515
                }
38
hgs
parents: 37
diff changeset
   516
                QList<QVariant> dataList;
hgs
parents: 37
diff changeset
   517
                dataList.append(QVariant(mSelectedVideos.count()));
hgs
parents: 37
diff changeset
   518
                dataList.append(QVariant(albumName));
hgs
parents: 37
diff changeset
   519
                QVariant data = dataList;
35
hgs
parents: 34
diff changeset
   520
                VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 34
diff changeset
   521
                        VideoCollectionCommon::statusVideosAddedToCollection,
hgs
parents: 34
diff changeset
   522
                        data);
34
hgs
parents: 30
diff changeset
   523
            }
hgs
parents: 30
diff changeset
   524
        }
35
hgs
parents: 34
diff changeset
   525
    }
hgs
parents: 34
diff changeset
   526
    else if(mTypeOfSelection == ERemoveFromCollection)
hgs
parents: 34
diff changeset
   527
    {
hgs
parents: 34
diff changeset
   528
        if(mSelectedAlbumId != TMPXItemId::InvalidId() && mSelectedVideos.count())
34
hgs
parents: 30
diff changeset
   529
        {
35
hgs
parents: 34
diff changeset
   530
            if(mModel->removeItemsFromAlbum(mSelectedAlbumId, mSelectedVideos.toList()) == 0)
hgs
parents: 34
diff changeset
   531
            {
hgs
parents: 34
diff changeset
   532
                QVariant data = getSelectedName();
hgs
parents: 34
diff changeset
   533
                VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 34
diff changeset
   534
                        VideoCollectionCommon::statusVideosRemovedFromCollection,
hgs
parents: 34
diff changeset
   535
                        data);
hgs
parents: 34
diff changeset
   536
            }
34
hgs
parents: 30
diff changeset
   537
        }
35
hgs
parents: 34
diff changeset
   538
    }
hgs
parents: 34
diff changeset
   539
    // user is deleting videos
hgs
parents: 34
diff changeset
   540
    else if(mTypeOfSelection == EDeleteVideos)
hgs
parents: 34
diff changeset
   541
    {
67
hgs
parents: 66
diff changeset
   542
        QModelIndexList selection = selectedModelIndexes();
hgs
parents: 66
diff changeset
   543
        QVariant data = selection.count();
hgs
parents: 66
diff changeset
   544
35
hgs
parents: 34
diff changeset
   545
        VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 34
diff changeset
   546
                VideoCollectionCommon::statusDeleteInProgress,
hgs
parents: 34
diff changeset
   547
                data);
67
hgs
parents: 66
diff changeset
   548
        // delete items
hgs
parents: 66
diff changeset
   549
        mModel->deleteItems(selection);
30
hgs
parents:
diff changeset
   550
    }
hgs
parents:
diff changeset
   551
}
hgs
parents:
diff changeset
   552
hgs
parents:
diff changeset
   553
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   554
// selectionChangedSlot
hgs
parents:
diff changeset
   555
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   556
//
67
hgs
parents: 66
diff changeset
   557
void VideoListSelectionDialog::selectionChangedSlot()
hgs
parents: 66
diff changeset
   558
{
hgs
parents: 66
diff changeset
   559
    FUNC_LOG;
36
hgs
parents: 35
diff changeset
   560
    if(!mPrimaryAction || mTypeOfSelection == ESelectCollection)
30
hgs
parents:
diff changeset
   561
    {
36
hgs
parents: 35
diff changeset
   562
        INFO("VideoListSelectionDialog::selectionChangedSlot(): no primary action or we are selecting collection.")
30
hgs
parents:
diff changeset
   563
        return;
hgs
parents:
diff changeset
   564
    }
67
hgs
parents: 66
diff changeset
   565
hgs
parents: 66
diff changeset
   566
    QModelIndexList selected(selectedModelIndexes());
hgs
parents: 66
diff changeset
   567
hgs
parents: 66
diff changeset
   568
    if(selected.count() > 0)
30
hgs
parents:
diff changeset
   569
    {
36
hgs
parents: 35
diff changeset
   570
        mPrimaryAction->setDisabled(false);
40
hgs
parents: 38
diff changeset
   571
        if(mTypeOfSelection == ECreateCollection)
67
hgs
parents: 66
diff changeset
   572
40
hgs
parents: 38
diff changeset
   573
        {
hgs
parents: 38
diff changeset
   574
            mPrimaryAction->setText(hbTrId("txt_common_button_add"));
hgs
parents: 38
diff changeset
   575
        }
30
hgs
parents:
diff changeset
   576
    }
hgs
parents:
diff changeset
   577
    else
hgs
parents:
diff changeset
   578
    {
40
hgs
parents: 38
diff changeset
   579
        mPrimaryAction->setDisabled(mTypeOfSelection != ECreateCollection);
hgs
parents: 38
diff changeset
   580
        
hgs
parents: 38
diff changeset
   581
        if(mTypeOfSelection == ECreateCollection)
hgs
parents: 38
diff changeset
   582
        {
hgs
parents: 38
diff changeset
   583
            mPrimaryAction->setText(hbTrId("txt_common_button_ok"));
hgs
parents: 38
diff changeset
   584
        }
34
hgs
parents: 30
diff changeset
   585
    }
hgs
parents: 30
diff changeset
   586
}
hgs
parents: 30
diff changeset
   587
hgs
parents: 30
diff changeset
   588
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   589
// modelReadySlot
hgs
parents: 30
diff changeset
   590
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   591
//
hgs
parents: 30
diff changeset
   592
void VideoListSelectionDialog::modelReadySlot()
hgs
parents: 30
diff changeset
   593
{
36
hgs
parents: 35
diff changeset
   594
	FUNC_LOG;
50
hgs
parents: 40
diff changeset
   595
    mModelReady = true;
hgs
parents: 40
diff changeset
   596
    
hgs
parents: 40
diff changeset
   597
	if(mTypeOfSelection != ESelectCollection)
hgs
parents: 40
diff changeset
   598
	{
hgs
parents: 40
diff changeset
   599
        if(!mModel->rowCount())
hgs
parents: 40
diff changeset
   600
        {
hgs
parents: 40
diff changeset
   601
            // no items, finish right away
hgs
parents: 40
diff changeset
   602
            INFO("VideoListSelectionDialog::modelReadySlot(): nothing to show, finishing.");
hgs
parents: 40
diff changeset
   603
            
hgs
parents: 40
diff changeset
   604
            if(mTypeOfSelection == EAddToCollection ||
hgs
parents: 40
diff changeset
   605
               mTypeOfSelection == ERemoveFromCollection)
hgs
parents: 40
diff changeset
   606
            {
hgs
parents: 40
diff changeset
   607
                primaryActionTriggeredSlot();
hgs
parents: 40
diff changeset
   608
            }
hgs
parents: 40
diff changeset
   609
            else
hgs
parents: 40
diff changeset
   610
            {
hgs
parents: 40
diff changeset
   611
                finishedSlot(mPrimaryAction);
hgs
parents: 40
diff changeset
   612
            }
hgs
parents: 40
diff changeset
   613
            return;
hgs
parents: 40
diff changeset
   614
        }
hgs
parents: 40
diff changeset
   615
            
hgs
parents: 40
diff changeset
   616
        // if dialog is not yet visible, bring it visible. 
hgs
parents: 40
diff changeset
   617
        if(!isVisible() && mTypeOfSelection != ECreateCollection)
hgs
parents: 40
diff changeset
   618
        {
67
hgs
parents: 66
diff changeset
   619
            HbSelectionDialog::open();
50
hgs
parents: 40
diff changeset
   620
        }
67
hgs
parents: 66
diff changeset
   621
    }
50
hgs
parents: 40
diff changeset
   622
}
hgs
parents: 40
diff changeset
   623
hgs
parents: 40
diff changeset
   624
// ---------------------------------------------------------------------------
hgs
parents: 40
diff changeset
   625
// albumListReadySlot
hgs
parents: 40
diff changeset
   626
// ---------------------------------------------------------------------------
hgs
parents: 40
diff changeset
   627
//
hgs
parents: 40
diff changeset
   628
void VideoListSelectionDialog::albumListReadySlot()
hgs
parents: 40
diff changeset
   629
{
hgs
parents: 40
diff changeset
   630
    mAlbumListReady = true;
hgs
parents: 40
diff changeset
   631
    
35
hgs
parents: 34
diff changeset
   632
    if(mTypeOfSelection == ESelectCollection)
34
hgs
parents: 30
diff changeset
   633
    {
35
hgs
parents: 34
diff changeset
   634
        if(!mModel->rowCount())
34
hgs
parents: 30
diff changeset
   635
        {
50
hgs
parents: 40
diff changeset
   636
            finishedSlot(mPrimaryAction);
35
hgs
parents: 34
diff changeset
   637
            return;
34
hgs
parents: 30
diff changeset
   638
        }
67
hgs
parents: 66
diff changeset
   639
        else
hgs
parents: 66
diff changeset
   640
        {
hgs
parents: 66
diff changeset
   641
            mPrimaryAction->setText(hbTrId("txt_videos_button_new"));
hgs
parents: 66
diff changeset
   642
        }
50
hgs
parents: 40
diff changeset
   643
        // if dialog is not yet visible, bring it visible. 
hgs
parents: 40
diff changeset
   644
        if(!isVisible())
hgs
parents: 40
diff changeset
   645
        {
67
hgs
parents: 66
diff changeset
   646
            HbSelectionDialog::open();
50
hgs
parents: 40
diff changeset
   647
        }
35
hgs
parents: 34
diff changeset
   648
    }
34
hgs
parents: 30
diff changeset
   649
}
hgs
parents: 30
diff changeset
   650
hgs
parents: 30
diff changeset
   651
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   652
// primaryActionTriggeredSlot
hgs
parents: 30
diff changeset
   653
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   654
//
hgs
parents: 30
diff changeset
   655
void VideoListSelectionDialog::primaryActionTriggeredSlot()
hgs
parents: 30
diff changeset
   656
{
36
hgs
parents: 35
diff changeset
   657
	FUNC_LOG;
34
hgs
parents: 30
diff changeset
   658
    // reconnect primary action
36
hgs
parents: 35
diff changeset
   659
    mPrimaryAction->disconnect(SIGNAL(triggered()));
hgs
parents: 35
diff changeset
   660
    connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
hgs
parents: 35
diff changeset
   661
34
hgs
parents: 30
diff changeset
   662
    // update video items selection here before content changes.
67
hgs
parents: 66
diff changeset
   663
    QModelIndexList indexes = selectedModelIndexes();
50
hgs
parents: 40
diff changeset
   664
    int count = indexes.count();
34
hgs
parents: 30
diff changeset
   665
    TMPXItemId id = TMPXItemId::InvalidId();
hgs
parents: 30
diff changeset
   666
    for(int i = 0; i < count; ++i)
hgs
parents: 30
diff changeset
   667
    {
50
hgs
parents: 40
diff changeset
   668
        id = mModel->getMediaIdAtIndex(indexes.at(i));
34
hgs
parents: 30
diff changeset
   669
        if(id.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   670
        {
hgs
parents: 30
diff changeset
   671
            mSelectedVideos.insert(id);
hgs
parents: 30
diff changeset
   672
        }
hgs
parents: 30
diff changeset
   673
    }
hgs
parents: 30
diff changeset
   674
    
40
hgs
parents: 38
diff changeset
   675
    if(mSelectedAlbumId != TMPXItemId::InvalidId() ||
hgs
parents: 38
diff changeset
   676
       mTypeOfSelection == ECreateCollection)
34
hgs
parents: 30
diff changeset
   677
    {
36
hgs
parents: 35
diff changeset
   678
        INFO("VideoListSelectionDialog::primaryActionTriggeredSlot(): closing dialog.")
hgs
parents: 35
diff changeset
   679
        mPrimaryAction->trigger();
34
hgs
parents: 30
diff changeset
   680
        return;
hgs
parents: 30
diff changeset
   681
    }
hgs
parents: 30
diff changeset
   682
    else if(mTypeOfSelection == EAddToCollection)
hgs
parents: 30
diff changeset
   683
    {
36
hgs
parents: 35
diff changeset
   684
        INFO("VideoListSelectionDialog::primaryActionTriggeredSlot(): activating collection selection.")
34
hgs
parents: 30
diff changeset
   685
        // videos for collection selected, but collection 
hgs
parents: 30
diff changeset
   686
        // not yet selected, activate selection for it
hgs
parents: 30
diff changeset
   687
        mTypeOfSelection = ESelectCollection;
67
hgs
parents: 66
diff changeset
   688
        activateSelection(true);
hgs
parents: 66
diff changeset
   689
   }
34
hgs
parents: 30
diff changeset
   690
}
hgs
parents: 30
diff changeset
   691
hgs
parents: 30
diff changeset
   692
// ---------------------------------------------------------------------------
30
hgs
parents:
diff changeset
   693
// connectSignals
hgs
parents:
diff changeset
   694
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   695
//
hgs
parents:
diff changeset
   696
void VideoListSelectionDialog::connectSignals()
35
hgs
parents: 34
diff changeset
   697
{   
36
hgs
parents: 35
diff changeset
   698
	FUNC_LOG;
35
hgs
parents: 34
diff changeset
   699
    // dialog finished
hgs
parents: 34
diff changeset
   700
    connect(this, SIGNAL(finished(HbAction*)), this, SLOT(finishedSlot(HbAction*)));
67
hgs
parents: 66
diff changeset
   701
hgs
parents: 66
diff changeset
   702
    //selection changes
hgs
parents: 66
diff changeset
   703
    connect(this, SIGNAL(selectionChanged()), this, SLOT(selectionChangedSlot()));
36
hgs
parents: 35
diff changeset
   704
30
hgs
parents:
diff changeset
   705
    // model changes signals
50
hgs
parents: 40
diff changeset
   706
    connect(mModel->sourceModel(), SIGNAL(modelReady()), this, SLOT(modelReadySlot()));
hgs
parents: 40
diff changeset
   707
    connect(mModel->sourceModel(), SIGNAL(albumListReady()), this, SLOT(albumListReadySlot()));
67
hgs
parents: 66
diff changeset
   708
hgs
parents: 66
diff changeset
   709
    connect(mScrollPositionTimer, SIGNAL(timeout()), this, SLOT(scrollPositionTimerSlot()));
hgs
parents: 66
diff changeset
   710
hgs
parents: 66
diff changeset
   711
    HbWidget* content = static_cast<HbWidget*>(this->primitive("content"));
hgs
parents: 66
diff changeset
   712
    HbListView* view(0);
hgs
parents: 66
diff changeset
   713
    if(content)
hgs
parents: 66
diff changeset
   714
    {
hgs
parents: 66
diff changeset
   715
        view = static_cast<HbListView*>(content->primitive("list"));
hgs
parents: 66
diff changeset
   716
        if (view)
hgs
parents: 66
diff changeset
   717
        {
hgs
parents: 66
diff changeset
   718
            connect(view, SIGNAL(scrollingEnded()), this, SLOT(scrollingEndedSlot()));
hgs
parents: 66
diff changeset
   719
            connect(view, SIGNAL(scrollingStarted()), this, SLOT(scrollingStartedSlot()));
hgs
parents: 66
diff changeset
   720
            connect(view, SIGNAL(scrollPositionChanged(const QPointF &)),
hgs
parents: 66
diff changeset
   721
                   this, SLOT(scrollPositionChangedSlot(const QPointF &)));
hgs
parents: 66
diff changeset
   722
        }
hgs
parents: 66
diff changeset
   723
    }
30
hgs
parents:
diff changeset
   724
}
67
hgs
parents: 66
diff changeset
   725
30
hgs
parents:
diff changeset
   726
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   727
// disconnectSignals
hgs
parents:
diff changeset
   728
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   729
//
hgs
parents:
diff changeset
   730
void VideoListSelectionDialog::disconnectSignals()
35
hgs
parents: 34
diff changeset
   731
{   
36
hgs
parents: 35
diff changeset
   732
	FUNC_LOG;
35
hgs
parents: 34
diff changeset
   733
    disconnect(this, SIGNAL(finished(HbAction*)), this, SLOT(finishedSlot(HbAction*)));
67
hgs
parents: 66
diff changeset
   734
hgs
parents: 66
diff changeset
   735
    //selection changes
hgs
parents: 66
diff changeset
   736
    disconnect(this, SIGNAL(selectionChanged()), this, SLOT(selectionChangedSlot()));
36
hgs
parents: 35
diff changeset
   737
30
hgs
parents:
diff changeset
   738
    // model changes signals
67
hgs
parents: 66
diff changeset
   739
    disconnect(mModel->sourceModel(), SIGNAL(modelReady()), this, SLOT(modelReadySlot()));
50
hgs
parents: 40
diff changeset
   740
    disconnect(mModel->sourceModel(), SIGNAL(albumListReady()), this, SLOT(albumListReadySlot()));
67
hgs
parents: 66
diff changeset
   741
hgs
parents: 66
diff changeset
   742
    // check that scroll position timer is created
hgs
parents: 66
diff changeset
   743
    if (mScrollPositionTimer)
hgs
parents: 66
diff changeset
   744
    {
hgs
parents: 66
diff changeset
   745
        disconnect(
hgs
parents: 66
diff changeset
   746
            mScrollPositionTimer, SIGNAL(timeout()),
hgs
parents: 66
diff changeset
   747
            this, SLOT(scrollPositionTimerSlot()));
hgs
parents: 66
diff changeset
   748
    }
hgs
parents: 66
diff changeset
   749
hgs
parents: 66
diff changeset
   750
    HbWidget* content = static_cast<HbWidget*>(this->primitive("content"));
hgs
parents: 66
diff changeset
   751
    HbListView* view(0);
hgs
parents: 66
diff changeset
   752
    if(content)
hgs
parents: 66
diff changeset
   753
    {
hgs
parents: 66
diff changeset
   754
        view = static_cast<HbListView*>(content->primitive("list"));
hgs
parents: 66
diff changeset
   755
        if (view)
hgs
parents: 66
diff changeset
   756
        {
hgs
parents: 66
diff changeset
   757
            disconnect(view, SIGNAL(scrollingEnded()), this, SLOT(scrollingEndedSlot()));
hgs
parents: 66
diff changeset
   758
            disconnect(view, SIGNAL(scrollingStarted()), this, SLOT(scrollingStartedSlot()));
hgs
parents: 66
diff changeset
   759
            disconnect(view, SIGNAL(scrollPositionChanged(const QPointF &)),
hgs
parents: 66
diff changeset
   760
                   this, SLOT(scrollPositionChangedSlot(const QPointF &)));
hgs
parents: 66
diff changeset
   761
        }
hgs
parents: 66
diff changeset
   762
    }
30
hgs
parents:
diff changeset
   763
}
hgs
parents:
diff changeset
   764
34
hgs
parents: 30
diff changeset
   765
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   766
// getSelectedName
hgs
parents: 30
diff changeset
   767
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   768
//
hgs
parents: 30
diff changeset
   769
QString VideoListSelectionDialog::getSelectedName()
hgs
parents: 30
diff changeset
   770
{
36
hgs
parents: 35
diff changeset
   771
	FUNC_LOG;
34
hgs
parents: 30
diff changeset
   772
    QString name;
hgs
parents: 30
diff changeset
   773
    if(mSelectedAlbumId.iId2 > KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   774
    {
67
hgs
parents: 66
diff changeset
   775
        VideoProxyModelGeneric *model = VideoCollectionWrapper::instance().getGenericModel();
hgs
parents: 66
diff changeset
   776
34
hgs
parents: 30
diff changeset
   777
        if(!model)
hgs
parents: 30
diff changeset
   778
        {
hgs
parents: 30
diff changeset
   779
            return name;
hgs
parents: 30
diff changeset
   780
        }
hgs
parents: 30
diff changeset
   781
        QModelIndex index = model->indexOfId(mSelectedAlbumId);
hgs
parents: 30
diff changeset
   782
        if(index.isValid())
hgs
parents: 30
diff changeset
   783
        {
36
hgs
parents: 35
diff changeset
   784
            name = model->data(index, VideoCollectionCommon::KeyTitle).toString();
34
hgs
parents: 30
diff changeset
   785
        }
hgs
parents: 30
diff changeset
   786
    }
hgs
parents: 30
diff changeset
   787
    return name;
hgs
parents: 30
diff changeset
   788
}
30
hgs
parents:
diff changeset
   789
67
hgs
parents: 66
diff changeset
   790
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   791
// scrollingStartedSlot
hgs
parents: 66
diff changeset
   792
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   793
//
hgs
parents: 66
diff changeset
   794
void VideoListSelectionDialog::scrollingStartedSlot()
hgs
parents: 66
diff changeset
   795
{
hgs
parents: 66
diff changeset
   796
    FUNC_LOG_ADDR(this);
hgs
parents: 66
diff changeset
   797
    VideoThumbnailData::instance().enableThumbnailCreation(false);
hgs
parents: 66
diff changeset
   798
}
hgs
parents: 66
diff changeset
   799
hgs
parents: 66
diff changeset
   800
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   801
// scrollingEndedSlot
hgs
parents: 66
diff changeset
   802
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   803
//
hgs
parents: 66
diff changeset
   804
void VideoListSelectionDialog::scrollingEndedSlot()
hgs
parents: 66
diff changeset
   805
{
hgs
parents: 66
diff changeset
   806
    FUNC_LOG_ADDR(this);
hgs
parents: 66
diff changeset
   807
hgs
parents: 66
diff changeset
   808
    if(mScrollPositionTimer)
hgs
parents: 66
diff changeset
   809
    {
hgs
parents: 66
diff changeset
   810
        mScrollPositionTimer->stop();
hgs
parents: 66
diff changeset
   811
    }
hgs
parents: 66
diff changeset
   812
hgs
parents: 66
diff changeset
   813
    VideoThumbnailData::instance().enableBackgroundFetching(true);
hgs
parents: 66
diff changeset
   814
    VideoThumbnailData::instance().enableThumbnailCreation(true);
hgs
parents: 66
diff changeset
   815
    fetchThumbnailsForVisibleItems();
hgs
parents: 66
diff changeset
   816
}
hgs
parents: 66
diff changeset
   817
hgs
parents: 66
diff changeset
   818
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   819
// scrollPositionChangedSlot
hgs
parents: 66
diff changeset
   820
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   821
//
hgs
parents: 66
diff changeset
   822
void VideoListSelectionDialog::scrollPositionChangedSlot(const QPointF &newPosition)
hgs
parents: 66
diff changeset
   823
{
hgs
parents: 66
diff changeset
   824
    Q_UNUSED(newPosition);
hgs
parents: 66
diff changeset
   825
hgs
parents: 66
diff changeset
   826
    if(mScrollPositionTimer && !mScrollPositionTimer->isActive())
hgs
parents: 66
diff changeset
   827
        mScrollPositionTimer->start(SCROLL_POSITION_TIMER_TIMEOUT);
hgs
parents: 66
diff changeset
   828
}
hgs
parents: 66
diff changeset
   829
hgs
parents: 66
diff changeset
   830
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   831
// scrollPositionTimerSlot
hgs
parents: 66
diff changeset
   832
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   833
//
hgs
parents: 66
diff changeset
   834
void VideoListSelectionDialog::scrollPositionTimerSlot()
hgs
parents: 66
diff changeset
   835
{
hgs
parents: 66
diff changeset
   836
    FUNC_LOG_ADDR(this);
hgs
parents: 66
diff changeset
   837
hgs
parents: 66
diff changeset
   838
    fetchThumbnailsForVisibleItems();
hgs
parents: 66
diff changeset
   839
}
hgs
parents: 66
diff changeset
   840
hgs
parents: 66
diff changeset
   841
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   842
// fetchThumbnailsForVisibleItems
hgs
parents: 66
diff changeset
   843
// ---------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   844
//
hgs
parents: 66
diff changeset
   845
void VideoListSelectionDialog::fetchThumbnailsForVisibleItems()
hgs
parents: 66
diff changeset
   846
{
hgs
parents: 66
diff changeset
   847
    FUNC_LOG_ADDR(this);
hgs
parents: 66
diff changeset
   848
hgs
parents: 66
diff changeset
   849
    // No need to do anything if thumbnail fetching is not enabled.
hgs
parents: 66
diff changeset
   850
    if(!VideoThumbnailData::instance().backgroundFetchingEnabled())
hgs
parents: 66
diff changeset
   851
    {
hgs
parents: 66
diff changeset
   852
        return;
hgs
parents: 66
diff changeset
   853
    }
hgs
parents: 66
diff changeset
   854
    HbWidget* content = static_cast<HbWidget*>(this->primitive("content"));
hgs
parents: 66
diff changeset
   855
    HbListView* view(0);
hgs
parents: 66
diff changeset
   856
    if(content)
hgs
parents: 66
diff changeset
   857
    {
hgs
parents: 66
diff changeset
   858
        view = static_cast<HbListView*>(content->primitive("list"));
hgs
parents: 66
diff changeset
   859
        if (!view)
hgs
parents: 66
diff changeset
   860
        {
hgs
parents: 66
diff changeset
   861
            return;
hgs
parents: 66
diff changeset
   862
        }
hgs
parents: 66
diff changeset
   863
    }
hgs
parents: 66
diff changeset
   864
hgs
parents: 66
diff changeset
   865
    const QList<HbAbstractViewItem *> itemsVisible = view->visibleItems();
hgs
parents: 66
diff changeset
   866
hgs
parents: 66
diff changeset
   867
    if(itemsVisible.count() > 0)
hgs
parents: 66
diff changeset
   868
    {
hgs
parents: 66
diff changeset
   869
        int row = itemsVisible.value(0)->modelIndex().row();
hgs
parents: 66
diff changeset
   870
        VideoThumbnailData::instance().startBackgroundFetching(mModel, row);
hgs
parents: 66
diff changeset
   871
    }
hgs
parents: 66
diff changeset
   872
    else
hgs
parents: 66
diff changeset
   873
    {
hgs
parents: 66
diff changeset
   874
        // Nothing visible yet, start from first index.
hgs
parents: 66
diff changeset
   875
        VideoThumbnailData::instance().startBackgroundFetching(mModel, 0);
hgs
parents: 66
diff changeset
   876
    }
hgs
parents: 66
diff changeset
   877
}
hgs
parents: 66
diff changeset
   878
38
hgs
parents: 37
diff changeset
   879
// End of file