filemanager/src/filemanager/src/fmfindresultmodel.cpp
author hgs
Wed, 29 Sep 2010 10:37:03 +0800
changeset 46 d58987eac7e8
parent 37 15bc28c9dd51
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
 * All rights reserved.
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
 *
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
 * Initial Contributors:
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
 * 
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
 * Contributors:
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
 *     Zhiqiang Yang <zhiqiang.yang@nokia.com>
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
 * 
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
 * Description:
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
 *     The find result model source file of file manager
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
 */
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include "fmfindresultmodel.h"
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include "fmfindthread.h"
37
hgs
parents: 16
diff changeset
    21
#include "fmfileiconprovider.h"
46
hgs
parents: 37
diff changeset
    22
#include "fmcommon.h"
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
#include <QDateTime>
37
hgs
parents: 16
diff changeset
    25
hgs
parents: 16
diff changeset
    26
#include <hbglobal.h>
hgs
parents: 16
diff changeset
    27
46
hgs
parents: 37
diff changeset
    28
// wait \a circularWaitingTimeForStartFind microsecond to try to start find again
hgs
parents: 37
diff changeset
    29
// Since find can not be started while last find is not stopped.
hgs
parents: 37
diff changeset
    30
const int circularWaitingTimeForStartFind = 200;
hgs
parents: 37
diff changeset
    31
hgs
parents: 37
diff changeset
    32
// wait \a firstWaitingTimeForStartFind microsecond to start find when accept find from caller.
hgs
parents: 37
diff changeset
    33
// Means user can continuously input words for search, so that find will not immediately start after accept each input event.
hgs
parents: 37
diff changeset
    34
// Search will be started after \a firstWaitingTimeForStartFind time of last user input
hgs
parents: 37
diff changeset
    35
const int firstWaitingTimeForStartFind = 750;
hgs
parents: 37
diff changeset
    36
37
hgs
parents: 16
diff changeset
    37
/*!
hgs
parents: 16
diff changeset
    38
    \fn void finished()
hgs
parents: 16
diff changeset
    39
    This signal is emitted when find is finished.
hgs
parents: 16
diff changeset
    40
*/
hgs
parents: 16
diff changeset
    41
hgs
parents: 16
diff changeset
    42
/*!
hgs
parents: 16
diff changeset
    43
    \fn void modelCountChanged( int count )
hgs
parents: 16
diff changeset
    44
    This signal is emitted when data count in model is changed
hgs
parents: 16
diff changeset
    45
    \a count is current data count in model.
hgs
parents: 16
diff changeset
    46
    Currently only start find and get more find result will emit this signal.
hgs
parents: 16
diff changeset
    47
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
FmFindResultModel::FmFindResultModel( QObject *parent )
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
    : QAbstractListModel( parent )
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
{
46
hgs
parents: 37
diff changeset
    52
    FM_LOG("FmFindResultModel::FmFindResultModel");
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
    init();
46
hgs
parents: 37
diff changeset
    54
    connect( mFindThread, SIGNAL( finished()), this, SLOT(onThreadFinished()) );
37
hgs
parents: 16
diff changeset
    55
	connect( mFindThread, SIGNAL(found(QStringList)), this, SLOT(on_findThread_found( QStringList) ), Qt::BlockingQueuedConnection ); 
46
hgs
parents: 37
diff changeset
    56
    connect( &mTimer, SIGNAL(timeout()), this, SLOT(startFind()));
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
FmFindResultModel::~FmFindResultModel()
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
{
46
hgs
parents: 37
diff changeset
    61
    FM_LOG("FmFindResultModel::~FmFindResultModel START");
hgs
parents: 37
diff changeset
    62
    mFindThread->stop();
hgs
parents: 37
diff changeset
    63
    if( mFindThread->isRunning() ) {
hgs
parents: 37
diff changeset
    64
        mStopEventLoop.exec();
hgs
parents: 37
diff changeset
    65
    }
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    66
	delete mIconProvider;
46
hgs
parents: 37
diff changeset
    67
    FM_LOG("FmFindResultModel::~FmFindResultModel END");
hgs
parents: 37
diff changeset
    68
}
hgs
parents: 37
diff changeset
    69
hgs
parents: 37
diff changeset
    70
/*!
hgs
parents: 37
diff changeset
    71
    Send find \a regExp and \a pathList to find queue
hgs
parents: 37
diff changeset
    72
    last un-stopped find will be stopped and start new find in 0 - 2 seconeds.
hgs
parents: 37
diff changeset
    73
*/
hgs
parents: 37
diff changeset
    74
void FmFindResultModel::find( const QRegExp &regExp, const QStringList &pathList )
hgs
parents: 37
diff changeset
    75
{
hgs
parents: 37
diff changeset
    76
    mFindPath   = pathList;
hgs
parents: 37
diff changeset
    77
    mRegExp     = regExp;
hgs
parents: 37
diff changeset
    78
hgs
parents: 37
diff changeset
    79
    mTimer.stop();
hgs
parents: 37
diff changeset
    80
hgs
parents: 37
diff changeset
    81
	if (mFindThread->isRunning()) {
hgs
parents: 37
diff changeset
    82
        mFindThread->stop();
hgs
parents: 37
diff changeset
    83
    }
hgs
parents: 37
diff changeset
    84
    mTimer.start( firstWaitingTimeForStartFind );
hgs
parents: 37
diff changeset
    85
}
hgs
parents: 37
diff changeset
    86
hgs
parents: 37
diff changeset
    87
/*!
hgs
parents: 37
diff changeset
    88
    Internal start entrance, will be triggered by timer
hgs
parents: 37
diff changeset
    89
    Wait till last find stopped and start new find.
hgs
parents: 37
diff changeset
    90
*/
hgs
parents: 37
diff changeset
    91
void FmFindResultModel::startFind()
hgs
parents: 37
diff changeset
    92
{
hgs
parents: 37
diff changeset
    93
    mTimer.stop();
hgs
parents: 37
diff changeset
    94
    if (mFindThread->isRunning()) {
hgs
parents: 37
diff changeset
    95
        mFindThread->stop();
hgs
parents: 37
diff changeset
    96
        mTimer.start( circularWaitingTimeForStartFind );
hgs
parents: 37
diff changeset
    97
		return;
hgs
parents: 37
diff changeset
    98
    }
hgs
parents: 37
diff changeset
    99
hgs
parents: 37
diff changeset
   100
    // Find starting. Initialize context.
hgs
parents: 37
diff changeset
   101
    mFindThread->setFindPathList( mFindPath );
hgs
parents: 37
diff changeset
   102
    mFindThread->setPattern( mRegExp );
hgs
parents: 37
diff changeset
   103
	removeRows( 0, rowCount() );
hgs
parents: 37
diff changeset
   104
    emit findStarted();
hgs
parents: 37
diff changeset
   105
    mFindThread->start();
hgs
parents: 37
diff changeset
   106
}
hgs
parents: 37
diff changeset
   107
hgs
parents: 37
diff changeset
   108
/*!
hgs
parents: 37
diff changeset
   109
    Return if find is inprogress
hgs
parents: 37
diff changeset
   110
*/
hgs
parents: 37
diff changeset
   111
bool FmFindResultModel::isFinding() const
hgs
parents: 37
diff changeset
   112
{
hgs
parents: 37
diff changeset
   113
    return mFindThread->isRunning();
hgs
parents: 37
diff changeset
   114
}
hgs
parents: 37
diff changeset
   115
hgs
parents: 37
diff changeset
   116
/*!
hgs
parents: 37
diff changeset
   117
    Stop find
hgs
parents: 37
diff changeset
   118
*/
hgs
parents: 37
diff changeset
   119
void FmFindResultModel::stopFind()
hgs
parents: 37
diff changeset
   120
{
hgs
parents: 37
diff changeset
   121
    mFindThread->stop();
hgs
parents: 37
diff changeset
   122
    if( mFindThread->isRunning() ) {
hgs
parents: 37
diff changeset
   123
        mStopEventLoop.exec();
hgs
parents: 37
diff changeset
   124
    }
hgs
parents: 37
diff changeset
   125
}
hgs
parents: 37
diff changeset
   126
hgs
parents: 37
diff changeset
   127
/*
hgs
parents: 37
diff changeset
   128
    Find finish slot.
hgs
parents: 37
diff changeset
   129
*/
hgs
parents: 37
diff changeset
   130
void FmFindResultModel::onThreadFinished()
hgs
parents: 37
diff changeset
   131
{
hgs
parents: 37
diff changeset
   132
    FM_LOG("FmFindResultModel::onThreadFinished");
hgs
parents: 37
diff changeset
   133
hgs
parents: 37
diff changeset
   134
    // close event loop so that blocked destructor and stopFind() can be released.
hgs
parents: 37
diff changeset
   135
    mStopEventLoop.exit();
hgs
parents: 37
diff changeset
   136
hgs
parents: 37
diff changeset
   137
    emit findFinished();
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   138
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   139
37
hgs
parents: 16
diff changeset
   140
/*!
hgs
parents: 16
diff changeset
   141
    Returns the number of rows in the model. This value corresponds to the
hgs
parents: 16
diff changeset
   142
    number of items in the model's internal string list.
hgs
parents: 16
diff changeset
   143
hgs
parents: 16
diff changeset
   144
    The optional \a parent argument is in most models used to specify
hgs
parents: 16
diff changeset
   145
    the parent of the rows to be counted. Because this is a list if a
hgs
parents: 16
diff changeset
   146
    valid parent is specified, the result will always be 0.
hgs
parents: 16
diff changeset
   147
hgs
parents: 16
diff changeset
   148
    \sa insertRows(), removeRows(), QAbstractItemModel::rowCount()
hgs
parents: 16
diff changeset
   149
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
int FmFindResultModel::rowCount( const QModelIndex &parent ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
{
37
hgs
parents: 16
diff changeset
   152
    if ( !parent.isValid() )
hgs
parents: 16
diff changeset
   153
        return mFindResult.count();
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   155
    return 0;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   156
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   157
46
hgs
parents: 37
diff changeset
   158
/*!
hgs
parents: 37
diff changeset
   159
   Get model column count
hgs
parents: 37
diff changeset
   160
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
int FmFindResultModel::columnCount( const QModelIndex &parent ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
{
37
hgs
parents: 16
diff changeset
   163
    if ( !parent.isValid() )
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   164
        return 4;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   165
    
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   166
    return 0;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   167
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   168
46
hgs
parents: 37
diff changeset
   169
/*!
hgs
parents: 37
diff changeset
   170
   Get model data
hgs
parents: 37
diff changeset
   171
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
QVariant FmFindResultModel::data( const QModelIndex &index, int role ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
{
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
    if (!indexValid( index ))
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   175
        return QVariant();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   176
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   177
    if (role == Qt::DisplayRole) {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   178
        switch (index.column()) {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   179
            case 0: return fileInfo( index ).fileName();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   180
            case 1: return fileInfo( index ).size();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   181
            case 2: return mIconProvider->type( fileInfo( index ) );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   182
            case 3: return fileInfo( index ).lastModified().toString( Qt::LocalDate );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   183
            default:
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   184
                qWarning( "FmFindResultData: invalid display value column %d", index.column() );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   185
                return QVariant();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   186
        }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   187
    }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   188
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   189
    if (index.column() == 0) {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   190
        if (role == FileIconRole) {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   191
            return mIconProvider->icon( fileInfo( index ) );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   192
        }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   193
    }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   194
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   195
    if (index.column() == 1 && role == Qt::TextAlignmentRole) {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   196
        return Qt::AlignRight;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   197
    }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   198
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   199
    return QVariant();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   200
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   201
46
hgs
parents: 37
diff changeset
   202
/*!
hgs
parents: 37
diff changeset
   203
   Get filePath by \a index
hgs
parents: 37
diff changeset
   204
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   205
QString FmFindResultModel::filePath ( const QModelIndex & index ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   206
{
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   207
   return fileInfo( index ).filePath();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   208
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   209
46
hgs
parents: 37
diff changeset
   210
/*!
hgs
parents: 37
diff changeset
   211
   Get header data by column number \a section
hgs
parents: 37
diff changeset
   212
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   213
QVariant FmFindResultModel::headerData( int section, Qt::Orientation orientation, int role ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   214
{
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   215
    if (orientation == Qt::Horizontal) {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   216
        if (role != Qt::DisplayRole)
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   217
            return QVariant();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   218
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   219
        switch (section) {
37
hgs
parents: 16
diff changeset
   220
            case 0: return hbTrId("Name");
hgs
parents: 16
diff changeset
   221
            case 1: return hbTrId("Size");
hgs
parents: 16
diff changeset
   222
            case 2: return hbTrId("Type");
hgs
parents: 16
diff changeset
   223
            case 3: return hbTrId("Date Modified");
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   224
            default: return QVariant();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   225
        }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   226
    }
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   227
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   228
    return QAbstractItemModel::headerData( section, orientation, role );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   229
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   230
37
hgs
parents: 16
diff changeset
   231
/*!
hgs
parents: 16
diff changeset
   232
    Inserts \a dataList into the model, beginning at the given \a row.
hgs
parents: 16
diff changeset
   233
hgs
parents: 16
diff changeset
   234
    The \a parent index of the rows is optional and is only used for
hgs
parents: 16
diff changeset
   235
    consistency with QAbstractItemModel. By default, a null index is
hgs
parents: 16
diff changeset
   236
    specified, indicating that the rows are inserted in the top level of
hgs
parents: 16
diff changeset
   237
    the model.
hgs
parents: 16
diff changeset
   238
hgs
parents: 16
diff changeset
   239
    \sa QAbstractItemModel::insertRows()
hgs
parents: 16
diff changeset
   240
*/
hgs
parents: 16
diff changeset
   241
hgs
parents: 16
diff changeset
   242
bool FmFindResultModel::insertRows( int row, const QStringList &dataList, const QModelIndex &parent )
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   243
{
37
hgs
parents: 16
diff changeset
   244
    if ( row < 0 || dataList.count() < 1 || row > rowCount(parent) )
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   245
		return false;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   246
37
hgs
parents: 16
diff changeset
   247
    beginInsertRows( QModelIndex(), row, row + dataList.count() - 1 );
hgs
parents: 16
diff changeset
   248
    mFindResult.append( dataList );
hgs
parents: 16
diff changeset
   249
    endInsertRows();
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   250
37
hgs
parents: 16
diff changeset
   251
    // emit modelCountChanged could let FmFindWidget switch style between EmptyTipWidget and ResultListview
hgs
parents: 16
diff changeset
   252
    // FmFindWidget will show an empty tip widget such as "No found files or folderss" if set 0 as parameter
hgs
parents: 16
diff changeset
   253
    emit modelCountChanged( rowCount() );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   254
37
hgs
parents: 16
diff changeset
   255
    return true;
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   256
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   257
37
hgs
parents: 16
diff changeset
   258
/*!
hgs
parents: 16
diff changeset
   259
    Removes \a count rows from the model, beginning at the given \a row.
hgs
parents: 16
diff changeset
   260
hgs
parents: 16
diff changeset
   261
    The \a parent index of the rows is optional and is only used for
hgs
parents: 16
diff changeset
   262
    consistency with QAbstractItemModel. By default, a null index is
hgs
parents: 16
diff changeset
   263
    specified, indicating that the rows are removed in the top level of
hgs
parents: 16
diff changeset
   264
    the model.
hgs
parents: 16
diff changeset
   265
hgs
parents: 16
diff changeset
   266
    \sa QAbstractItemModel::removeRows()
hgs
parents: 16
diff changeset
   267
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
bool FmFindResultModel::removeRows( int row, int count, const QModelIndex &parent )
37
hgs
parents: 16
diff changeset
   269
{   
hgs
parents: 16
diff changeset
   270
	if (row < 0 || count < 1 || (row + count) > rowCount(parent) )
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   271
		return false;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   272
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   273
	beginRemoveRows( QModelIndex(), row, row + count - 1 );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   275
	for (int i = 0; i < count; ++i)
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
		mFindResult.removeAt(row);
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   277
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   278
	endRemoveRows();
37
hgs
parents: 16
diff changeset
   279
hgs
parents: 16
diff changeset
   280
    // emit modelCountChanged could let FmFindWidget switch style between EmptyTipWidget and  ResultListview
hgs
parents: 16
diff changeset
   281
    // FmFindWidget will show an empty tip widget such as "No found files or folderss" if set 0 as parameter
hgs
parents: 16
diff changeset
   282
    emit modelCountChanged( rowCount() );
hgs
parents: 16
diff changeset
   283
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   284
	return true;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
46
hgs
parents: 37
diff changeset
   287
/*!
hgs
parents: 37
diff changeset
   288
    Get QFileInfo by \a index
hgs
parents: 37
diff changeset
   289
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   290
QFileInfo FmFindResultModel::fileInfo( const QModelIndex &index ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   291
{
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   292
    if (index.row() >= 0 && index.row() < mFindResult.size())
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   293
        return QFileInfo( mFindResult[index.row()] );
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   294
    else
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   295
        return QFileInfo();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   296
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   297
37
hgs
parents: 16
diff changeset
   298
/*
hgs
parents: 16
diff changeset
   299
    Receive \a dataList as some found result
hgs
parents: 16
diff changeset
   300
    Then insert dataList to model
hgs
parents: 16
diff changeset
   301
*/
hgs
parents: 16
diff changeset
   302
void FmFindResultModel::on_findThread_found( const QStringList &dataList )
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   303
{
37
hgs
parents: 16
diff changeset
   304
    if( dataList.isEmpty() ) {
hgs
parents: 16
diff changeset
   305
		return;
hgs
parents: 16
diff changeset
   306
    }
hgs
parents: 16
diff changeset
   307
    insertRows( rowCount(), dataList );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   308
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   309
46
hgs
parents: 37
diff changeset
   310
/*
hgs
parents: 37
diff changeset
   311
    Get if \a index is valid
hgs
parents: 37
diff changeset
   312
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   313
bool FmFindResultModel::indexValid( const QModelIndex &index ) const
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   314
{
46
hgs
parents: 37
diff changeset
   315
    if( ( index.row() < 0 ) || ( index.row() >= rowCount() ) ) {
hgs
parents: 37
diff changeset
   316
        return false;
hgs
parents: 37
diff changeset
   317
    } else if( ( index.column() < 0 ) || ( index.column() >= columnCount() ) ) {
hgs
parents: 37
diff changeset
   318
        return false;
hgs
parents: 37
diff changeset
   319
    } else {
hgs
parents: 37
diff changeset
   320
        return true;
hgs
parents: 37
diff changeset
   321
    }
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   322
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   323
46
hgs
parents: 37
diff changeset
   324
/*
hgs
parents: 37
diff changeset
   325
    Init model
hgs
parents: 37
diff changeset
   326
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   327
void FmFindResultModel::init()
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   328
{
37
hgs
parents: 16
diff changeset
   329
    mFindThread = new FmFindThread( this );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   330
    mFindThread->setObjectName( "findThread" );
37
hgs
parents: 16
diff changeset
   331
    mIconProvider = new FmFileIconProvider();
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   332
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   333
46
hgs
parents: 37
diff changeset
   334
/*
hgs
parents: 37
diff changeset
   335
    Sort by name
hgs
parents: 37
diff changeset
   336
*/
37
hgs
parents: 16
diff changeset
   337
bool FmFindResultModel::caseNameLessThan(const QPair<QString,int> &s1,
hgs
parents: 16
diff changeset
   338
                                         const QPair<QString,int> &s2)
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   339
{
37
hgs
parents: 16
diff changeset
   340
    QFileInfo info1( s1.first );
hgs
parents: 16
diff changeset
   341
    QFileInfo info2( s2.first );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   342
    
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   343
    return info1.fileName() < info2.fileName();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   344
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   345
46
hgs
parents: 37
diff changeset
   346
/*
hgs
parents: 37
diff changeset
   347
    Sort by time
hgs
parents: 37
diff changeset
   348
*/
37
hgs
parents: 16
diff changeset
   349
bool FmFindResultModel::caseTimeLessThan(const QPair<QString,int> &s1,
hgs
parents: 16
diff changeset
   350
                                         const QPair<QString,int> &s2)
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   351
{
37
hgs
parents: 16
diff changeset
   352
    QFileInfo info1( s1.first );
hgs
parents: 16
diff changeset
   353
    QFileInfo info2( s2.first );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   354
    
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   355
    return info1.lastModified() < info2.lastModified();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   356
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   357
46
hgs
parents: 37
diff changeset
   358
/*
hgs
parents: 37
diff changeset
   359
    Sort by size
hgs
parents: 37
diff changeset
   360
*/
37
hgs
parents: 16
diff changeset
   361
bool FmFindResultModel::caseSizeLessThan(const QPair<QString,int> &s1,
hgs
parents: 16
diff changeset
   362
                                         const QPair<QString,int> &s2)
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   363
{
37
hgs
parents: 16
diff changeset
   364
    QFileInfo info1( s1.first );
hgs
parents: 16
diff changeset
   365
    QFileInfo info2( s2.first );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   366
    
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   367
    return info1.size() < info2.size();
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   368
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   369
46
hgs
parents: 37
diff changeset
   370
/*
hgs
parents: 37
diff changeset
   371
    Sort by type
hgs
parents: 37
diff changeset
   372
*/
37
hgs
parents: 16
diff changeset
   373
bool FmFindResultModel::caseTypeLessThan(const QPair<QString,int> &s1,
hgs
parents: 16
diff changeset
   374
                                         const QPair<QString,int> &s2)
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   375
{
37
hgs
parents: 16
diff changeset
   376
    QFileInfo info1( s1.first );
hgs
parents: 16
diff changeset
   377
    QFileInfo info2( s2.first );
16
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   378
    
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   379
    if( info1.isDir() != info2.isDir() ){
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   380
        return info1.isDir();
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   381
    }
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   382
    else{
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   383
        return info1.suffix().toLower() < info2.suffix().toLower();   
ada7962b4308 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 14
diff changeset
   384
    }
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   385
}
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   386
37
hgs
parents: 16
diff changeset
   387
/*!
hgs
parents: 16
diff changeset
   388
  \reimp
hgs
parents: 16
diff changeset
   389
  Sort by \a column, which is aligned to \a SortFlag
hgs
parents: 16
diff changeset
   390
  \sa SortFlag
hgs
parents: 16
diff changeset
   391
*/
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   392
void FmFindResultModel::sort ( int column, Qt::SortOrder order )
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   393
{  
37
hgs
parents: 16
diff changeset
   394
    // Sort algorithm comes from
hgs
parents: 16
diff changeset
   395
    // void QListModel::sort(int column, Qt::SortOrder order)
hgs
parents: 16
diff changeset
   396
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   397
    Q_UNUSED( order );
37
hgs
parents: 16
diff changeset
   398
    emit layoutAboutToBeChanged();
hgs
parents: 16
diff changeset
   399
hgs
parents: 16
diff changeset
   400
    // store value and row pair.
hgs
parents: 16
diff changeset
   401
    QVector < QPair<QString,int> > sorting(mFindResult.count());
hgs
parents: 16
diff changeset
   402
    for (int i = 0; i < mFindResult.count(); ++i) {
hgs
parents: 16
diff changeset
   403
        QString item = mFindResult.at(i);
hgs
parents: 16
diff changeset
   404
        sorting[i].first = item;
hgs
parents: 16
diff changeset
   405
        sorting[i].second = i;
hgs
parents: 16
diff changeset
   406
    }
hgs
parents: 16
diff changeset
   407
hgs
parents: 16
diff changeset
   408
    // sort in "sorting"
hgs
parents: 16
diff changeset
   409
   switch( ( SortFlag )column )
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   410
    {
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   411
    case Name:
37
hgs
parents: 16
diff changeset
   412
        qSort( sorting.begin(), sorting.end(), caseNameLessThan );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   413
        break;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   414
    case Time:
37
hgs
parents: 16
diff changeset
   415
        qSort( sorting.begin(), sorting.end(), caseTimeLessThan );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   416
        break;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   417
    case Size:
37
hgs
parents: 16
diff changeset
   418
        qSort( sorting.begin(), sorting.end(), caseSizeLessThan );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   419
        break;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   420
    case Type:
37
hgs
parents: 16
diff changeset
   421
        qSort( sorting.begin(), sorting.end(), caseTypeLessThan );
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   422
        break;
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   423
    }
37
hgs
parents: 16
diff changeset
   424
hgs
parents: 16
diff changeset
   425
    // create from Indexes and toIndexes, then set sorted data back to mFindResult
hgs
parents: 16
diff changeset
   426
    QModelIndexList fromIndexes;
hgs
parents: 16
diff changeset
   427
    QModelIndexList toIndexes;
hgs
parents: 16
diff changeset
   428
    for (int r = 0; r < sorting.count(); ++r) {
hgs
parents: 16
diff changeset
   429
        QString item = sorting.at(r).first;
hgs
parents: 16
diff changeset
   430
        toIndexes.append(createIndex(r, 0));
hgs
parents: 16
diff changeset
   431
        fromIndexes.append(createIndex(sorting.at(r).second, 0));
hgs
parents: 16
diff changeset
   432
        mFindResult[r] = sorting.at(r).first;
hgs
parents: 16
diff changeset
   433
    }
hgs
parents: 16
diff changeset
   434
    changePersistentIndexList(fromIndexes, toIndexes);
hgs
parents: 16
diff changeset
   435
hgs
parents: 16
diff changeset
   436
    emit layoutChanged();
14
1957042d8c7e Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   437
}