meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrcheckbox.cpp
branchRCL_3
changeset 64 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrcheckbox.cpp	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,377 @@
+/*
+* Copyright (c) 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 All day event checkbox field implementation
+ *
+*/
+
+#include "cesmrcheckbox.h"
+#include "mesmrlistobserver.h"
+#include "mesmrmeetingrequestentry.h"
+#include "mesmrfieldvalidator.h"
+#include "esmrconfig.hrh"
+#include "esmrhelper.h"
+#include "nmrbitmapmanager.h"
+#include "cmrimage.h"
+#include "cmrlabel.h"
+#include "nmrlayoutmanager.h"
+#include "mesmrfieldeventqueue.h"
+#include "cesmrgenericfieldevent.h"
+
+#include <esmrgui.rsg>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+
+// DEBUG
+#include "emailtrace.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::NewL
+// ---------------------------------------------------------------------------
+//
+CESMRCheckBox* CESMRCheckBox::NewL( MESMRFieldValidator* aValidator )
+    {
+    FUNC_LOG;
+    CESMRCheckBox* self = new( ELeave )CESMRCheckBox( aValidator );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::CESMRCheckbox
+// ---------------------------------------------------------------------------
+//
+CESMRCheckBox::CESMRCheckBox( MESMRFieldValidator* aValidator )
+: iChecked( EFalse )
+    {
+    FUNC_LOG;
+
+    iValidator = aValidator;
+
+    SetFieldId( EESMRFieldAllDayEvent );
+    SetFocusType ( EESMRHighlightFocus );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::ConstructL()
+    {
+    FUNC_LOG;
+    iLabel = CMRLabel::NewL();
+    iLabel->SetParent( this );
+
+    CESMRField::ConstructL( iLabel ); //ownership transfered
+
+    HBufC* txt = StringLoader::LoadLC ( R_QTN_MEET_REQ_ALL_DAY_EVENT );
+    iLabel->SetTextL( *txt );
+    CleanupStack::PopAndDestroy( txt );
+
+    // Creating field icon
+    SetIconL ( iChecked );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::~CESMRCheckbox
+// ---------------------------------------------------------------------------
+//
+CESMRCheckBox::~CESMRCheckBox( )
+    {
+    FUNC_LOG;
+    delete iFieldIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::SetOutlineFocusL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::SetOutlineFocusL( TBool aFocus )
+    {
+    FUNC_LOG;
+    CESMRField::SetOutlineFocusL ( aFocus );
+
+    //Focus gained
+    if ( aFocus )
+        {
+        SwitchMSKLabelL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::ExecuteGenericCommandL
+// ---------------------------------------------------------------------------
+//
+TBool CESMRCheckBox::ExecuteGenericCommandL( TInt aCommand )
+    {
+    FUNC_LOG;
+    TBool isUsed( EFalse );
+    // EAknCmdOpen is added for the Pointer events, see ListPane
+    if( aCommand == EESMRCmdCheckEvent || aCommand == EAknCmdOpen )
+        {
+    	HandleTactileFeedbackL();
+
+        HandleCheckEventL();
+        SwitchMSKLabelL();
+        SendFieldChangeEventL( EESMRFieldAllDayEvent );
+        isUsed = ETrue;
+        }
+    return isUsed;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CESMRCheckBox::OfferKeyEventL(const TKeyEvent& aEvent,
+        TEventCode aType )
+    {
+    FUNC_LOG;
+    TKeyResponse response( EKeyWasNotConsumed);
+    if ( aType == EEventKey )
+        {
+        if ( aEvent.iScanCode == EStdKeyDevice3 )
+            {
+            HandleCheckEventL();
+            SwitchMSKLabelL();
+            SendFieldChangeEventL( EESMRFieldAllDayEvent );
+            response = EKeyWasConsumed;
+            }
+        }
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::CountComponentControls
+// ---------------------------------------------------------------------------
+//
+TInt CESMRCheckBox::CountComponentControls( ) const
+    {
+    FUNC_LOG;
+    TInt count( 0 );
+    if ( iFieldIcon )
+        {
+        ++count;
+        }
+    if ( iLabel )
+        {
+        ++count;
+        }
+    return count;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::ComponentControl
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CESMRCheckBox::ComponentControl( TInt aInd ) const
+    {
+    FUNC_LOG;
+    switch ( aInd )
+        {
+        case 0:
+            return iFieldIcon;
+        case 1:
+            return iLabel;
+        default:
+            return NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::SizeChanged()
+    {
+    FUNC_LOG;
+    TRect rect = Rect();
+
+    TAknLayoutRect rowLayoutRect =
+     NMRLayoutManager::GetFieldRowLayoutRect( rect, 1 );
+    rect = rowLayoutRect.Rect();
+
+    TAknWindowComponentLayout iconLayout =
+     NMRLayoutManager::GetWindowComponentLayout(
+             NMRLayoutManager::EMRLayoutTextEditorIcon );
+    AknLayoutUtils::LayoutImage( iFieldIcon, rect, iconLayout );
+
+    TAknLayoutRect bgLayoutRect =
+     NMRLayoutManager::GetLayoutRect(
+             rect, NMRLayoutManager::EMRLayoutTextEditorBg );
+    TRect bgRect( bgLayoutRect.Rect() );
+    // Move focus rect so that it's relative to field's position.
+    bgRect.Move( -Position() );
+    SetFocusRect( bgRect );
+
+    TAknTextComponentLayout editorLayout =
+            NMRLayoutManager::GetTextComponentLayout(
+                    NMRLayoutManager::EMRTextLayoutTextEditor );
+
+    AknLayoutUtils::LayoutLabel( iLabel, rect, editorLayout );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::InternalizeL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::InternalizeL( MESMRCalEntry& aEntry )
+    {
+    FUNC_LOG;
+    TBool alldayEvent( aEntry.IsAllDayEventL() );
+
+    // Update the validator
+    iValidator->SetAllDayEventL( alldayEvent );
+
+    // if this is all day event and not checked
+    if ( alldayEvent && !iChecked )
+        {
+        HandleCheckEventL();
+        }
+    SetIconL( iChecked );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::ExternalizeL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::ExternalizeL( MESMRCalEntry& /*aEntry*/)
+    {
+    FUNC_LOG;
+    iValidator->SetAllDayEventL( iChecked );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::SetIconL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::SetIconL( TBool aChecked )
+    {
+    FUNC_LOG;
+    delete iFieldIcon;
+    iFieldIcon = NULL;
+
+    NMRBitmapManager::TMRBitmapId iconID;
+    if( aChecked )
+        {
+        iconID = NMRBitmapManager::EMRBitmapCheckBoxOn;
+        }
+    else
+        {
+        iconID = NMRBitmapManager::EMRBitmapCheckBoxOff;
+        }
+
+    iFieldIcon = CMRImage::NewL( iconID );
+    iFieldIcon->SetParent( this );
+
+    SizeChanged();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::HandleCheckEventL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::HandleCheckEventL( )
+    {
+    FUNC_LOG;
+    /*
+     * Change check status
+     */
+    iChecked = !iChecked; // change status
+    SetIconL ( iChecked ); // set icon for the status
+
+    // update validator status:
+    iValidator->SetAllDayEventL ( iChecked );
+
+    /*
+     * Add / remove new fields to list
+     */
+    if ( iChecked )
+        {
+        // start - end time should be removed
+        // relateive alarm should be removed
+        iObserver->HideControl ( EESMRFieldMeetingTime );
+        iObserver->HideControl ( EESMRFieldAlarm );
+        // absolute alarm should be inserted
+        iObserver->ShowControl ( EESMRFieldAlarmOnOff );
+        }
+    else
+        {
+        iObserver->ShowControl ( EESMRFieldMeetingTime );
+        iObserver->ShowControl ( EESMRFieldAlarm );
+        iObserver->HideControl ( EESMRFieldAlarmOnOff );
+        iObserver->HideControl ( EESMRFieldAlarmTime );
+        iObserver->HideControl ( EESMRFieldAlarmDate );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::SwitchMSKLabelL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::SwitchMSKLabelL()
+    {
+    FUNC_LOG;
+    if( iChecked )
+        {
+        ChangeMiddleSoftKeyL(EESMRCmdCheckEvent, R_QTN_MSK_UNMARK);
+        }
+    else
+        {
+        ChangeMiddleSoftKeyL(EESMRCmdCheckEvent, R_QTN_MSK_MARK);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRCheckbox::SetContainerWindowL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::SetContainerWindowL(
+        const CCoeControl& aContainer )
+    {
+    CCoeControl::SetContainerWindowL( aContainer );
+    iLabel->SetContainerWindowL( aContainer );
+    iLabel->SetParent( this );
+    }
+// ---------------------------------------------------------------------------
+// CESMRCheckBox::SendFieldChangeEventL
+// ---------------------------------------------------------------------------
+//
+void CESMRCheckBox::SendFieldChangeEventL(
+        TESMREntryFieldId aFieldId )
+    {
+    FUNC_LOG;
+    if ( iEventQueue )
+        {
+        CESMRGenericFieldEvent* event =
+            CESMRGenericFieldEvent::NewLC( NULL,
+                                           MESMRFieldEvent::EESMRFieldChangeEvent );
+        TInt fieldId = aFieldId;
+        CESMRFieldEventValue* field = CESMRFieldEventValue::NewLC(
+                CESMRFieldEventValue::EESMRInteger, &fieldId );
+        event->AddParamL( field );
+        CleanupStack::Pop( field );
+        CESMRFieldEventValue* checked = CESMRFieldEventValue::NewLC(
+                CESMRFieldEventValue::EESMRInteger, &iChecked );
+        event->AddParamL( checked );
+        CleanupStack::Pop( checked );
+        iEventQueue->NotifyEventL( *event );
+        CleanupStack::PopAndDestroy( event );
+        }
+    }
+// EOF