/*
* Copyright (c) 2002-2009 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:  Edit before send list pop-up query
*
*/


// INCLUDE FILES
#include "emailtrace.h"
#include "cesmrglobalnote.h"
#include "esmrhelper.h"//locateresourcefile
//<cmail>
#include "esmrdef.h"
//</cmail>
#include <AknGlobalNote.h>
#include <bautils.h>
#include <esmrgui.rsg>
#include <eikenv.h>
#include <avkon.hrh>
#include <data_caging_path_literals.hrh>

// CONSTANTS
// Unnamed namespace for local definitions
namespace {

_LIT(KResourceFileName,"esmrgui.rsc");

#ifdef _DEBUG

// Panic literal
_LIT( KESMRGlobalNote, "ESMRGlobalNote" );

/**
 * Panic codes
 */
enum TESMRGlobalNotePanic
    {
    ENoteStringNotFound // Note string not found
    };

/**
 * Raises system panic
 */
void Panic( TESMRGlobalNotePanic aPanic )
    {
    User::Panic( KESMRGlobalNote, aPanic );
    }

#endif // _DEBUG

} // namespace

// ======== MEMBER FUNCTIONS ========

// -----------------------------------------------------------------------------
// CESMRGlobalNote::CESMRGlobalNote
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CESMRGlobalNote::CESMRGlobalNote(
            TESMGlobalNoteType aType)
:   iType(aType)
    {
    FUNC_LOG;
    // Do nothing
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::~CESMRGlobalNote
// -----------------------------------------------------------------------------
//
CESMRGlobalNote::~CESMRGlobalNote()
    {
    FUNC_LOG;
    iEnv->DeleteResourceFile(iResourceOffset);    
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::NewL
// -----------------------------------------------------------------------------
//
EXPORT_C CESMRGlobalNote* CESMRGlobalNote::NewL(
        TESMGlobalNoteType aType)
    {
    FUNC_LOG;
    CESMRGlobalNote* self =
            new (ELeave) CESMRGlobalNote(aType);
    CleanupStack::PushL( self );
    self->ConstructL( );
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::ConstructL
// -----------------------------------------------------------------------------
//
void CESMRGlobalNote::ConstructL()
    {
    FUNC_LOG;
    TFileName filename;    
    iEnv = CEikonEnv::Static();// codescanner::eikonenvstatic

    ESMRHelper::LocateResourceFile(
            KResourceFileName,
            KDC_RESOURCE_FILES_DIR,
            filename,
            &iEnv->FsSession() );


    //for localization
    BaflUtils::NearestLanguageFile(iEnv->FsSession(),filename); 
    iResourceOffset = iEnv->AddResourceFileL(filename);
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::ExecuteL
// -----------------------------------------------------------------------------
//
EXPORT_C void CESMRGlobalNote::ExecuteL(TESMGlobalNoteType aType)
    {
    FUNC_LOG;
    CESMRGlobalNote* query = CESMRGlobalNote::NewL( aType );
    CleanupStack::PushL(query);
    query->ExecuteLD();
    CleanupStack::Pop(query);
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::NoteType
// -----------------------------------------------------------------------------
//
TAknGlobalNoteType CESMRGlobalNote::NoteType()
    {
    FUNC_LOG;
    TAknGlobalNoteType type(EAknGlobalInformationNote);
    switch ( iType )
        {
        case EESMRCorruptedMR:
            {
            type = EAknGlobalErrorNote;
            break;
            }
        case EESMRCalenLaterDate: // FALLTHROUGH
        case EESMREndsBeforeStarts: // FALLTHROUGH
        case EESMREntryEndEarlierThanItStart: // FALLTHROUGH
        case EESMRRepeatEndEarlierThanItStart: // FALLTHROUGH
        case EESMRAlarmAlreadyPassed: // FALLTHROUGH
        case EESMRDiffMoreThanMonth: // FALLTHROUGH
        case EESMREntrySaved: // FALLTHROUGH
        case EESMRTodoEntrySaved: // FALLTHROUGH
        case EESMRRepeatDifferentStartAndEndDate:
        case EESMRRepeatReSchedule:
        case EESMRCannotDisplayMuchMore:
        case EESMRRepeatInstanceTooEarly:
            {
            type = EAknGlobalInformationNote;
            break;
            }
        default:
            {
            break;
            }
        }
    return type;
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::NoteTextLC
// -----------------------------------------------------------------------------
//
HBufC* CESMRGlobalNote::NoteTextLC()
    {
    FUNC_LOG;
    HBufC* noteText = NULL;
    switch ( iType )
        {
        case EESMRCorruptedMR:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                                R_QTN_MEET_REQ_CORRUPTED_NOTE);
            break;
            }
        case EESMREndsBeforeStarts:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_INFO_NOTE_ENDS_BEFORE);
            break;
            }
        case EESMRCalenLaterDate:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_LATER_DATE);
            break;
            }
        case EESMREntryEndEarlierThanItStart:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_INFO_NOTE_ENDS_BEFORE );
            break;
            }
        case EESMRRepeatEndEarlierThanItStart:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_CALENDAR_INFO_REPEAT_INVALID );
            break;
            }
        case EESMRAlarmAlreadyPassed:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_CALENDAR_ALARM_PASSED );
            break;
            }
        case EESMRDiffMoreThanMonth:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_CALENDAR_ALARM_DIFFERENCE );
            break;
            }
        case EESMREntrySaved:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_NOTE_SAVED );
            break;
            }
        case EESMRTodoEntrySaved:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_TODO_SAVED );
            break;
            }
        case EESMRRepeatDifferentStartAndEndDate:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_QTN_MEET_REQ_INFO_START_END_DATE );
            }
            break;
        case EESMRRepeatReSchedule:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_MEET_REQ_RESCHEDULE_INSTANCE );
            }
            break;
        case EESMRCannotDisplayMuchMore:
        	{
        	noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_QTN_MEET_REQ_LONG_DESCRIPTION );
        	}
            break;
        case EESMRRepeatInstanceTooEarly:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_MEET_REQ_INSTANCE_STARTS_EARLIER_THAN_SERIES );
            }
            break;
        case EESMRUnableToEdit:
        	{
        	noteText = iEnv->AllocReadResourceAsDes16LC(
        			R_QTN_MEET_REQ_INFO_FIELD_LOCKED );        	
        	}
        	break;
        case EESMROverlapsExistingInstance:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_MEET_REQ_INSTANCE_OVERLAPS_EXISTING_INSTANCE );
            }
            break;
        case EESMRInstanceAlreadyExistsOnThisDay:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_MEET_REQ_INSTANCE_ALREADY_EXISTS_ON_THIS_DAY );
            }
            break;
        case EESMRInstanceOutOfSequence:
            {
            noteText = iEnv->AllocReadResourceAsDes16LC(
                    R_MEET_REQ_INSTANCE_OUT_OF_SEQUENCE );
            }
            break;
        default:
            {           
            break;
            }
        }
    
    __ASSERT_DEBUG( noteText, Panic( ENoteStringNotFound) );
    return noteText;
    }

// -----------------------------------------------------------------------------
// CESMRGlobalNote::ExecuteLD
// -----------------------------------------------------------------------------
//
EXPORT_C void CESMRGlobalNote::ExecuteLD()
    {
    FUNC_LOG;
    CAknGlobalNote* note = CAknGlobalNote::NewLC();
    HBufC* noteText = NoteTextLC();

    note->ShowNoteL(
            NoteType(),
            *noteText );

    CleanupStack::PopAndDestroy( noteText );
    noteText = NULL;

    CleanupStack::PopAndDestroy( note );
    note = NULL;

    // Deleting 'this' object because this id D-method.
    delete this;
    }

// EOF

