/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Key class for message sorting
*
*/


#ifndef IPSPLGMSGKEY_H
#define IPSPLGMSGKEY_H

#include <e32base.h>          // TKey
//<cmail>
#include "cfsmailcommon.h"    // tfsmailsortcriteria
//</cmail>

class CMsvEntry;

const TInt KMaxSubjectPrefixSeparatorLength = 8;

/**
 *  Comparison class for message objects
 *
 *  @code
 *  @endcode
 *
 *  @lib ipssosplugin.lib
 *  @since 
 */
class TIpsPlgMsgKey : public TKey
    {

public:

    /**
     * Constructor.
     *
     * @since 
     * @param aFolderEntry  Folder to be sorted
     * @param aSortCriteria Sorting criteria
     */
    TIpsPlgMsgKey( 
        CMsvEntry& aFolderEntry,
        const RArray<TFSMailSortCriteria>& aSortCriteria );
        
    /**
     * Finds the offset from which the actual subject starts after 
     * the prefixes
     *
     * @param aSubject Message subject string
     * @return Offset from the beginning of the string. If the string
     *         is not found, returns 0.
     */
    TInt FindSubjectStart( const TDesC& aSubject ) const;

public:

    /**
     * From TKey
     */
    virtual TInt Compare(TInt aLeft, TInt aRight) const;

    /**
     * From TKey
     */
    virtual TAny* At(TInt anIndex) const;

private:
    // Prevent usage of the default constructor
    TIpsPlgMsgKey();
    
private:
    /**
     * Compares the subject strings omitting the reply & forward prefixes
     */
    TInt CompareSubjectsL( const TDesC& aLeft, const TDesC& aRight ) const; // <cmail> change to leaving function

private:
    // Folder objects the messages of which are sorted. Not owned.    
    CMsvEntry& iFolderEntry;
    
    // Sorting criteria
    const RArray<TFSMailSortCriteria>& iSortingCriteria;
    
    // String which separates the subject prefixes (Re, Fwd etc) 
    // from the actual subject
    TBuf<KMaxSubjectPrefixSeparatorLength> iSubjectPrefixSeparator;
    
    };

#endif // IPSPLGMSGKEY_H
