videocollection/videocollectionview/src/videocollectionuiloader.cpp
author hgs
Thu, 01 Apr 2010 23:32:44 +0300
changeset 35 3738fe97f027
parent 34 bbb98528c666
child 36 8aed59de29f9
permissions -rw-r--r--
201011
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 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:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
34
hgs
parents: 30
diff changeset
    18
#include <qgraphicswidget.h>
hgs
parents: 30
diff changeset
    19
#include <qaction.h>
hgs
parents: 30
diff changeset
    20
#include <qactiongroup.h>
hgs
parents: 30
diff changeset
    21
#include <hbmenu.h>
hgs
parents: 30
diff changeset
    22
#include <hbaction.h>
hgs
parents: 30
diff changeset
    23
#include <hbgroupbox.h>
hgs
parents: 30
diff changeset
    24
#include <hbpushbutton.h>
hgs
parents: 30
diff changeset
    25
30
hgs
parents:
diff changeset
    26
#include "videocollectionuiloader.h"
hgs
parents:
diff changeset
    27
#include "videolistview.h"
hgs
parents:
diff changeset
    28
#include "videolistselectiondialog.h"
hgs
parents:
diff changeset
    29
#include "videolistwidget.h"
hgs
parents:
diff changeset
    30
#include "videohintwidget.h"
34
hgs
parents: 30
diff changeset
    31
#include "videocollectionwrapper.h"
hgs
parents: 30
diff changeset
    32
#include "videosortfilterproxymodel.h"
hgs
parents: 30
diff changeset
    33
#include "videocollectionviewutils.h"
hgs
parents: 30
diff changeset
    34
#include "videoservices.h"
hgs
parents: 30
diff changeset
    35
hgs
parents: 30
diff changeset
    36
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
    37
// VideoCollectionUiLoader
hgs
parents: 30
diff changeset
    38
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
    39
//
hgs
parents: 30
diff changeset
    40
VideoCollectionUiLoader::VideoCollectionUiLoader():
hgs
parents: 30
diff changeset
    41
    HbDocumentLoader(),
hgs
parents: 30
diff changeset
    42
    mTimerId(0),
hgs
parents: 30
diff changeset
    43
    mSortGroup(0),
hgs
parents: 30
diff changeset
    44
    mIsService(false)
hgs
parents: 30
diff changeset
    45
{
hgs
parents: 30
diff changeset
    46
}
30
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    49
// VideoCollectionUiLoader
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
//
34
hgs
parents: 30
diff changeset
    52
VideoCollectionUiLoader::~VideoCollectionUiLoader()
hgs
parents: 30
diff changeset
    53
{
35
hgs
parents: 34
diff changeset
    54
    if (mTimerId)
hgs
parents: 34
diff changeset
    55
    {
hgs
parents: 34
diff changeset
    56
        killTimer(mTimerId);
hgs
parents: 34
diff changeset
    57
        mTimerId = 0;
hgs
parents: 34
diff changeset
    58
    }
hgs
parents: 34
diff changeset
    59
hgs
parents: 34
diff changeset
    60
	// selection dialog needs to be deleted manually
hgs
parents: 34
diff changeset
    61
    QGraphicsWidget *widget =
hgs
parents: 34
diff changeset
    62
        HbDocumentLoader::findWidget(DOCML_NAME_DIALOG);
hgs
parents: 34
diff changeset
    63
34
hgs
parents: 30
diff changeset
    64
    VideoListSelectionDialog *dialog =
35
hgs
parents: 34
diff changeset
    65
        qobject_cast<VideoListSelectionDialog*>(widget);
34
hgs
parents: 30
diff changeset
    66
    delete dialog;
hgs
parents: 30
diff changeset
    67
    
hgs
parents: 30
diff changeset
    68
    // clear queue and hash tables
hgs
parents: 30
diff changeset
    69
    mQueue.clear();
35
hgs
parents: 34
diff changeset
    70
    mDocmls.clear();
34
hgs
parents: 30
diff changeset
    71
    mWidgets.clear();
hgs
parents: 30
diff changeset
    72
    mObjects.clear();
hgs
parents: 30
diff changeset
    73
}
hgs
parents: 30
diff changeset
    74
hgs
parents: 30
diff changeset
    75
// ---------------------------------------------------------------------------
35
hgs
parents: 34
diff changeset
    76
// load
hgs
parents: 34
diff changeset
    77
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
    78
//
hgs
parents: 34
diff changeset
    79
QObjectList VideoCollectionUiLoader::load( const QString &fileName, bool *ok )
hgs
parents: 34
diff changeset
    80
{
hgs
parents: 34
diff changeset
    81
	QObjectList list;
hgs
parents: 34
diff changeset
    82
	if (!mDocmls.contains(fileName))
hgs
parents: 34
diff changeset
    83
	{
hgs
parents: 34
diff changeset
    84
		mDocmls.append(fileName);
hgs
parents: 34
diff changeset
    85
		list = HbDocumentLoader::load(fileName, ok);
hgs
parents: 34
diff changeset
    86
		//TODO: save returned and delete on destructor
hgs
parents: 34
diff changeset
    87
	}
hgs
parents: 34
diff changeset
    88
	return list;
hgs
parents: 34
diff changeset
    89
}
hgs
parents: 34
diff changeset
    90
hgs
parents: 34
diff changeset
    91
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
    92
// load
hgs
parents: 34
diff changeset
    93
// ---------------------------------------------------------------------------
hgs
parents: 34
diff changeset
    94
//
hgs
parents: 34
diff changeset
    95
QObjectList VideoCollectionUiLoader::load( const QString &fileName, const QString &section , bool *ok )
hgs
parents: 34
diff changeset
    96
{
hgs
parents: 34
diff changeset
    97
	return HbDocumentLoader::load(fileName, section, ok);
hgs
parents: 34
diff changeset
    98
	//TODO: save returned and delete on destructor
hgs
parents: 34
diff changeset
    99
}
hgs
parents: 34
diff changeset
   100
hgs
parents: 34
diff changeset
   101
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   102
// startLoading
hgs
parents: 30
diff changeset
   103
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   104
//
hgs
parents: 30
diff changeset
   105
void VideoCollectionUiLoader::startLoading(QSet<QString> uiSections,
hgs
parents: 30
diff changeset
   106
    QObject *receiver,
hgs
parents: 30
diff changeset
   107
    const char *widgetSlot,
hgs
parents: 30
diff changeset
   108
    const char *objectSlot)
30
hgs
parents:
diff changeset
   109
{
34
hgs
parents: 30
diff changeset
   110
    if (uiSections.contains(DOCML_NAME_VC_HEADINGBANNER))
hgs
parents: 30
diff changeset
   111
    {
hgs
parents: 30
diff changeset
   112
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   113
            DOCML_NAME_VC_HEADINGBANNER,
hgs
parents: 30
diff changeset
   114
            true, // is widget
hgs
parents: 30
diff changeset
   115
            receiver,
hgs
parents: 30
diff changeset
   116
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   117
            0,
34
hgs
parents: 30
diff changeset
   118
            widgetSlot);
hgs
parents: 30
diff changeset
   119
        addToQueue(params);
hgs
parents: 30
diff changeset
   120
    }
hgs
parents: 30
diff changeset
   121
    if (uiSections.contains(DOCML_NAME_VC_VIDEOLISTWIDGET))
hgs
parents: 30
diff changeset
   122
    {
hgs
parents: 30
diff changeset
   123
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   124
            DOCML_NAME_VC_VIDEOLISTWIDGET,
hgs
parents: 30
diff changeset
   125
            true, // is widget
hgs
parents: 30
diff changeset
   126
            receiver,
hgs
parents: 30
diff changeset
   127
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   128
            0,
34
hgs
parents: 30
diff changeset
   129
            widgetSlot);
hgs
parents: 30
diff changeset
   130
        addToQueue(params);
hgs
parents: 30
diff changeset
   131
    }
hgs
parents: 30
diff changeset
   132
    if (uiSections.contains(DOCML_NAME_OPTIONS_MENU))
hgs
parents: 30
diff changeset
   133
    {
hgs
parents: 30
diff changeset
   134
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   135
            DOCML_NAME_OPTIONS_MENU,
hgs
parents: 30
diff changeset
   136
            true, // is widget
hgs
parents: 30
diff changeset
   137
            receiver,
hgs
parents: 30
diff changeset
   138
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   139
            0,
34
hgs
parents: 30
diff changeset
   140
            widgetSlot);
hgs
parents: 30
diff changeset
   141
        addToQueue(params);
hgs
parents: 30
diff changeset
   142
    }
hgs
parents: 30
diff changeset
   143
    if (uiSections.contains(DOCML_NAME_ADD_TO_COLLECTION))
hgs
parents: 30
diff changeset
   144
    {
hgs
parents: 30
diff changeset
   145
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   146
            DOCML_NAME_ADD_TO_COLLECTION,
hgs
parents: 30
diff changeset
   147
            false, // is object
hgs
parents: 30
diff changeset
   148
            receiver,
hgs
parents: 30
diff changeset
   149
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   150
            0,
34
hgs
parents: 30
diff changeset
   151
            objectSlot);
hgs
parents: 30
diff changeset
   152
        addToQueue(params);
hgs
parents: 30
diff changeset
   153
    }
hgs
parents: 30
diff changeset
   154
    if (uiSections.contains(DOCML_NAME_CREATE_COLLECTION))
hgs
parents: 30
diff changeset
   155
    {
hgs
parents: 30
diff changeset
   156
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   157
            DOCML_NAME_CREATE_COLLECTION,
hgs
parents: 30
diff changeset
   158
            false, // is object
hgs
parents: 30
diff changeset
   159
            receiver,
hgs
parents: 30
diff changeset
   160
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   161
            0,
34
hgs
parents: 30
diff changeset
   162
            objectSlot);
hgs
parents: 30
diff changeset
   163
        addToQueue(params);
hgs
parents: 30
diff changeset
   164
    }
hgs
parents: 30
diff changeset
   165
    if (uiSections.contains(DOCML_NAME_DELETE_MULTIPLE))
hgs
parents: 30
diff changeset
   166
    {
hgs
parents: 30
diff changeset
   167
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   168
            DOCML_NAME_DELETE_MULTIPLE,
hgs
parents: 30
diff changeset
   169
            false, // is object
hgs
parents: 30
diff changeset
   170
            receiver,
hgs
parents: 30
diff changeset
   171
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   172
            0,
34
hgs
parents: 30
diff changeset
   173
            objectSlot);
hgs
parents: 30
diff changeset
   174
        addToQueue(params);
hgs
parents: 30
diff changeset
   175
    }
hgs
parents: 30
diff changeset
   176
    if (uiSections.contains(DOCML_NAME_VC_VIDEOHINTWIDGET))
hgs
parents: 30
diff changeset
   177
    {
hgs
parents: 30
diff changeset
   178
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   179
            DOCML_NAME_VC_VIDEOHINTWIDGET,
hgs
parents: 30
diff changeset
   180
            true, // is widget
hgs
parents: 30
diff changeset
   181
            receiver,
hgs
parents: 30
diff changeset
   182
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   183
            DOCML_VIDEOCOLLECTIONVIEW_SECTION_HINT,
34
hgs
parents: 30
diff changeset
   184
            widgetSlot);
hgs
parents: 30
diff changeset
   185
        addToQueue(params);
hgs
parents: 30
diff changeset
   186
    }
hgs
parents: 30
diff changeset
   187
    if (uiSections.contains(DOCML_NAME_HINT_BUTTON))
hgs
parents: 30
diff changeset
   188
    {
hgs
parents: 30
diff changeset
   189
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   190
            DOCML_NAME_HINT_BUTTON,
hgs
parents: 30
diff changeset
   191
            true, // is widget
hgs
parents: 30
diff changeset
   192
            receiver,
hgs
parents: 30
diff changeset
   193
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   194
            DOCML_VIDEOCOLLECTIONVIEW_SECTION_HINT,
34
hgs
parents: 30
diff changeset
   195
            widgetSlot);
hgs
parents: 30
diff changeset
   196
        addToQueue(params);
hgs
parents: 30
diff changeset
   197
    }
hgs
parents: 30
diff changeset
   198
    if (uiSections.contains(DOCML_NAME_NO_VIDEOS_LABEL))
hgs
parents: 30
diff changeset
   199
    {
hgs
parents: 30
diff changeset
   200
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   201
            DOCML_NAME_NO_VIDEOS_LABEL,
hgs
parents: 30
diff changeset
   202
            true, // is widget
hgs
parents: 30
diff changeset
   203
            receiver,
hgs
parents: 30
diff changeset
   204
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   205
            DOCML_VIDEOCOLLECTIONVIEW_SECTION_HINT,
34
hgs
parents: 30
diff changeset
   206
            widgetSlot);
hgs
parents: 30
diff changeset
   207
        addToQueue(params);
hgs
parents: 30
diff changeset
   208
    }
hgs
parents: 30
diff changeset
   209
    if (uiSections.contains(DOCML_NAME_SORT_BY_DATE))
hgs
parents: 30
diff changeset
   210
    {
hgs
parents: 30
diff changeset
   211
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   212
            DOCML_NAME_SORT_BY_DATE,
hgs
parents: 30
diff changeset
   213
            false, // is object
hgs
parents: 30
diff changeset
   214
            receiver,
hgs
parents: 30
diff changeset
   215
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   216
            0,
34
hgs
parents: 30
diff changeset
   217
            objectSlot);
hgs
parents: 30
diff changeset
   218
        addToQueue(params);
hgs
parents: 30
diff changeset
   219
    }
hgs
parents: 30
diff changeset
   220
    if (uiSections.contains(DOCML_NAME_SORT_BY_NAME))
hgs
parents: 30
diff changeset
   221
    {
hgs
parents: 30
diff changeset
   222
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   223
            DOCML_NAME_SORT_BY_NAME,
hgs
parents: 30
diff changeset
   224
            false, // is object
hgs
parents: 30
diff changeset
   225
            receiver,
hgs
parents: 30
diff changeset
   226
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   227
			0,
34
hgs
parents: 30
diff changeset
   228
            objectSlot);
hgs
parents: 30
diff changeset
   229
        addToQueue(params);
hgs
parents: 30
diff changeset
   230
    }
hgs
parents: 30
diff changeset
   231
    if (uiSections.contains(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS))
hgs
parents: 30
diff changeset
   232
    {
hgs
parents: 30
diff changeset
   233
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   234
            DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS,
hgs
parents: 30
diff changeset
   235
            false, // is object
hgs
parents: 30
diff changeset
   236
            receiver,
hgs
parents: 30
diff changeset
   237
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   238
			0,
34
hgs
parents: 30
diff changeset
   239
            objectSlot);
hgs
parents: 30
diff changeset
   240
        addToQueue(params);
hgs
parents: 30
diff changeset
   241
    }
hgs
parents: 30
diff changeset
   242
    if (uiSections.contains(DOCML_NAME_SORT_BY_SIZE))
hgs
parents: 30
diff changeset
   243
    {
hgs
parents: 30
diff changeset
   244
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   245
            DOCML_NAME_SORT_BY_SIZE,
hgs
parents: 30
diff changeset
   246
            false, // is object
hgs
parents: 30
diff changeset
   247
            receiver,
hgs
parents: 30
diff changeset
   248
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   249
            0,
34
hgs
parents: 30
diff changeset
   250
            objectSlot);
hgs
parents: 30
diff changeset
   251
        addToQueue(params);
hgs
parents: 30
diff changeset
   252
    }
hgs
parents: 30
diff changeset
   253
    if (uiSections.contains(DOCML_NAME_SORT_MENU))
hgs
parents: 30
diff changeset
   254
    {
hgs
parents: 30
diff changeset
   255
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   256
            DOCML_NAME_SORT_MENU,
hgs
parents: 30
diff changeset
   257
            true, // is widget
hgs
parents: 30
diff changeset
   258
            receiver,
hgs
parents: 30
diff changeset
   259
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   260
            0,
34
hgs
parents: 30
diff changeset
   261
            widgetSlot);
hgs
parents: 30
diff changeset
   262
        addToQueue(params);
hgs
parents: 30
diff changeset
   263
    }
hgs
parents: 30
diff changeset
   264
    if (uiSections.contains(DOCML_NAME_VC_COLLECTIONWIDGET))
hgs
parents: 30
diff changeset
   265
    {
hgs
parents: 30
diff changeset
   266
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   267
            DOCML_NAME_VC_COLLECTIONWIDGET,
hgs
parents: 30
diff changeset
   268
            true, // is widget
hgs
parents: 30
diff changeset
   269
            receiver,
hgs
parents: 30
diff changeset
   270
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   271
            DOCML_VIDEOCOLLECTIONVIEW_SECTION_LIST,
34
hgs
parents: 30
diff changeset
   272
            widgetSlot);
hgs
parents: 30
diff changeset
   273
        addToQueue(params);
hgs
parents: 30
diff changeset
   274
    }
hgs
parents: 30
diff changeset
   275
    if (uiSections.contains(DOCML_NAME_VC_COLLECTIONCONTENTWIDGET))
hgs
parents: 30
diff changeset
   276
    {
hgs
parents: 30
diff changeset
   277
        VideoCollectionUiLoader::Params params(
hgs
parents: 30
diff changeset
   278
            DOCML_NAME_VC_COLLECTIONCONTENTWIDGET,
hgs
parents: 30
diff changeset
   279
            true, // is widget
hgs
parents: 30
diff changeset
   280
            receiver,
hgs
parents: 30
diff changeset
   281
            DOCML_VIDEOCOLLECTIONVIEW_FILE,
35
hgs
parents: 34
diff changeset
   282
            DOCML_VIDEOCOLLECTIONVIEW_SECTION_LIST,
34
hgs
parents: 30
diff changeset
   283
            widgetSlot);
hgs
parents: 30
diff changeset
   284
        addToQueue(params);
hgs
parents: 30
diff changeset
   285
    }
hgs
parents: 30
diff changeset
   286
    if (uiSections.contains(DOCML_NAME_DIALOG))
hgs
parents: 30
diff changeset
   287
    {
hgs
parents: 30
diff changeset
   288
        VideoCollectionUiLoader::Params params(DOCML_NAME_DIALOG,
hgs
parents: 30
diff changeset
   289
            true, // is widget
hgs
parents: 30
diff changeset
   290
            receiver,
hgs
parents: 30
diff changeset
   291
            DOCML_VIDEOSELECTIONDIALOG_FILE,
35
hgs
parents: 34
diff changeset
   292
            0,
34
hgs
parents: 30
diff changeset
   293
            widgetSlot);
hgs
parents: 30
diff changeset
   294
        addToQueue(params);
hgs
parents: 30
diff changeset
   295
    }
hgs
parents: 30
diff changeset
   296
}
hgs
parents: 30
diff changeset
   297
hgs
parents: 30
diff changeset
   298
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   299
// setIsService
hgs
parents: 30
diff changeset
   300
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   301
//
hgs
parents: 30
diff changeset
   302
void VideoCollectionUiLoader::setIsService(bool isService)
hgs
parents: 30
diff changeset
   303
{
hgs
parents: 30
diff changeset
   304
    mIsService = isService;
hgs
parents: 30
diff changeset
   305
}
hgs
parents: 30
diff changeset
   306
hgs
parents: 30
diff changeset
   307
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   308
// doFindWidget
hgs
parents: 30
diff changeset
   309
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   310
//
hgs
parents: 30
diff changeset
   311
QGraphicsWidget* VideoCollectionUiLoader::doFindWidget(const QString &name)
hgs
parents: 30
diff changeset
   312
{
hgs
parents: 30
diff changeset
   313
    QGraphicsWidget *widget = 0;
hgs
parents: 30
diff changeset
   314
    
hgs
parents: 30
diff changeset
   315
    // 1. check from hash
hgs
parents: 30
diff changeset
   316
    if (mWidgets.contains(name))
hgs
parents: 30
diff changeset
   317
    {
hgs
parents: 30
diff changeset
   318
        widget = mWidgets.value(name);
hgs
parents: 30
diff changeset
   319
    }
hgs
parents: 30
diff changeset
   320
    
hgs
parents: 30
diff changeset
   321
    // 2. load from document
hgs
parents: 30
diff changeset
   322
    else
hgs
parents: 30
diff changeset
   323
    {
hgs
parents: 30
diff changeset
   324
        widget = HbDocumentLoader::findWidget(name);
35
hgs
parents: 34
diff changeset
   325
        if (!widget)
hgs
parents: 34
diff changeset
   326
        {
hgs
parents: 34
diff changeset
   327
            // check if the widget is being loaded and remove it from queue
hgs
parents: 34
diff changeset
   328
            int count = mQueue.count();
hgs
parents: 34
diff changeset
   329
            for (int i = 0; i < count; i++)
hgs
parents: 34
diff changeset
   330
            {
hgs
parents: 34
diff changeset
   331
                const Params& params = mQueue.at(i);
hgs
parents: 34
diff changeset
   332
                if (params.mName.compare(name) == 0)
hgs
parents: 34
diff changeset
   333
                {
hgs
parents: 34
diff changeset
   334
					bool ok(true);
hgs
parents: 34
diff changeset
   335
					
hgs
parents: 34
diff changeset
   336
					if(!mDocmls.contains(params.mDocml))
hgs
parents: 34
diff changeset
   337
					{
hgs
parents: 34
diff changeset
   338
						load(params.mDocml, &ok);
hgs
parents: 34
diff changeset
   339
hgs
parents: 34
diff changeset
   340
						if (ok)
hgs
parents: 34
diff changeset
   341
						{
hgs
parents: 34
diff changeset
   342
							mDocmls.append(params.mDocml);
hgs
parents: 34
diff changeset
   343
						}
hgs
parents: 34
diff changeset
   344
					}
hgs
parents: 34
diff changeset
   345
					if ((params.mSection != 0) && ok)
hgs
parents: 34
diff changeset
   346
					{
hgs
parents: 34
diff changeset
   347
						load(params.mDocml, params.mSection, &ok);
hgs
parents: 34
diff changeset
   348
					}
hgs
parents: 34
diff changeset
   349
					if(ok)
hgs
parents: 34
diff changeset
   350
					{
hgs
parents: 34
diff changeset
   351
						widget = HbDocumentLoader::findWidget(params.mName);
hgs
parents: 34
diff changeset
   352
					}
hgs
parents: 34
diff changeset
   353
                    break;
hgs
parents: 34
diff changeset
   354
                }
hgs
parents: 34
diff changeset
   355
            }            
hgs
parents: 34
diff changeset
   356
        }
34
hgs
parents: 30
diff changeset
   357
        if (widget)
hgs
parents: 30
diff changeset
   358
        {
hgs
parents: 30
diff changeset
   359
            // initialize widget
hgs
parents: 30
diff changeset
   360
            initWidget(widget, name);
hgs
parents: 30
diff changeset
   361
            
hgs
parents: 30
diff changeset
   362
            // add it to the hash
hgs
parents: 30
diff changeset
   363
            mWidgets.insert(name, widget);
hgs
parents: 30
diff changeset
   364
hgs
parents: 30
diff changeset
   365
            // check if the widget is being loaded and remove it from queue
hgs
parents: 30
diff changeset
   366
            int count = mQueue.count();
hgs
parents: 30
diff changeset
   367
            for (int i = 0; i < count; i++)
hgs
parents: 30
diff changeset
   368
            {
hgs
parents: 30
diff changeset
   369
                const Params& params = mQueue.at(i);
hgs
parents: 30
diff changeset
   370
                if (params.mName.compare(name) == 0)
hgs
parents: 30
diff changeset
   371
                {
hgs
parents: 30
diff changeset
   372
                    if (connect(
hgs
parents: 30
diff changeset
   373
                        this, SIGNAL(widgetReady(QGraphicsWidget*, const QString&)),
hgs
parents: 30
diff changeset
   374
                        params.mReceiver, params.mMember))
hgs
parents: 30
diff changeset
   375
                    {
hgs
parents: 30
diff changeset
   376
                        emit widgetReady(widget, params.mName);
hgs
parents: 30
diff changeset
   377
                        disconnect(
hgs
parents: 30
diff changeset
   378
                            this, SIGNAL(widgetReady(QGraphicsWidget*, const QString&)),
hgs
parents: 30
diff changeset
   379
                            params.mReceiver, params.mMember);
hgs
parents: 30
diff changeset
   380
                    }
hgs
parents: 30
diff changeset
   381
                    mQueue.removeAt(i);
35
hgs
parents: 34
diff changeset
   382
                    runNext(); //removes timer if queue is empty
34
hgs
parents: 30
diff changeset
   383
                    break;
hgs
parents: 30
diff changeset
   384
                }
hgs
parents: 30
diff changeset
   385
            }            
hgs
parents: 30
diff changeset
   386
        }
hgs
parents: 30
diff changeset
   387
    }
hgs
parents: 30
diff changeset
   388
    
hgs
parents: 30
diff changeset
   389
    return widget;
hgs
parents: 30
diff changeset
   390
}
hgs
parents: 30
diff changeset
   391
hgs
parents: 30
diff changeset
   392
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   393
// doFindObject
hgs
parents: 30
diff changeset
   394
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   395
//
hgs
parents: 30
diff changeset
   396
QObject* VideoCollectionUiLoader::doFindObject(const QString &name)
hgs
parents: 30
diff changeset
   397
{
hgs
parents: 30
diff changeset
   398
    QObject *object = 0;
hgs
parents: 30
diff changeset
   399
    
hgs
parents: 30
diff changeset
   400
    // 1. check from hash
hgs
parents: 30
diff changeset
   401
    if (mObjects.contains(name))
hgs
parents: 30
diff changeset
   402
    {
hgs
parents: 30
diff changeset
   403
        object = mObjects.value(name);
hgs
parents: 30
diff changeset
   404
    }
hgs
parents: 30
diff changeset
   405
    
hgs
parents: 30
diff changeset
   406
    // 2. load from document and cancel async loading
hgs
parents: 30
diff changeset
   407
    else
hgs
parents: 30
diff changeset
   408
    {
hgs
parents: 30
diff changeset
   409
        object = HbDocumentLoader::findObject(name);
35
hgs
parents: 34
diff changeset
   410
        if (!object)
hgs
parents: 34
diff changeset
   411
        {
hgs
parents: 34
diff changeset
   412
            // check if the object is being loaded and remove it from queue
hgs
parents: 34
diff changeset
   413
            int count = mQueue.count();
hgs
parents: 34
diff changeset
   414
            for (int i = 0; i < count; i++)
hgs
parents: 34
diff changeset
   415
            {
hgs
parents: 34
diff changeset
   416
                const Params& params = mQueue.at(i);
hgs
parents: 34
diff changeset
   417
                if (params.mName.compare(name) == 0)
hgs
parents: 34
diff changeset
   418
                {
hgs
parents: 34
diff changeset
   419
					bool ok(true);
hgs
parents: 34
diff changeset
   420
					
hgs
parents: 34
diff changeset
   421
					if(!mDocmls.contains(params.mDocml))
hgs
parents: 34
diff changeset
   422
					{
hgs
parents: 34
diff changeset
   423
						load(params.mDocml, &ok);
hgs
parents: 34
diff changeset
   424
hgs
parents: 34
diff changeset
   425
						if (ok)
hgs
parents: 34
diff changeset
   426
						{
hgs
parents: 34
diff changeset
   427
							mDocmls.append(params.mDocml);
hgs
parents: 34
diff changeset
   428
						}
hgs
parents: 34
diff changeset
   429
					}
hgs
parents: 34
diff changeset
   430
					if ((params.mSection != 0) && ok)
hgs
parents: 34
diff changeset
   431
					{
hgs
parents: 34
diff changeset
   432
						load(params.mDocml, params.mSection, &ok);
hgs
parents: 34
diff changeset
   433
					}
hgs
parents: 34
diff changeset
   434
					if(ok)
hgs
parents: 34
diff changeset
   435
					{
hgs
parents: 34
diff changeset
   436
						object = HbDocumentLoader::findObject(params.mName);
hgs
parents: 34
diff changeset
   437
					}
hgs
parents: 34
diff changeset
   438
                    break;
hgs
parents: 34
diff changeset
   439
                }
hgs
parents: 34
diff changeset
   440
            }            
hgs
parents: 34
diff changeset
   441
        }
34
hgs
parents: 30
diff changeset
   442
        if (object)
hgs
parents: 30
diff changeset
   443
        {
hgs
parents: 30
diff changeset
   444
            // initialize widget
hgs
parents: 30
diff changeset
   445
            initObject(object, name);
hgs
parents: 30
diff changeset
   446
            
hgs
parents: 30
diff changeset
   447
            // add it to the hash
hgs
parents: 30
diff changeset
   448
            mObjects.insert(name, object);
hgs
parents: 30
diff changeset
   449
hgs
parents: 30
diff changeset
   450
            // check if the object is being loaded and remove it from queue
hgs
parents: 30
diff changeset
   451
            int count = mQueue.count();
hgs
parents: 30
diff changeset
   452
            for (int i = 0; i < count; i++)
hgs
parents: 30
diff changeset
   453
            {
hgs
parents: 30
diff changeset
   454
                const Params& params = mQueue.at(i);
hgs
parents: 30
diff changeset
   455
                if (params.mName.compare(name) == 0)
hgs
parents: 30
diff changeset
   456
                {
hgs
parents: 30
diff changeset
   457
                    if (connect(
hgs
parents: 30
diff changeset
   458
                        this, SIGNAL(objectReady(QObject*, const QString&)),
hgs
parents: 30
diff changeset
   459
                        params.mReceiver, params.mMember))
hgs
parents: 30
diff changeset
   460
                    {
hgs
parents: 30
diff changeset
   461
                        emit objectReady(object, params.mName);
hgs
parents: 30
diff changeset
   462
                        disconnect(
hgs
parents: 30
diff changeset
   463
                            this, SIGNAL(objectReady(QObject*, const QString&)),
hgs
parents: 30
diff changeset
   464
                            params.mReceiver, params.mMember);
hgs
parents: 30
diff changeset
   465
                    }
hgs
parents: 30
diff changeset
   466
                    mQueue.removeAt(i);
35
hgs
parents: 34
diff changeset
   467
                    runNext(); //removes timer if queue is empty
34
hgs
parents: 30
diff changeset
   468
                    break;
hgs
parents: 30
diff changeset
   469
                }
hgs
parents: 30
diff changeset
   470
            }            
hgs
parents: 30
diff changeset
   471
        }
hgs
parents: 30
diff changeset
   472
    }
hgs
parents: 30
diff changeset
   473
    
hgs
parents: 30
diff changeset
   474
    return object;
30
hgs
parents:
diff changeset
   475
}
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
// ---------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   478
// addToQueue
hgs
parents: 30
diff changeset
   479
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   480
//
hgs
parents: 30
diff changeset
   481
void VideoCollectionUiLoader::addToQueue(Params &params)
hgs
parents: 30
diff changeset
   482
{
hgs
parents: 30
diff changeset
   483
    if (isValid(params))
hgs
parents: 30
diff changeset
   484
    {
hgs
parents: 30
diff changeset
   485
        // add the params in async queue
hgs
parents: 30
diff changeset
   486
        mQueue.append(params);
hgs
parents: 30
diff changeset
   487
        runNext();
hgs
parents: 30
diff changeset
   488
    }
hgs
parents: 30
diff changeset
   489
}
hgs
parents: 30
diff changeset
   490
hgs
parents: 30
diff changeset
   491
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   492
// initWidget
hgs
parents: 30
diff changeset
   493
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   494
//
hgs
parents: 30
diff changeset
   495
void VideoCollectionUiLoader::initWidget(QGraphicsWidget *widget,
hgs
parents: 30
diff changeset
   496
    const QString &name)
hgs
parents: 30
diff changeset
   497
{
hgs
parents: 30
diff changeset
   498
    if (widget)
hgs
parents: 30
diff changeset
   499
    {
hgs
parents: 30
diff changeset
   500
        VideoCollectionWrapper &wrapper = VideoCollectionWrapper::instance();
hgs
parents: 30
diff changeset
   501
        
hgs
parents: 30
diff changeset
   502
        if (name.compare(DOCML_NAME_VC_VIDEOLISTWIDGET) == 0)
hgs
parents: 30
diff changeset
   503
        {
hgs
parents: 30
diff changeset
   504
            VideoListWidget *videoList = qobject_cast<VideoListWidget*>(widget);
hgs
parents: 30
diff changeset
   505
            if (videoList)
hgs
parents: 30
diff changeset
   506
            {
hgs
parents: 30
diff changeset
   507
                VideoSortFilterProxyModel *model =
hgs
parents: 30
diff changeset
   508
                    wrapper.getModel(VideoCollectionWrapper::EAllVideos);
hgs
parents: 30
diff changeset
   509
                if(model)
hgs
parents: 30
diff changeset
   510
                {
hgs
parents: 30
diff changeset
   511
                    // open and sort model
hgs
parents: 30
diff changeset
   512
                    model->open(VideoCollectionCommon::ELevelVideos);
hgs
parents: 30
diff changeset
   513
                    VideoCollectionViewUtils::sortModel(model, true);
hgs
parents: 30
diff changeset
   514
                    
hgs
parents: 30
diff changeset
   515
                    // init widget
hgs
parents: 30
diff changeset
   516
                    VideoServices *videoServices = 0;
hgs
parents: 30
diff changeset
   517
                    if (mIsService)
hgs
parents: 30
diff changeset
   518
                    {
hgs
parents: 30
diff changeset
   519
                        videoServices = VideoServices::instance();
hgs
parents: 30
diff changeset
   520
                    }
hgs
parents: 30
diff changeset
   521
                    videoList->initialize(*model, videoServices);
hgs
parents: 30
diff changeset
   522
                }
hgs
parents: 30
diff changeset
   523
            }
hgs
parents: 30
diff changeset
   524
        }
hgs
parents: 30
diff changeset
   525
        else if (name.compare(DOCML_NAME_VC_COLLECTIONWIDGET) == 0)
hgs
parents: 30
diff changeset
   526
        {
hgs
parents: 30
diff changeset
   527
            VideoSortFilterProxyModel *model = wrapper.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
                model->open(VideoCollectionCommon::ELevelCategory);
hgs
parents: 30
diff changeset
   532
hgs
parents: 30
diff changeset
   533
                // initialize video collection widget
hgs
parents: 30
diff changeset
   534
                VideoListWidget *videoList =
hgs
parents: 30
diff changeset
   535
                    qobject_cast<VideoListWidget*>(widget);
hgs
parents: 30
diff changeset
   536
                if (videoList)
hgs
parents: 30
diff changeset
   537
                {
hgs
parents: 30
diff changeset
   538
                    // init widget
hgs
parents: 30
diff changeset
   539
                    VideoServices *videoServices = 0;
hgs
parents: 30
diff changeset
   540
                    if (mIsService)
hgs
parents: 30
diff changeset
   541
                    {
hgs
parents: 30
diff changeset
   542
                        videoServices = VideoServices::instance();
hgs
parents: 30
diff changeset
   543
                    }
hgs
parents: 30
diff changeset
   544
                    videoList->initialize(*model, videoServices);
hgs
parents: 30
diff changeset
   545
                }
hgs
parents: 30
diff changeset
   546
            }
hgs
parents: 30
diff changeset
   547
        }
hgs
parents: 30
diff changeset
   548
        else if (name.compare(DOCML_NAME_VC_COLLECTIONCONTENTWIDGET) == 0)
hgs
parents: 30
diff changeset
   549
        {
hgs
parents: 30
diff changeset
   550
            VideoSortFilterProxyModel *model = wrapper.getModel(
hgs
parents: 30
diff changeset
   551
                VideoCollectionWrapper::ECollectionContent);
hgs
parents: 30
diff changeset
   552
            if (model)
hgs
parents: 30
diff changeset
   553
            {
hgs
parents: 30
diff changeset
   554
                VideoListWidget *videoList = qobject_cast<VideoListWidget*>(widget);
hgs
parents: 30
diff changeset
   555
                if (videoList)
hgs
parents: 30
diff changeset
   556
                {
hgs
parents: 30
diff changeset
   557
                    // init widget
hgs
parents: 30
diff changeset
   558
                    VideoServices *videoServices = 0;
hgs
parents: 30
diff changeset
   559
                    if (mIsService)
hgs
parents: 30
diff changeset
   560
                    {
hgs
parents: 30
diff changeset
   561
                        videoServices = VideoServices::instance();
hgs
parents: 30
diff changeset
   562
                    }
hgs
parents: 30
diff changeset
   563
                    videoList->initialize(*model, videoServices);
35
hgs
parents: 34
diff changeset
   564
hgs
parents: 34
diff changeset
   565
                    HbEffect::add(videoList,
hgs
parents: 34
diff changeset
   566
                                   EFFECT_SLIDE_IN_TO_LEFT_FILENAME,
hgs
parents: 34
diff changeset
   567
                                   EFFECT_SLIDE_IN_TO_LEFT);
hgs
parents: 34
diff changeset
   568
hgs
parents: 34
diff changeset
   569
                    HbEffect::add(videoList,
hgs
parents: 34
diff changeset
   570
                            EFFECT_SLIDE_OUT_TO_LEFT_FILENAME,
hgs
parents: 34
diff changeset
   571
                            EFFECT_SLIDE_OUT_TO_LEFT);
34
hgs
parents: 30
diff changeset
   572
                }
hgs
parents: 30
diff changeset
   573
            }
hgs
parents: 30
diff changeset
   574
        }
hgs
parents: 30
diff changeset
   575
        else if (name.compare(DOCML_NAME_DIALOG) == 0)
hgs
parents: 30
diff changeset
   576
        {
hgs
parents: 30
diff changeset
   577
            // by default, initialize the selection dialog to delete mode
hgs
parents: 30
diff changeset
   578
            VideoListSelectionDialog *dialog =
hgs
parents: 30
diff changeset
   579
                qobject_cast<VideoListSelectionDialog*>(widget);
hgs
parents: 30
diff changeset
   580
            if (dialog)
hgs
parents: 30
diff changeset
   581
            {
hgs
parents: 30
diff changeset
   582
                dialog->setupContent(VideoListSelectionDialog::EDeleteVideos,
hgs
parents: 30
diff changeset
   583
                    TMPXItemId::InvalidId());
hgs
parents: 30
diff changeset
   584
            }
hgs
parents: 30
diff changeset
   585
        }
hgs
parents: 30
diff changeset
   586
        else if (name.compare(DOCML_NAME_SORT_MENU) == 0)
hgs
parents: 30
diff changeset
   587
        {
hgs
parents: 30
diff changeset
   588
            HbMenu *menu = qobject_cast<HbMenu*>(widget);
hgs
parents: 30
diff changeset
   589
            if (menu)
hgs
parents: 30
diff changeset
   590
            {
hgs
parents: 30
diff changeset
   591
                // create sort by menu action
hgs
parents: 30
diff changeset
   592
                mMenuActions[EActionSortBy] = menu->menuAction();
hgs
parents: 30
diff changeset
   593
hgs
parents: 30
diff changeset
   594
                // ensure that all the actions related to sort menu are loaded
hgs
parents: 30
diff changeset
   595
                // when sort menu is loaded
hgs
parents: 30
diff changeset
   596
                findObject<HbAction>(DOCML_NAME_SORT_BY_DATE);
hgs
parents: 30
diff changeset
   597
                findObject<HbAction>(DOCML_NAME_SORT_BY_NAME);
hgs
parents: 30
diff changeset
   598
                findObject<HbAction>(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS);
hgs
parents: 30
diff changeset
   599
                findObject<HbAction>(DOCML_NAME_SORT_BY_SIZE);
hgs
parents: 30
diff changeset
   600
hgs
parents: 30
diff changeset
   601
                // add sub menu actions
hgs
parents: 30
diff changeset
   602
                if (!mSortGroup)
hgs
parents: 30
diff changeset
   603
                {
hgs
parents: 30
diff changeset
   604
                    mSortGroup = new QActionGroup(menu);
hgs
parents: 30
diff changeset
   605
                    mSortGroup->addAction(mMenuActions[EActionSortByDate]);
hgs
parents: 30
diff changeset
   606
                    mSortGroup->addAction(mMenuActions[EActionSortByName]);
hgs
parents: 30
diff changeset
   607
                    mSortGroup->addAction(mMenuActions[EACtionSortByItemCount]);
hgs
parents: 30
diff changeset
   608
                    mSortGroup->addAction(mMenuActions[EActionSortBySize]);
hgs
parents: 30
diff changeset
   609
                    
hgs
parents: 30
diff changeset
   610
                    // set all sub menu items checkable
hgs
parents: 30
diff changeset
   611
                    foreach (QAction *action, menu->actions()) 
hgs
parents: 30
diff changeset
   612
                    {
hgs
parents: 30
diff changeset
   613
                        action->setCheckable(true);
hgs
parents: 30
diff changeset
   614
                    }
hgs
parents: 30
diff changeset
   615
                }
hgs
parents: 30
diff changeset
   616
            }
hgs
parents: 30
diff changeset
   617
        }
hgs
parents: 30
diff changeset
   618
        else if (name.compare(DOCML_NAME_VC_VIDEOHINTWIDGET) == 0)
hgs
parents: 30
diff changeset
   619
        {
hgs
parents: 30
diff changeset
   620
            VideoHintWidget *hintWidget = qobject_cast<VideoHintWidget*>(widget);
hgs
parents: 30
diff changeset
   621
            if (hintWidget)
hgs
parents: 30
diff changeset
   622
            {
hgs
parents: 30
diff changeset
   623
                hintWidget->initialize();
hgs
parents: 30
diff changeset
   624
            }
hgs
parents: 30
diff changeset
   625
        }
hgs
parents: 30
diff changeset
   626
        else if (name.compare(DOCML_NAME_OPTIONS_MENU) == 0)
hgs
parents: 30
diff changeset
   627
        {
hgs
parents: 30
diff changeset
   628
            // ensure that all the actions related to options menu are loaded
hgs
parents: 30
diff changeset
   629
            // when options menu is loaded
35
hgs
parents: 34
diff changeset
   630
        	// when applicaton has been launched as a service,
hgs
parents: 34
diff changeset
   631
        	// do not load components which are not required
hgs
parents: 34
diff changeset
   632
        	if(!mIsService)
hgs
parents: 34
diff changeset
   633
        	{
hgs
parents: 34
diff changeset
   634
				findObject<HbAction>(DOCML_NAME_ADD_TO_COLLECTION);
hgs
parents: 34
diff changeset
   635
				findObject<HbAction>(DOCML_NAME_CREATE_COLLECTION);
hgs
parents: 34
diff changeset
   636
				findObject<HbAction>(DOCML_NAME_DELETE_MULTIPLE);
hgs
parents: 34
diff changeset
   637
        	}
34
hgs
parents: 30
diff changeset
   638
        }
hgs
parents: 30
diff changeset
   639
    }
hgs
parents: 30
diff changeset
   640
}
hgs
parents: 30
diff changeset
   641
hgs
parents: 30
diff changeset
   642
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   643
// initObject
30
hgs
parents:
diff changeset
   644
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   645
//
34
hgs
parents: 30
diff changeset
   646
void VideoCollectionUiLoader::initObject(QObject *object,
hgs
parents: 30
diff changeset
   647
    const QString &name)
hgs
parents: 30
diff changeset
   648
{
hgs
parents: 30
diff changeset
   649
    if (object)
hgs
parents: 30
diff changeset
   650
    {
hgs
parents: 30
diff changeset
   651
        if (name.compare(DOCML_NAME_ADD_TO_COLLECTION) == 0)
hgs
parents: 30
diff changeset
   652
        {
hgs
parents: 30
diff changeset
   653
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   654
            if (action)
hgs
parents: 30
diff changeset
   655
            {
hgs
parents: 30
diff changeset
   656
                mMenuActions[EActionAddToCollection] = action;
hgs
parents: 30
diff changeset
   657
            }
hgs
parents: 30
diff changeset
   658
        }
hgs
parents: 30
diff changeset
   659
        else if (name.compare(DOCML_NAME_CREATE_COLLECTION) == 0)
hgs
parents: 30
diff changeset
   660
        {
hgs
parents: 30
diff changeset
   661
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   662
            if (action)
hgs
parents: 30
diff changeset
   663
            {
hgs
parents: 30
diff changeset
   664
                mMenuActions[EActionNewCollection] = action;
hgs
parents: 30
diff changeset
   665
            }
hgs
parents: 30
diff changeset
   666
        }
hgs
parents: 30
diff changeset
   667
        else if (name.compare(DOCML_NAME_DELETE_MULTIPLE) == 0)
hgs
parents: 30
diff changeset
   668
        {
hgs
parents: 30
diff changeset
   669
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   670
            if (action)
hgs
parents: 30
diff changeset
   671
            {
hgs
parents: 30
diff changeset
   672
                mMenuActions[EActionDelete] = action;
hgs
parents: 30
diff changeset
   673
            }
hgs
parents: 30
diff changeset
   674
        }
hgs
parents: 30
diff changeset
   675
        else if (name.compare(DOCML_NAME_SORT_BY_DATE) == 0)
hgs
parents: 30
diff changeset
   676
        {
hgs
parents: 30
diff changeset
   677
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   678
            if (action)
hgs
parents: 30
diff changeset
   679
            {
hgs
parents: 30
diff changeset
   680
                mMenuActions[EActionSortByDate] = action;
hgs
parents: 30
diff changeset
   681
            }
hgs
parents: 30
diff changeset
   682
        }
hgs
parents: 30
diff changeset
   683
        else if (name.compare(DOCML_NAME_SORT_BY_NAME) == 0)
hgs
parents: 30
diff changeset
   684
        {
hgs
parents: 30
diff changeset
   685
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   686
            if (action)
hgs
parents: 30
diff changeset
   687
            {
hgs
parents: 30
diff changeset
   688
                mMenuActions[EActionSortByName] = action;
hgs
parents: 30
diff changeset
   689
            }
hgs
parents: 30
diff changeset
   690
        }
hgs
parents: 30
diff changeset
   691
        else if (name.compare(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS) == 0)
hgs
parents: 30
diff changeset
   692
        {
hgs
parents: 30
diff changeset
   693
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   694
            if (action)
hgs
parents: 30
diff changeset
   695
            {
hgs
parents: 30
diff changeset
   696
                mMenuActions[EACtionSortByItemCount] = action;
hgs
parents: 30
diff changeset
   697
            }
hgs
parents: 30
diff changeset
   698
        }
hgs
parents: 30
diff changeset
   699
        else if (name.compare(DOCML_NAME_SORT_BY_SIZE) == 0)
hgs
parents: 30
diff changeset
   700
        {
hgs
parents: 30
diff changeset
   701
            HbAction *action = qobject_cast<HbAction*>(object);
hgs
parents: 30
diff changeset
   702
            if (action)
hgs
parents: 30
diff changeset
   703
            {
hgs
parents: 30
diff changeset
   704
                mMenuActions[EActionSortBySize] = action;
hgs
parents: 30
diff changeset
   705
            }
hgs
parents: 30
diff changeset
   706
        }
hgs
parents: 30
diff changeset
   707
    }
hgs
parents: 30
diff changeset
   708
}
hgs
parents: 30
diff changeset
   709
hgs
parents: 30
diff changeset
   710
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   711
// timerEvent
hgs
parents: 30
diff changeset
   712
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   713
//
hgs
parents: 30
diff changeset
   714
void VideoCollectionUiLoader::timerEvent(QTimerEvent *event)
30
hgs
parents:
diff changeset
   715
{
34
hgs
parents: 30
diff changeset
   716
    if (event)
hgs
parents: 30
diff changeset
   717
    {
hgs
parents: 30
diff changeset
   718
        if (event->timerId() == mTimerId)
hgs
parents: 30
diff changeset
   719
        {
hgs
parents: 30
diff changeset
   720
            // get current request from queue
hgs
parents: 30
diff changeset
   721
            const Params &params = mQueue.at(0);
hgs
parents: 30
diff changeset
   722
            
hgs
parents: 30
diff changeset
   723
            // load the widget / object
hgs
parents: 30
diff changeset
   724
            if (params.mIsWidget)
hgs
parents: 30
diff changeset
   725
            {
hgs
parents: 30
diff changeset
   726
                // correct timer id, emit signal for receiver
hgs
parents: 30
diff changeset
   727
                bool ok = connect(
hgs
parents: 30
diff changeset
   728
                    this, SIGNAL(widgetReady(QGraphicsWidget*, const QString&)),
hgs
parents: 30
diff changeset
   729
                    params.mReceiver, params.mMember);
hgs
parents: 30
diff changeset
   730
                if (ok)
hgs
parents: 30
diff changeset
   731
                {
hgs
parents: 30
diff changeset
   732
                    QGraphicsWidget *widget =
hgs
parents: 30
diff changeset
   733
                        HbDocumentLoader::findWidget(params.mName);
hgs
parents: 30
diff changeset
   734
                    if (!widget)
hgs
parents: 30
diff changeset
   735
                    {
hgs
parents: 30
diff changeset
   736
                        // widget not found, try to load the docml
35
hgs
parents: 34
diff changeset
   737
                    	if(!mDocmls.contains(params.mDocml))
hgs
parents: 34
diff changeset
   738
						{
hgs
parents: 34
diff changeset
   739
							load(params.mDocml, &ok);
hgs
parents: 34
diff changeset
   740
hgs
parents: 34
diff changeset
   741
							if (ok)
hgs
parents: 34
diff changeset
   742
							{
hgs
parents: 34
diff changeset
   743
								mDocmls.append(params.mDocml);
hgs
parents: 34
diff changeset
   744
							}
hgs
parents: 34
diff changeset
   745
						}
hgs
parents: 34
diff changeset
   746
						if ((params.mSection != 0) && ok)
hgs
parents: 34
diff changeset
   747
						{
hgs
parents: 34
diff changeset
   748
							load(params.mDocml, params.mSection, &ok);
hgs
parents: 34
diff changeset
   749
						}
hgs
parents: 34
diff changeset
   750
						if(ok)
hgs
parents: 34
diff changeset
   751
						{
hgs
parents: 34
diff changeset
   752
							widget = HbDocumentLoader::findWidget(params.mName);
hgs
parents: 34
diff changeset
   753
						}
34
hgs
parents: 30
diff changeset
   754
                    }
hgs
parents: 30
diff changeset
   755
                    if (widget)
hgs
parents: 30
diff changeset
   756
                    {
hgs
parents: 30
diff changeset
   757
                        // widget found, add it to the hash
hgs
parents: 30
diff changeset
   758
                        if (!mWidgets.contains(params.mName))
hgs
parents: 30
diff changeset
   759
                        {
hgs
parents: 30
diff changeset
   760
                            // initialize widget
hgs
parents: 30
diff changeset
   761
                            initWidget(widget, params.mName);
hgs
parents: 30
diff changeset
   762
hgs
parents: 30
diff changeset
   763
                            // insert widget in hash table
hgs
parents: 30
diff changeset
   764
                            mWidgets.insert(params.mName, widget);
hgs
parents: 30
diff changeset
   765
                        }
hgs
parents: 30
diff changeset
   766
                        emit widgetReady(widget, params.mName);
hgs
parents: 30
diff changeset
   767
                    }
hgs
parents: 30
diff changeset
   768
                }
hgs
parents: 30
diff changeset
   769
                
hgs
parents: 30
diff changeset
   770
                // disconnect
hgs
parents: 30
diff changeset
   771
                disconnect(
hgs
parents: 30
diff changeset
   772
                    this, SIGNAL(widgetReady(QGraphicsWidget*, const QString&)),
hgs
parents: 30
diff changeset
   773
                    params.mReceiver, params.mMember);
hgs
parents: 30
diff changeset
   774
            }
hgs
parents: 30
diff changeset
   775
            else
hgs
parents: 30
diff changeset
   776
            {
hgs
parents: 30
diff changeset
   777
                // correct timer id, emit signal for receiver
hgs
parents: 30
diff changeset
   778
                bool ok = connect(
hgs
parents: 30
diff changeset
   779
                    this, SIGNAL(objectReady(QObject*, const QString&)),
hgs
parents: 30
diff changeset
   780
                    params.mReceiver, params.mMember);
hgs
parents: 30
diff changeset
   781
                if (ok)
hgs
parents: 30
diff changeset
   782
                {
hgs
parents: 30
diff changeset
   783
                    QObject *object =
hgs
parents: 30
diff changeset
   784
                        HbDocumentLoader::findObject(params.mName);
hgs
parents: 30
diff changeset
   785
                    if (!object)
hgs
parents: 30
diff changeset
   786
                    {
hgs
parents: 30
diff changeset
   787
                        // widget not found, try to load the docml
35
hgs
parents: 34
diff changeset
   788
						if(!mDocmls.contains(params.mDocml))
hgs
parents: 34
diff changeset
   789
						{
hgs
parents: 34
diff changeset
   790
							load(params.mDocml, &ok);
hgs
parents: 34
diff changeset
   791
hgs
parents: 34
diff changeset
   792
							if (ok)
hgs
parents: 34
diff changeset
   793
							{
hgs
parents: 34
diff changeset
   794
								mDocmls.append(params.mDocml);
hgs
parents: 34
diff changeset
   795
							}
hgs
parents: 34
diff changeset
   796
						}
hgs
parents: 34
diff changeset
   797
						if ((params.mSection != 0) && ok)
hgs
parents: 34
diff changeset
   798
						{
hgs
parents: 34
diff changeset
   799
							load(params.mDocml, params.mSection, &ok);
hgs
parents: 34
diff changeset
   800
						}
hgs
parents: 34
diff changeset
   801
						if(ok)
hgs
parents: 34
diff changeset
   802
						{
hgs
parents: 34
diff changeset
   803
							object = HbDocumentLoader::findObject(params.mName);
hgs
parents: 34
diff changeset
   804
						}
34
hgs
parents: 30
diff changeset
   805
                    }
hgs
parents: 30
diff changeset
   806
                    if (object)
hgs
parents: 30
diff changeset
   807
                    {
hgs
parents: 30
diff changeset
   808
                        // object found, add it to the hash
hgs
parents: 30
diff changeset
   809
                        if (!mObjects.contains(params.mName))
hgs
parents: 30
diff changeset
   810
                        {
hgs
parents: 30
diff changeset
   811
                            // initialize object
hgs
parents: 30
diff changeset
   812
                            initObject(object, params.mName);
hgs
parents: 30
diff changeset
   813
hgs
parents: 30
diff changeset
   814
                            // add object in hash table
hgs
parents: 30
diff changeset
   815
                            mObjects.insert(params.mName, object);
hgs
parents: 30
diff changeset
   816
                        }
hgs
parents: 30
diff changeset
   817
                        emit objectReady(object, params.mName);
hgs
parents: 30
diff changeset
   818
                    }
hgs
parents: 30
diff changeset
   819
                }
hgs
parents: 30
diff changeset
   820
                
hgs
parents: 30
diff changeset
   821
                // disconnect
hgs
parents: 30
diff changeset
   822
                disconnect(
hgs
parents: 30
diff changeset
   823
                    this, SIGNAL(objectReady(QObject*, const QString&)),
hgs
parents: 30
diff changeset
   824
                    params.mReceiver, params.mMember);
hgs
parents: 30
diff changeset
   825
            }
hgs
parents: 30
diff changeset
   826
        }
hgs
parents: 30
diff changeset
   827
        
hgs
parents: 30
diff changeset
   828
        // remove the request from the queue and run next request if any
hgs
parents: 30
diff changeset
   829
        mQueue.removeAt(0);
hgs
parents: 30
diff changeset
   830
        runNext();
hgs
parents: 30
diff changeset
   831
    }
30
hgs
parents:
diff changeset
   832
}
hgs
parents:
diff changeset
   833
hgs
parents:
diff changeset
   834
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   835
// createObject
hgs
parents:
diff changeset
   836
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   837
//
hgs
parents:
diff changeset
   838
QObject* VideoCollectionUiLoader::createObject( const QString& type, const QString &name )
hgs
parents:
diff changeset
   839
{
hgs
parents:
diff changeset
   840
    QObject* object = 0;
hgs
parents:
diff changeset
   841
hgs
parents:
diff changeset
   842
    if ( type == VideoListView::staticMetaObject.className() )
hgs
parents:
diff changeset
   843
    {
hgs
parents:
diff changeset
   844
        object = new VideoListView(this);
hgs
parents:
diff changeset
   845
    }
hgs
parents:
diff changeset
   846
    else if ( type == VideoListSelectionDialog::staticMetaObject.className() )
hgs
parents:
diff changeset
   847
    {
hgs
parents:
diff changeset
   848
        object = new VideoListSelectionDialog(this);
hgs
parents:
diff changeset
   849
    }
hgs
parents:
diff changeset
   850
    else if ( type == VideoListWidget::staticMetaObject.className() )
hgs
parents:
diff changeset
   851
    {
34
hgs
parents: 30
diff changeset
   852
        object = new VideoListWidget(this);
30
hgs
parents:
diff changeset
   853
    }
hgs
parents:
diff changeset
   854
    else if ( type == VideoHintWidget::staticMetaObject.className() )
hgs
parents:
diff changeset
   855
    {
hgs
parents:
diff changeset
   856
        object = new VideoHintWidget(this);
hgs
parents:
diff changeset
   857
    }
hgs
parents:
diff changeset
   858
    if ( object )
hgs
parents:
diff changeset
   859
    {
hgs
parents:
diff changeset
   860
        object->setObjectName( name );
hgs
parents:
diff changeset
   861
        return object;
hgs
parents:
diff changeset
   862
    }
hgs
parents:
diff changeset
   863
hgs
parents:
diff changeset
   864
    return HbDocumentLoader::createObject( type, name );
hgs
parents:
diff changeset
   865
}
34
hgs
parents: 30
diff changeset
   866
hgs
parents: 30
diff changeset
   867
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   868
// runNext
hgs
parents: 30
diff changeset
   869
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   870
//
hgs
parents: 30
diff changeset
   871
void VideoCollectionUiLoader::runNext()
hgs
parents: 30
diff changeset
   872
{
hgs
parents: 30
diff changeset
   873
    if (mQueue.count())
hgs
parents: 30
diff changeset
   874
    {
hgs
parents: 30
diff changeset
   875
        if (!mTimerId)
hgs
parents: 30
diff changeset
   876
        {
hgs
parents: 30
diff changeset
   877
            // timer not running, start it
hgs
parents: 30
diff changeset
   878
            mTimerId = startTimer(ASYNC_FIND_TIMEOUT);
hgs
parents: 30
diff changeset
   879
        }
hgs
parents: 30
diff changeset
   880
    }
hgs
parents: 30
diff changeset
   881
    else
hgs
parents: 30
diff changeset
   882
    {
hgs
parents: 30
diff changeset
   883
        // no new requests, kill timer
hgs
parents: 30
diff changeset
   884
        if (mTimerId)
hgs
parents: 30
diff changeset
   885
        {
hgs
parents: 30
diff changeset
   886
            killTimer(mTimerId);
hgs
parents: 30
diff changeset
   887
            mTimerId = 0;
hgs
parents: 30
diff changeset
   888
        }
hgs
parents: 30
diff changeset
   889
    }
hgs
parents: 30
diff changeset
   890
}
hgs
parents: 30
diff changeset
   891
hgs
parents: 30
diff changeset
   892
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   893
// isValid
hgs
parents: 30
diff changeset
   894
// ---------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   895
//
hgs
parents: 30
diff changeset
   896
bool VideoCollectionUiLoader::isValid(const Params &params)
hgs
parents: 30
diff changeset
   897
{
hgs
parents: 30
diff changeset
   898
    bool valid = true;
hgs
parents: 30
diff changeset
   899
    
hgs
parents: 30
diff changeset
   900
    if (params.mName.length() &&
hgs
parents: 30
diff changeset
   901
        params.mDocml &&
hgs
parents: 30
diff changeset
   902
        params.mMember &&
hgs
parents: 30
diff changeset
   903
        params.mReceiver)
hgs
parents: 30
diff changeset
   904
    {
hgs
parents: 30
diff changeset
   905
        // check if the param is already in the queue
hgs
parents: 30
diff changeset
   906
        int count = mQueue.count();
hgs
parents: 30
diff changeset
   907
        for (int i = 0; i < count; i++)
hgs
parents: 30
diff changeset
   908
        {
hgs
parents: 30
diff changeset
   909
            if (mQueue.at(i).isDuplicate(params))
hgs
parents: 30
diff changeset
   910
            {
hgs
parents: 30
diff changeset
   911
                valid = false;
hgs
parents: 30
diff changeset
   912
                break;
hgs
parents: 30
diff changeset
   913
            }
hgs
parents: 30
diff changeset
   914
        }
hgs
parents: 30
diff changeset
   915
        
hgs
parents: 30
diff changeset
   916
        // check that the item has not already been loaded
hgs
parents: 30
diff changeset
   917
        if (valid)
hgs
parents: 30
diff changeset
   918
        {
hgs
parents: 30
diff changeset
   919
            if (params.mIsWidget)
hgs
parents: 30
diff changeset
   920
            {
hgs
parents: 30
diff changeset
   921
                valid = !mWidgets.contains(params.mName);
hgs
parents: 30
diff changeset
   922
            }
hgs
parents: 30
diff changeset
   923
            else
hgs
parents: 30
diff changeset
   924
            {
hgs
parents: 30
diff changeset
   925
                valid = !mObjects.contains(params.mName);
hgs
parents: 30
diff changeset
   926
            }
hgs
parents: 30
diff changeset
   927
        }
hgs
parents: 30
diff changeset
   928
    }
hgs
parents: 30
diff changeset
   929
    else
hgs
parents: 30
diff changeset
   930
    {
hgs
parents: 30
diff changeset
   931
        valid = false;
hgs
parents: 30
diff changeset
   932
    }
hgs
parents: 30
diff changeset
   933
    
hgs
parents: 30
diff changeset
   934
    return valid;
hgs
parents: 30
diff changeset
   935
}