meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrdatefield.cpp
changeset 0 8466d47a6819
child 16 4ce476e64c59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrdatefield.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,304 @@
+/*
+* 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 date field impl.
+ *
+*/
+
+#include "emailtrace.h"
+#include "cesmrdatefield.h"
+
+#include <eikmfne.h>
+#include <avkon.hrh>
+#include <AknsConstants.h>
+#include <AknUtils.h>
+#include <AknsDrawUtils.h>
+#include <AknsFrameBackgroundControlContext.h>
+//<cmail>
+#include "esmrdef.h"
+//</cmail>
+
+#include "cesmrmeetingtimevalidator.h"
+#include "cesmrglobalnote.h"
+#include "esmrfieldbuilderdef.h"
+#include "mesmrlistobserver.h"
+#include "cesmrgenericfieldevent.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::CESMRDateField
+// ---------------------------------------------------------------------------
+//
+CESMRDateField::CESMRDateField(
+        MESMRFieldValidator* aValidator ) :
+    iValidator(aValidator)
+    {
+    FUNC_LOG;
+    //do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::~CESMRDateField
+// ---------------------------------------------------------------------------
+//
+CESMRDateField::~CESMRDateField( )
+    {
+    FUNC_LOG;
+    delete iFrameBgContext;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::NewL
+// ---------------------------------------------------------------------------
+//
+CESMRDateField* CESMRDateField::NewL(
+        MESMRFieldValidator* aValidator,
+        TESMREntryFieldId aId )
+    {
+    FUNC_LOG;
+    CESMRDateField* self = new (ELeave) CESMRDateField( aValidator );
+    CleanupStack::PushL ( self );
+    self->ConstructL( aId );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CESMRDateField::ConstructL( TESMREntryFieldId aId )
+    {
+    FUNC_LOG;
+    SetFieldId ( aId );
+
+    TTime startTime;
+    startTime.UniversalTime ( );
+
+    iDate = new (ELeave) CEikDateEditor;
+    iDate->ConstructL( TTIME_MINIMUMDATE, TTIME_MAXIMUMDATE, startTime, EFalse );
+    iDate->SetUpAndDownKeysConsumed ( EFalse );
+    
+    TAknsItemID aIconID = (iFieldId == EESMRFieldStartDate) ? KAknsIIDQgnMeetReqIndiDateStart
+            : KAknsIIDQgnMeetReqIndiDateEnd;
+
+    iBackground = AknsDrawUtils::ControlContext( this );
+    CESMRIconField::ConstructL( aIconID, iDate ); // ownership transferred
+
+    // Initialize validator
+    if ( iValidator )
+        {
+        switch ( iFieldId )
+            {
+            case EESMRFieldStartDate:
+                iValidator->SetStartDateFieldL( *iDate );
+                break;
+            case EESMRFieldStopDate:
+                iValidator->SetEndDateFieldL( *iDate );
+                break;
+            case EESMRFieldAlarmDate:
+                iValidator->SetAlarmDateFieldL( *iDate );
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::InitializeL
+// ---------------------------------------------------------------------------
+//
+void CESMRDateField::InitializeL()
+    {
+    FUNC_LOG;
+    iDate->SetFont( iLayout->Font(iCoeEnv, iFieldId ) );
+    iDate->SetMfneAlignment( CESMRLayoutManager::IsMirrored()
+                             ? EAknEditorAlignRight : EAknEditorAlignLeft );
+
+    iDate->SetSkinTextColorL( iLayout->NormalTextColorID() );
+    iDate->SetBorder( TGulBorder::ENone );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::OkToLoseFocusL
+// ---------------------------------------------------------------------------
+//
+TBool CESMRDateField::OkToLoseFocusL(
+        TESMREntryFieldId /*aNextItem*/ )
+    {
+    FUNC_LOG;
+    return TriggerValidatorL();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CESMRDateField::OfferKeyEventL(const TKeyEvent& aEvent,
+        TEventCode aType )
+    {
+    FUNC_LOG;
+    TKeyResponse response( EKeyWasNotConsumed);
+
+    if ( aType == EEventKey )
+        {
+        TInt fieldIndex( iDate->CurrentField() );
+
+        // flowthrough, these events shouldn't be consumed
+        if ( aEvent.iScanCode != EStdKeyUpArrow &&
+             aEvent.iScanCode != EStdKeyDownArrow )
+            {
+            response = iDate->OfferKeyEventL( aEvent, aType );
+            }
+        }
+
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::PositionChanged()
+// ---------------------------------------------------------------------------
+//
+void CESMRDateField::PositionChanged()
+    {
+    FUNC_LOG;
+    CCoeControl::PositionChanged();
+    if( iFrameBgContext )
+        {
+        iFrameBgContext->SetFrameRects( iDate->Rect(), iDate->Rect() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::ActivateL
+// ---------------------------------------------------------------------------
+//
+void CESMRDateField::ActivateL()
+    {
+    FUNC_LOG;
+    CCoeControl::ActivateL();
+    TRect rect(TPoint(iDate->Position()), iDate->Size());
+    TRect inner(rect);
+    TRect outer(rect);
+
+    iDate->SetSize(iLayout->FieldSize( FieldId() ));
+    
+    delete iFrameBgContext;
+    iFrameBgContext = NULL;
+    iFrameBgContext = CAknsFrameBackgroundControlContext::NewL(KAknsIIDQsnFrInput, outer, inner, EFalse ) ;
+
+    iFrameBgContext->SetParentContext( iBackground );
+    iDate->SetSkinBackgroundControlContextL(iFrameBgContext);
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::CheckIfValidatingNeededL
+// ---------------------------------------------------------------------------
+//
+void CESMRDateField::CheckIfValidatingNeededL(
+        TInt aStartFieldIndex )
+    {
+    FUNC_LOG;
+    TInt fieldIndex( iDate->CurrentField() );
+
+    if ( fieldIndex != aStartFieldIndex )
+        {
+        TriggerValidatorL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::TriggerValidatorL
+// ---------------------------------------------------------------------------
+//
+TBool CESMRDateField::TriggerValidatorL()
+    {
+    FUNC_LOG;
+    TInt err( KErrNone );
+
+    if (iValidator )
+        {
+        switch ( iFieldId )
+            {
+            case EESMRFieldStartDate:
+                TRAP( err, iValidator->StartDateChandedL() );
+                break;
+            case EESMRFieldStopDate:
+                TRAP(err, iValidator->EndDateChangedL() );
+                break;
+            case EESMRFieldAlarmDate:
+                TRAP(err, iValidator->AlarmDateChangedL() );
+                break;
+            default:
+                break;
+            }
+        }
+
+
+    if ( KErrNone != err )
+        {
+        switch ( iFieldId )
+            {
+            case EESMRFieldStartDate:
+                {
+                CESMRGlobalNote::ExecuteL(
+                        CESMRGlobalNote::EESMRRepeatReSchedule );                
+                }
+                break;                
+            case EESMRFieldStopDate:
+                {
+                if ( err == KErrArgument )
+                    {
+                    CESMRGlobalNote::ExecuteL(
+                            CESMRGlobalNote::EESMREndsBeforeStarts );
+                    }
+                else if ( err == KErrOverflow )
+                    {
+                    CESMRGlobalNote::ExecuteL(
+                            CESMRGlobalNote::EESMRRepeatReSchedule );                    
+                    }
+                }
+                break;
+
+            case EESMRFieldAlarmDate:
+                {
+                CESMRGlobalNote::ExecuteL(
+                        CESMRGlobalNote::EESMRCalenLaterDate );
+                }
+                break;
+            
+            default:
+                break;
+            }
+        }
+    
+    return ( KErrNone == err );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRDateField::SetOutlineFocusL
+// ---------------------------------------------------------------------------
+//
+void CESMRDateField::SetOutlineFocusL( TBool aFocus )
+    {
+    FUNC_LOG;
+    CESMRField::SetOutlineFocusL ( aFocus );
+    if ( aFocus )
+        {
+        ChangeMiddleSoftKeyL(EESMRCmdSaveMR,R_QTN_MSK_SAVE);
+        }
+    }
+
+// EOF