basiclocationinfodisplay/blid/ui/src/CBlidMainControl.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:27 +0100
branchRCL_3
changeset 18 870918037e16
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
 * 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:  Provides blid startup view class methods.
 *
 */

// SYSTEM INCLUDES
#include <aknmessagequerydialog.h> //CAknMessageQueryDialog
#include <StringLoader.h>
#include <aknconsts.h>
#include <blid.rsg>
#include <akntitle.h> 
#include <aknnavide.h>
#include <eikspane.h>
#include <aknlayoutscalable_apps.cdl.h>
#include <layoutmetadata.cdl.h>
#include <blid.mbg>

// HTK includes
#include <alf/alfenv.h>
#include <alf/alfanchorlayout.h>
#include <alf/alftextvisual.h>
#include <alf/alftextstyle.h>
#include <alf/alfborderbrush.h>
#include <alf/alfbrusharray.h>
#include <alf/alfevent.h>
#include <alf/alftransformation.h>
#include <alf/alftexture.h>
#include <alf/alfdecklayout.h>
#include <alf/alfutil.h>
#include <alf/alfimageloaderutil.h>
#include <alf/alfimagevisual.h>

#include "Blid.hrh"

// USER INCLUDES
#include "CBlidMainControl.h"
#include "CBlidEng.h"
#include "CBlidDocument.h"
#include "MBlidLocation.h"
#include "CBlidBaseView.h"
#include "CBlidBaseContainer.h"
#include "bliduiconsts.h"
#include "BlidNotes.h"
#include "CBlidLocSettingLauncher.h"
#include "Debug.h"

TInt CBlidMainControl::iPSYTimeoutCount = 0;

TInt MessageQueryCallBack(TAny* aPtr);

const TInt KTimerValue = 200000;

// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CBlidMainControl::NewL()
// Two phased constructor
// ---------------------------------------------------------
//
CBlidMainControl* CBlidMainControl::NewL(CAlfEnv& aEnv, const TRect& aRect,
        CBlidBaseView& aView)
    {
    CBlidMainControl* self = new (ELeave) CBlidMainControl(aEnv, aView);
    CleanupStack::PushL(self);
    self->ConstructL(aRect);
    CleanupStack::Pop(self);
    return self;
    }

// ---------------------------------------------------------
//CBlidMainControl::CBlidMainControl()
// First phase constructor, can not leave
// ---------------------------------------------------------
//
CBlidMainControl::CBlidMainControl(CAlfEnv& aEnv, CBlidBaseView& aView) :
    CAlfControl(), iEnv(aEnv), iView(aView), isAccessoryRequired(EFalse)
    {
    iOnlineMode = EFalse;
    }

// ---------------------------------------------------------
// CBlidMainControl::ConstructL()
// Second phase constructor, may leave
// ---------------------------------------------------------
//
void CBlidMainControl::ConstructL(const TRect& /*aRect*/)
    {
    CAlfControl::ConstructL(iEnv);

    iMainLayout = CAlfAnchorLayout::AddNewL(*this);
    iSearchTextVisual = CAlfTextVisual::AddNewL(*this, iMainLayout);
    iAnimationVisual = CAlfImageVisual::AddNewL(*this, iMainLayout);

    iDisplayIcon = 1;
    iPeriodic = CPeriodic::NewL(0); // neutral priority 
    if (!iPeriodic->IsActive())
        {
        iPeriodic->Start(TTimeIntervalMicroSeconds32(KTimerValue),
                TTimeIntervalMicroSeconds32(KTimerValue), TCallBack(Tick,
                        this));
        }

    UpdateDisplayLayoutL();
    CreateSearchingTextL();
    CreateAnimationL();
    UpdateAnimation();

    iLauncher = NULL;
    isSettingsLaunched = EFalse;

    //start requesting
    CBlidEng* engine = iView.BlidDocument()->Engine();
    iLocation = engine->LocationModel();
    }

// ---------------------------------------------------------
// CBlidMainControl::Tick()
// Timer callback function, to update image in animation
// ---------------------------------------------------------
//
TInt CBlidMainControl::Tick(TAny* aObject)
    {
    ((CBlidMainControl*) aObject)->UpdateAnimation(); // cast, and call non-static function
    return KErrNone;
    }

// ---------------------------------------------------------
// CBlidMainControl::CreateSearchingTextL()
// Function to create search text visual
// ---------------------------------------------------------
//
void CBlidMainControl::CreateSearchingTextL()
    {
    /* Layout Hierarchy
     main_blid2_pane -> blid2_search_pane -> blid2_search_pane_t1
     */

    // Get the text font

    TInt typefaceStyleId = iEnv.TextStyleManager().CreatePlatformTextStyleL(
            EAknLogicalFontPrimarySmallFont, EAlfTextStyleNormal);
    CAlfTextStyle* style1 =
            iEnv.TextStyleManager().TextStyle(typefaceStyleId);
    style1->SetBold(ETrue);
    // Set the text font size in pixel
    style1->SetTextPaneHeightInPixels(26, ETrue);

    TRgb rgb;
    // Fetch the skin color 
    AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), rgb,
            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG1);

    iSearchTextVisual->SetColor(rgb);
    HBufC* noteText = StringLoader::LoadLC(R_BLID_NOTE_SEARCHING_ANIMATION,
            CEikonEnv::Static());
    iSearchTextVisual->SetTextL(*noteText);
    iSearchTextVisual->SetTextStyle(style1->Id());
    iSearchTextVisual->SetAlign(EAlfAlignHCenter, EAlfAlignVCenter);
    CleanupStack::PopAndDestroy(noteText); //noteText

    }

// ---------------------------------------------------------
// CBlidMainControl::CreateAnimationL()
// Creates image visuals for animation
// ---------------------------------------------------------
//
void CBlidMainControl::CreateAnimationL()
    {
    /* Layout Hierarchy
     main_blid2_pane -> blid2_search_pane -> blid2_search_pane_g1
     */

    // code to load svg icon
    MAlfBitmapProvider* provider = NULL;

    // first creste the image loader utils and then call SetSize.	
    iView.ImageLoaderUtils()->SetSize(iAnimationRect.Size());

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_01, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_01_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture1 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture1);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_02, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_02_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture2 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture2);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_03, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_03_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture3 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture3);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_04, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_04_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture4 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture4);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_05, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_05_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture5 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture5);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_06, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_06_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture6 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture6);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_07, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_07_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture7 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture7);

    // then create the bitmap provider  
    provider = iView.ImageLoaderUtils()->CreateImageLoaderL(
            KAknsIIDQgnGrafBlidStartup, // svg icon skin constant id defiened in Aknsconstant.h file
            iView.ImagePathName(), // mif file name with path.
            EMbmBlidQgn_graf_blid_startup_08, // bitmap id defiened in mbg file
            EMbmBlidQgn_graf_blid_startup_08_mask); // bitmap mask id defiened in mbg file
    // now using that bitmap provider create the texture.
    CAlfTexture & texture8 = iEnv.TextureManager().CreateTextureL(
            KAlfAutoGeneratedTextureId, provider, EAlfTextureFlagDefault);
    iTextures.Append(&texture8);

    }

// ---------------------------------------------------------
// CBlidMainControl::UpdateAnimation
// updates the animation image
// ---------------------------------------------------------
//
void CBlidMainControl::UpdateAnimation()
    {
    if (KNumOfStartUpIcon > iDisplayIcon)
        {
        iDisplayIcon++;
        }
    else
        {
        iDisplayIcon = 1;
        }
    iAnimationVisual->SetImage(TAlfImage(*iTextures[iDisplayIcon - 1]));//N   
    }

// ----------------------------------------------------
// CBlidMainControl::~CBlidMainControl
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CBlidMainControl::~CBlidMainControl()
    {
    iTextures.Reset();
    iTextures.Close();
    delete iLauncher;
    delete iHeadPaneText;
    delete iMsgQueryText;
    delete iLinkText;
    delete iMsgQText;
    delete iPeriodic;
    }

// ---------------------------------------------------------
// CBlidMainControl::UpdateL
// Updates the view after getting update from location model
// ---------------------------------------------------------
//
void CBlidMainControl::UpdateL()
    {
    TInt result = 0;
    DEBUG1(" CBlidMainControl::UpdateL iErrorCode ::%d", iErrorCode );

    if (!iView.IsSatViewActive() && iOnlineMode)
        {

        if (iView.IsForeGroundApp())
            {
            iView.ActivateSatelliteViewL();
            }
        }
    TInt retVal = iLocation->CheckGPSAvailability();
    // Check GPS device availability
    DEBUG1(" CBlidMainControl::CheckGPSAvailability code ::%d", retVal );
    switch (iErrorCode)
        {
        case KErrTimedOut:
            {
            if (retVal == 1)
                {
                /* 
                 GPS device connected but position information
                 available but not of good quality
                 */
                if (iView.IsForeGroundApp())
                    {
                    iView.ActivateSatelliteViewL();
                    }
                }
            break;
            }
        case KErrNotFound:
            // No module (PSY) selected or invalid PSY
                {
                iOnlineMode = EFalse;
                if (iView.IsForeGroundApp())
                    {
                    iLocation->StopRequesting();
                    TCallBack callback(MessageQueryCallBack, this);
                    result
                            = DispMsgQueryWithLinkL(R_BLID_NOGPS_FOUND,
                                    R_BLID_NOGPS_FOUND_TEXT,
                                    R_BLID_SELECT_POSITIONING_METHOD, ETrue,
                                    callback);
                    if (result == EBlidSoftkeyRetry)
                        {
                        iLocation->StartRequesting();
                        }
                    else if (result == EAknSoftkeyOk)
                        {
                        iView.ExitMainApplicationL(EEikCmdExit);
                        }
                    }
                break;
                }
            case KPositionPartialUpdate:
                {
                if (iView.IsForeGroundApp())
                    {
                    iView.ActivateSatelliteViewL();
                    }
                break;
                }
            case KErrArgument:
            // The positioning module is unable to support the requested type
            default:
                {
                iOnlineMode = EFalse;

                if (retVal == 0)
                    {
                    if (iLocation->IsSatCapablePsyAvailable())
                        {
                        iLocation->StopRequesting();
                        iOnlineMode = EFalse;
                        TCallBack callback(MessageQueryCallBack, this);
                        result = DispMsgQueryWithLinkL(R_BLID_NOPSY_ENABLED,
                                R_BLID_ERROR_NO_PSY,
                                R_BLID_SELECT_POSITIONING_METHOD, ETrue,
                                callback);
                        if (result == EBlidSoftkeyRetry)
                            {
                            iLocation->StartRequesting();
                            }
                        else if (result == EAknSoftkeyOk)
                            {
                            iView.ExitMainApplicationL(EEikCmdExit);
                            }
                        }
                    // no GPS device note
                    // GPS un-available
                    else if (iView.IsForeGroundApp())
                        {
                        iLocation->StopRequesting();
                        TCallBack callback(MessageQueryCallBack, this);
                        isAccessoryRequired = ETrue;
                        result = DispMsgQueryWithLinkL(R_BLID_NOGPS_FOUND,
                                R_BLID_NOGPS_AVAILABLE_TEXT,
                                R_BLID_SELECT_POSITIONING_METHOD, EFalse,
                                callback);
                        if (result == EAknSoftkeyOk)
                            {
                            iView.ExitMainApplicationL(EEikCmdExit);
                            }
                        }
                    else
                        {
                        BlidNotes::iGPSUnavailableDisplayed = ETrue;
                        }
                    CBlidBaseContainer::SetGPSAvailability(EFalse);
                    }
                break;

            }
        }
    }

// ----------------------------------------------------
// CBlidMainControl::MakeTitleL
// Sets the title to string represented by resource
// ----------------------------------------------------
//
void CBlidMainControl::MakeTitleL(TInt aResourceText)
    {
    HBufC* buffer = StringLoader::LoadLC(aResourceText);
    CAknTitlePane* title =
            static_cast<CAknTitlePane*> (StatusPane()-> ControlL(TUid::Uid(
                    EEikStatusPaneUidTitle)));
    CleanupStack::Pop(); //buffer
    title->SetText(buffer); // Takes ownership of buf
    }

// ----------------------------------------------------
// CBlidMainControl::StatusPane
// Returns the status pane
// ----------------------------------------------------
//
CEikStatusPane* CBlidMainControl::StatusPane() const
    {
    return CEikonEnv::Static()->AppUiFactory()->StatusPane();
    }

// ----------------------------------------------------
// CBlidMainControl::SetErrorCode
// Sets the error code
// ----------------------------------------------------
//
void CBlidMainControl::SetErrorCode(const TInt aErrorCode)
    {
    iErrorCode = aErrorCode;
    }

// ----------------------------------------------------
// CBlidMainControl::SetOnlineMode
// Sets the online mode
// ----------------------------------------------------
//
void CBlidMainControl::SetOnlineMode(const TBool aOnlineMode)
    {
    iOnlineMode = aOnlineMode;
    }

// ----------------------------------------------------
// CBlidMainControl::DispMsgQueryWithLinkL()
// Displays the message query with a link
// ----------------------------------------------------
//
TInt CBlidMainControl::DispMsgQueryWithLinkL(TInt aHeadingText,
        TInt aMsgQueryText, TInt aLinkText, TBool aLinkShow,
        TCallBack aCallBack)
    {
    CEikonEnv* env = CEikonEnv::Static();
    if (!iHeadPaneText)
        {
        iHeadPaneText = env->AllocReadResourceL(aHeadingText);
        }

    if (!iMsgQueryText)
        {
        iMsgQueryText = env->AllocReadResourceL(aMsgQueryText);
        }

    if (!iLinkText)
        {
        iLinkText = env->AllocReadResourceL(aLinkText);
        }
    if (!iMsgQText)
        {
        if (aLinkShow != EFalse)
            {
            iMsgQText = HBufC::NewL(iMsgQueryText->Length()
                    + KNewLine().Length() + KOpeningLinkTag().Length()
                    + iLinkText->Length() + KClosingLinkTag().Length());
            }
        else
            {
            iMsgQText = HBufC::NewL(iMsgQueryText->Length()
                    + KNewLine().Length() + KOpeningLinkTag().Length());
            }
        }

    iMsgQText->Des().Copy(*iMsgQueryText);
    iMsgQText->Des().Append(KNewLine);
    if (!isAccessoryRequired)
        {
        iMsgQText->Des().Append(KOpeningLinkTag);
        iMsgQText->Des().Append(*iLinkText);
        iMsgQText->Des().Append(KClosingLinkTag);
        }
    else
        {
        iMsgQText->Des().Append(_L( " "));
        }
    //////////////////////////////////////////////////////
    CAknMessageQueryDialog* msgDlg = CAknMessageQueryDialog::NewL(*iMsgQText);

    // if we remove this if part it will give CONE8 panic
    if (iDialog)
        {
        delete iDialog;
        iDialog = NULL;
        }

    iDialog = msgDlg;

    msgDlg->PrepareLC(R_BLID_MESSAGE_QUERY_DIALOG); // Pushed dialog is popped inside RunLD

    msgDlg->Heading()->SetTextL(*iHeadPaneText);

    msgDlg->SetLink(aCallBack);

    if (!isAccessoryRequired)
        {
        msgDlg->ButtonGroupContainer().SetCommandSetL(
                R_BLID_INFOPOPUP_SOFTKEYS_RETRY__EXIT);
        }
    else
        {
        msgDlg->ButtonGroupContainer().SetCommandSetL(
                R_BLID_INFOPOPUP_SOFTKEYS_EXIT);
        }
    isDialogLaunched = ETrue;
    TInt retval = msgDlg->RunLD();
    if (isDialogLaunched)
        {
        msgDlg = NULL;
        iDialog = NULL;
        isDialogLaunched = EFalse;
        return retval;
        }
    return -1;
    }

// ----------------------------------------------------
// CBlidMainControl::CreateNaviPaneL
// Creates navigation pane
// ----------------------------------------------------
//
void CBlidMainControl::CreateNaviPaneL()
    {
    CEikStatusPane* sp = CEikonEnv::Static()->AppUiFactory()->StatusPane();
    // Fetch pointer to the default navi pane control
    CAknNavigationControlContainer* naviPane =
            static_cast<CAknNavigationControlContainer*> (sp->ControlL(
                    TUid::Uid(EEikStatusPaneUidNavi)));

    naviPane->PushDefaultL(EFalse);
    }

// ----------------------------------------------------
// CBlidMainControl::LaunchPositioningSettingsViewL
// Launches positioning settings view
// ----------------------------------------------------
//
void CBlidMainControl::LaunchPositioningSettingsViewL()
    {
    if (!iLauncher)
        {
        iLauncher = CBlidLocSettingsLauncher::NewL();
        }
    iLauncher->SetControl(this);
    isSettingsLaunched = ETrue;
    iLauncher->LaunchL();
    }

// ----------------------------------------------------
// CBlidMainControl::DeleteDialogResource
// Seletes the dialog resources
// ----------------------------------------------------
//
void CBlidMainControl::DeleteDialogResource()
    {
    if (isSettingsLaunched)
        {
        delete iHeadPaneText;
        iHeadPaneText = NULL;

        delete iMsgQueryText;
        iMsgQueryText = NULL;

        delete iLinkText;
        iLinkText = NULL;

        delete iMsgQText;
        iMsgQText = NULL;
        }
    }

// ----------------------------------------------------
// CBlidMainControl::UpdateDisplayLayoutL
// Updates the display layout in response to a change in app resource
// ----------------------------------------------------
//
void CBlidMainControl::UpdateDisplayLayoutL()
    {
    /* Layout Hierarchy
     main_blid2_pane -> blid2_search_pane -> blid2_search_pane_t1
     
     main_blid2_pane -> blid2_search_pane -> blid2_search_pane_g1
     */

    TAknLayoutRect mainBlid2Pane;
    TAknLayoutRect blid2SearchPane;
    TAknLayoutRect blid2SearchPaneG1;
    TAknLayoutText blid2SearchPaneT1;
    //TRect animationRect;	
    TInt variety;

    if (Layout_Meta_Data::IsLandscapeOrientation())
        {
        variety = 1;
        }
    else
        {
        variety = 0;
        }
    /////////////// recalculate text rect /////////////////////////
    TRect rect;
    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
    mainBlid2Pane.LayoutRect(rect,
            AknLayoutScalable_Apps::main_blid2_pane().LayoutLine());

    blid2SearchPane.LayoutRect(mainBlid2Pane.Rect(),
            AknLayoutScalable_Apps::blid2_search_pane(variety).LayoutLine());

    blid2SearchPaneT1.LayoutText(
            blid2SearchPane.Rect(),
            AknLayoutScalable_Apps::blid2_search_pane_t1(variety).LayoutLine());

    /////////////// recalculate animation rect /////////////////////////
    blid2SearchPaneG1.LayoutRect(
            blid2SearchPane.Rect(),
            AknLayoutScalable_Apps::blid2_search_pane_g1(variety).LayoutLine());
    iAnimationRect = blid2SearchPaneG1.Rect();

    TAlfRealPoint topTextPoint(blid2SearchPaneT1.TextRect().iTl);
    TAlfRealPoint bottomTextPoint(blid2SearchPaneT1.TextRect().iBr);

    //Anchor for searching Text	
    iMainLayout->SetAnchor(EAlfAnchorTopLeft, 0, EAlfAnchorOriginLeft,
            EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute,
            EAlfAnchorMetricAbsolute, TAlfTimedPoint(topTextPoint.iX,
                    topTextPoint.iY));
    iMainLayout->SetAnchor(EAlfAnchorBottomRight, 0, EAlfAnchorOriginLeft,
            EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute,
            EAlfAnchorMetricAbsolute, TAlfTimedPoint(bottomTextPoint.iX,
                    bottomTextPoint.iY));

    TAlfRealPoint topAnimationPoint(iAnimationRect.iTl);
    TAlfRealPoint bottomAnimationPoint(iAnimationRect.iBr);

    //Anchor for animation	
    iMainLayout->SetAnchor(EAlfAnchorTopLeft, 1, EAlfAnchorOriginLeft,
            EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute,
            EAlfAnchorMetricAbsolute, TAlfTimedPoint(topAnimationPoint.iX,
                    topAnimationPoint.iY));
    iMainLayout->SetAnchor(EAlfAnchorBottomRight, 1, EAlfAnchorOriginLeft,
            EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute,
            EAlfAnchorMetricAbsolute, TAlfTimedPoint(bottomAnimationPoint.iX,
                    bottomAnimationPoint.iY));

    }

// -----------------------------------------------------------------------------
// CBlidMainControl::MessageQueryCallBack()
// Called when link is clicked on message query dialog
// -----------------------------------------------------------------------------
//
TInt MessageQueryCallBack(TAny* aPtr)
    {
    CBlidMainControl* ptr = static_cast<CBlidMainControl*> (aPtr);
    if (ptr)
        {
        TRAP_IGNORE( ptr->LaunchPositioningSettingsViewL() );
        if (ptr->iDialog)
            {
            TRAP_IGNORE( ptr->iDialog->ProcessCommandL( 3001 ) );
            }
        }
    return KErrNone;
    }
//End Of File