videocollection/videocollectionview/src/videolistselectiondialog.cpp
author hgs
Thu, 01 Apr 2010 23:22:15 +0300
changeset 34 bbb98528c666
parent 30 4f111d64a341
child 35 3738fe97f027
permissions -rw-r--r--
201009
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
        {
hgs
parents: 30
diff changeset
    76
            mListWidget->initialize(*mModel);
hgs
parents: 30
diff changeset
    77
        }
hgs
parents: 30
diff changeset
    78
    }
30
hgs
parents:
diff changeset
    79
}
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
// ~VideoListSelectionDialog
hgs
parents:
diff changeset
    83
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    84
//
hgs
parents:
diff changeset
    85
VideoListSelectionDialog::~VideoListSelectionDialog() 
hgs
parents:
diff changeset
    86
{
34
hgs
parents: 30
diff changeset
    87
    delete mListWidget;
30
hgs
parents:
diff changeset
    88
}
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
    91
// setupContent
30
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    93
//
34
hgs
parents: 30
diff changeset
    94
void VideoListSelectionDialog::setupContent(int type, TMPXItemId activeItem)
30
hgs
parents:
diff changeset
    95
{
34
hgs
parents: 30
diff changeset
    96
    if(type < EDeleteVideos || type > ESelectCollection)
30
hgs
parents:
diff changeset
    97
    {
34
hgs
parents: 30
diff changeset
    98
        return;
hgs
parents: 30
diff changeset
    99
    }
hgs
parents: 30
diff changeset
   100
   
hgs
parents: 30
diff changeset
   101
    mTypeOfSelection = type; 
hgs
parents: 30
diff changeset
   102
    if(!initDialog())
hgs
parents: 30
diff changeset
   103
    {
30
hgs
parents:
diff changeset
   104
        return;
hgs
parents:
diff changeset
   105
    }
34
hgs
parents: 30
diff changeset
   106
    mSelection.clear();
hgs
parents: 30
diff changeset
   107
    mSelectedVideos.clear();
hgs
parents: 30
diff changeset
   108
    mSelectedAlbumId = TMPXItemId::InvalidId();
30
hgs
parents:
diff changeset
   109
    
34
hgs
parents: 30
diff changeset
   110
    // if provided "owner" is album or category    
hgs
parents: 30
diff changeset
   111
    if(activeItem != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   112
    {
hgs
parents: 30
diff changeset
   113
        // if album, set as "selected"
hgs
parents: 30
diff changeset
   114
        if(activeItem.iId2 == KVcxMvcMediaTypeAlbum)
hgs
parents: 30
diff changeset
   115
        {
hgs
parents: 30
diff changeset
   116
            mSelectedAlbumId = activeItem;
hgs
parents: 30
diff changeset
   117
        }
hgs
parents: 30
diff changeset
   118
        else if(activeItem.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   119
        {
hgs
parents: 30
diff changeset
   120
            mSelectedVideos.insert(activeItem);
hgs
parents: 30
diff changeset
   121
        }
hgs
parents: 30
diff changeset
   122
    }
hgs
parents: 30
diff changeset
   123
    // set (or reset) generic id filter
hgs
parents: 30
diff changeset
   124
    mModel->setGenericIdFilter(activeItem, (mTypeOfSelection == EDeleteVideos));    
hgs
parents: 30
diff changeset
   125
    activateSelection();
hgs
parents: 30
diff changeset
   126
}
hgs
parents: 30
diff changeset
   127
hgs
parents: 30
diff changeset
   128
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   129
// initDialog
hgs
parents: 30
diff changeset
   130
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   131
//
hgs
parents: 30
diff changeset
   132
bool VideoListSelectionDialog::initDialog()
hgs
parents: 30
diff changeset
   133
{
hgs
parents: 30
diff changeset
   134
    if(!mModel)
hgs
parents: 30
diff changeset
   135
    {
hgs
parents: 30
diff changeset
   136
        mModel = VideoCollectionWrapper::instance().getModel(VideoCollectionWrapper::EGeneric);
hgs
parents: 30
diff changeset
   137
        if (!mModel)
hgs
parents: 30
diff changeset
   138
        {
hgs
parents: 30
diff changeset
   139
           return false;
hgs
parents: 30
diff changeset
   140
        }
hgs
parents: 30
diff changeset
   141
    }    
hgs
parents: 30
diff changeset
   142
    if(!mListWidget)
hgs
parents: 30
diff changeset
   143
    {
hgs
parents: 30
diff changeset
   144
        mListWidget = new VideoListWidget(mUiLoader);
hgs
parents: 30
diff changeset
   145
        mListWidget->initialize(*mModel);
hgs
parents: 30
diff changeset
   146
    }
hgs
parents: 30
diff changeset
   147
    if (!mListContainer)
hgs
parents: 30
diff changeset
   148
    {
hgs
parents: 30
diff changeset
   149
        mListContainer =
hgs
parents: 30
diff changeset
   150
                mUiLoader->findWidget<HbStackedWidget>(DOCML_NAME_LIST_CONTAINER);
hgs
parents: 30
diff changeset
   151
        if(mListContainer && mListWidget)
hgs
parents: 30
diff changeset
   152
        {
hgs
parents: 30
diff changeset
   153
            mListContainer->addWidget(mListWidget);
hgs
parents: 30
diff changeset
   154
        }
hgs
parents: 30
diff changeset
   155
    }
30
hgs
parents:
diff changeset
   156
    if(!mHeading)
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
        mHeading = mUiLoader->findWidget<HbLabel>(DOCML_NAME_DLG_HEADINGLBL);
hgs
parents:
diff changeset
   159
    }
34
hgs
parents: 30
diff changeset
   160
    if(!mCheckboxContainer)
hgs
parents: 30
diff changeset
   161
    {
hgs
parents: 30
diff changeset
   162
        mCheckboxContainer = mUiLoader->findWidget<HbWidget>(DOCML_NAME_CHECK_CONTAINER);
hgs
parents: 30
diff changeset
   163
    }
hgs
parents: 30
diff changeset
   164
30
hgs
parents:
diff changeset
   165
    if(!mItemCount)
hgs
parents:
diff changeset
   166
    {
hgs
parents:
diff changeset
   167
        mItemCount = mUiLoader->findWidget<HbLabel>(DOCML_NAME_LBL_SELECTION);
hgs
parents:
diff changeset
   168
        mItemCount->setAlignment(Qt::AlignRight);
34
hgs
parents: 30
diff changeset
   169
    }        
30
hgs
parents:
diff changeset
   170
    if(!mCheckBox)
hgs
parents:
diff changeset
   171
    {
hgs
parents:
diff changeset
   172
        mCheckBox = mUiLoader->findWidget<HbCheckBox >(DOCML_NAME_MARKALL);
hgs
parents:
diff changeset
   173
    }
hgs
parents:
diff changeset
   174
    if(!primaryAction())
hgs
parents:
diff changeset
   175
    {
34
hgs
parents: 30
diff changeset
   176
        setPrimaryAction(new HbAction(tr("OK"), this)); //TODO: localisation
30
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
    if(!secondaryAction())
hgs
parents:
diff changeset
   179
    {
34
hgs
parents: 30
diff changeset
   180
        setSecondaryAction(new HbAction(tr("Cancel"), this)); //TODO: localisation
hgs
parents: 30
diff changeset
   181
    }
hgs
parents: 30
diff changeset
   182
    if(!mListWidget || !mListContainer || !mHeading || !mCheckBox || !primaryAction() || !secondaryAction())
hgs
parents: 30
diff changeset
   183
    {
hgs
parents: 30
diff changeset
   184
        return false;
hgs
parents: 30
diff changeset
   185
    }
hgs
parents: 30
diff changeset
   186
    return true;  
hgs
parents: 30
diff changeset
   187
}
hgs
parents: 30
diff changeset
   188
hgs
parents: 30
diff changeset
   189
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   190
// activateSelection
hgs
parents: 30
diff changeset
   191
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   192
//
hgs
parents: 30
diff changeset
   193
void VideoListSelectionDialog::activateSelection()
hgs
parents: 30
diff changeset
   194
{
hgs
parents: 30
diff changeset
   195
    // "add to collection" and "select collection" -selections needs 
hgs
parents: 30
diff changeset
   196
    // additional functionality for primary key
hgs
parents: 30
diff changeset
   197
    if(mTypeOfSelection == EAddToCollection ||
hgs
parents: 30
diff changeset
   198
       mTypeOfSelection == ESelectCollection)
hgs
parents: 30
diff changeset
   199
    {
hgs
parents: 30
diff changeset
   200
        primaryAction()->disconnect(SIGNAL(triggered()));
hgs
parents: 30
diff changeset
   201
        connect(primaryAction(), SIGNAL(triggered()), this, SLOT(primaryActionTriggeredSlot()));
30
hgs
parents:
diff changeset
   202
    }
34
hgs
parents: 30
diff changeset
   203
    
hgs
parents: 30
diff changeset
   204
    if(mTypeOfSelection == EDeleteVideos || mTypeOfSelection == EAddToCollection) 
hgs
parents: 30
diff changeset
   205
    {
hgs
parents: 30
diff changeset
   206
        mSelection.clear();
hgs
parents: 30
diff changeset
   207
        mListWidget->setSelectionMode(HbAbstractItemView::MultiSelection);   
hgs
parents: 30
diff changeset
   208
        mListWidget->activate(VideoCollectionCommon::ELevelVideos);
hgs
parents: 30
diff changeset
   209
        mCheckboxContainer->setVisible(true);
hgs
parents: 30
diff changeset
   210
        mItemCount->setPlainText(tr("0/%1").arg(mModel->rowCount())); 
hgs
parents: 30
diff changeset
   211
        mCheckBox->setChecked(false);        
hgs
parents: 30
diff changeset
   212
        QString txt("");
hgs
parents: 30
diff changeset
   213
        mTypeOfSelection == EDeleteVideos ? txt = tr("Delete items") : txt = tr("Add to collection"); // localisation missing
hgs
parents: 30
diff changeset
   214
        mHeading->setPlainText(txt);
hgs
parents: 30
diff changeset
   215
        mTypeOfSelection == EDeleteVideos ? txt = hbTrId("txt_common_menu_delete") : txt = tr("Add"); // localisation missing
hgs
parents: 30
diff changeset
   216
        primaryAction()->setText(txt);
hgs
parents: 30
diff changeset
   217
        primaryAction()->setDisabled(true);
hgs
parents: 30
diff changeset
   218
    }
hgs
parents: 30
diff changeset
   219
    else
hgs
parents: 30
diff changeset
   220
    {
hgs
parents: 30
diff changeset
   221
        mListWidget->setSelectionMode(-1);   
hgs
parents: 30
diff changeset
   222
        mListWidget->activate(VideoCollectionCommon::ELevelCategory);
hgs
parents: 30
diff changeset
   223
        mCheckboxContainer->setVisible(false);
hgs
parents: 30
diff changeset
   224
        mHeading->setPlainText(tr("Select collection")); // localisation missing
hgs
parents: 30
diff changeset
   225
        primaryAction()->setText(tr("New")); // localisation missing    
hgs
parents: 30
diff changeset
   226
        primaryAction()->setDisabled(false);
hgs
parents: 30
diff changeset
   227
    }    
hgs
parents: 30
diff changeset
   228
    // sort to make sure dialog has correctly filtered content
hgs
parents: 30
diff changeset
   229
    // at the same order as in view
hgs
parents: 30
diff changeset
   230
    VideoCollectionViewUtils::sortModel(mModel, false);        
30
hgs
parents:
diff changeset
   231
}
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
// exec
hgs
parents:
diff changeset
   235
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   236
//
hgs
parents:
diff changeset
   237
HbAction* VideoListSelectionDialog::exec()
hgs
parents:
diff changeset
   238
{
34
hgs
parents: 30
diff changeset
   239
    // clear checkbox
hgs
parents: 30
diff changeset
   240
    mCheckBox->setChecked(false);
30
hgs
parents:
diff changeset
   241
    
34
hgs
parents: 30
diff changeset
   242
    mListWidget->clearSelection(); 
30
hgs
parents:
diff changeset
   243
    
34
hgs
parents: 30
diff changeset
   244
    // scroll list back to top
hgs
parents: 30
diff changeset
   245
    mListWidget->scrollTo(mModel->index(0, 0));
30
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
    connectSignals();
hgs
parents:
diff changeset
   248
    
hgs
parents:
diff changeset
   249
    // Launch popup syncronously
hgs
parents:
diff changeset
   250
    bool accepted = false;
hgs
parents:
diff changeset
   251
    HbDialog::exec() == primaryAction() ? accepted = true : accepted = false;
hgs
parents:
diff changeset
   252
    
hgs
parents:
diff changeset
   253
    disconnectSignals();
34
hgs
parents: 30
diff changeset
   254
   
hgs
parents: 30
diff changeset
   255
    if(accepted)
hgs
parents: 30
diff changeset
   256
    {
hgs
parents: 30
diff changeset
   257
        // user is adding videos into selected collection 
hgs
parents: 30
diff changeset
   258
        // or selecting collection where to add videos
hgs
parents: 30
diff changeset
   259
        if(mTypeOfSelection == EAddToCollection ||
hgs
parents: 30
diff changeset
   260
           mTypeOfSelection == ESelectCollection)
hgs
parents: 30
diff changeset
   261
        {            
hgs
parents: 30
diff changeset
   262
            if(mSelectedAlbumId != TMPXItemId::InvalidId() && mSelectedVideos.count())
hgs
parents: 30
diff changeset
   263
            {
hgs
parents: 30
diff changeset
   264
                if(mModel->addItemsInAlbum(mSelectedAlbumId, mSelectedVideos.toList()) == 0)
hgs
parents: 30
diff changeset
   265
                {
hgs
parents: 30
diff changeset
   266
                    QVariant data = getSelectedName();
hgs
parents: 30
diff changeset
   267
                    VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 30
diff changeset
   268
                            VideoCollectionCommon::statusVideosAddedToCollection,
hgs
parents: 30
diff changeset
   269
                            data);
hgs
parents: 30
diff changeset
   270
                }
hgs
parents: 30
diff changeset
   271
            }
hgs
parents: 30
diff changeset
   272
        }
hgs
parents: 30
diff changeset
   273
        // user is deleting videos
hgs
parents: 30
diff changeset
   274
        else if(mTypeOfSelection == EDeleteVideos)
hgs
parents: 30
diff changeset
   275
        {
hgs
parents: 30
diff changeset
   276
            QVariant data = mSelection.indexes().count();
hgs
parents: 30
diff changeset
   277
            VideoCollectionViewUtils::instance().showStatusMsgSlot(
hgs
parents: 30
diff changeset
   278
                                                   VideoCollectionCommon::statusDeleteInProgress,
hgs
parents: 30
diff changeset
   279
                                                   data);
hgs
parents: 30
diff changeset
   280
            // delete items            
hgs
parents: 30
diff changeset
   281
            mModel->deleteItems(mSelection.indexes());
30
hgs
parents:
diff changeset
   282
34
hgs
parents: 30
diff changeset
   283
        }
hgs
parents: 30
diff changeset
   284
        return primaryAction();
hgs
parents: 30
diff changeset
   285
    } 
hgs
parents: 30
diff changeset
   286
    return secondaryAction(); 
30
hgs
parents:
diff changeset
   287
}
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   290
// markAllStateChanged
hgs
parents:
diff changeset
   291
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   292
//
hgs
parents:
diff changeset
   293
void VideoListSelectionDialog::markAllStateChangedSlot(int state)
34
hgs
parents: 30
diff changeset
   294
{ 
30
hgs
parents:
diff changeset
   295
    if(mForcedCheck)
hgs
parents:
diff changeset
   296
    {
hgs
parents:
diff changeset
   297
        return;
hgs
parents:
diff changeset
   298
    }
hgs
parents:
diff changeset
   299
    if( state == Qt::Checked)
hgs
parents:
diff changeset
   300
    {
34
hgs
parents: 30
diff changeset
   301
        mListWidget->selectAll();
30
hgs
parents:
diff changeset
   302
    }
hgs
parents:
diff changeset
   303
    else
hgs
parents:
diff changeset
   304
    {
34
hgs
parents: 30
diff changeset
   305
        mListWidget->clearSelection();
30
hgs
parents:
diff changeset
   306
    }   
hgs
parents:
diff changeset
   307
}
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   310
// selectionChangedSlot
hgs
parents:
diff changeset
   311
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   312
//
hgs
parents:
diff changeset
   313
void VideoListSelectionDialog::selectionChangedSlot(const QItemSelection &selected, const QItemSelection &deselected)
hgs
parents:
diff changeset
   314
{  
hgs
parents:
diff changeset
   315
    
hgs
parents:
diff changeset
   316
    if(!primaryAction())
hgs
parents:
diff changeset
   317
    {
hgs
parents:
diff changeset
   318
        return;
hgs
parents:
diff changeset
   319
    }
34
hgs
parents: 30
diff changeset
   320
   
30
hgs
parents:
diff changeset
   321
    if(selected.indexes().count() > 0)
hgs
parents:
diff changeset
   322
    {
hgs
parents:
diff changeset
   323
        mSelection.merge(selected, QItemSelectionModel::Select);
hgs
parents:
diff changeset
   324
    }
hgs
parents:
diff changeset
   325
    
hgs
parents:
diff changeset
   326
    if(deselected.indexes().count() >  0)
hgs
parents:
diff changeset
   327
    {
hgs
parents:
diff changeset
   328
        mSelection.merge(deselected, QItemSelectionModel::Deselect);
hgs
parents:
diff changeset
   329
    }
hgs
parents:
diff changeset
   330
    
hgs
parents:
diff changeset
   331
    if(mSelection.indexes().count() > 0)
hgs
parents:
diff changeset
   332
    {
hgs
parents:
diff changeset
   333
        primaryAction()->setDisabled(false);
hgs
parents:
diff changeset
   334
    }
hgs
parents:
diff changeset
   335
    else
hgs
parents:
diff changeset
   336
    {
hgs
parents:
diff changeset
   337
        primaryAction()->setDisabled(true);
hgs
parents:
diff changeset
   338
    }    
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
    updateCounterSlot();
hgs
parents:
diff changeset
   341
}
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   344
// singleItemSelectedSlot
hgs
parents: 30
diff changeset
   345
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   346
//
hgs
parents: 30
diff changeset
   347
void VideoListSelectionDialog::singleItemSelectedSlot(const QModelIndex &index)
hgs
parents: 30
diff changeset
   348
{
hgs
parents: 30
diff changeset
   349
    if(mTypeOfSelection == ESelectCollection)
hgs
parents: 30
diff changeset
   350
    {
hgs
parents: 30
diff changeset
   351
       if(index.isValid())
hgs
parents: 30
diff changeset
   352
       {           
hgs
parents: 30
diff changeset
   353
           mSelectedAlbumId = mModel->getMediaIdAtIndex(index);            
hgs
parents: 30
diff changeset
   354
           primaryAction()->trigger();
hgs
parents: 30
diff changeset
   355
       }
hgs
parents: 30
diff changeset
   356
    }
hgs
parents: 30
diff changeset
   357
}
hgs
parents: 30
diff changeset
   358
hgs
parents: 30
diff changeset
   359
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   360
// modelReadySlot
hgs
parents: 30
diff changeset
   361
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   362
//
hgs
parents: 30
diff changeset
   363
void VideoListSelectionDialog::modelReadySlot()
hgs
parents: 30
diff changeset
   364
{
hgs
parents: 30
diff changeset
   365
    if(!mModel)
hgs
parents: 30
diff changeset
   366
    {
hgs
parents: 30
diff changeset
   367
        return;
hgs
parents: 30
diff changeset
   368
    }
hgs
parents: 30
diff changeset
   369
    
hgs
parents: 30
diff changeset
   370
    if(mTypeOfSelection == ESelectCollection && ! mModel->rowCount())
hgs
parents: 30
diff changeset
   371
    {
hgs
parents: 30
diff changeset
   372
        // in case there are no albums, start input dialog right away
hgs
parents: 30
diff changeset
   373
        mSelectedAlbumId = queryNewAlbum();
hgs
parents: 30
diff changeset
   374
        if(mSelectedAlbumId != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   375
        {
hgs
parents: 30
diff changeset
   376
            primaryAction()->trigger();
hgs
parents: 30
diff changeset
   377
        }
hgs
parents: 30
diff changeset
   378
        else
hgs
parents: 30
diff changeset
   379
        {
hgs
parents: 30
diff changeset
   380
            secondaryAction()->trigger();
hgs
parents: 30
diff changeset
   381
        }
hgs
parents: 30
diff changeset
   382
        return;
hgs
parents: 30
diff changeset
   383
    }
hgs
parents: 30
diff changeset
   384
    updateCounterSlot();
hgs
parents: 30
diff changeset
   385
}
hgs
parents: 30
diff changeset
   386
hgs
parents: 30
diff changeset
   387
// ---------------------------------------------------------------------------
30
hgs
parents:
diff changeset
   388
// updateCounterSlot
hgs
parents:
diff changeset
   389
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   390
//
hgs
parents:
diff changeset
   391
void VideoListSelectionDialog::updateCounterSlot()
hgs
parents:
diff changeset
   392
{
34
hgs
parents: 30
diff changeset
   393
    if(!mItemCount || !mModel)
30
hgs
parents:
diff changeset
   394
    {
hgs
parents:
diff changeset
   395
        return;
hgs
parents:
diff changeset
   396
    }
hgs
parents:
diff changeset
   397
    // orbit does not update HbLabel read from docml in case it isn't cleared first
34
hgs
parents: 30
diff changeset
   398
    int rowCount = mModel->rowCount();
hgs
parents: 30
diff changeset
   399
    
hgs
parents: 30
diff changeset
   400
   
30
hgs
parents:
diff changeset
   401
    int selectionCount = mSelection.indexes().count();
hgs
parents:
diff changeset
   402
    mItemCount->setPlainText(tr("%1/%2").arg(selectionCount).arg(rowCount));
hgs
parents:
diff changeset
   403
    
hgs
parents:
diff changeset
   404
    mForcedCheck = true;
hgs
parents:
diff changeset
   405
    if(selectionCount == rowCount && rowCount > 0)
hgs
parents:
diff changeset
   406
    {     
hgs
parents:
diff changeset
   407
        mCheckBox->setChecked(true);
hgs
parents:
diff changeset
   408
    }
hgs
parents:
diff changeset
   409
    else
hgs
parents:
diff changeset
   410
    {
hgs
parents:
diff changeset
   411
        mCheckBox->setChecked(false);
hgs
parents:
diff changeset
   412
    }
hgs
parents:
diff changeset
   413
    mForcedCheck = false;
hgs
parents:
diff changeset
   414
       
hgs
parents:
diff changeset
   415
}
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   418
// primaryActionTriggeredSlot
hgs
parents: 30
diff changeset
   419
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   420
//
hgs
parents: 30
diff changeset
   421
void VideoListSelectionDialog::primaryActionTriggeredSlot()
hgs
parents: 30
diff changeset
   422
{
hgs
parents: 30
diff changeset
   423
    // reconnect primary action
hgs
parents: 30
diff changeset
   424
    primaryAction()->disconnect(SIGNAL(triggered()));
hgs
parents: 30
diff changeset
   425
    connect(primaryAction(), SIGNAL(triggered()), this, SLOT(close()));
hgs
parents: 30
diff changeset
   426
    
hgs
parents: 30
diff changeset
   427
    if(mTypeOfSelection == EDeleteVideos) 
hgs
parents: 30
diff changeset
   428
    {       
hgs
parents: 30
diff changeset
   429
        primaryAction()->trigger();
hgs
parents: 30
diff changeset
   430
		return;
hgs
parents: 30
diff changeset
   431
    }
hgs
parents: 30
diff changeset
   432
    
hgs
parents: 30
diff changeset
   433
    // update video items selection here before content changes.
hgs
parents: 30
diff changeset
   434
    int count = mSelection.indexes().count();
hgs
parents: 30
diff changeset
   435
    TMPXItemId id = TMPXItemId::InvalidId();
hgs
parents: 30
diff changeset
   436
    for(int i = 0; i < count; ++i)
hgs
parents: 30
diff changeset
   437
    {
hgs
parents: 30
diff changeset
   438
        id = mModel->getMediaIdAtIndex(mSelection.indexes().at(i));
hgs
parents: 30
diff changeset
   439
        if(id.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   440
        {
hgs
parents: 30
diff changeset
   441
            mSelectedVideos.insert(id);
hgs
parents: 30
diff changeset
   442
        }
hgs
parents: 30
diff changeset
   443
    }
hgs
parents: 30
diff changeset
   444
    
hgs
parents: 30
diff changeset
   445
    if(mSelectedAlbumId != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   446
    {
hgs
parents: 30
diff changeset
   447
        primaryAction()->trigger();
hgs
parents: 30
diff changeset
   448
        return;
hgs
parents: 30
diff changeset
   449
    }
hgs
parents: 30
diff changeset
   450
    
hgs
parents: 30
diff changeset
   451
    
hgs
parents: 30
diff changeset
   452
    else if(mTypeOfSelection == ESelectCollection)
hgs
parents: 30
diff changeset
   453
    {
hgs
parents: 30
diff changeset
   454
        // there's no selected collection and primary action pressed
hgs
parents: 30
diff changeset
   455
        // -> user is willing to create a new collection
hgs
parents: 30
diff changeset
   456
        mSelectedAlbumId = queryNewAlbum();
hgs
parents: 30
diff changeset
   457
        if(mSelectedAlbumId != TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   458
        {       
hgs
parents: 30
diff changeset
   459
            primaryAction()->trigger();
hgs
parents: 30
diff changeset
   460
        }
hgs
parents: 30
diff changeset
   461
        else
hgs
parents: 30
diff changeset
   462
        {
hgs
parents: 30
diff changeset
   463
            // cancelled
hgs
parents: 30
diff changeset
   464
            secondaryAction()->trigger();
hgs
parents: 30
diff changeset
   465
        }     
hgs
parents: 30
diff changeset
   466
    }
hgs
parents: 30
diff changeset
   467
    else if(mTypeOfSelection == EAddToCollection)
hgs
parents: 30
diff changeset
   468
    {
hgs
parents: 30
diff changeset
   469
        // videos for collection selected, but collection 
hgs
parents: 30
diff changeset
   470
        // not yet selected, activate selection for it
hgs
parents: 30
diff changeset
   471
        mTypeOfSelection = ESelectCollection;
hgs
parents: 30
diff changeset
   472
        activateSelection();
hgs
parents: 30
diff changeset
   473
   }   
hgs
parents: 30
diff changeset
   474
}
hgs
parents: 30
diff changeset
   475
hgs
parents: 30
diff changeset
   476
// ---------------------------------------------------------------------------
30
hgs
parents:
diff changeset
   477
// connectSignals
hgs
parents:
diff changeset
   478
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   479
//
hgs
parents:
diff changeset
   480
void VideoListSelectionDialog::connectSignals()
hgs
parents:
diff changeset
   481
{
hgs
parents:
diff changeset
   482
    // selection changes
34
hgs
parents: 30
diff changeset
   483
    connect(mListWidget, SIGNAL(activated(const QModelIndex&)),
hgs
parents: 30
diff changeset
   484
            this, SLOT(singleItemSelectedSlot(const QModelIndex&)));
hgs
parents: 30
diff changeset
   485
    
hgs
parents: 30
diff changeset
   486
    connect(mListWidget->selectionModel(), SIGNAL(selectionChanged (const QItemSelection&, const QItemSelection&)),
hgs
parents: 30
diff changeset
   487
            this, SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection &)));
30
hgs
parents:
diff changeset
   488
        
hgs
parents:
diff changeset
   489
    // model changes signals
34
hgs
parents: 30
diff changeset
   490
    connect(mModel, SIGNAL(modelReady()), this, SLOT(modelReadySlot()));    
hgs
parents: 30
diff changeset
   491
    connect(mModel, SIGNAL(modelChanged()), this, SLOT(updateCounterSlot()));    
30
hgs
parents:
diff changeset
   492
    
hgs
parents:
diff changeset
   493
    // mark all state changes
hgs
parents:
diff changeset
   494
    connect(mCheckBox, SIGNAL(stateChanged(int)), this, SLOT(markAllStateChangedSlot(int)));
hgs
parents:
diff changeset
   495
}
hgs
parents:
diff changeset
   496
 
hgs
parents:
diff changeset
   497
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   498
// disconnectSignals
hgs
parents:
diff changeset
   499
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   500
//
hgs
parents:
diff changeset
   501
void VideoListSelectionDialog::disconnectSignals()
34
hgs
parents: 30
diff changeset
   502
{    
hgs
parents: 30
diff changeset
   503
    disconnect(mListWidget, SIGNAL(activated(const QModelIndex&)),
hgs
parents: 30
diff changeset
   504
                this, SLOT(singleItemSelectedSlot(const QModelIndex&)));
30
hgs
parents:
diff changeset
   505
    
34
hgs
parents: 30
diff changeset
   506
    disconnect(mListWidget->selectionModel(), SIGNAL(selectionChanged (const QItemSelection&, const QItemSelection&)),
30
hgs
parents:
diff changeset
   507
                            this, SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection &)));
hgs
parents:
diff changeset
   508
            
hgs
parents:
diff changeset
   509
    // model changes signals
34
hgs
parents: 30
diff changeset
   510
    disconnect(mModel, SIGNAL(modelReady()), this, SLOT(modelReadySlot()));    
hgs
parents: 30
diff changeset
   511
    disconnect(mModel, SIGNAL(modelChanged()), this, SLOT(updateCounterSlot()));   
30
hgs
parents:
diff changeset
   512
    
hgs
parents:
diff changeset
   513
    // mark all state changes
34
hgs
parents: 30
diff changeset
   514
    disconnect(mCheckBox, SIGNAL(stateChanged(int)), this, SLOT(markAllStateChangedSlot(int)));   
30
hgs
parents:
diff changeset
   515
}
hgs
parents:
diff changeset
   516
34
hgs
parents: 30
diff changeset
   517
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   518
// getSelectedName
hgs
parents: 30
diff changeset
   519
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   520
//
hgs
parents: 30
diff changeset
   521
QString VideoListSelectionDialog::getSelectedName()
hgs
parents: 30
diff changeset
   522
{
hgs
parents: 30
diff changeset
   523
    QString name;
hgs
parents: 30
diff changeset
   524
    if(mSelectedAlbumId.iId2 > KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   525
    {
hgs
parents: 30
diff changeset
   526
        VideoSortFilterProxyModel *model = 
hgs
parents: 30
diff changeset
   527
                VideoCollectionWrapper::instance().getModel(
hgs
parents: 30
diff changeset
   528
                            VideoCollectionWrapper::ECollections);
hgs
parents: 30
diff changeset
   529
        if(!model)
hgs
parents: 30
diff changeset
   530
        {
hgs
parents: 30
diff changeset
   531
            return name;
hgs
parents: 30
diff changeset
   532
        }
hgs
parents: 30
diff changeset
   533
        QModelIndex index = model->indexOfId(mSelectedAlbumId);
hgs
parents: 30
diff changeset
   534
        if(index.isValid())
hgs
parents: 30
diff changeset
   535
        {
hgs
parents: 30
diff changeset
   536
            name = model->data(index, Qt::DisplayRole).toStringList().first();
hgs
parents: 30
diff changeset
   537
        }
hgs
parents: 30
diff changeset
   538
    }
hgs
parents: 30
diff changeset
   539
    
hgs
parents: 30
diff changeset
   540
    return name;
hgs
parents: 30
diff changeset
   541
}
30
hgs
parents:
diff changeset
   542
34
hgs
parents: 30
diff changeset
   543
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   544
// queryNewAlbum
hgs
parents: 30
diff changeset
   545
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   546
//
hgs
parents: 30
diff changeset
   547
TMPXItemId VideoListSelectionDialog::queryNewAlbum()
hgs
parents: 30
diff changeset
   548
{
hgs
parents: 30
diff changeset
   549
    TMPXItemId newId = TMPXItemId::InvalidId();
hgs
parents: 30
diff changeset
   550
    bool ok = false;
hgs
parents: 30
diff changeset
   551
    QString label(tr("Enter name:"));   // localisation missing
hgs
parents: 30
diff changeset
   552
    QString text(tr("New collection")); // localisation missing
hgs
parents: 30
diff changeset
   553
    text = HbInputDialog::getText(label, text, &ok);
hgs
parents: 30
diff changeset
   554
    if (ok && text.length())
hgs
parents: 30
diff changeset
   555
    {
hgs
parents: 30
diff changeset
   556
       // check for duplicate album name and add new album
hgs
parents: 30
diff changeset
   557
        newId = mModel->addNewAlbum(mModel->resolveAlbumName(text));
hgs
parents: 30
diff changeset
   558
    }
hgs
parents: 30
diff changeset
   559
    return newId;
hgs
parents: 30
diff changeset
   560
}
hgs
parents: 30
diff changeset
   561