landmarksui/app/src/CLmkByLmContainer.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:48:36 +0300
branchRCL_3
changeset 16 8173571d354e
parent 0 522cd55cc3d7
permissions -rw-r--r--
Revision: 201030 Kit: 201033

/*
 * Copyright (c) 2002-2010 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 LM compass view's container class methods.
 *
 */

// INCLUDE FILES
#include <aknlists.h>
#include <aknview.h>
#include <eikmenub.h>
#include <aknsfld.h>
#include <layoutmetadata.cdl.h> // To Check TOUCH Support
// For RD_AVKON_UNBRANCH
#include <bldvariant.hrh>
#include <AknDef.h>
#include <landmarks.rsg>
#include "CLmkAppUi.h"
#include "CLmkUiUtils.h"
#include "CLmkSender.h"
#include <csxhelp/lm.hlp.hrh>
#include "CLmkByLmView.h"
#include "CLmkByLmContainer.h"
#include "CLmkAppLmSelectorImpl.h"
#include "landmarks.hrh"
#include <lmkui.rsg>
#include "Debug.h"

// ----------- Touch feedback additions start
#ifdef RD_TACTILE_FEEDBACK
#include <touchfeedback.h>
#endif //RD_TACTILE_FEEDBACK
// ----------- Touch feedback additions end

// ================= MEMBER FUNCTIONS =======================
// ----------------------------------------------------------------------------
// CLmkByLmContainer::NewL
// ----------------------------------------------------------------------------
//
CLmkByLmContainer* CLmkByLmContainer::NewL(MLmkKeyProcessor& aKeyProcessor,
        MObjectProvider* aParent, const TRect& aRect, CAknView& aView)
    {
    CLmkByLmContainer* self = new (ELeave) CLmkByLmContainer(aKeyProcessor,
            aView);
    CleanupStack::PushL(self);
    self->SetMopParent(aParent);
    self->ConstructL(aRect);
    CleanupStack::Pop(); // self
    return self;
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::ConstructL
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::ConstructL(const TRect& aRect)
    {
    CLmkLbWithFilterContainer::ConstructL(aRect);
    iFindBox->SetObserver(this);
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::CLmkByLmContainer
// ----------------------------------------------------------------------------
//
CLmkByLmContainer::CLmkByLmContainer(MLmkKeyProcessor& aKeyProcessor,
        CAknView& aView) :
    CLmkLbWithFilterContainer(aKeyProcessor, KLM_HLP_LM_BY_NAME),
            iView(aView)
    {
    iIsEditorOpened = EFalse;
    iHandlePointerEvent = ETrue;
    }
// ----------------------------------------------------------------------------
// CLmkByLmContainer::~CLmkByLmContainer
// ----------------------------------------------------------------------------
//
CLmkByLmContainer::~CLmkByLmContainer()
    {
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::SetupTitlePaneL
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::SetupTitlePaneL()
    {
    CLmkUiUtils::ChangeTitlePaneL( R_LMK_BYLM_VIEW_TITLE);
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::SetupSelectorAndListL
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::SetupSelectorAndListL(CPosLandmarkDatabase& aDb,
        CLmkSender& aSender)
    {
    iSelector = CLmkAppLmSelectorImpl::NewL(aDb, aSender, ETrue);
    iSelector->SetMskObserver(this);
    iListBox = &(iSelector->CreateListBoxL(this, EAknCtSingleGraphicListBox,
#ifdef RD_SCALABLE_UI_V2
            EAknListBoxStylusMarkableList,
#else
            EAknListBoxMarkableList,
#endif //RD_SCALABLE_UI_V2
            R_LMK_EMPTY_NO_LANDMARKS, R_LMK_GUIDE_NEW_LANDMARK));
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::SetupNaviPaneL
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::SetupNaviPaneL()
    {
    iNaviDeco = CreateNaviPaneL(R_LMK_TAB_GROUP);
    ActivateTabL(*iNaviDeco, ELmkByLmView);
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::OfferKeyEventL
// ----------------------------------------------------------------------------
//
TKeyResponse CLmkByLmContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
        TEventCode aType)
    {
    DEBUG( CLmkByLmContainer::OfferKeyEventL entered );
    DEBUG2( aKeyEvent.iCode=%d aKeyEvent.iScanCode=%d,
            aKeyEvent.iCode,
            aKeyEvent.iScanCode
    );
    DEBUG3( aKeyEvent.iModifiers=%d aKeyEvent.iRepeats=%d aType=%d,
            aKeyEvent.iModifiers,
            aKeyEvent.iRepeats,
            aType
    );

    TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift)
            || (aKeyEvent.iModifiers & EModifierLeftShift)
            || (aKeyEvent.iModifiers & EModifierRightShift);

    if (aKeyEvent.iScanCode == EStdKeyUpArrow || aKeyEvent.iScanCode
            == EStdKeyDownArrow)
        {
        if (aType == EEventKey)
            {
            if (iListBox->OfferKeyEventL(aKeyEvent, aType) == EKeyWasConsumed)
                {
                if (shiftKeyPressed)
                    UpdateMskContainerL();
                return EKeyWasConsumed;
                }
            }
        return EKeyWasNotConsumed;
        }

    CLmkAppSelectorImplBase& selector = SelectorImpl();
    TInt markedCount(selector.ListMarkedItemCountL());
    TInt visibleCount(selector.ListVisibleItemCount());
    DEBUG1( CLmkByLmContainer::OfferKeyEventL markedCount=%d,markedCount );
    DEBUG1( CLmkByLmContainer::OfferKeyEventL visibleCount=%d,visibleCount );

    if (aKeyEvent.iCode == EKeyOK && !shiftKeyPressed && aType == EEventKey)
        {
        DEBUG( CLmkByLmContainer::OfferKeyEventL EKeyOK );
        if (visibleCount > 0 && markedCount < 1)
            {
            DEBUG( CLmkByLmContainer::OfferKeyEventL EKeyOK ELmkCmdOpenLm );
            // Launch landmark viewer here
            selector.ProcessCommandL(ELmkCmdOpenLm);
            iIsEditorOpened = ETrue;
            return EKeyWasConsumed;
            }
        else
            {
            DEBUG( CLmkByLmContainer::OfferKeyEventL EKeyOK show menubar );
            CEikMenuBar* menubar =
                    static_cast<CAknViewAppUi*> (iAvkonAppUi)->View(
                            TUid::Uid(ELmkByLmView))->MenuBar();
            if (menubar)
                {
                menubar->SetMenuTitleResourceId(R_LMK_OK_MENUBAR);

                menubar->StopDisplayingMenuBar();
                TRAPD(err, menubar->TryDisplayMenuBarL());
                DEBUG1( CLmkByLmContainer::OfferKeyEventL menubar->TryDisplayMenuBarL() = %d,err );
                // set ordinary menubar back even in case of error
                menubar->SetMenuTitleResourceId(R_LMK_BYLM_MENUBAR);
                User::LeaveIfError( err);
                }

            return EKeyWasConsumed;
            }
        }
    else if (shiftKeyPressed && aType == EEventKeyUp)
        {
        UpdateMskContainerL();
        }
    else
        {
        DEBUG( CLmkByLmContainer::OfferKeyEventL send event key & other keys handling );
        // 'send' eveny key processing        
        if (visibleCount > 0 && markedCount < 1)
            {
            // Check TOUCH Support
            if (aKeyEvent.iCode == EKeyPhoneSend
                    && (!Layout_Meta_Data::IsPenEnabled()))
                {
                selector.ProcessCommandL(ELmkCmdCall);
                }
            }
        if (iIsEditorOpened)
            {
            DEBUG( CLmkByLmContainer::OfferKeyEventL iIsEditorOpened entered );
            SelectorImpl().HandleListProviderEvent(ELmkEventListReady);
            }
        }
    iIsEditorOpened = EFalse;
    DEBUG( CLmkByLmContainer::OfferKeyEventL end );
    return CLmkLbWithFilterContainer::OfferKeyEventL(aKeyEvent, aType);
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::HandleControlEventL()
// Called by framework when the view size is changed
// ----------------------------------------------------------------------------
//

void CLmkByLmContainer::HandleControlEventL(CCoeControl* aControl,
        TCoeEvent aEventType)
    {
    if (aEventType == EEventStateChanged && aControl == iFindBox)
        {
        SelectorImpl().ProcessCommandL(ELmkCmdFindBoxSearchAfresh);
        }
    }

// -----------------------------------------------------------------------------
//CLmkByLmContainer::HandleResourceChange
// -----------------------------------------------------------------------------
//
void CLmkByLmContainer::HandleResourceChange(TInt aType)
    {
    CCoeControl::HandleResourceChange(aType);
    if (aType == KEikDynamicLayoutVariantSwitch)
        {
        (static_cast<CLmkByLmView *> (&iView))->Update();
        }

    if (iListBox)
        {
        iListBox->DrawNow();
        }
    if (iFindBox && iFindBox->IsVisible())
        {
        iFindBox->DrawNow();
        }
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::GetSelectedLandmarksL
// ----------------------------------------------------------------------------
//
TInt CLmkByLmContainer::GetSelectedLandmarksL(
        RPointerArray<CPosLandmark> &aArray)
    {
    return (static_cast<CLmkAppLmSelectorImpl*> (iSelector))->GetSelectedLandmarksL(
            aArray);
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::IsLandmarkEmptyL
// ----------------------------------------------------------------------------
//
TBool CLmkByLmContainer::IsLandmarkDataEmptyL(CPosLandmark* aLandmark)
    {
    return (static_cast<CLmkAppLmSelectorImpl*> (iSelector))->IsLandmarkDataEmptyL(
            aLandmark);
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::FocusChanged()
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::FocusChanged(TDrawNow aDrawNow)
    {
    if (iListBox)
        {
        iListBox->SetFocus(IsFocused(), aDrawNow);
        }
    if (iFindBox && iFindBox->IsVisible())
        {
        iFindBox->SetFocus(IsFocused(), aDrawNow);
        }
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::IsEditorOpened()
// ----------------------------------------------------------------------------
//
TBool CLmkByLmContainer::IsEditorOpened()
    {
    return iIsEditorOpened;
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::SetEditorOpenedBool()
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::SetEditorOpenedBool(TBool aBoolvalue)
    {
    iIsEditorOpened = aBoolvalue;
    }

// ----------------------------------------------------------------------------
// CLmkByLmContainer::UpdateMskContainerL()
// ----------------------------------------------------------------------------
//
void CLmkByLmContainer::UpdateMskContainerL()
    {
    CLmkBaseView* view = reinterpret_cast<CLmkBaseView*> (&iView);
    view->UpdateMskViewL(ResolveMskDisplayItem());
    }

// ---------------------------------------------------------
// CLmkByLmContainer::MenuBar
// ---------------------------------------------------------
//
CEikMenuBar* CLmkByLmContainer::MenuBar()
    {
    return ViewAppUi()->View(TUid::Uid(ELmkByLmView))->MenuBar();
    }

// ---------------------------------------------------------
// CLmkByLmContainer::ContextSpecificMenuBar
// ---------------------------------------------------------
//
TInt CLmkByLmContainer::ContextSpecificMenuBar()
    {
    return R_LMK_OK_MENUBAR;
    }

// ---------------------------------------------------------
// CLmkByLmContainer::SetHandlePointerEventBool
// ---------------------------------------------------------
//
void CLmkByLmContainer::SetHandlePointerEventBool(TBool aBoolValue)
    {
    iHandlePointerEvent = aBoolValue;
    }

#ifdef RD_SCALABLE_UI_V2
// ---------------------------------------------------------
// CLmkByLmContainer::HandlePoineteventL
// ---------------------------------------------------------
//
void CLmkByLmContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
    {
    CCoeControl::HandlePointerEventL(aPointerEvent);
    }

#endif//RD_SCALABLE_UI_V2
// End of File