videocollection/videocollectionview/src/videolistselectiondialog.cpp
author hgs
Thu, 01 Apr 2010 23:32:44 +0300
changeset 35 3738fe97f027
parent 34 bbb98528c666
child 36 8aed59de29f9
permissions -rw-r--r--
201011
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
hgs
parents:
diff changeset
    18
#include <QGraphicsItem>
hgs
parents:
diff changeset
    19
#include <hblabel.h>
hgs
parents:
diff changeset
    20
#include <hbcheckbox.h>
hgs
parents:
diff changeset
    21
#include <hbaction.h>
hgs
parents:
diff changeset
    22
#include <hbstackedwidget.h>
34
hgs
parents: 30
diff changeset
    23
#include <hbabstractitemview.h>
hgs
parents: 30
diff changeset
    24
#include <hbinputdialog.h>
hgs
parents: 30
diff changeset
    25
#include <vcxmyvideosdefs.h>
hgs
parents: 30
diff changeset
    26
30
hgs
parents:
diff changeset
    27
#include "videocollectionuiloader.h"
hgs
parents:
diff changeset
    28
#include "videolistwidget.h"
hgs
parents:
diff changeset
    29
#include "videosortfilterproxymodel.h"
hgs
parents:
diff changeset
    30
#include "videolistselectiondialog.h"
34
hgs
parents: 30
diff changeset
    31
#include "videocollectionwrapper.h"
hgs
parents: 30
diff changeset
    32
#include "videocollectionviewutils.h"
hgs
parents: 30
diff changeset
    33
#include "videocollectionclient.h"
hgs
parents: 30
diff changeset
    34
hgs
parents: 30
diff changeset
    35
/**
hgs
parents: 30
diff changeset
    36
 * global qHash function required fo creating hash values for TMPXItemId -keys
hgs
parents: 30
diff changeset
    37
 */
hgs
parents: 30
diff changeset
    38
inline uint qHash(TMPXItemId key) 
hgs
parents: 30
diff changeset
    39
{ 
hgs
parents: 30
diff changeset
    40
    QPair<uint, uint> keyPair(key.iId1, key.iId2); 
hgs
parents: 30
diff changeset
    41
hgs
parents: 30
diff changeset
    42
    return qHash(keyPair);
hgs
parents: 30
diff changeset
    43
}
30
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    46
// VideoListSelectionDialog
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
//
hgs
parents:
diff changeset
    49
VideoListSelectionDialog::VideoListSelectionDialog(VideoCollectionUiLoader *uiLoader,
hgs
parents:
diff changeset
    50
                                                   QGraphicsItem *parent) : 
hgs
parents:
diff changeset
    51
HbDialog(parent),
hgs
parents:
diff changeset
    52
mUiLoader(uiLoader),
34
hgs
parents: 30
diff changeset
    53
mTypeOfSelection(-1),
30
hgs
parents:
diff changeset
    54
mHeading(0),
34
hgs
parents: 30
diff changeset
    55
mCheckboxContainer(0),
30
hgs
parents:
diff changeset
    56
mItemCount(0),
hgs
parents:
diff changeset
    57
mCheckBox(0),
hgs
parents:
diff changeset
    58
mListContainer(0),
34
hgs
parents: 30
diff changeset
    59
mForcedCheck(false),
hgs
parents: 30
diff changeset
    60
mModel(0),
hgs
parents: 30
diff changeset
    61
mListWidget(0)
30
hgs
parents:
diff changeset
    62
{
hgs
parents:
diff changeset
    63
    setDismissPolicy(HbDialog::NoDismiss);
34
hgs
parents: 30
diff changeset
    64
    setTimeout(HbDialog::NoTimeout);    
hgs
parents: 30
diff changeset
    65
hgs
parents: 30
diff changeset
    66
    // create model for list widget
hgs
parents: 30
diff changeset
    67
    mModel =
hgs
parents: 30
diff changeset
    68
        VideoCollectionWrapper::instance().getModel(
hgs
parents: 30
diff changeset
    69
            VideoCollectionWrapper::EGeneric);
hgs
parents: 30
diff changeset
    70
    if (mModel)
hgs
parents: 30
diff changeset
    71
    {
hgs
parents: 30
diff changeset
    72
        // create list widget
hgs
parents: 30
diff changeset
    73
        mListWidget = new VideoListWidget(mUiLoader);
hgs
parents: 30
diff changeset
    74
        if (mListWidget)
hgs
parents: 30
diff changeset
    75
        {
35
hgs
parents: 34
diff changeset
    76
            if(mListWidget->initialize(*mModel) < 0)
hgs
parents: 34
diff changeset
    77
            {
hgs
parents: 34
diff changeset
    78
                delete mListWidget;
hgs
parents: 34
diff changeset
    79
                mListWidget = 0;
hgs
parents: 34
diff changeset
    80
            }
34
hgs
parents: 30
diff changeset
    81
        }
hgs
parents: 30
diff changeset
    82
    }
30
hgs
parents:
diff changeset
    83
}
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    86
// ~VideoListSelectionDialog
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
//
hgs
parents:
diff changeset
    89
VideoListSelectionDialog::~VideoListSelectionDialog() 
hgs
parents:
diff changeset
    90
{
34
hgs
parents: 30
diff changeset
    91
    delete mListWidget;
30
hgs
parents:
diff changeset
    92
}
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
    95
// setupContent
30
hgs
parents:
diff changeset
    96
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    97
//
34
hgs
parents: 30
diff changeset
    98
void VideoListSelectionDialog::setupContent(int type, TMPXItemId activeItem)
30
hgs
parents:
diff changeset
    99
{
34
hgs
parents: 30
diff changeset
   100
    if(type < EDeleteVideos || type > ESelectCollection)
30
hgs
parents:
diff changeset
   101
    {
34
hgs
parents: 30
diff changeset
   102
        return;
hgs
parents: 30
diff changeset
   103
    }
hgs
parents: 30
diff changeset
   104
   
hgs
parents: 30
diff changeset
   105
    mTypeOfSelection = type; 
hgs
parents: 30
diff changeset
   106
    if(!initDialog())
hgs
parents: 30
diff changeset
   107
    {
30
hgs
parents:
diff changeset
   108
        return;
hgs
parents:
diff changeset
   109
    }
34
hgs
parents: 30
diff changeset
   110
    mSelection.clear();
hgs
parents: 30
diff changeset
   111
    mSelectedVideos.clear();
hgs
parents: 30
diff changeset
   112
    mSelectedAlbumId = TMPXItemId::InvalidId();
30
hgs
parents:
diff changeset
   113
    
34
hgs
parents: 30
diff changeset
   114
    // if provided "owner" is album or category    
hgs
parents: 30
diff changeset
   115
    if(activeItem != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   116
    {
hgs
parents: 30
diff changeset
   117
        // if album, set as "selected"
hgs
parents: 30
diff changeset
   118
        if(activeItem.iId2 == KVcxMvcMediaTypeAlbum)
hgs
parents: 30
diff changeset
   119
        {
hgs
parents: 30
diff changeset
   120
            mSelectedAlbumId = activeItem;
hgs
parents: 30
diff changeset
   121
        }
hgs
parents: 30
diff changeset
   122
        else if(activeItem.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   123
        {
hgs
parents: 30
diff changeset
   124
            mSelectedVideos.insert(activeItem);
hgs
parents: 30
diff changeset
   125
        }
hgs
parents: 30
diff changeset
   126
    }
hgs
parents: 30
diff changeset
   127
    // set (or reset) generic id filter
35
hgs
parents: 34
diff changeset
   128
    bool filterValue = true;
hgs
parents: 34
diff changeset
   129
    if(mTypeOfSelection == EAddToCollection || mTypeOfSelection == ESelectCollection)
hgs
parents: 34
diff changeset
   130
    {
hgs
parents: 34
diff changeset
   131
        filterValue = false;
hgs
parents: 34
diff changeset
   132
    }
hgs
parents: 34
diff changeset
   133
    mModel->setGenericIdFilter(activeItem, filterValue);    
34
hgs
parents: 30
diff changeset
   134
    activateSelection();
hgs
parents: 30
diff changeset
   135
}
hgs
parents: 30
diff changeset
   136
hgs
parents: 30
diff changeset
   137
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   138
// initDialog
hgs
parents: 30
diff changeset
   139
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   140
//
hgs
parents: 30
diff changeset
   141
bool VideoListSelectionDialog::initDialog()
hgs
parents: 30
diff changeset
   142
{
hgs
parents: 30
diff changeset
   143
    if(!mModel)
hgs
parents: 30
diff changeset
   144
    {
hgs
parents: 30
diff changeset
   145
        mModel = VideoCollectionWrapper::instance().getModel(VideoCollectionWrapper::EGeneric);
hgs
parents: 30
diff changeset
   146
        if (!mModel)
hgs
parents: 30
diff changeset
   147
        {
hgs
parents: 30
diff changeset
   148
           return false;
hgs
parents: 30
diff changeset
   149
        }
35
hgs
parents: 34
diff changeset
   150
    }  
34
hgs
parents: 30
diff changeset
   151
    if (!mListContainer)
hgs
parents: 30
diff changeset
   152
    {
hgs
parents: 30
diff changeset
   153
        mListContainer =
35
hgs
parents: 34
diff changeset
   154
                   mUiLoader->findWidget<HbStackedWidget>(DOCML_NAME_LIST_CONTAINER);
hgs
parents: 34
diff changeset
   155
    
hgs
parents: 34
diff changeset
   156
        if(!mListWidget)
hgs
parents: 34
diff changeset
   157
        {
hgs
parents: 34
diff changeset
   158
            mListWidget = new VideoListWidget(mUiLoader);
hgs
parents: 34
diff changeset
   159
            if(mListWidget->initialize(*mModel) < 0)
hgs
parents: 34
diff changeset
   160
            {
hgs
parents: 34
diff changeset
   161
                delete mListWidget;
hgs
parents: 34
diff changeset
   162
                mListWidget = 0;
hgs
parents: 34
diff changeset
   163
                mListContainer = 0;
hgs
parents: 34
diff changeset
   164
                return false;
hgs
parents: 34
diff changeset
   165
            }
hgs
parents: 34
diff changeset
   166
        }
hgs
parents: 34
diff changeset
   167
        if(mListContainer)
34
hgs
parents: 30
diff changeset
   168
        {
hgs
parents: 30
diff changeset
   169
            mListContainer->addWidget(mListWidget);
hgs
parents: 30
diff changeset
   170
        }
hgs
parents: 30
diff changeset
   171
    }
35
hgs
parents: 34
diff changeset
   172
30
hgs
parents:
diff changeset
   173
    if(!mHeading)
hgs
parents:
diff changeset
   174
    {
hgs
parents:
diff changeset
   175
        mHeading = mUiLoader->findWidget<HbLabel>(DOCML_NAME_DLG_HEADINGLBL);
hgs
parents:
diff changeset
   176
    }
34
hgs
parents: 30
diff changeset
   177
    if(!mCheckboxContainer)
hgs
parents: 30
diff changeset
   178
    {
hgs
parents: 30
diff changeset
   179
        mCheckboxContainer = mUiLoader->findWidget<HbWidget>(DOCML_NAME_CHECK_CONTAINER);
hgs
parents: 30
diff changeset
   180
    }
hgs
parents: 30
diff changeset
   181
30
hgs
parents:
diff changeset
   182
    if(!mItemCount)
hgs
parents:
diff changeset
   183
    {
hgs
parents:
diff changeset
   184
        mItemCount = mUiLoader->findWidget<HbLabel>(DOCML_NAME_LBL_SELECTION);
hgs
parents:
diff changeset
   185
        mItemCount->setAlignment(Qt::AlignRight);
34
hgs
parents: 30
diff changeset
   186
    }        
30
hgs
parents:
diff changeset
   187
    if(!mCheckBox)
hgs
parents:
diff changeset
   188
    {
hgs
parents:
diff changeset
   189
        mCheckBox = mUiLoader->findWidget<HbCheckBox >(DOCML_NAME_MARKALL);
hgs
parents:
diff changeset
   190
    }
hgs
parents:
diff changeset
   191
    if(!primaryAction())
hgs
parents:
diff changeset
   192
    {
35
hgs
parents: 34
diff changeset
   193
        setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"), this));
30
hgs
parents:
diff changeset
   194
    }
hgs
parents:
diff changeset
   195
    if(!secondaryAction())
hgs
parents:
diff changeset
   196
    {
35
hgs
parents: 34
diff changeset
   197
        setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), this));
34
hgs
parents: 30
diff changeset
   198
    }
hgs
parents: 30
diff changeset
   199
    if(!mListWidget || !mListContainer || !mHeading || !mCheckBox || !primaryAction() || !secondaryAction())
hgs
parents: 30
diff changeset
   200
    {
hgs
parents: 30
diff changeset
   201
        return false;
hgs
parents: 30
diff changeset
   202
    }
hgs
parents: 30
diff changeset
   203
    return true;  
hgs
parents: 30
diff changeset
   204
}
hgs
parents: 30
diff changeset
   205
hgs
parents: 30
diff changeset
   206
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   207
// activateSelection
hgs
parents: 30
diff changeset
   208
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   209
//
hgs
parents: 30
diff changeset
   210
void VideoListSelectionDialog::activateSelection()
hgs
parents: 30
diff changeset
   211
{
35
hgs
parents: 34
diff changeset
   212
    // "add to collection" and "remove from collection -selections needs 
34
hgs
parents: 30
diff changeset
   213
    // additional functionality for primary key
hgs
parents: 30
diff changeset
   214
    if(mTypeOfSelection == EAddToCollection ||
35
hgs
parents: 34
diff changeset
   215
       mTypeOfSelection == ERemoveFromCollection)
34
hgs
parents: 30
diff changeset
   216
    {
hgs
parents: 30
diff changeset
   217
        primaryAction()->disconnect(SIGNAL(triggered()));
hgs
parents: 30
diff changeset
   218
        connect(primaryAction(), SIGNAL(triggered()), this, SLOT(primaryActionTriggeredSlot()));
30
hgs
parents:
diff changeset
   219
    }
35
hgs
parents: 34
diff changeset
   220
    QString headingTxt("");
hgs
parents: 34
diff changeset
   221
    QString primaryTxt("");
hgs
parents: 34
diff changeset
   222
    // create texts
hgs
parents: 34
diff changeset
   223
    switch(mTypeOfSelection)
34
hgs
parents: 30
diff changeset
   224
    {
35
hgs
parents: 34
diff changeset
   225
    case EDeleteVideos:
hgs
parents: 34
diff changeset
   226
        primaryTxt = hbTrId("txt_common_button_delete");
hgs
parents: 34
diff changeset
   227
    break;
hgs
parents: 34
diff changeset
   228
    case EAddToCollection:
hgs
parents: 34
diff changeset
   229
        primaryTxt = hbTrId("txt_common_button_add");
hgs
parents: 34
diff changeset
   230
    break;
hgs
parents: 34
diff changeset
   231
    case ERemoveFromCollection:
hgs
parents: 34
diff changeset
   232
        primaryTxt = hbTrId("txt_common_button_remove");
hgs
parents: 34
diff changeset
   233
    break;
hgs
parents: 34
diff changeset
   234
    case ESelectCollection:
hgs
parents: 34
diff changeset
   235
        primaryTxt = hbTrId("txt_videos_button_new");
hgs
parents: 34
diff changeset
   236
    break;
hgs
parents: 34
diff changeset
   237
    default:
hgs
parents: 34
diff changeset
   238
    break;
hgs
parents: 34
diff changeset
   239
    }
hgs
parents: 34
diff changeset
   240
hgs
parents: 34
diff changeset
   241
    HbAction *primary = primaryAction();
hgs
parents: 34
diff changeset
   242
    primary->setText(primaryTxt);
hgs
parents: 34
diff changeset
   243
hgs
parents: 34
diff changeset
   244
    if(mTypeOfSelection == ESelectCollection)
hgs
parents: 34
diff changeset
   245
    {
hgs
parents: 34
diff changeset
   246
        headingTxt = hbTrId("txt_videos_title_select_collection");
hgs
parents: 34
diff changeset
   247
        mCheckboxContainer->setVisible(false);
hgs
parents: 34
diff changeset
   248
        mListWidget->setSelectionMode(-1);   
hgs
parents: 34
diff changeset
   249
        mListWidget->activate(VideoCollectionCommon::ELevelCategory);
hgs
parents: 34
diff changeset
   250
        // need to set primaryaction disabled here in order for it 
hgs
parents: 34
diff changeset
   251
        // get correctly updated at modelReady(), where it will be enabled
hgs
parents: 34
diff changeset
   252
        // if state would be same, no update will happen
hgs
parents: 34
diff changeset
   253
        primary->setDisabled(true);
hgs
parents: 34
diff changeset
   254
    }
hgs
parents: 34
diff changeset
   255
    else
hgs
parents: 34
diff changeset
   256
    {
hgs
parents: 34
diff changeset
   257
        headingTxt = hbTrId("txt_videos_title_select_videos");
hgs
parents: 34
diff changeset
   258
        mListWidget->setSelectionMode(HbAbstractItemView::MultiSelection);
34
hgs
parents: 30
diff changeset
   259
        mListWidget->activate(VideoCollectionCommon::ELevelVideos);
hgs
parents: 30
diff changeset
   260
        mCheckboxContainer->setVisible(true);
hgs
parents: 30
diff changeset
   261
        mItemCount->setPlainText(tr("0/%1").arg(mModel->rowCount())); 
35
hgs
parents: 34
diff changeset
   262
        mCheckBox->setChecked(false);
hgs
parents: 34
diff changeset
   263
        // need to set primaryaction enabled here in order for it 
hgs
parents: 34
diff changeset
   264
        // get correctly updated at modelReady(), where it will be disabled  
hgs
parents: 34
diff changeset
   265
        // if state would be same, no update will happen
hgs
parents: 34
diff changeset
   266
        primary->setDisabled(false);
34
hgs
parents: 30
diff changeset
   267
    }
35
hgs
parents: 34
diff changeset
   268
    mHeading->setPlainText(headingTxt);         
34
hgs
parents: 30
diff changeset
   269
    // sort to make sure dialog has correctly filtered content
hgs
parents: 30
diff changeset
   270
    // at the same order as in view
hgs
parents: 30
diff changeset
   271
    VideoCollectionViewUtils::sortModel(mModel, false);        
30
hgs
parents:
diff changeset
   272
}
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   275
// exec
hgs
parents:
diff changeset
   276
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   277
//
35
hgs
parents: 34
diff changeset
   278
void VideoListSelectionDialog::exec()
30
hgs
parents:
diff changeset
   279
{
34
hgs
parents: 30
diff changeset
   280
    // clear checkbox
hgs
parents: 30
diff changeset
   281
    mCheckBox->setChecked(false);
30
hgs
parents:
diff changeset
   282
    
34
hgs
parents: 30
diff changeset
   283
    mListWidget->clearSelection(); 
30
hgs
parents:
diff changeset
   284
    
34
hgs
parents: 30
diff changeset
   285
    // scroll list back to top
hgs
parents: 30
diff changeset
   286
    mListWidget->scrollTo(mModel->index(0, 0));
30
hgs
parents:
diff changeset
   287
35
hgs
parents: 34
diff changeset
   288
    if(mModel->rowCount())
hgs
parents: 34
diff changeset
   289
    {
hgs
parents: 34
diff changeset
   290
        connectSignals();
30
hgs
parents:
diff changeset
   291
    
35
hgs
parents: 34
diff changeset
   292
        // show dialog
hgs
parents: 34
diff changeset
   293
        HbDialog::open();
hgs
parents: 34
diff changeset
   294
    }
hgs
parents: 34
diff changeset
   295
    else
hgs
parents: 34
diff changeset
   296
    {
hgs
parents: 34
diff changeset
   297
        // no items, finish right away
hgs
parents: 34
diff changeset
   298
        finishedSlot(primaryAction());
hgs
parents: 34
diff changeset
   299
    }
hgs
parents: 34
diff changeset
   300
}
hgs
parents: 34
diff changeset
   301
hgs
parents: 34
diff changeset
   302
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
   303
// finishedSlot
hgs
parents: 34
diff changeset
   304
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
   305
//
hgs
parents: 34
diff changeset
   306
void VideoListSelectionDialog::finishedSlot(HbAction *action)
hgs
parents: 34
diff changeset
   307
{
30
hgs
parents:
diff changeset
   308
    disconnectSignals();
35
hgs
parents: 34
diff changeset
   309
    if(action == secondaryAction())
hgs
parents: 34
diff changeset
   310
    {
hgs
parents: 34
diff changeset
   311
        return;
hgs
parents: 34
diff changeset
   312
    }
hgs
parents: 34
diff changeset
   313
    QString albumName("");
hgs
parents: 34
diff changeset
   314
    if( mTypeOfSelection == ESelectCollection )
34
hgs
parents: 30
diff changeset
   315
    {
35
hgs
parents: 34
diff changeset
   316
        if( mSelectedAlbumId == TMPXItemId::InvalidId())
hgs
parents: 34
diff changeset
   317
        {
hgs
parents: 34
diff changeset
   318
            albumName = queryNewAlbumSelected();
hgs
parents: 34
diff changeset
   319
            if(mSelectedAlbumId == TMPXItemId::InvalidId())
34
hgs
parents: 30
diff changeset
   320
            {
35
hgs
parents: 34
diff changeset
   321
                // user cancelled new album creation
hgs
parents: 34
diff changeset
   322
                return;
hgs
parents: 34
diff changeset
   323
            }           
hgs
parents: 34
diff changeset
   324
       }
hgs
parents: 34
diff changeset
   325
       mTypeOfSelection = EAddToCollection;
hgs
parents: 34
diff changeset
   326
hgs
parents: 34
diff changeset
   327
    }
hgs
parents: 34
diff changeset
   328
hgs
parents: 34
diff changeset
   329
    if(mTypeOfSelection == EAddToCollection)
hgs
parents: 34
diff changeset
   330
    {  
hgs
parents: 34
diff changeset
   331
        if(mSelectedAlbumId != TMPXItemId::InvalidId() && mSelectedVideos.count())
hgs
parents: 34
diff changeset
   332
        {
hgs
parents: 34
diff changeset
   333
            if(mModel->addItemsInAlbum(mSelectedAlbumId, mSelectedVideos.toList()) == 0)
hgs
parents: 34
diff changeset
   334
            {
hgs
parents: 34
diff changeset
   335
                if(!albumName.length())
34
hgs
parents: 30
diff changeset
   336
                {
35
hgs
parents: 34
diff changeset
   337
                    albumName = getSelectedName();
34
hgs
parents: 30
diff changeset
   338
                }
35
hgs
parents: 34
diff changeset
   339
                QVariant data = albumName;
hgs
parents: 34
diff changeset
   340
                VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 34
diff changeset
   341
                        VideoCollectionCommon::statusVideosAddedToCollection,
hgs
parents: 34
diff changeset
   342
                        data);
34
hgs
parents: 30
diff changeset
   343
            }
hgs
parents: 30
diff changeset
   344
        }
35
hgs
parents: 34
diff changeset
   345
    }
hgs
parents: 34
diff changeset
   346
    else if(mTypeOfSelection == ERemoveFromCollection)
hgs
parents: 34
diff changeset
   347
    {
hgs
parents: 34
diff changeset
   348
        if(mSelectedAlbumId != TMPXItemId::InvalidId() && mSelectedVideos.count())
34
hgs
parents: 30
diff changeset
   349
        {
35
hgs
parents: 34
diff changeset
   350
            if(mModel->removeItemsFromAlbum(mSelectedAlbumId, mSelectedVideos.toList()) == 0)
hgs
parents: 34
diff changeset
   351
            {
hgs
parents: 34
diff changeset
   352
                QVariant data = getSelectedName();
hgs
parents: 34
diff changeset
   353
                VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 34
diff changeset
   354
                        VideoCollectionCommon::statusVideosRemovedFromCollection,
hgs
parents: 34
diff changeset
   355
                        data);
hgs
parents: 34
diff changeset
   356
            }
34
hgs
parents: 30
diff changeset
   357
        }
35
hgs
parents: 34
diff changeset
   358
    }
hgs
parents: 34
diff changeset
   359
    // user is deleting videos
hgs
parents: 34
diff changeset
   360
    else if(mTypeOfSelection == EDeleteVideos)
hgs
parents: 34
diff changeset
   361
    {
hgs
parents: 34
diff changeset
   362
        QVariant data = mSelection.indexes().count();
hgs
parents: 34
diff changeset
   363
        VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 34
diff changeset
   364
                VideoCollectionCommon::statusDeleteInProgress,
hgs
parents: 34
diff changeset
   365
                data);
hgs
parents: 34
diff changeset
   366
        // delete items            
hgs
parents: 34
diff changeset
   367
        mModel->deleteItems(mSelection.indexes());
34
hgs
parents: 30
diff changeset
   368
    } 
30
hgs
parents:
diff changeset
   369
}
hgs
parents:
diff changeset
   370
hgs
parents:
diff changeset
   371
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   372
// markAllStateChanged
hgs
parents:
diff changeset
   373
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   374
//
hgs
parents:
diff changeset
   375
void VideoListSelectionDialog::markAllStateChangedSlot(int state)
34
hgs
parents: 30
diff changeset
   376
{ 
30
hgs
parents:
diff changeset
   377
    if(mForcedCheck)
hgs
parents:
diff changeset
   378
    {
hgs
parents:
diff changeset
   379
        return;
hgs
parents:
diff changeset
   380
    }
hgs
parents:
diff changeset
   381
    if( state == Qt::Checked)
hgs
parents:
diff changeset
   382
    {
34
hgs
parents: 30
diff changeset
   383
        mListWidget->selectAll();
30
hgs
parents:
diff changeset
   384
    }
hgs
parents:
diff changeset
   385
    else
hgs
parents:
diff changeset
   386
    {
34
hgs
parents: 30
diff changeset
   387
        mListWidget->clearSelection();
30
hgs
parents:
diff changeset
   388
    }   
hgs
parents:
diff changeset
   389
}
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   392
// selectionChangedSlot
hgs
parents:
diff changeset
   393
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   394
//
hgs
parents:
diff changeset
   395
void VideoListSelectionDialog::selectionChangedSlot(const QItemSelection &selected, const QItemSelection &deselected)
hgs
parents:
diff changeset
   396
{  
35
hgs
parents: 34
diff changeset
   397
    if(!primaryAction() || mTypeOfSelection == ESelectCollection)
30
hgs
parents:
diff changeset
   398
    {
hgs
parents:
diff changeset
   399
        return;
hgs
parents:
diff changeset
   400
    }
34
hgs
parents: 30
diff changeset
   401
   
30
hgs
parents:
diff changeset
   402
    if(selected.indexes().count() > 0)
hgs
parents:
diff changeset
   403
    {
hgs
parents:
diff changeset
   404
        mSelection.merge(selected, QItemSelectionModel::Select);
hgs
parents:
diff changeset
   405
    }
hgs
parents:
diff changeset
   406
    
hgs
parents:
diff changeset
   407
    if(deselected.indexes().count() >  0)
hgs
parents:
diff changeset
   408
    {
hgs
parents:
diff changeset
   409
        mSelection.merge(deselected, QItemSelectionModel::Deselect);
hgs
parents:
diff changeset
   410
    }
hgs
parents:
diff changeset
   411
    
hgs
parents:
diff changeset
   412
    if(mSelection.indexes().count() > 0)
hgs
parents:
diff changeset
   413
    {
hgs
parents:
diff changeset
   414
        primaryAction()->setDisabled(false);
hgs
parents:
diff changeset
   415
    }
hgs
parents:
diff changeset
   416
    else
hgs
parents:
diff changeset
   417
    {
hgs
parents:
diff changeset
   418
        primaryAction()->setDisabled(true);
hgs
parents:
diff changeset
   419
    }    
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
    updateCounterSlot();
hgs
parents:
diff changeset
   422
}
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   425
// singleItemSelectedSlot
hgs
parents: 30
diff changeset
   426
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   427
//
hgs
parents: 30
diff changeset
   428
void VideoListSelectionDialog::singleItemSelectedSlot(const QModelIndex &index)
hgs
parents: 30
diff changeset
   429
{
hgs
parents: 30
diff changeset
   430
    if(mTypeOfSelection == ESelectCollection)
hgs
parents: 30
diff changeset
   431
    {
hgs
parents: 30
diff changeset
   432
       if(index.isValid())
hgs
parents: 30
diff changeset
   433
       {           
hgs
parents: 30
diff changeset
   434
           mSelectedAlbumId = mModel->getMediaIdAtIndex(index);            
hgs
parents: 30
diff changeset
   435
           primaryAction()->trigger();
hgs
parents: 30
diff changeset
   436
       }
hgs
parents: 30
diff changeset
   437
    }
hgs
parents: 30
diff changeset
   438
}
hgs
parents: 30
diff changeset
   439
hgs
parents: 30
diff changeset
   440
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   441
// modelReadySlot
hgs
parents: 30
diff changeset
   442
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   443
//
hgs
parents: 30
diff changeset
   444
void VideoListSelectionDialog::modelReadySlot()
hgs
parents: 30
diff changeset
   445
{
35
hgs
parents: 34
diff changeset
   446
   
hgs
parents: 34
diff changeset
   447
    if(mTypeOfSelection == ESelectCollection)
34
hgs
parents: 30
diff changeset
   448
    {
35
hgs
parents: 34
diff changeset
   449
        primaryAction()->setDisabled(false);
hgs
parents: 34
diff changeset
   450
        if(!mModel->rowCount())
34
hgs
parents: 30
diff changeset
   451
        {
35
hgs
parents: 34
diff changeset
   452
            // in case there are no user defined albums, 
hgs
parents: 34
diff changeset
   453
            // start input dialog right away by accepting dialog
34
hgs
parents: 30
diff changeset
   454
            primaryAction()->trigger();
35
hgs
parents: 34
diff changeset
   455
            return;
34
hgs
parents: 30
diff changeset
   456
        }
35
hgs
parents: 34
diff changeset
   457
    }
hgs
parents: 34
diff changeset
   458
    if(mTypeOfSelection != ESelectCollection)
hgs
parents: 34
diff changeset
   459
    {
hgs
parents: 34
diff changeset
   460
        primaryAction()->setDisabled(true);
34
hgs
parents: 30
diff changeset
   461
    }
hgs
parents: 30
diff changeset
   462
    updateCounterSlot();
hgs
parents: 30
diff changeset
   463
}
hgs
parents: 30
diff changeset
   464
hgs
parents: 30
diff changeset
   465
// ---------------------------------------------------------------------------
30
hgs
parents:
diff changeset
   466
// updateCounterSlot
hgs
parents:
diff changeset
   467
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   468
//
hgs
parents:
diff changeset
   469
void VideoListSelectionDialog::updateCounterSlot()
hgs
parents:
diff changeset
   470
{
35
hgs
parents: 34
diff changeset
   471
    if(!mItemCount)
30
hgs
parents:
diff changeset
   472
    {
hgs
parents:
diff changeset
   473
        return;
hgs
parents:
diff changeset
   474
    }
35
hgs
parents: 34
diff changeset
   475
hgs
parents: 34
diff changeset
   476
    int rowCount = mModel->rowCount();       
30
hgs
parents:
diff changeset
   477
    int selectionCount = mSelection.indexes().count();
35
hgs
parents: 34
diff changeset
   478
    mItemCount->setPlainText(tr("%1/%2").arg(selectionCount).arg(rowCount));  
30
hgs
parents:
diff changeset
   479
    mForcedCheck = true;
hgs
parents:
diff changeset
   480
    if(selectionCount == rowCount && rowCount > 0)
hgs
parents:
diff changeset
   481
    {     
hgs
parents:
diff changeset
   482
        mCheckBox->setChecked(true);
hgs
parents:
diff changeset
   483
    }
hgs
parents:
diff changeset
   484
    else
hgs
parents:
diff changeset
   485
    {
hgs
parents:
diff changeset
   486
        mCheckBox->setChecked(false);
hgs
parents:
diff changeset
   487
    }
hgs
parents:
diff changeset
   488
    mForcedCheck = false;
hgs
parents:
diff changeset
   489
       
hgs
parents:
diff changeset
   490
}
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   493
// primaryActionTriggeredSlot
hgs
parents: 30
diff changeset
   494
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   495
//
hgs
parents: 30
diff changeset
   496
void VideoListSelectionDialog::primaryActionTriggeredSlot()
hgs
parents: 30
diff changeset
   497
{
hgs
parents: 30
diff changeset
   498
    // reconnect primary action
hgs
parents: 30
diff changeset
   499
    primaryAction()->disconnect(SIGNAL(triggered()));
hgs
parents: 30
diff changeset
   500
    connect(primaryAction(), SIGNAL(triggered()), this, SLOT(close()));
35
hgs
parents: 34
diff changeset
   501
        
34
hgs
parents: 30
diff changeset
   502
    // update video items selection here before content changes.
hgs
parents: 30
diff changeset
   503
    int count = mSelection.indexes().count();
hgs
parents: 30
diff changeset
   504
    TMPXItemId id = TMPXItemId::InvalidId();
hgs
parents: 30
diff changeset
   505
    for(int i = 0; i < count; ++i)
hgs
parents: 30
diff changeset
   506
    {
hgs
parents: 30
diff changeset
   507
        id = mModel->getMediaIdAtIndex(mSelection.indexes().at(i));
hgs
parents: 30
diff changeset
   508
        if(id.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   509
        {
hgs
parents: 30
diff changeset
   510
            mSelectedVideos.insert(id);
hgs
parents: 30
diff changeset
   511
        }
hgs
parents: 30
diff changeset
   512
    }
hgs
parents: 30
diff changeset
   513
    
hgs
parents: 30
diff changeset
   514
    if(mSelectedAlbumId != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   515
    {
hgs
parents: 30
diff changeset
   516
        primaryAction()->trigger();
hgs
parents: 30
diff changeset
   517
        return;
hgs
parents: 30
diff changeset
   518
    }
hgs
parents: 30
diff changeset
   519
    else if(mTypeOfSelection == EAddToCollection)
hgs
parents: 30
diff changeset
   520
    {
hgs
parents: 30
diff changeset
   521
        // videos for collection selected, but collection 
hgs
parents: 30
diff changeset
   522
        // not yet selected, activate selection for it
hgs
parents: 30
diff changeset
   523
        mTypeOfSelection = ESelectCollection;
hgs
parents: 30
diff changeset
   524
        activateSelection();
hgs
parents: 30
diff changeset
   525
   }   
hgs
parents: 30
diff changeset
   526
}
hgs
parents: 30
diff changeset
   527
hgs
parents: 30
diff changeset
   528
// ---------------------------------------------------------------------------
30
hgs
parents:
diff changeset
   529
// connectSignals
hgs
parents:
diff changeset
   530
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   531
//
hgs
parents:
diff changeset
   532
void VideoListSelectionDialog::connectSignals()
35
hgs
parents: 34
diff changeset
   533
{   
hgs
parents: 34
diff changeset
   534
    // dialog finished
hgs
parents: 34
diff changeset
   535
    connect(this, SIGNAL(finished(HbAction*)), this, SLOT(finishedSlot(HbAction*)));
hgs
parents: 34
diff changeset
   536
    
30
hgs
parents:
diff changeset
   537
    // selection changes
34
hgs
parents: 30
diff changeset
   538
    connect(mListWidget, SIGNAL(activated(const QModelIndex&)),
hgs
parents: 30
diff changeset
   539
            this, SLOT(singleItemSelectedSlot(const QModelIndex&)));
hgs
parents: 30
diff changeset
   540
    
hgs
parents: 30
diff changeset
   541
    connect(mListWidget->selectionModel(), SIGNAL(selectionChanged (const QItemSelection&, const QItemSelection&)),
hgs
parents: 30
diff changeset
   542
            this, SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection &)));
30
hgs
parents:
diff changeset
   543
        
hgs
parents:
diff changeset
   544
    // model changes signals
35
hgs
parents: 34
diff changeset
   545
    connect(mModel->sourceModel(), SIGNAL(modelReady()), this, SLOT(modelReadySlot()));    
hgs
parents: 34
diff changeset
   546
    connect(mModel->sourceModel(), SIGNAL(modelChanged()), this, SLOT(updateCounterSlot()));    
30
hgs
parents:
diff changeset
   547
    
hgs
parents:
diff changeset
   548
    // mark all state changes
hgs
parents:
diff changeset
   549
    connect(mCheckBox, SIGNAL(stateChanged(int)), this, SLOT(markAllStateChangedSlot(int)));
hgs
parents:
diff changeset
   550
}
hgs
parents:
diff changeset
   551
 
hgs
parents:
diff changeset
   552
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   553
// disconnectSignals
hgs
parents:
diff changeset
   554
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   555
//
hgs
parents:
diff changeset
   556
void VideoListSelectionDialog::disconnectSignals()
35
hgs
parents: 34
diff changeset
   557
{   
hgs
parents: 34
diff changeset
   558
    disconnect(this, SIGNAL(finished(HbAction*)), this, SLOT(finishedSlot(HbAction*)));
hgs
parents: 34
diff changeset
   559
    
34
hgs
parents: 30
diff changeset
   560
    disconnect(mListWidget, SIGNAL(activated(const QModelIndex&)),
hgs
parents: 30
diff changeset
   561
                this, SLOT(singleItemSelectedSlot(const QModelIndex&)));
30
hgs
parents:
diff changeset
   562
    
34
hgs
parents: 30
diff changeset
   563
    disconnect(mListWidget->selectionModel(), SIGNAL(selectionChanged (const QItemSelection&, const QItemSelection&)),
30
hgs
parents:
diff changeset
   564
                            this, SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection &)));
hgs
parents:
diff changeset
   565
            
hgs
parents:
diff changeset
   566
    // model changes signals
35
hgs
parents: 34
diff changeset
   567
    disconnect(mModel->sourceModel(), SIGNAL(modelReady()), this, SLOT(modelReadySlot()));    
hgs
parents: 34
diff changeset
   568
    disconnect(mModel->sourceModel(), SIGNAL(modelChanged()), this, SLOT(updateCounterSlot()));   
30
hgs
parents:
diff changeset
   569
    
hgs
parents:
diff changeset
   570
    // mark all state changes
34
hgs
parents: 30
diff changeset
   571
    disconnect(mCheckBox, SIGNAL(stateChanged(int)), this, SLOT(markAllStateChangedSlot(int)));   
30
hgs
parents:
diff changeset
   572
}
hgs
parents:
diff changeset
   573
34
hgs
parents: 30
diff changeset
   574
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   575
// getSelectedName
hgs
parents: 30
diff changeset
   576
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   577
//
hgs
parents: 30
diff changeset
   578
QString VideoListSelectionDialog::getSelectedName()
hgs
parents: 30
diff changeset
   579
{
hgs
parents: 30
diff changeset
   580
    QString name;
hgs
parents: 30
diff changeset
   581
    if(mSelectedAlbumId.iId2 > KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   582
    {
hgs
parents: 30
diff changeset
   583
        VideoSortFilterProxyModel *model = 
hgs
parents: 30
diff changeset
   584
                VideoCollectionWrapper::instance().getModel(
hgs
parents: 30
diff changeset
   585
                            VideoCollectionWrapper::ECollections);
hgs
parents: 30
diff changeset
   586
        if(!model)
hgs
parents: 30
diff changeset
   587
        {
hgs
parents: 30
diff changeset
   588
            return name;
hgs
parents: 30
diff changeset
   589
        }
hgs
parents: 30
diff changeset
   590
        QModelIndex index = model->indexOfId(mSelectedAlbumId);
hgs
parents: 30
diff changeset
   591
        if(index.isValid())
hgs
parents: 30
diff changeset
   592
        {
hgs
parents: 30
diff changeset
   593
            name = model->data(index, Qt::DisplayRole).toStringList().first();
hgs
parents: 30
diff changeset
   594
        }
hgs
parents: 30
diff changeset
   595
    }
hgs
parents: 30
diff changeset
   596
    
hgs
parents: 30
diff changeset
   597
    return name;
hgs
parents: 30
diff changeset
   598
}
30
hgs
parents:
diff changeset
   599
34
hgs
parents: 30
diff changeset
   600
// ---------------------------------------------------------------------------
35
hgs
parents: 34
diff changeset
   601
// queryNewAlbumSelected
34
hgs
parents: 30
diff changeset
   602
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   603
//
35
hgs
parents: 34
diff changeset
   604
QString VideoListSelectionDialog::queryNewAlbumSelected()
34
hgs
parents: 30
diff changeset
   605
{
35
hgs
parents: 34
diff changeset
   606
    mSelectedAlbumId = TMPXItemId::InvalidId();
34
hgs
parents: 30
diff changeset
   607
    bool ok = false;
35
hgs
parents: 34
diff changeset
   608
    QString label(hbTrId("txt_videos_title_enter_name"));
hgs
parents: 34
diff changeset
   609
    QString text("");
hgs
parents: 34
diff changeset
   610
    text = HbInputDialog::getText(label, hbTrId("txt_videos_dialog_entry_new_collection"), &ok);
34
hgs
parents: 30
diff changeset
   611
    if (ok && text.length())
hgs
parents: 30
diff changeset
   612
    {
hgs
parents: 30
diff changeset
   613
       // check for duplicate album name and add new album
35
hgs
parents: 34
diff changeset
   614
        text = mModel->resolveAlbumName(text);
hgs
parents: 34
diff changeset
   615
        mSelectedAlbumId = mModel->addNewAlbum(text);
34
hgs
parents: 30
diff changeset
   616
    }
35
hgs
parents: 34
diff changeset
   617
    return text;
34
hgs
parents: 30
diff changeset
   618
}
hgs
parents: 30
diff changeset
   619