calendarui/controller/src/calensettingsui.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/src/calensettingsui.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,502 @@
+/*
+* Copyright (c) 2007-2008 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:  Role of this class is to show setting view and to set data.
+ *
+*/
+
+#include <aknlists.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include <akntitle.h>
+#include <aknsettingitemlist.h>
+#include <bldvariant.hrh> // For FeatureIds (lint warns without)
+#include <featmgr.h>
+#include <hlplch.h>
+#include <StringLoader.h>
+#include <csxhelp/cale.hlp.hrh>
+#include <Calendar.rsg>
+#include <calencommands.hrh>            // Calendar commands
+
+#include "calendarui_debug.h"
+#include "calensettingsui.h"
+#include "calensettingsuicontainer.h"
+#include "calendar.hrh"
+#include "CalenUid.h"
+#include "calenglobaldata.h"
+
+// ================= MEMBER FUNCTIONS =======================
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::NewL
+// 1st phase of construction
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCalenSettingsUi* CCalenSettingsUi::NewL( 
+                                    CCalenCustomisationManager& aCustomisationManager )
+    {
+    TRACE_ENTRY_POINT;
+
+    CCalenSettingsUi* self = new(ELeave) CCalenSettingsUi( aCustomisationManager );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    TRACE_EXIT_POINT;
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::CCalenSettingsUi
+// First stage of construction.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCalenSettingsUi::CCalenSettingsUi( CCalenCustomisationManager& aCustomisationManager )
+    : iCustomisationManager( aCustomisationManager ) , iPageStatus(EFalse)
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::ConstructL
+// 2nd phase of construction.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::ConstructL()
+    {
+    TRACE_ENTRY_POINT;
+
+    CAknDialog::ConstructL( R_CALENDAR_SETTING_MENUBAR );
+
+    CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+
+    // Set empty navi pane label
+    iNaviContainer = static_cast<CAknNavigationControlContainer*>(
+                                 sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    iNaviContainer->PushDefaultL();
+
+    iGlobalData = CCalenGlobalData::InstanceL();
+
+    // Set title text
+    CAknTitlePane* tp = static_cast<CAknTitlePane*>(
+                                 sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+    HBufC* titleText = StringLoader::LoadLC( R_CALEN_SETTING_FORM_TITLE, iCoeEnv );
+    tp->SetTextL( *titleText );
+    CleanupStack::PopAndDestroy( titleText );
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::~CCalenSettingsUi
+// Destructor.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCalenSettingsUi::~CCalenSettingsUi()
+    {
+    TRACE_ENTRY_POINT;
+
+    if( iNaviContainer )
+        {
+        // Remove navi pane used by settings view
+        iNaviContainer->Pop(); 
+        // iNaviContainer is not owned
+        iNaviContainer = NULL; 
+        }
+    delete iContainer;
+    delete iListBox;
+    delete iBgContext;
+
+    if( iGlobalData )
+        {
+        iGlobalData->Release();
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::OfferKeyEventL
+// Handles key presses.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CCalenSettingsUi::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                                                    TEventCode aType )
+    {
+    TRACE_ENTRY_POINT;
+
+    if( aKeyEvent.iCode == EKeyNo )
+        {
+        // Red cancel button.
+        TryExitL( EKeyNo );
+
+        TRACE_EXIT_POINT;
+        
+        // Chain this one up to the main app so it closes calendar app.
+        return EKeyWasNotConsumed; 
+        }
+    else if( aKeyEvent.iCode == EKeyEscape )
+        {
+        // For exiting from FSW
+        TryExitL( EAknSoftkeyBack );
+
+        TRACE_EXIT_POINT;
+        return EKeyWasNotConsumed;
+        }
+    else if(aKeyEvent.iScanCode == EStdKeyYes) //Process Send key
+        {
+        TRACE_EXIT_POINT;
+        return EKeyWasNotConsumed;
+        }
+    else
+        {
+        iListBox->OfferKeyEventL( aKeyEvent, aType );
+        
+        // Draw because pressing up/down means we have to redraw the backgrouns skin.
+        DrawDeferred();
+
+        TRACE_EXIT_POINT;
+        
+        // Don't let other key events chain up to the calendar app.
+        return EKeyWasConsumed; 
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::ProcessCommandL
+// Processes commands.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::ProcessCommandL( TInt aCommandId )
+    {
+    TRACE_ENTRY_POINT;
+
+    CAknDialog::ProcessCommandL( aCommandId );
+
+    switch(aCommandId)
+        {
+        case ECalenCmdChange:
+            if(!iPageStatus)
+                {
+                iContainer->HandleListBoxSelectionL( ECalenCmdChange ,iPageStatus );
+                }
+            break;
+        case EAknCmdHelp:
+            OnCmdHelpL();
+            break;
+        case EAknCmdExit:
+        case EAknSoftkeyExit:
+            TryExitL( aCommandId );
+            break;
+        default:
+            break;
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::OkToExitL
+// Returns ETrue if the button given is allowed to close settings.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+TBool CCalenSettingsUi::OkToExitL( TInt aButtonId )
+    {
+    TRACE_ENTRY_POINT;
+
+    TBool retVal = EFalse;
+
+    switch( aButtonId )
+        {
+        case EAknSoftkeyChange:
+            if(!iPageStatus)
+                {
+                iContainer->HandleListBoxSelectionL( EAknSoftkeyEdit ,iPageStatus);
+                }
+            break;
+        case EAknSoftkeyBack:
+            if(!iPageStatus)
+                {
+                retVal = CAknDialog::OkToExitL( aButtonId );
+                }
+            break;
+        default:
+            retVal = CAknDialog::OkToExitL( aButtonId );
+            break;
+        }
+
+    TRACE_EXIT_POINT;
+    return retVal;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::HandlePointerEventL
+// Handle pointer events
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+	{
+	TRACE_ENTRY_POINT;
+	   
+	if( !AknLayoutUtils::PenEnabled() )
+	    {
+	    return;
+	    }
+    TInt index = iListBox->CurrentItemIndex();
+    switch( aPointerEvent.iType )
+        {
+        case TPointerEvent::EButton1Down:
+            {
+            iListBox->HandlePointerEventL(aPointerEvent);      
+            }
+            break;
+        case TPointerEvent::EButton1Up:
+            {
+            iListBox->HandlePointerEventL(aPointerEvent);
+            }
+            break;
+        case TPointerEvent::EDrag:
+            {
+            iListBox->HandlePointerEventL(aPointerEvent);
+            }
+            break;
+        default:
+            break;
+        }
+    TRACE_EXIT_POINT;
+	}
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::PreLayoutDynInitL
+// Called before laying out control.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::PreLayoutDynInitL()
+    {
+    TRACE_ENTRY_POINT;
+
+    // Get the background skin
+    iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain,
+                                    CEikonEnv::Static()->EikAppUi()->ClientRect(),
+                                    ETrue );
+
+    CAknSettingStyleListBox *lb;
+    iListBox = lb = new( ELeave ) CAknSettingStyleListBox;
+    iListBox->SetListBoxObserver( this );
+
+    iContainer = CCalenSettingsUiContainer::NewL( this,
+                                                  *lb,
+                                                  *iGlobalData,
+                                                  iCustomisationManager );
+
+    iContainer->ConstructListBoxL();
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenSettingsUi::SizeChanged
+// From CCoeControl. Called when the size changes.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::SizeChanged()
+    {
+    TRACE_ENTRY_POINT;
+
+    CAknDialog::SizeChanged();
+
+    TRect rect = Rect();
+
+    if( iBgContext )
+        {
+        iBgContext->SetRect( rect );
+        }
+
+    if( iListBox )
+        {
+   		TRect parent;
+   		AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, parent); 
+     	AknLayoutUtils::LayoutControl(iListBox, parent, AknLayout::list_gen_pane(0));  
+     	
+        TRect zerodRect( TPoint(0, 0), parent.Size() );
+        iListBox->SetRect( zerodRect );
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenSettingsUi::GetHelpContext
+// Gets help context
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    TRACE_ENTRY_POINT;
+
+    aContext.iMajor = KUidCalendar;
+    aContext.iContext = KCALE_HLP_SETTINGS;
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenSettingsUi::Draw
+// Draws the background skin
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::Draw( const TRect& aRect ) const
+    {
+    TRACE_ENTRY_POINT
+
+    CWindowGc& gc = SystemGc();
+    TRect mainPane;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
+    TRect zerodRect( TPoint(0, 0), mainPane.Size() );
+    iBgContext->SetRect( zerodRect );
+    iBgContext->SetParentPos( mainPane.iTl );
+    AknsDrawUtils::Background( AknsUtils::SkinInstance(), iBgContext, this, gc, aRect );
+
+    TRACE_EXIT_POINT
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenSettingsUi::HandleResourceChange
+// Handles resource changes
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::HandleResourceChange( TInt aType )
+    {
+    TRACE_ENTRY_POINT;
+
+    if( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        TRect mainPane;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
+        SetRect( mainPane );
+        TRect zerodRect( TPoint( 0, 0 ), mainPane.Size() );
+        iBgContext->SetRect( zerodRect );
+        iBgContext->SetParentPos( mainPane.iTl );
+        iListBox->SetRect( zerodRect );
+        }
+
+    CAknDialog::HandleResourceChange( aType );
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenSettingsUi::MopSupplyObject
+// Supplies skinned mop object
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CCalenSettingsUi::MopSupplyObject( TTypeUid aId )
+    {
+    TRACE_ENTRY_POINT;
+
+    if( aId.iUid == MAknsControlContext::ETypeId )
+        {
+        ASSERT( iBgContext );
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+
+    TRACE_EXIT_POINT;
+    return CAknDialog::MopSupplyObject( aId );
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::CountComponentControls
+// Returns the number of controls contained in this control.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+TInt CCalenSettingsUi::CountComponentControls() const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return 1;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::ComponentControl
+// Returns the control contained in this control.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCoeControl* CCalenSettingsUi::ComponentControl( TInt /*aIndex*/ ) const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iListBox;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::OnCmdHelpL
+// Handles Help command.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::OnCmdHelpL()
+    {
+    TRACE_ENTRY_POINT;
+
+    if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        {
+        HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(),
+                                            iAvkonAppUi->AppHelpContextL() );
+        }   
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenSettingsUi::HandleListBoxEventL
+// Control Passed to list box to handle the commands. 
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenSettingsUi::HandleListBoxEventL(CEikListBox* /*aListBox*/, 
+                                           TListBoxEvent aEventType)
+    {
+    TRACE_ENTRY_POINT;
+    switch( aEventType )
+        {
+         //Single click integration
+        case EEventItemSingleClicked:
+        case EEventEnterKeyPressed:
+            {
+            if(!iPageStatus )
+                {
+                iContainer->HandleListBoxSelectionL( EAknSoftkeyEdit, iPageStatus );
+                }
+            break;
+            }
+    		default:
+            break;
+        }
+    }
+// End of file