--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/app/src/CLmkLbWithFilterContainer.cpp Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,287 @@
+/*
+* 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: This file contains methods for implementing container with
+* find/searchbox
+*
+*/
+
+// INCLUDE FILES
+
+#include <aknlists.h>
+#include <aknsfld.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include "CLmkDocument.h"
+#include "landmarks.hrh"
+#include "CLmkAppUi.h"
+#include "CLmkAppSelectorImplBase.h"
+#include "CLmkLbWithFilterContainer.h"
+#include <lmkerrors.h>
+#include "Debug.h"
+
+// CONSTANTS
+namespace {
+#if defined(_DEBUG)
+_LIT( KPanicText, "CLmkLbWithFilterContainer" );
+
+void Panic( TPanicCode aReason )
+ {
+ User::Panic( KPanicText, aReason );
+ }
+#endif
+} // namespace
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::CLmkBaseContainer
+// ----------------------------------------------------------------------------
+//
+CLmkLbWithFilterContainer::CLmkLbWithFilterContainer(
+ MLmkKeyProcessor& aKeyProcessor,
+ const TDesC& aHelpContext )
+ :CLmkBaseContainer( aKeyProcessor, aHelpContext )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CLmkLbWithFilterContainer::ConstructL( const TRect& aRect )
+ {
+ CLmkBaseContainer::BaseConstructL();
+ CreateWindowL();
+
+ // Get the skin instance
+ iSkinInstance = AknsUtils::SkinInstance();
+
+ // Create background control context for skinning the background
+ iBackgroundSkinContext = CAknsBasicBackgroundControlContext::NewL(
+ KAknsIIDQsnBgAreaMain, aRect, ETrue );
+
+ iIsNeedToReDraw = ETrue;
+
+ CLmkAppUi* lmkAppUi = static_cast<CLmkAppUi*>( ViewAppUi() );
+ CPosLandmarkDatabase& db = lmkAppUi->Document().LmDbL();
+ CLmkSender& sender = lmkAppUi->LmkSender();
+ SetupSelectorAndListL( db, sender );
+
+ SetupTitlePaneL();
+ SetupNaviPaneL();
+ SetupFindBoxL();
+
+ // enable scroll arrows
+ CEikScrollBarFrame* sBFrame = iListBox->CreateScrollBarFrameL( ETrue );
+ sBFrame->SetScrollBarVisibilityL( CEikScrollBarFrame::EOn,
+ CEikScrollBarFrame::EAuto );
+
+ SetRect( aRect );
+ ActivateL();
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::~CLmkLbWithFilterContainer
+// ----------------------------------------------------------------------------
+//
+CLmkLbWithFilterContainer::~CLmkLbWithFilterContainer()
+ {
+ delete iNaviDeco;
+ delete iFindBox;
+ delete iBackgroundSkinContext;
+ }
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::ListBox()
+// ----------------------------------------------------------------------------
+//
+CEikTextListBox& CLmkLbWithFilterContainer::ListBox()
+ {
+ __ASSERT_DEBUG( iListBox, Panic( KLmkPanicNullMember ) );
+ return *iListBox;
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::OfferKeyEventL
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CLmkLbWithFilterContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ DEBUG( CLmkLbWithFilterContainer::OfferKeyEventL start );
+ TKeyResponse result( EKeyWasNotConsumed );
+ if ( ( aType == EEventKey || aType == EEventKeyUp) )
+ {
+ if(( iFindBox->TextLength() > 0 ||
+ aKeyEvent.iCode != EKeyBackspace ) && iFindBox->IsVisible())
+ {
+ result = iFindBox->OfferKeyEventL(aKeyEvent, aType);
+ }
+ else if( aKeyEvent.iCode == EKeyBackspace )
+ {
+ CLmkAppSelectorImplBase& selector = SelectorImpl();
+ TInt markedCount( selector.ListMarkedItemCountL() );
+
+ DEBUG1( CLmkLbWithFilterContainer::OfferKeyEventL markedCount = %d,markedCount);
+ CEikMenuBar* menuBar = MenuBar();
+ if( menuBar )
+ {
+ if( MenuBar()->ItemSpecificCommandsEnabled())
+ {
+ return EKeyWasConsumed;
+ }
+ }
+ if( markedCount <= 0)
+ {
+ return EKeyWasConsumed;
+ }
+ selector.ProcessCommandL( ELmkCmdDeleteLm );
+ return EKeyWasConsumed;
+ }
+ }
+ if ( result == EKeyWasNotConsumed )
+ {
+ result = CLmkBaseContainer::OfferKeyEventL( aKeyEvent, aType );
+ if( aKeyEvent.iScanCode == EStdKeyHash )
+ {
+ UpdateMskContainerL();
+ }
+ }
+ DEBUG1( CLmkLbWithFilterContainer::OfferKeyEventL End result=%d,result );
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::SizeChanged()
+// Called by framework when the view size is changed
+// ----------------------------------------------------------------------------
+//
+void CLmkLbWithFilterContainer::SizeChanged()
+ {
+ __ASSERT_DEBUG( iListBox, Panic( KLmkPanicNullMember ) );
+ const TRect rect(Rect());
+
+ AknFind::HandleFixedFindSizeChanged(
+ this,
+ static_cast<CAknColumnListBox*>( iListBox ),
+ iFindBox );
+
+ if (iListBox && iFindBox && iFindBox->IsVisible())
+ {
+ AknLayoutUtils::LayoutControl(iListBox, rect,
+ AKN_LAYOUT_WINDOW_list_gen_pane(1));
+ AknLayoutUtils::LayoutControl(iFindBox, rect,
+ AKN_LAYOUT_WINDOW_find_pane);
+ if (iFindBox->IsVisible() && iListBox->IsVisible())
+ {
+ // The correct line position to use is 2, which corresponds
+ // EABColumn in Avkon (not a public enumeration,
+ // hence hard-coding used here)
+ const TInt KSeparatorLinePos = 2;
+ iFindBox->SetLinePos(KSeparatorLinePos);
+ }
+ }
+ else if (iListBox)
+ {
+ AknLayoutUtils::LayoutControl(iListBox, rect,
+ AKN_LAYOUT_WINDOW_list_gen_pane(0));
+ }
+ if (iListBox)
+ {
+ STATIC_CAST(CAknFilteredTextListBoxModel*,iListBox->Model())->Filter()->SetParentControl(this);
+ }
+ SelectorImpl().HandleScreenSizeChange();
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::CountComponentControls
+// ----------------------------------------------------------------------------
+//
+TInt CLmkLbWithFilterContainer::CountComponentControls() const
+ {
+ return 2; // return nbr of controls inside this container
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::ComponentControl
+// ----------------------------------------------------------------------------
+//
+CCoeControl* CLmkLbWithFilterContainer::ComponentControl( TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ {
+ return iListBox;
+ }
+ case 1:
+ {
+ return iFindBox;
+ }
+ default:
+ {
+ return NULL;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::SetupFindBoxL
+// ----------------------------------------------------------------------------
+//
+void CLmkLbWithFilterContainer::SetupFindBoxL()
+ {
+ iFindBox = SelectorImpl().CreateFindBoxL(*this);
+ }
+
+
+// ---------------------------------------------------------
+// CLmkLbWithFilterContainer::Draw(const TRect& aRect) const
+// ---------------------------------------------------------
+//
+void CLmkLbWithFilterContainer::Draw(const TRect& /*aRect*/) const
+ {
+ if(iIsNeedToReDraw)
+ {
+ CWindowGc& gc = SystemGc();
+
+ AknsDrawUtils::Background( iSkinInstance,
+ iBackgroundSkinContext, this, gc, Rect() );
+
+ iIsNeedToReDraw = EFalse;
+ }
+ }
+
+#ifdef RD_SCALABLE_UI_V2
+// ---------------------------------------------------------
+// CLmkLbWithFilterContainer::SetListBoxObserver
+// ---------------------------------------------------------
+//
+void CLmkLbWithFilterContainer::SetListBoxObserver(MEikListBoxObserver* aObserver)
+ {
+ __ASSERT_DEBUG( aObserver, Panic( KLmkPanicNullMember ) );
+ iListBox->SetListBoxObserver(aObserver);
+ }
+#endif//RD_SCALABLE_UI_V2
+
+// ----------------------------------------------------------------------------
+// CLmkLbWithFilterContainer::UpdateMskContainerForFilterL()
+// ----------------------------------------------------------------------------
+//
+void CLmkLbWithFilterContainer::UpdateMskContainerForFilterL()
+ {
+ iSearchInitiated = ETrue;
+ UpdateMskContainerL();
+ iSearchInitiated = EFalse;
+ }
+// End of File