meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrbooleanfield.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:02:40 +0200
changeset 4 e7aa27f58ae1
parent 0 8466d47a6819
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2007-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:  ESMR boolean field implementation
*
*/

#include "emailtrace.h"
#include "cesmrbooleanfield.h"

#include <eiklabel.h>
#include <StringLoader.h>
#include <avkon.hrh>
#include <esmrgui.rsg>
#include <AknUtils.h>
#include "mesmrcalentry.h"
#include "mesmrlistobserver.h"
#include "mesmrfieldvalidator.h"

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

// ---------------------------------------------------------------------------
// CESMRBooleanField::NewL
// ---------------------------------------------------------------------------
//
CESMRBooleanField* CESMRBooleanField::NewL( MESMRFieldValidator* aValidator )
    {
    FUNC_LOG;
    CESMRBooleanField* self = new (ELeave) CESMRBooleanField( aValidator );
    CleanupStack::PushL ( self );
    self->ConstructL ( );
    CleanupStack::Pop ( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::~CESMRBooleanField
// ---------------------------------------------------------------------------
//
CESMRBooleanField::~CESMRBooleanField( )
    {
    FUNC_LOG;
    //do nothing
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::InitializeL
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::InitializeL()
    {
    FUNC_LOG;
    iLabel->SetFont ( iLayout->Font (iCoeEnv, iFieldId ) );
    iLabel->SetLabelAlignment (CESMRLayoutManager::IsMirrored ( ) ? ELayoutAlignRight
                                                                  : ELayoutAlignLeft );
    AknLayoutUtils::OverrideControlColorL ( *iLabel, 
                                            EColorLabelText,
                                            iLayout->GeneralListAreaTextColor()  );
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::InternalizeL
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::InternalizeL( MESMRCalEntry& aEntry )
    {
    FUNC_LOG;
    if (aEntry.IsStoredL ( ) ) // entry is already stored in db  
        {
        MESMRCalEntry::TESMRAlarmType alarmType;
        TTime alarmTime;
        aEntry.GetAlarmL (alarmType, alarmTime );

        switch (alarmType )
            {
            //flow through
            case MESMRCalEntry::EESMRAlarmAbsolute:
            case MESMRCalEntry::EESMRAlarmRelative: // Show alarm as - ON
                {
                iStatus = ETrue;
                }
                break;
                //flow through
            case MESMRCalEntry::EESMRAlarmNotFound:
            default: // Show alarm as - OFF
                {
                iStatus = EFalse;
                }
                break;
            }
        }
    else // This is a new entry and default implementation is required
        {
        switch (aEntry.Type ( ) )
            {
            case MESMRCalEntry::EESMRCalEntryTodo: // To-do
                {
                TTime alarmTime;
                MESMRCalEntry::TESMRAlarmType alarmType;
                aEntry.GetAlarmL (alarmType, alarmTime );

                // Change status to "ON" if alarm has been set by default
                iStatus = alarmType != MESMRCalEntry::EESMRAlarmNotFound;
                }
                break;
            // Flow through
            case MESMRCalEntry::EESMRCalEntryMeetingRequest: // Meeting request
            case MESMRCalEntry::EESMRCalEntryMeeting: // Meeting
                {
                iStatus = ETrue;// Change the status to "ON" for these dialog default
                }
                break;
                
            case MESMRCalEntry::EESMRCalEntryAnniversary: // Anniversary    
                {
                iStatus = ETrue;// Change the status to "ON" for these dialog default
                }
                break;
                // Flow through
            case MESMRCalEntry::EESMRCalEntryMemo: // Memo
            case MESMRCalEntry::EESMRCalEntryReminder: // Reminder
            
            default:
                iStatus = EFalse; // Change the status to "OFF" for these dialog default
                break;
            }
        }
    ResetFieldL ( );
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::OfferKeyEventL
// ---------------------------------------------------------------------------
//
TKeyResponse CESMRBooleanField::OfferKeyEventL(const TKeyEvent& aEvent,
        TEventCode aType )
    {
    FUNC_LOG;
    TKeyResponse response( EKeyWasNotConsumed);
    if ( aType == EEventKey )
        {
        switch ( aEvent.iScanCode )
            {
            // Flowthrough, doesn't matter which key was pressed since
            // the value is always changes from "off" to "on" or vice versus.
            case EStdKeyDevice3: // selection key
            case EStdKeyLeftArrow:
            case EStdKeyRightArrow:
                iStatus = !iStatus; // change status
                ResetFieldL ( );
                response = EKeyWasConsumed;
                break;

            default:
                break;
            }
        }
    return response;
    }


// ---------------------------------------------------------------------------
// CESMRBooleanField::SetOutlineFocusL
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::SetOutlineFocusL( TBool aFocus )
    {
    FUNC_LOG;
    CESMRField::SetOutlineFocusL( aFocus );

    if (aFocus) //Focus is gained on the field
        {
        if (iStatus)
            {
            ChangeMiddleSoftKeyL(EESMRCmdAlarmOff,R_QTN_MEET_REQ_ALARM_OFF); //R_TEXT_SOFTKEY_OFF
            }
        else
            {
            ChangeMiddleSoftKeyL(EESMRCmdAlarmOn,R_QTN_MEET_REQ_ALARM_ON); //R_TEXT_SOFTKEY_ON
            }
        }
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::MakeVisible
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::MakeVisible(TBool aVisible )
    {
    FUNC_LOG;
    CCoeControl::MakeVisible (aVisible );
    if ( iObserver )
        {
        TRAP_IGNORE(ResetFieldL ( ) );
        }
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::ExecuteGenericCommandL()
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::ExecuteGenericCommandL( TInt aCommand )
    {
    FUNC_LOG;
    if( aCommand == EESMRCmdAlarmOn || aCommand == EESMRCmdAlarmOff )
        {    
        SwitchMiddleSoftKeyL();
        }
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::SwitchMiddleSoftKeyL
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::SwitchMiddleSoftKeyL()
    {
    FUNC_LOG;
    iStatus = !iStatus; // change status
    ResetFieldL ( );
    if (iStatus)
        {
        ChangeMiddleSoftKeyL(EESMRCmdAlarmOff,R_QTN_MEET_REQ_ALARM_OFF); 
        }
    else
        {
        ChangeMiddleSoftKeyL(EESMRCmdAlarmOn,R_QTN_MEET_REQ_ALARM_ON); 
        }
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::CESMRBooleanField
// ---------------------------------------------------------------------------
//
CESMRBooleanField::CESMRBooleanField( MESMRFieldValidator* aValidator ) :
    iValidator( aValidator)
    {
    FUNC_LOG;
    iStatus = ETrue;
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::ConstructL
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::ConstructL( )
    {
    FUNC_LOG;
    _LIT(KEmptyText, "" );
    SetFieldId ( EESMRFieldAlarmOnOff );
    iLabel = new (ELeave) CEikLabel();
    iLabel->SetTextL (KEmptyText );

    CESMRIconField::ConstructL (KAknsIIDQgnMeetReqIndiAlarm, iLabel );
    }

// ---------------------------------------------------------------------------
// CESMRBooleanField::ResetFieldL
// ---------------------------------------------------------------------------
//
void CESMRBooleanField::ResetFieldL( )
    {
    FUNC_LOG;
    iValidator->SetAlarmOnOffL( iStatus );

    HBufC* buf = StringLoader::LoadLC ( iStatus ?
    R_QTN_MEET_REQ_ALARM_ON :
    R_QTN_MEET_REQ_ALARM_OFF );

    iLabel->SetTextL ( *buf );
    CleanupStack::PopAndDestroy ( buf );

    // if status on 'on', add time and date fields for
    // all day event alert, otherwise remove them.
    // if this field is not visible -> alldayevent not set
    // let's not show the date and time fields either.
    if ( iStatus && IsVisible ( ) )
        {
        iObserver->InsertControl ( EESMRFieldAlarmTime );
        iObserver->InsertControl ( EESMRFieldAlarmDate );
        }
    else
        {
        iObserver->RemoveControl ( EESMRFieldAlarmTime );
        iObserver->RemoveControl ( EESMRFieldAlarmDate );
        }

    iLabel->DrawDeferred ( );
    }

// EOF