mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainerssearchfieldwrapper.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainerssearchfieldwrapper.cpp Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 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: Wrapper class for Search Field. Handles search field
+* activation, deactivation and size. Wrapper is a window owning
+* control.
+*
+*/
+
+
+#include <aknutils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include "mpxcommoncontainersearchfieldwrapper.h"
+#include "mpxcommoncontainersearchfield.h"
+
+// CONSTANTS
+_LIT( KMPXCommonContainerPanic, "MPX Common Container" );
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+CMPXCommonContainerSearchFieldWrapper::CMPXCommonContainerSearchFieldWrapper(
+ MMPXCommonContainerSearchFieldObserver* aObserver )
+ : iObserver( aObserver )
+ {
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+CMPXCommonContainerSearchFieldWrapper* CMPXCommonContainerSearchFieldWrapper::NewL(
+ MMPXCommonContainerSearchFieldObserver* aObserver )
+ {
+ CMPXCommonContainerSearchFieldWrapper* self
+ = new (ELeave) CMPXCommonContainerSearchFieldWrapper( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+void CMPXCommonContainerSearchFieldWrapper::ConstructL()
+ {
+ CreateWindowL();
+ iSearchField = CMPXCommonContainerSearchField::NewL( this );
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+CMPXCommonContainerSearchFieldWrapper
+ ::~CMPXCommonContainerSearchFieldWrapper()
+ {
+ if ( iSearchField )
+ {
+ if ( IsSearchFieldActive() )
+ {
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iSearchField );
+ }
+ }
+ delete iSearchField;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+TBool CMPXCommonContainerSearchFieldWrapper::IsSearchFieldActive()
+ {
+ return iSearchField->IsVisible();
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+void CMPXCommonContainerSearchFieldWrapper::ActivateSearchFieldL()
+ {
+ MakeVisible( ETrue );
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iSearchField );
+ CCoeEnv::Static()->AppUi()->AddToStackL( iSearchField,
+ ECoeStackPriorityMenu );
+ iSearchField->ActivateL();
+ iSearchField->MakeVisible( ETrue );
+ iSearchField->SetFocus( ETrue );
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+void CMPXCommonContainerSearchFieldWrapper::DeactivateSearchField()
+ {
+ iSearchField->MakeVisible( EFalse );
+ iSearchField->SetFocus( EFalse );
+ MakeVisible( EFalse );
+ CCoeEnv::Static()->AppUi()->RemoveFromStack( iSearchField );
+ TRAP_IGNORE( FindKeywordL( KNullDesC ) );
+ }
+
+// --------------------------------------------------------------------------
+// Returns rectangle for list, based on view's client rectangle. Handles both
+// the case when Search Field is visible and the case when it's invisible.
+// --------------------------------------------------------------------------
+//
+TRect CMPXCommonContainerSearchFieldWrapper::GetListRect(
+ TBool aSearchVisible, TRect aClientRect )
+ {
+ TRect listRect = aClientRect;
+
+ SetClientRect( aClientRect ); // Update stored client rect.
+
+ if ( aSearchVisible )
+ {
+ TAknWindowLineLayout layout =
+ AknLayoutScalable_Avkon::popup_find_window().LayoutLine();
+
+ // Height of list is reduced from bottom with size of Search Field.
+ listRect.iBr.iY -= layout.iH;
+
+ __ASSERT_DEBUG( listRect.iBr.iY > 0 && layout.iH > 0,
+ User::Panic( KMPXCommonContainerPanic, 1 ) );
+ }
+
+ return listRect;
+ }
+
+// --------------------------------------------------------------------------
+// Returns rectangle for Search Field, based on view's client rectangle.
+// Handles both the case when Search Field is visible and the case when it's
+// invisible.
+// --------------------------------------------------------------------------
+//
+TRect CMPXCommonContainerSearchFieldWrapper::GetSearchFieldRect(
+ TBool aSearchVisible, TRect aClientRect )
+ {
+ TRect searchRect = TRect( 0, 0, 0, 0 );
+
+ SetClientRect( aClientRect ); // Update stored client rect.
+
+ if ( aSearchVisible )
+ {
+ TAknWindowLineLayout layout =
+ AknLayoutScalable_Avkon::popup_find_window().LayoutLine();
+
+ // TopLeft of Search Field is based on list's bottom, see GetListRect
+ searchRect.iTl.iX = aClientRect.iTl.iX;
+ searchRect.iTl.iY = aClientRect.iBr.iY - layout.iH;
+
+ // BottomRight of Search Field is at the end of client rectangle.
+ searchRect.iBr.iX = aClientRect.iBr.iX;
+ searchRect.iBr.iY = aClientRect.iBr.iY;
+
+ __ASSERT_DEBUG( searchRect.iTl.iX < searchRect.iBr.iX &&
+ searchRect.iTl.iY < searchRect.iBr.iY &&
+ searchRect.iBr.iX > 0 &&
+ searchRect.iBr.iY > 0 &&
+ layout.iH > 0,
+ User::Panic( KMPXCommonContainerPanic, 2 ) );
+ }
+
+ return searchRect;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+void CMPXCommonContainerSearchFieldWrapper::FindKeywordL(
+ const TDesC& aFindWord )
+ {
+ if ( iObserver )
+ {
+ iObserver->NewFilteringWordL( aFindWord );
+ }
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+CCoeControl *CMPXCommonContainerSearchFieldWrapper::ComponentControl(
+ TInt /*aIndex*/ ) const
+ {
+ return iSearchField;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerSearchFieldWrapper::CountComponentControls() const
+ {
+ return 1;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+TRect& CMPXCommonContainerSearchFieldWrapper::ClientRect()
+ {
+ return iClientRect;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+void CMPXCommonContainerSearchFieldWrapper::SetClientRect(
+ const TRect& aClientRect )
+ {
+ iClientRect = aClientRect;
+ }
+
+// --------------------------------------------------------------------------
+//
+// --------------------------------------------------------------------------
+//
+void CMPXCommonContainerSearchFieldWrapper::SizeChanged()
+ {
+ iSearchField->HandleFindSizeChanged();
+ }