videocollection/videocollectionview/src/videolistview.cpp
author hgs
Thu, 01 Apr 2010 22:38:49 +0300
changeset 30 4f111d64a341
child 34 bbb98528c666
permissions -rw-r--r--
201005
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 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 view class source code
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <xqserviceutil.h>
hgs
parents:
diff changeset
    19
#include <QActionGroup>
hgs
parents:
diff changeset
    20
#include <hbinstance.h>
hgs
parents:
diff changeset
    21
#include <hbmainwindow.h>
hgs
parents:
diff changeset
    22
#include <hblabel.h>
hgs
parents:
diff changeset
    23
#include <hbmessagebox.h>
hgs
parents:
diff changeset
    24
#include <hbstackedwidget.h>
hgs
parents:
diff changeset
    25
#include <hbstackedlayout.h>
hgs
parents:
diff changeset
    26
#include <hblistwidget.h>
hgs
parents:
diff changeset
    27
#include <hbtoolbar.h>
hgs
parents:
diff changeset
    28
#include <hbaction.h>
hgs
parents:
diff changeset
    29
#include <hbmenu.h>
hgs
parents:
diff changeset
    30
#include <hbgroupbox.h>
hgs
parents:
diff changeset
    31
#include <hbpushbutton.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include "videoservices.h"
hgs
parents:
diff changeset
    34
#include "videolistselectiondialog.h"
hgs
parents:
diff changeset
    35
#include "videocollectionviewutils.h"
hgs
parents:
diff changeset
    36
#include "videolistwidget.h"
hgs
parents:
diff changeset
    37
#include "videohintwidget.h"
hgs
parents:
diff changeset
    38
#include "videolistview.h"
hgs
parents:
diff changeset
    39
#include "videocollectioncommon.h"
hgs
parents:
diff changeset
    40
#include "videocollectionwrapper.h"
hgs
parents:
diff changeset
    41
#include "videosortfilterproxymodel.h"
hgs
parents:
diff changeset
    42
#include "videocollectionuiloader.h"
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// remove these
hgs
parents:
diff changeset
    45
#include <QDebug>
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
const int VIDEO_LIST_VIEW_OPTION_MENU_COUNT = 4;
hgs
parents:
diff changeset
    48
const int VIDEO_LIST_VIEW_SORT_MENU_COUNT = 5;
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
// Constructor
hgs
parents:
diff changeset
    52
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
//
hgs
parents:
diff changeset
    54
VideoListView::VideoListView(VideoCollectionUiLoader *uiLoader, QGraphicsItem *parent) :
hgs
parents:
diff changeset
    55
HbView(parent),
hgs
parents:
diff changeset
    56
mSortMenu(0),
hgs
parents:
diff changeset
    57
mUiUtils(VideoCollectionViewUtils::instance()),
hgs
parents:
diff changeset
    58
mWrapper(VideoCollectionWrapper::instance()),
hgs
parents:
diff changeset
    59
mUiLoader(uiLoader),
hgs
parents:
diff changeset
    60
mModel(0),
hgs
parents:
diff changeset
    61
mIsService(false),
hgs
parents:
diff changeset
    62
mModelReady(false),
hgs
parents:
diff changeset
    63
mSubLabel(0),
hgs
parents:
diff changeset
    64
mOptionsMenu(0),
hgs
parents:
diff changeset
    65
mVideoServices(0),
hgs
parents:
diff changeset
    66
mVideoListWidget(0),
hgs
parents:
diff changeset
    67
mVideoHintWidget(0),
hgs
parents:
diff changeset
    68
mToolbarViewsActionGroup(0),
hgs
parents:
diff changeset
    69
mToolbarCollectionActionGroup(0),
hgs
parents:
diff changeset
    70
mSelectionDialog(0)
hgs
parents:
diff changeset
    71
{
hgs
parents:
diff changeset
    72
    // NOP
hgs
parents:
diff changeset
    73
}
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    76
// Destructor
hgs
parents:
diff changeset
    77
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
//
hgs
parents:
diff changeset
    79
VideoListView::~VideoListView()
hgs
parents:
diff changeset
    80
{
hgs
parents:
diff changeset
    81
    qDebug() << "VideoListView::~VideoListView()";
hgs
parents:
diff changeset
    82
    delete mSelectionDialog;
hgs
parents:
diff changeset
    83
    // widgets' destructors are being called throught
hgs
parents:
diff changeset
    84
    // orbit framework. No need to remove them here.
hgs
parents:
diff changeset
    85
    mMenuActions.clear();
hgs
parents:
diff changeset
    86
    mToolbarActions.clear();
hgs
parents:
diff changeset
    87
    mSortingRoles.clear();
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    if(mVideoServices)
hgs
parents:
diff changeset
    90
    {
hgs
parents:
diff changeset
    91
    	mVideoServices->decreaseReferenceCount();
hgs
parents:
diff changeset
    92
    	mVideoServices = 0;
hgs
parents:
diff changeset
    93
    }
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
    if(mWrapper)
hgs
parents:
diff changeset
    96
    {
hgs
parents:
diff changeset
    97
        mWrapper->decreaseReferenceCount();
hgs
parents:
diff changeset
    98
        mWrapper = 0;
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
}
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   103
// initializeView()
hgs
parents:
diff changeset
   104
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   105
//
hgs
parents:
diff changeset
   106
int VideoListView::initializeView()
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
	if(!mUiLoader)
hgs
parents:
diff changeset
   109
	{
hgs
parents:
diff changeset
   110
		return -1;
hgs
parents:
diff changeset
   111
	}
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
    if (XQServiceUtil::isService() && !mVideoServices)
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
    	mIsService = true;
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
    	mVideoServices = VideoServices::instance();
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    	if (!mVideoServices)
hgs
parents:
diff changeset
   120
        {
hgs
parents:
diff changeset
   121
        	return -1;
hgs
parents:
diff changeset
   122
		}
hgs
parents:
diff changeset
   123
        else
hgs
parents:
diff changeset
   124
        {
hgs
parents:
diff changeset
   125
        	connect(mVideoServices, SIGNAL(titleReady(const QString&)), this, SLOT(titleReadySlot(const QString&)));
hgs
parents:
diff changeset
   126
        }
hgs
parents:
diff changeset
   127
	}
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    // create model
hgs
parents:
diff changeset
   130
    if(mWrapper)
hgs
parents:
diff changeset
   131
    {
hgs
parents:
diff changeset
   132
        mModel = mWrapper->getModel();
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    if(!mModel || mModel->open(VideoListWidget::ELevelVideos) < 0)
hgs
parents:
diff changeset
   136
    {
hgs
parents:
diff changeset
   137
    	cleanup();
hgs
parents:
diff changeset
   138
        return -1;
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
    
hgs
parents:
diff changeset
   141
    int sortRole(VideoCollectionCommon::KeyDateTime);
hgs
parents:
diff changeset
   142
    Qt::SortOrder sortOrder(Qt::AscendingOrder);
hgs
parents:
diff changeset
   143
    
hgs
parents:
diff changeset
   144
    // return value ignored, as in case of error the sortRole and sortOrder variables
hgs
parents:
diff changeset
   145
    // stay at their predefined values, and in error cases those are the sorting values
hgs
parents:
diff changeset
   146
    // that are used.
hgs
parents:
diff changeset
   147
    mUiUtils.loadSortingValues(sortRole, sortOrder);
hgs
parents:
diff changeset
   148
    
hgs
parents:
diff changeset
   149
    mModel->doSorting(sortRole, sortOrder, false);
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
	mOptionsMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU);
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
    if(!mOptionsMenu)
hgs
parents:
diff changeset
   154
    {
hgs
parents:
diff changeset
   155
		cleanup();
hgs
parents:
diff changeset
   156
		return -1;
hgs
parents:
diff changeset
   157
	}
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    mSubLabel = mUiLoader->findWidget<HbGroupBox>(DOCML_NAME_VC_HEADINGBANNER);
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
	if(!mSubLabel)
hgs
parents:
diff changeset
   162
	{
hgs
parents:
diff changeset
   163
		cleanup();
hgs
parents:
diff changeset
   164
		return -1;
hgs
parents:
diff changeset
   165
	}
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
	mSubLabel->setCollapsable(false);
hgs
parents:
diff changeset
   168
	
hgs
parents:
diff changeset
   169
    // allocate and initialize views, menus and toolbar
hgs
parents:
diff changeset
   170
    if(createVideoWidget() != 0
hgs
parents:
diff changeset
   171
    || createHintWidget() != 0
hgs
parents:
diff changeset
   172
    || createToolbar() != 0
hgs
parents:
diff changeset
   173
    || createMainMenu() != 0)
hgs
parents:
diff changeset
   174
    {
hgs
parents:
diff changeset
   175
        cleanup();
hgs
parents:
diff changeset
   176
        return -1;
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
	mSubLabel->setHeading(tr("Retrieving list.."));
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
    mCollectionName = "";
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    return 0;
hgs
parents:
diff changeset
   184
}
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   187
// titleReadySlot()
hgs
parents:
diff changeset
   188
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   189
//
hgs
parents:
diff changeset
   190
void VideoListView::titleReadySlot(const QString& title)
hgs
parents:
diff changeset
   191
{
hgs
parents:
diff changeset
   192
	setTitle(title);
hgs
parents:
diff changeset
   193
}
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   196
// activateView()
hgs
parents:
diff changeset
   197
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   198
//
hgs
parents:
diff changeset
   199
int VideoListView::activateView()
hgs
parents:
diff changeset
   200
{
hgs
parents:
diff changeset
   201
	mOptionsMenu->setEnabled(true);
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    HbMainWindow *mainWnd = hbInstance->allMainWindows().value(0);
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
    if(!connect(mainWnd, SIGNAL(aboutToChangeOrientation()),
hgs
parents:
diff changeset
   206
                this, SLOT( aboutToChangeOrientationSlot())) ||
hgs
parents:
diff changeset
   207
       !connect(mainWnd, SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   208
                this, SLOT(orientationChangedSlot(Qt::Orientation))) ||
hgs
parents:
diff changeset
   209
       !connect(mWrapper, SIGNAL(asyncStatus(int, QVariant&)),
hgs
parents:
diff changeset
   210
                this, SLOT(handleAsyncStatusSlot(int, QVariant&))) ||
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
		//TODO: seems like rowsremoved is not signaled when files are removed, but layoutchanged
hgs
parents:
diff changeset
   213
		//TODO: on the other hand, layoutchanged is not signaled when items are added but rowsinserted is
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
        !connect(mModel,
hgs
parents:
diff changeset
   216
    			SIGNAL(rowsInserted(const QModelIndex&, int, int)),
hgs
parents:
diff changeset
   217
    			this, SLOT(layoutChangedSlot()))  ||
hgs
parents:
diff changeset
   218
    	!connect(mModel,
hgs
parents:
diff changeset
   219
    			SIGNAL(rowsRemoved(const QModelIndex&, int, int)),
hgs
parents:
diff changeset
   220
    			this, SLOT(layoutChangedSlot()))  ||
hgs
parents:
diff changeset
   221
        //TODO: connect to rowsremoved rowsinserted once delete results emitting removed
hgs
parents:
diff changeset
   222
    	!connect(mModel,
hgs
parents:
diff changeset
   223
    			SIGNAL(layoutChanged()),
hgs
parents:
diff changeset
   224
    			this, SLOT(layoutChangedSlot()))  ||
hgs
parents:
diff changeset
   225
    	!connect(mModel,
hgs
parents:
diff changeset
   226
    			SIGNAL(modelReady()),
hgs
parents:
diff changeset
   227
    			this, SLOT(modelReadySlot())))
hgs
parents:
diff changeset
   228
    {
hgs
parents:
diff changeset
   229
        // deactivate view so we get rid of dangling connections.
hgs
parents:
diff changeset
   230
        deactivateView();
hgs
parents:
diff changeset
   231
        return -1;
hgs
parents:
diff changeset
   232
    }
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
    // activate current vidget, first make sure it's one that can be activated
hgs
parents:
diff changeset
   235
    if(mVideoListWidget)
hgs
parents:
diff changeset
   236
    {
hgs
parents:
diff changeset
   237
        int result = mVideoListWidget->activate();
hgs
parents:
diff changeset
   238
        if(result < 0) {
hgs
parents:
diff changeset
   239
            // activate failed, deactivate view so we get rid of dangling connections.
hgs
parents:
diff changeset
   240
            deactivateView();
hgs
parents:
diff changeset
   241
        }
hgs
parents:
diff changeset
   242
        else if (mSubLabel->heading() != tr("Retrieving list.."))
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
        	updateSubLabel();
hgs
parents:
diff changeset
   245
        }
hgs
parents:
diff changeset
   246
        
hgs
parents:
diff changeset
   247
        showHint();
hgs
parents:
diff changeset
   248
        mainWnd->unsetOrientation();
hgs
parents:
diff changeset
   249
        
hgs
parents:
diff changeset
   250
        return result;
hgs
parents:
diff changeset
   251
    }
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
    // deactivate view so we get rid of dangling connections.
hgs
parents:
diff changeset
   254
    deactivateView();
hgs
parents:
diff changeset
   255
    return -1;
hgs
parents:
diff changeset
   256
}
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   259
// modelReadySlot
hgs
parents:
diff changeset
   260
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   261
//
hgs
parents:
diff changeset
   262
void VideoListView::modelReadySlot()
hgs
parents:
diff changeset
   263
{
hgs
parents:
diff changeset
   264
    mModelReady = true;
hgs
parents:
diff changeset
   265
    // since the reset signal arrives after
hgs
parents:
diff changeset
   266
    // layout changed, need to make sure that
hgs
parents:
diff changeset
   267
    // view is updated in case needed
hgs
parents:
diff changeset
   268
    layoutChangedSlot();
hgs
parents:
diff changeset
   269
}
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   272
// layoutChangedSlot
hgs
parents:
diff changeset
   273
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   274
//
hgs
parents:
diff changeset
   275
void VideoListView::layoutChangedSlot()
hgs
parents:
diff changeset
   276
{
hgs
parents:
diff changeset
   277
    updateSubLabel();
hgs
parents:
diff changeset
   278
    
hgs
parents:
diff changeset
   279
    if(mModelReady)
hgs
parents:
diff changeset
   280
    {
hgs
parents:
diff changeset
   281
        showHint();
hgs
parents:
diff changeset
   282
    }
hgs
parents:
diff changeset
   283
}
hgs
parents:
diff changeset
   284
hgs
parents:
diff changeset
   285
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   286
// deactivateView()
hgs
parents:
diff changeset
   287
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   288
//
hgs
parents:
diff changeset
   289
void VideoListView::deactivateView()
hgs
parents:
diff changeset
   290
{
hgs
parents:
diff changeset
   291
    HbMainWindow *mainWnd = hbInstance->allMainWindows().value(0);
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
    disconnect(mainWnd, SIGNAL(aboutToChangeOrientation()),
hgs
parents:
diff changeset
   294
               this, SLOT(aboutToChangeOrientationSlot()));
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
    disconnect(mainWnd, SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   297
               this, SLOT(orientationChangedSlot(Qt::Orientation)));
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
    disconnect(mWrapper, SIGNAL(asyncStatus(int, QVariant&)),
hgs
parents:
diff changeset
   300
               this, SLOT(handleAsyncStatusSlot(int, QVariant&)));
hgs
parents:
diff changeset
   301
hgs
parents:
diff changeset
   302
	disconnect(mModel,
hgs
parents:
diff changeset
   303
			SIGNAL(rowsInserted(const QModelIndex&, int, int)),
hgs
parents:
diff changeset
   304
			this, SLOT(layoutChangedSlot()));
hgs
parents:
diff changeset
   305
	disconnect(mModel,
hgs
parents:
diff changeset
   306
			SIGNAL(rowsRemoved(const QModelIndex&, int, int)),
hgs
parents:
diff changeset
   307
			this, SLOT(layoutChangedSlot()));
hgs
parents:
diff changeset
   308
	disconnect(mModel,
hgs
parents:
diff changeset
   309
			SIGNAL(layoutChanged()),
hgs
parents:
diff changeset
   310
			this, SLOT(layoutChangedSlot()));
hgs
parents:
diff changeset
   311
	disconnect(mModel,
hgs
parents:
diff changeset
   312
			SIGNAL(modelReady()),
hgs
parents:
diff changeset
   313
			this, SLOT(modelReadySlot()));
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
	mOptionsMenu->setVisible(false);
hgs
parents:
diff changeset
   316
    mOptionsMenu->setEnabled(false);
hgs
parents:
diff changeset
   317
    
hgs
parents:
diff changeset
   318
    showHint(false);
hgs
parents:
diff changeset
   319
    
hgs
parents:
diff changeset
   320
    if(mVideoListWidget)
hgs
parents:
diff changeset
   321
    {
hgs
parents:
diff changeset
   322
        mVideoListWidget->deactivate();
hgs
parents:
diff changeset
   323
    }
hgs
parents:
diff changeset
   324
}
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   327
// back()
hgs
parents:
diff changeset
   328
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   329
//
hgs
parents:
diff changeset
   330
void VideoListView::back()
hgs
parents:
diff changeset
   331
{
hgs
parents:
diff changeset
   332
    // NOP
hgs
parents:
diff changeset
   333
}
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   336
// cleanup()
hgs
parents:
diff changeset
   337
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   338
//
hgs
parents:
diff changeset
   339
void VideoListView::cleanup()
hgs
parents:
diff changeset
   340
{
hgs
parents:
diff changeset
   341
    delete mToolbarViewsActionGroup;
hgs
parents:
diff changeset
   342
    mToolbarViewsActionGroup = 0;
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
    delete mToolbarCollectionActionGroup;
hgs
parents:
diff changeset
   345
    mToolbarCollectionActionGroup = 0;
hgs
parents:
diff changeset
   346
    
hgs
parents:
diff changeset
   347
    // not deleted as the uiloader owns these.
hgs
parents:
diff changeset
   348
    mVideoListWidget = 0;
hgs
parents:
diff changeset
   349
    mVideoHintWidget = 0;
hgs
parents:
diff changeset
   350
}
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   353
// createMainMenu()
hgs
parents:
diff changeset
   354
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   355
//
hgs
parents:
diff changeset
   356
int VideoListView::createMainMenu()
hgs
parents:
diff changeset
   357
{
hgs
parents:
diff changeset
   358
	if(mMenuActions.count() > 0)
hgs
parents:
diff changeset
   359
	{
hgs
parents:
diff changeset
   360
		// Menu is already created.
hgs
parents:
diff changeset
   361
		return 0;
hgs
parents:
diff changeset
   362
	}
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
	if(!connect(mOptionsMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowMainMenuSlot())))
hgs
parents:
diff changeset
   365
	{
hgs
parents:
diff changeset
   366
	    return -1;
hgs
parents:
diff changeset
   367
	}
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
	mMenuActions[EActionAddToCollection] = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_ADD_TO_COLLECTION);
hgs
parents:
diff changeset
   370
    connect(mMenuActions[EActionAddToCollection], SIGNAL(triggered()), this, SLOT(debugNotImplementedYet()));
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
    mMenuActions[EActionNewCollection] =  (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_CREATE_COLLECTION);
hgs
parents:
diff changeset
   373
    connect(mMenuActions[EActionNewCollection], SIGNAL(triggered()), this, SLOT(createCollectionSlot()));
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
    mMenuActions[EActionDelete]          = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_DELETE_MULTIPLE);
hgs
parents:
diff changeset
   376
    connect(mMenuActions[EActionDelete], SIGNAL(triggered()), this, SLOT(deleteItemsSlot()));
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
    mSortMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_SORT_MENU);
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
	mMenuActions[EActionSortBy] = mSortMenu->menuAction();
hgs
parents:
diff changeset
   381
hgs
parents:
diff changeset
   382
    // submenu items and roles for sorting
hgs
parents:
diff changeset
   383
    mMenuActions[EActionSortByDate]             = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_DATE);
hgs
parents:
diff changeset
   384
    connect(mMenuActions[EActionSortByDate], SIGNAL(triggered()), this, SLOT(startSorting()));
hgs
parents:
diff changeset
   385
    mSortingRoles[mMenuActions[EActionSortByDate]] = VideoCollectionCommon::KeyDateTime;
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
    mMenuActions[EActionSortByName]             = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NAME);
hgs
parents:
diff changeset
   388
    connect(mMenuActions[EActionSortByName], SIGNAL(triggered()), this, SLOT(startSorting()));
hgs
parents:
diff changeset
   389
    mSortingRoles[mMenuActions[EActionSortByName]] = Qt::DisplayRole;
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
    mMenuActions[EACtionSortByItemCount]  = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS);
hgs
parents:
diff changeset
   392
    connect(mMenuActions[EACtionSortByItemCount], SIGNAL(triggered()), this, SLOT(startSorting()));
hgs
parents:
diff changeset
   393
    // TODO:
hgs
parents:
diff changeset
   394
    mSortingRoles[mMenuActions[EACtionSortByItemCount]] = 0;
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
    mMenuActions[EActionSortByLength]     = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_TOTAL_LENGTH);
hgs
parents:
diff changeset
   397
    connect(mMenuActions[EActionSortByLength], SIGNAL(triggered()), this, SLOT(startSorting()));
hgs
parents:
diff changeset
   398
    // TODO:
hgs
parents:
diff changeset
   399
    mSortingRoles[mMenuActions[EActionSortByLength]] = 0;
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
    mMenuActions[EActionSortBySize]             = (HbAction*)mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_SIZE);
hgs
parents:
diff changeset
   402
    connect(mMenuActions[EActionSortBySize], SIGNAL(triggered()), this, SLOT(startSorting()));
hgs
parents:
diff changeset
   403
    mSortingRoles[mMenuActions[EActionSortBySize]] = VideoCollectionCommon::KeySizeValue;
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
    if(mSortMenu->actions().count() != VIDEO_LIST_VIEW_SORT_MENU_COUNT
hgs
parents:
diff changeset
   406
	|| mOptionsMenu->actions().count()  != VIDEO_LIST_VIEW_OPTION_MENU_COUNT)
hgs
parents:
diff changeset
   407
    {
hgs
parents:
diff changeset
   408
        return -1;
hgs
parents:
diff changeset
   409
    }
hgs
parents:
diff changeset
   410
hgs
parents:
diff changeset
   411
    return 0;
hgs
parents:
diff changeset
   412
}
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   415
// createToolbar()
hgs
parents:
diff changeset
   416
// Creates toolbar, toolbar actions and toolbar icons
hgs
parents:
diff changeset
   417
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   418
//
hgs
parents:
diff changeset
   419
int VideoListView::createToolbar()
hgs
parents:
diff changeset
   420
{
hgs
parents:
diff changeset
   421
    // Create actiongroup and add all actions to it. This ensures that only one is
hgs
parents:
diff changeset
   422
    // active at certain moment.
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
    if(!mToolbarViewsActionGroup && !mToolbarCollectionActionGroup)
hgs
parents:
diff changeset
   425
    {
hgs
parents:
diff changeset
   426
    	mToolbarViewsActionGroup = new QActionGroup(this);
hgs
parents:
diff changeset
   427
        mToolbarCollectionActionGroup = new QActionGroup(this);
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
        if(!mToolbarViewsActionGroup || !mToolbarCollectionActionGroup)
hgs
parents:
diff changeset
   430
        {
hgs
parents:
diff changeset
   431
            delete mToolbarViewsActionGroup;
hgs
parents:
diff changeset
   432
            mToolbarViewsActionGroup = 0;
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
            delete mToolbarCollectionActionGroup;
hgs
parents:
diff changeset
   435
            mToolbarCollectionActionGroup = 0;
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
            return -1;
hgs
parents:
diff changeset
   438
        }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
        // create toolbar item actions
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
        // All Videos tab
hgs
parents:
diff changeset
   443
        mToolbarActions[ETBActionAllVideos] = createAction(tr("All videos"), ":/images/qtg_mono_video_all.svg",
hgs
parents:
diff changeset
   444
                mToolbarViewsActionGroup, SLOT(openAllVideosViewSlot()));
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
        // Collections tab
hgs
parents:
diff changeset
   447
        mToolbarActions[ETBActionCollections] = createAction(tr("Collections"), ":/images/qtg_mono_video_collection.svg",
hgs
parents:
diff changeset
   448
                mToolbarViewsActionGroup, SLOT(openCollectionViewSlot()));
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
        if (!mIsService)
hgs
parents:
diff changeset
   451
        {
hgs
parents:
diff changeset
   452
			// Services tab
hgs
parents:
diff changeset
   453
			mToolbarActions[ETBActionServices] = createAction(tr("Services"), ":/images/qtg_mono_video_services.svg",
hgs
parents:
diff changeset
   454
					mToolbarViewsActionGroup, SLOT(openServicesViewSlot()));
hgs
parents:
diff changeset
   455
			// Add Videos tab
hgs
parents:
diff changeset
   456
			mToolbarActions[ETBActionAddVideos] = createAction(tr("Add videos"), ":/images/mono_video_addvideos.svg",
hgs
parents:
diff changeset
   457
					mToolbarCollectionActionGroup, SLOT(addVideosToCollectionSlot()));
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
			// Remove Videos tab
hgs
parents:
diff changeset
   460
			mToolbarActions[ETBActionRemoveVideos] = createAction(tr("Remove videos"), ":/images/mono_video_removevideos.svg",
hgs
parents:
diff changeset
   461
					mToolbarCollectionActionGroup, SLOT(debugNotImplementedYet()));
hgs
parents:
diff changeset
   462
        }
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
        // Sort by tab
hgs
parents:
diff changeset
   465
        mToolbarActions[ETBActionSortVideos] = createAction(tr("Sort by"), ":/images/mono_video_sortvideos.svg",
hgs
parents:
diff changeset
   466
                mToolbarCollectionActionGroup, SLOT(openSortByMenuSlot()));
hgs
parents:
diff changeset
   467
hgs
parents:
diff changeset
   468
        HbToolBar *bar = toolBar(); // First call to toolBar() creates the object, so on failure it could return 0.
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
        if(   !bar
hgs
parents:
diff changeset
   471
		   || !mToolbarActions[ETBActionAllVideos]
hgs
parents:
diff changeset
   472
           || !mToolbarActions[ETBActionCollections]
hgs
parents:
diff changeset
   473
		   || !mToolbarActions[ETBActionSortVideos]
hgs
parents:
diff changeset
   474
           || (!mToolbarActions[ETBActionServices]     && !mIsService)
hgs
parents:
diff changeset
   475
           || (!mToolbarActions[ETBActionAddVideos]    && !mIsService)
hgs
parents:
diff changeset
   476
           || (!mToolbarActions[ETBActionRemoveVideos] && !mIsService))
hgs
parents:
diff changeset
   477
        {
hgs
parents:
diff changeset
   478
        	delete mToolbarActions[ETBActionAllVideos];
hgs
parents:
diff changeset
   479
            delete mToolbarActions[ETBActionCollections];
hgs
parents:
diff changeset
   480
            delete mToolbarActions[ETBActionServices];
hgs
parents:
diff changeset
   481
            delete mToolbarActions[ETBActionAddVideos];
hgs
parents:
diff changeset
   482
            delete mToolbarActions[ETBActionRemoveVideos];
hgs
parents:
diff changeset
   483
            delete mToolbarActions[ETBActionSortVideos];
hgs
parents:
diff changeset
   484
        	return -1;
hgs
parents:
diff changeset
   485
        }
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
        // Collection view actions are not checkable
hgs
parents:
diff changeset
   488
        mToolbarActions[ETBActionAllVideos]->setCheckable(true);
hgs
parents:
diff changeset
   489
        mToolbarActions[ETBActionCollections]->setCheckable(true);
hgs
parents:
diff changeset
   490
hgs
parents:
diff changeset
   491
        if (!mIsService)
hgs
parents:
diff changeset
   492
        {
hgs
parents:
diff changeset
   493
        	mToolbarActions[ETBActionServices]->setCheckable(true);
hgs
parents:
diff changeset
   494
        }
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
        // Allvideos is checked at creation phase
hgs
parents:
diff changeset
   497
        mToolbarActions[ETBActionAllVideos]->setChecked(true);
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
        bar->addActions(mToolbarViewsActionGroup->actions());
hgs
parents:
diff changeset
   500
    }
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
    return 0;
hgs
parents:
diff changeset
   503
}
hgs
parents:
diff changeset
   504
hgs
parents:
diff changeset
   505
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   506
// createAction()
hgs
parents:
diff changeset
   507
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   508
//
hgs
parents:
diff changeset
   509
HbAction* VideoListView::createAction(QString tooltip, QString icon,
hgs
parents:
diff changeset
   510
        QActionGroup* actionGroup, const char *slot)
hgs
parents:
diff changeset
   511
{
hgs
parents:
diff changeset
   512
    HbAction* action = new HbAction(actionGroup);
hgs
parents:
diff changeset
   513
    if(!action) {
hgs
parents:
diff changeset
   514
        return 0;
hgs
parents:
diff changeset
   515
    }
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
    action->setToolTip(tooltip);
hgs
parents:
diff changeset
   518
    HbIcon hbIcon(icon);
hgs
parents:
diff changeset
   519
    action->setIcon(hbIcon);
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    if(!connect(action, SIGNAL(triggered()), this, slot)) {
hgs
parents:
diff changeset
   522
        // actiongroup deletion deletes this also.
hgs
parents:
diff changeset
   523
        // return 0 tells that there was a problem in creation to caller.
hgs
parents:
diff changeset
   524
        delete action;
hgs
parents:
diff changeset
   525
        return 0;
hgs
parents:
diff changeset
   526
    }
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
    return action;
hgs
parents:
diff changeset
   529
}
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
hgs
parents:
diff changeset
   532
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   533
// createVideoWidget()
hgs
parents:
diff changeset
   534
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   535
//
hgs
parents:
diff changeset
   536
int VideoListView::createVideoWidget()
hgs
parents:
diff changeset
   537
{
hgs
parents:
diff changeset
   538
    if(!mModel)
hgs
parents:
diff changeset
   539
    {
hgs
parents:
diff changeset
   540
        return -1;
hgs
parents:
diff changeset
   541
    }
hgs
parents:
diff changeset
   542
    if(!mVideoListWidget)
hgs
parents:
diff changeset
   543
    {
hgs
parents:
diff changeset
   544
        mVideoListWidget = mUiLoader->findWidget<VideoListWidget>(DOCML_NAME_VC_VIDEOLISTWIDGET);
hgs
parents:
diff changeset
   545
        if(!mVideoListWidget )
hgs
parents:
diff changeset
   546
        {
hgs
parents:
diff changeset
   547
            return -1;
hgs
parents:
diff changeset
   548
        }
hgs
parents:
diff changeset
   549
        if(mVideoListWidget->initialize(*mModel, mVideoServices) < 0)
hgs
parents:
diff changeset
   550
        {
hgs
parents:
diff changeset
   551
            return -1;
hgs
parents:
diff changeset
   552
        }
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
        if(!connect(mVideoListWidget, SIGNAL( command(int)), this, SIGNAL(command(int))) ||
hgs
parents:
diff changeset
   555
           !connect(mVideoListWidget, SIGNAL( collectionOpened(bool, const QString&)), this, SLOT(collectionOpenedSlot(bool, const QString&))))
hgs
parents:
diff changeset
   556
        {
hgs
parents:
diff changeset
   557
            return -1;
hgs
parents:
diff changeset
   558
        }
hgs
parents:
diff changeset
   559
    }
hgs
parents:
diff changeset
   560
hgs
parents:
diff changeset
   561
    return 0;
hgs
parents:
diff changeset
   562
}
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   565
// createHintWidget()
hgs
parents:
diff changeset
   566
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   567
//
hgs
parents:
diff changeset
   568
int VideoListView::createHintWidget()
hgs
parents:
diff changeset
   569
{
hgs
parents:
diff changeset
   570
    if(!mVideoHintWidget)
hgs
parents:
diff changeset
   571
    {
hgs
parents:
diff changeset
   572
        mVideoHintWidget = mUiLoader->findWidget<VideoHintWidget>(DOCML_NAME_VC_VIDEOHINTWIDGET);
hgs
parents:
diff changeset
   573
        if(!mVideoHintWidget )
hgs
parents:
diff changeset
   574
        {
hgs
parents:
diff changeset
   575
            return -1;
hgs
parents:
diff changeset
   576
        }
hgs
parents:
diff changeset
   577
        if(mVideoHintWidget->initialize() < 0)
hgs
parents:
diff changeset
   578
        {
hgs
parents:
diff changeset
   579
            return -1;
hgs
parents:
diff changeset
   580
        }
hgs
parents:
diff changeset
   581
        
hgs
parents:
diff changeset
   582
        HbPushButton* button = mUiLoader->findWidget<HbPushButton>(DOCML_NAME_HINT_BUTTON);
hgs
parents:
diff changeset
   583
        if(!connect(button, SIGNAL(clicked(bool)), this, SLOT(openServicesViewSlot())))
hgs
parents:
diff changeset
   584
        {
hgs
parents:
diff changeset
   585
            return -1;
hgs
parents:
diff changeset
   586
        }
hgs
parents:
diff changeset
   587
    }
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
    return 0;
hgs
parents:
diff changeset
   590
}
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   593
// showHint
hgs
parents:
diff changeset
   594
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   595
//
hgs
parents:
diff changeset
   596
void VideoListView::showHint(bool show)
hgs
parents:
diff changeset
   597
{
hgs
parents:
diff changeset
   598
    if (mModel && mModelReady && (mModel->rowCount() == 0) && mVideoHintWidget)
hgs
parents:
diff changeset
   599
    {
hgs
parents:
diff changeset
   600
        mVideoHintWidget->setVisible(show);
hgs
parents:
diff changeset
   601
    }
hgs
parents:
diff changeset
   602
    else if (mVideoHintWidget)
hgs
parents:
diff changeset
   603
    {
hgs
parents:
diff changeset
   604
        show = false;
hgs
parents:
diff changeset
   605
        mVideoHintWidget->setVisible(false);
hgs
parents:
diff changeset
   606
    }
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
    if(show && mToolbarViewsActionGroup && mToolbarCollectionActionGroup) 
hgs
parents:
diff changeset
   609
    {
hgs
parents:
diff changeset
   610
    	if(!mIsService)
hgs
parents:
diff changeset
   611
    	{
hgs
parents:
diff changeset
   612
    		mToolbarActions[ETBActionRemoveVideos]->setEnabled(false);
hgs
parents:
diff changeset
   613
    	}
hgs
parents:
diff changeset
   614
        mToolbarActions[ETBActionSortVideos]->setEnabled(false);
hgs
parents:
diff changeset
   615
    } 
hgs
parents:
diff changeset
   616
    else 
hgs
parents:
diff changeset
   617
    {
hgs
parents:
diff changeset
   618
    	if(!mIsService)
hgs
parents:
diff changeset
   619
    	{
hgs
parents:
diff changeset
   620
			if(mToolbarActions[ETBActionRemoveVideos]->isEnabled() == false) 
hgs
parents:
diff changeset
   621
			{
hgs
parents:
diff changeset
   622
				mToolbarActions[ETBActionRemoveVideos]->setEnabled(true);
hgs
parents:
diff changeset
   623
			}
hgs
parents:
diff changeset
   624
    	}
hgs
parents:
diff changeset
   625
        if(mToolbarActions[ETBActionSortVideos]->isEnabled() == false) 
hgs
parents:
diff changeset
   626
        {
hgs
parents:
diff changeset
   627
            mToolbarActions[ETBActionSortVideos]->setEnabled(true);
hgs
parents:
diff changeset
   628
        }
hgs
parents:
diff changeset
   629
    }
hgs
parents:
diff changeset
   630
}
hgs
parents:
diff changeset
   631
hgs
parents:
diff changeset
   632
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   633
// updateSubLabel
hgs
parents:
diff changeset
   634
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   635
//
hgs
parents:
diff changeset
   636
void VideoListView::updateSubLabel()
hgs
parents:
diff changeset
   637
{
hgs
parents:
diff changeset
   638
    //TODO: reduce unnecessary updates
hgs
parents:
diff changeset
   639
    if (mModel && mVideoListWidget)
hgs
parents:
diff changeset
   640
    {
hgs
parents:
diff changeset
   641
        int itemCount = mModel->rowCount();
hgs
parents:
diff changeset
   642
hgs
parents:
diff changeset
   643
        VideoListWidget::TVideoListType type = mVideoListWidget->getType();
hgs
parents:
diff changeset
   644
        if (type == VideoListWidget::EAllVideos)
hgs
parents:
diff changeset
   645
        {
hgs
parents:
diff changeset
   646
            mSubLabel->setHeading(tr("%1 videos").arg(itemCount));
hgs
parents:
diff changeset
   647
        }
hgs
parents:
diff changeset
   648
        else if (type == VideoListWidget::ECollections)
hgs
parents:
diff changeset
   649
        {
hgs
parents:
diff changeset
   650
            mSubLabel->setHeading(tr("%1 collections").arg(itemCount));
hgs
parents:
diff changeset
   651
        }  
hgs
parents:
diff changeset
   652
        else if (type == VideoListWidget::EDefaultColItems || 
hgs
parents:
diff changeset
   653
                 type == VideoListWidget::EUserColItems)
hgs
parents:
diff changeset
   654
        {
hgs
parents:
diff changeset
   655
            mSubLabel->setHeading(tr("%1 (%2)").arg(mCollectionName).arg(itemCount));
hgs
parents:
diff changeset
   656
        }
hgs
parents:
diff changeset
   657
    }
hgs
parents:
diff changeset
   658
}
hgs
parents:
diff changeset
   659
hgs
parents:
diff changeset
   660
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   661
// openAllVideosViewSlot()
hgs
parents:
diff changeset
   662
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   663
//
hgs
parents:
diff changeset
   664
void VideoListView::openAllVideosViewSlot()
hgs
parents:
diff changeset
   665
{
hgs
parents:
diff changeset
   666
	mModel->open(VideoListWidget::ELevelVideos);
hgs
parents:
diff changeset
   667
	mVideoListWidget->activate(VideoListWidget::ELevelVideos);
hgs
parents:
diff changeset
   668
    mVideoHintWidget->setLevel(VideoHintWidget::AllVideos);
hgs
parents:
diff changeset
   669
	updateSubLabel();
hgs
parents:
diff changeset
   670
}
hgs
parents:
diff changeset
   671
hgs
parents:
diff changeset
   672
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   673
// openCollectionViewSlot()
hgs
parents:
diff changeset
   674
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   675
//
hgs
parents:
diff changeset
   676
void VideoListView::openCollectionViewSlot()
hgs
parents:
diff changeset
   677
{
hgs
parents:
diff changeset
   678
    mModel->open(VideoListWidget::ELevelCategory);
hgs
parents:
diff changeset
   679
	mVideoListWidget->activate(VideoListWidget::ELevelCategory);
hgs
parents:
diff changeset
   680
	mVideoHintWidget->setLevel(VideoHintWidget::Collection);
hgs
parents:
diff changeset
   681
	
hgs
parents:
diff changeset
   682
	// the collection view is not empty, so we can hide the hint in advance.
hgs
parents:
diff changeset
   683
	showHint(false);
hgs
parents:
diff changeset
   684
	
hgs
parents:
diff changeset
   685
	updateSubLabel();
hgs
parents:
diff changeset
   686
}
hgs
parents:
diff changeset
   687
hgs
parents:
diff changeset
   688
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   689
// openservicesViewSlot()
hgs
parents:
diff changeset
   690
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   691
//
hgs
parents:
diff changeset
   692
void VideoListView::openServicesViewSlot()
hgs
parents:
diff changeset
   693
{
hgs
parents:
diff changeset
   694
    debugNotImplementedYet();
hgs
parents:
diff changeset
   695
}
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   698
// startSorting()
hgs
parents:
diff changeset
   699
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   700
//
hgs
parents:
diff changeset
   701
void VideoListView::startSorting()
hgs
parents:
diff changeset
   702
{
hgs
parents:
diff changeset
   703
	if(!mModel || !mOptionsMenu)
hgs
parents:
diff changeset
   704
    {
hgs
parents:
diff changeset
   705
        return;
hgs
parents:
diff changeset
   706
    }
hgs
parents:
diff changeset
   707
	// Check that action is sort by and it has a sub menu.
hgs
parents:
diff changeset
   708
    if(mOptionsMenu->activeAction() != mMenuActions[EActionSortBy] || !mOptionsMenu->activeAction()->menu())
hgs
parents:
diff changeset
   709
	{
hgs
parents:
diff changeset
   710
		return;
hgs
parents:
diff changeset
   711
	}
hgs
parents:
diff changeset
   712
hgs
parents:
diff changeset
   713
    int role = mSortingRoles[mOptionsMenu->activeAction()->menu()->activeAction()];
hgs
parents:
diff changeset
   714
hgs
parents:
diff changeset
   715
    Qt::SortOrder order(Qt::AscendingOrder);
hgs
parents:
diff changeset
   716
    
hgs
parents:
diff changeset
   717
    if(mModel->sortRole() == role && mModel->sortOrder() == Qt::AscendingOrder)
hgs
parents:
diff changeset
   718
    {
hgs
parents:
diff changeset
   719
        order = Qt::DescendingOrder;
hgs
parents:
diff changeset
   720
    }
hgs
parents:
diff changeset
   721
    
hgs
parents:
diff changeset
   722
    mModel->doSorting(role, order);
hgs
parents:
diff changeset
   723
    
hgs
parents:
diff changeset
   724
    mUiUtils.saveSortingValues(role, order);
hgs
parents:
diff changeset
   725
}
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   728
// aboutToChangeOrientationSlot()
hgs
parents:
diff changeset
   729
// hide all items in the window during orientation change
hgs
parents:
diff changeset
   730
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   731
//
hgs
parents:
diff changeset
   732
void VideoListView::aboutToChangeOrientationSlot()
hgs
parents:
diff changeset
   733
{
hgs
parents:
diff changeset
   734
    // this method is required for changing from to mediawall
hgs
parents:
diff changeset
   735
}
hgs
parents:
diff changeset
   736
hgs
parents:
diff changeset
   737
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   738
// orientationChangedSlot()
hgs
parents:
diff changeset
   739
// orientation changed, items can be put back to visible after view has handled the change
hgs
parents:
diff changeset
   740
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   741
//
hgs
parents:
diff changeset
   742
void VideoListView::orientationChangedSlot( Qt::Orientation orientation )
hgs
parents:
diff changeset
   743
{
hgs
parents:
diff changeset
   744
    // this method is required for changing from to mediawall
hgs
parents:
diff changeset
   745
    
hgs
parents:
diff changeset
   746
    // in landscape we need to hide the title and the toolbar. (also required for the mediawall?)
hgs
parents:
diff changeset
   747
    // TODO: how about the feature where the toolbar comes visible if screen is tapped?
hgs
parents:
diff changeset
   748
    this->setItemVisible(Hb::AllItems, orientation == Qt::Vertical);
hgs
parents:
diff changeset
   749
}
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   752
// deleteItemsSlot
hgs
parents:
diff changeset
   753
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   754
//
hgs
parents:
diff changeset
   755
void VideoListView::deleteItemsSlot()
hgs
parents:
diff changeset
   756
{
hgs
parents:
diff changeset
   757
    if(!mModel)
hgs
parents:
diff changeset
   758
    {
hgs
parents:
diff changeset
   759
        return;
hgs
parents:
diff changeset
   760
    }
hgs
parents:
diff changeset
   761
    if(!mSelectionDialog)
hgs
parents:
diff changeset
   762
    {
hgs
parents:
diff changeset
   763
        bool ok(false);
hgs
parents:
diff changeset
   764
        mUiLoader->load(DOCML_VIDEOSELECTIONDIALOG_FILE, &ok);
hgs
parents:
diff changeset
   765
        if(!ok)
hgs
parents:
diff changeset
   766
        {
hgs
parents:
diff changeset
   767
            return;
hgs
parents:
diff changeset
   768
        }
hgs
parents:
diff changeset
   769
        mSelectionDialog = mUiLoader->findObject<VideoListSelectionDialog>( DOCML_NAME_DIALOG );
hgs
parents:
diff changeset
   770
    }
hgs
parents:
diff changeset
   771
    mSelectionDialog->setContent(tr("Delete items"), mVideoListWidget);
hgs
parents:
diff changeset
   772
    if(mSelectionDialog->exec() == mSelectionDialog->primaryAction())
hgs
parents:
diff changeset
   773
    {
hgs
parents:
diff changeset
   774
        // get selection and remove
hgs
parents:
diff changeset
   775
        QItemSelection selection = mSelectionDialog->getSelection();
hgs
parents:
diff changeset
   776
        mModel->deleteItems(selection.indexes());
hgs
parents:
diff changeset
   777
        // invalid model to get UI updated
hgs
parents:
diff changeset
   778
        mModel->invalidate();
hgs
parents:
diff changeset
   779
    }
hgs
parents:
diff changeset
   780
}
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   783
// createCollectionSlot
hgs
parents:
diff changeset
   784
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   785
//
hgs
parents:
diff changeset
   786
void VideoListView::createCollectionSlot()
hgs
parents:
diff changeset
   787
{
hgs
parents:
diff changeset
   788
    debugNotImplementedYet();
hgs
parents:
diff changeset
   789
}
hgs
parents:
diff changeset
   790
hgs
parents:
diff changeset
   791
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   792
// addVideosToCollectionSlot
hgs
parents:
diff changeset
   793
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   794
//
hgs
parents:
diff changeset
   795
void VideoListView::addVideosToCollectionSlot()
hgs
parents:
diff changeset
   796
{
hgs
parents:
diff changeset
   797
    debugNotImplementedYet();
hgs
parents:
diff changeset
   798
}
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   801
// aboutToShowMainMenuSlot
hgs
parents:
diff changeset
   802
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   803
//
hgs
parents:
diff changeset
   804
void VideoListView::aboutToShowMainMenuSlot()
hgs
parents:
diff changeset
   805
{
hgs
parents:
diff changeset
   806
	if(!mModel || !mToolbarViewsActionGroup || !mToolbarCollectionActionGroup)
hgs
parents:
diff changeset
   807
	{
hgs
parents:
diff changeset
   808
		return;
hgs
parents:
diff changeset
   809
	}
hgs
parents:
diff changeset
   810
hgs
parents:
diff changeset
   811
	int menuActionCount = 0;
hgs
parents:
diff changeset
   812
    HbAction *action = 0;
hgs
parents:
diff changeset
   813
    foreach(action, mMenuActions.values())
hgs
parents:
diff changeset
   814
    {
hgs
parents:
diff changeset
   815
        if(action)
hgs
parents:
diff changeset
   816
        {
hgs
parents:
diff changeset
   817
        	++menuActionCount;
hgs
parents:
diff changeset
   818
        	action->setVisible(false);
hgs
parents:
diff changeset
   819
        }
hgs
parents:
diff changeset
   820
    }
hgs
parents:
diff changeset
   821
    if(menuActionCount != mMenuActions.values().count() || mMenuActions.values().count() == 0)
hgs
parents:
diff changeset
   822
    {
hgs
parents:
diff changeset
   823
    	// fatal error, some action(s) was not created.
hgs
parents:
diff changeset
   824
    	return;
hgs
parents:
diff changeset
   825
    }
hgs
parents:
diff changeset
   826
hgs
parents:
diff changeset
   827
    if(!mModel->rowCount(QModelIndex()))
hgs
parents:
diff changeset
   828
    {
hgs
parents:
diff changeset
   829
        // no items, no menu
hgs
parents:
diff changeset
   830
        return;
hgs
parents:
diff changeset
   831
    }
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
    HbAction *firstAction = (HbAction*)(toolBar()->actions().first());
hgs
parents:
diff changeset
   834
hgs
parents:
diff changeset
   835
    if(mToolbarViewsActionGroup->checkedAction() == mToolbarActions[ETBActionAllVideos] &&
hgs
parents:
diff changeset
   836
       firstAction == mToolbarActions[ETBActionAllVideos])
hgs
parents:
diff changeset
   837
    {
hgs
parents:
diff changeset
   838
        mMenuActions[EActionSortBy]->setVisible(true);
hgs
parents:
diff changeset
   839
        mMenuActions[EActionSortByDate]->setVisible(true);
hgs
parents:
diff changeset
   840
        mMenuActions[EActionSortByName]->setVisible(true);
hgs
parents:
diff changeset
   841
        mMenuActions[EActionSortBySize]->setVisible(true);
hgs
parents:
diff changeset
   842
hgs
parents:
diff changeset
   843
        if (!mIsService)
hgs
parents:
diff changeset
   844
        {
hgs
parents:
diff changeset
   845
        	mMenuActions[EActionAddToCollection]->setVisible(true);
hgs
parents:
diff changeset
   846
        	mMenuActions[EActionDelete]->setVisible(true);
hgs
parents:
diff changeset
   847
        }
hgs
parents:
diff changeset
   848
    }
hgs
parents:
diff changeset
   849
    else if(mToolbarViewsActionGroup->checkedAction() == mToolbarActions[ETBActionCollections] &&
hgs
parents:
diff changeset
   850
    		firstAction == mToolbarActions[ETBActionAllVideos] )
hgs
parents:
diff changeset
   851
    {
hgs
parents:
diff changeset
   852
        if (!mIsService)
hgs
parents:
diff changeset
   853
        {
hgs
parents:
diff changeset
   854
        	mMenuActions[EActionNewCollection]->setVisible(true);
hgs
parents:
diff changeset
   855
        }
hgs
parents:
diff changeset
   856
    	mMenuActions[EActionSortBy]->setVisible(true);
hgs
parents:
diff changeset
   857
    	mMenuActions[EActionSortByName]->setVisible(true);
hgs
parents:
diff changeset
   858
        mMenuActions[EACtionSortByItemCount]->setVisible(true);
hgs
parents:
diff changeset
   859
        mMenuActions[EActionSortByLength]->setVisible(true);
hgs
parents:
diff changeset
   860
    }
hgs
parents:
diff changeset
   861
    else if(firstAction != mToolbarActions[ETBActionAllVideos])
hgs
parents:
diff changeset
   862
    {
hgs
parents:
diff changeset
   863
        //Add, Remove and Sort by will be launched from toolbar
hgs
parents:
diff changeset
   864
        if (!mIsService)
hgs
parents:
diff changeset
   865
        {
hgs
parents:
diff changeset
   866
        	mMenuActions[EActionDelete]->setVisible(true);
hgs
parents:
diff changeset
   867
        }
hgs
parents:
diff changeset
   868
    }
hgs
parents:
diff changeset
   869
}
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   872
// handleAsyncStatusSlot
hgs
parents:
diff changeset
   873
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   874
//
hgs
parents:
diff changeset
   875
void VideoListView::handleAsyncStatusSlot(int statusCode, QVariant &additional)
hgs
parents:
diff changeset
   876
{
hgs
parents:
diff changeset
   877
    // in case of error concerns delete, need to reset filtering
hgs
parents:
diff changeset
   878
    if(statusCode == VideoCollectionCommon::statusSingleDeleteFail ||
hgs
parents:
diff changeset
   879
       statusCode == VideoCollectionCommon::statusMultipleDeleteFail)
hgs
parents:
diff changeset
   880
    {
hgs
parents:
diff changeset
   881
        if(mModel)
hgs
parents:
diff changeset
   882
        {
hgs
parents:
diff changeset
   883
            mModel->clear();
hgs
parents:
diff changeset
   884
        }
hgs
parents:
diff changeset
   885
    }
hgs
parents:
diff changeset
   886
    // show msg from status
hgs
parents:
diff changeset
   887
    mUiUtils.showStatusMsgSlot(statusCode, additional);
hgs
parents:
diff changeset
   888
}
hgs
parents:
diff changeset
   889
hgs
parents:
diff changeset
   890
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   891
// collectionOpenedSlot
hgs
parents:
diff changeset
   892
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   893
//
hgs
parents:
diff changeset
   894
void VideoListView::collectionOpenedSlot(bool collectionOpened, const QString& collection)
hgs
parents:
diff changeset
   895
{
hgs
parents:
diff changeset
   896
    if(!mToolbarCollectionActionGroup || !mToolbarViewsActionGroup || !mToolbarActions.contains(ETBActionCollections))
hgs
parents:
diff changeset
   897
    {
hgs
parents:
diff changeset
   898
        return;
hgs
parents:
diff changeset
   899
    }
hgs
parents:
diff changeset
   900
hgs
parents:
diff changeset
   901
   	mCollectionName = collection;
hgs
parents:
diff changeset
   902
hgs
parents:
diff changeset
   903
	HbToolBar* bar = toolBar();
hgs
parents:
diff changeset
   904
	bar->clearActions();
hgs
parents:
diff changeset
   905
hgs
parents:
diff changeset
   906
	if (collectionOpened)
hgs
parents:
diff changeset
   907
    {
hgs
parents:
diff changeset
   908
        mToolbarActions[ETBActionCollections]->setChecked(false);
hgs
parents:
diff changeset
   909
    	bar->addActions(mToolbarCollectionActionGroup->actions());
hgs
parents:
diff changeset
   910
    }
hgs
parents:
diff changeset
   911
    else
hgs
parents:
diff changeset
   912
    {
hgs
parents:
diff changeset
   913
    	bar->addActions(mToolbarViewsActionGroup->actions());
hgs
parents:
diff changeset
   914
        mToolbarActions[ETBActionCollections]->setChecked(true);
hgs
parents:
diff changeset
   915
    }
hgs
parents:
diff changeset
   916
}
hgs
parents:
diff changeset
   917
hgs
parents:
diff changeset
   918
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   919
// openSortByMenuSlot
hgs
parents:
diff changeset
   920
// -------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   921
//
hgs
parents:
diff changeset
   922
void VideoListView::openSortByMenuSlot()
hgs
parents:
diff changeset
   923
{
hgs
parents:
diff changeset
   924
	if(!mModel)
hgs
parents:
diff changeset
   925
	{
hgs
parents:
diff changeset
   926
		return;
hgs
parents:
diff changeset
   927
	}
hgs
parents:
diff changeset
   928
hgs
parents:
diff changeset
   929
	int menuActionCount = 0;
hgs
parents:
diff changeset
   930
    HbAction *action = 0;
hgs
parents:
diff changeset
   931
    foreach(action, mMenuActions.values())
hgs
parents:
diff changeset
   932
    {
hgs
parents:
diff changeset
   933
        if(action)
hgs
parents:
diff changeset
   934
        {
hgs
parents:
diff changeset
   935
        	++menuActionCount;
hgs
parents:
diff changeset
   936
            action->setVisible(false);
hgs
parents:
diff changeset
   937
        }
hgs
parents:
diff changeset
   938
    }
hgs
parents:
diff changeset
   939
    if(menuActionCount != mMenuActions.values().count() || mMenuActions.values().count() == 0)
hgs
parents:
diff changeset
   940
    {
hgs
parents:
diff changeset
   941
    	// fatal error, some action(s) was not created.
hgs
parents:
diff changeset
   942
    	return;
hgs
parents:
diff changeset
   943
    }
hgs
parents:
diff changeset
   944
hgs
parents:
diff changeset
   945
    if(!mModel->rowCount(QModelIndex()))
hgs
parents:
diff changeset
   946
    {
hgs
parents:
diff changeset
   947
        // no items, no menu
hgs
parents:
diff changeset
   948
        return;
hgs
parents:
diff changeset
   949
    }
hgs
parents:
diff changeset
   950
hgs
parents:
diff changeset
   951
    mSortMenu->setVisible(true);
hgs
parents:
diff changeset
   952
    mMenuActions[EActionSortBy]->setVisible(true);
hgs
parents:
diff changeset
   953
	mMenuActions[EActionSortByDate]->setVisible(true);
hgs
parents:
diff changeset
   954
	mMenuActions[EActionSortByName]->setVisible(true);
hgs
parents:
diff changeset
   955
	mMenuActions[EActionSortBySize]->setVisible(true);
hgs
parents:
diff changeset
   956
hgs
parents:
diff changeset
   957
	QPointF coords((size()/2).width(), (size()/3).height());
hgs
parents:
diff changeset
   958
    mSortMenu->exec(coords);
hgs
parents:
diff changeset
   959
}
hgs
parents:
diff changeset
   960
hgs
parents:
diff changeset
   961
// Just for testing, remove this
hgs
parents:
diff changeset
   962
void VideoListView::debugNotImplementedYet()
hgs
parents:
diff changeset
   963
{
hgs
parents:
diff changeset
   964
    HbMessageBox::information(tr("Not implemented yet"));
hgs
parents:
diff changeset
   965
}
hgs
parents:
diff changeset
   966
hgs
parents:
diff changeset
   967
// end of file
hgs
parents:
diff changeset
   968