diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,753 @@ +/* +* 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: Implementation of commlauncher plugin control container +* +*/ + + +// INCLUDE FILES +#include "ccappcommlauncherheaders.h" +#include "spbcontentprovider.h" +#include "ccappcommlaunchercustomlistbox.h" +#include +#include +#include +#include +#include +#include "ccaextensionfactory.h" +#include "ccaextensionfactory.hrh" +#include +#include +#include +#include +#include +#include +#include +#include "ccafactoryextensionnotifier.h" +#include + + +const TInt KSocialPhonebookDisabled = 2; +const TInt KSocialPhonebookEnabled = 3; +const TText KReplacedChars = ' '; + +_LIT( KCcaIconDefaultFileName, "\\resource\\apps\\phonebook2ece.mif" ); + +// =========================== MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::CCCAppCommLauncherContainer() +// ---------------------------------------------------------------------------- +// +CCCAppCommLauncherContainer::CCCAppCommLauncherContainer( + CCCAppCommLauncherPlugin& aPlugin) + : iPlugin (aPlugin) + { + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::~CCCAppCommLauncherContainer() +// ---------------------------------------------------------------------------- +// +CCCAppCommLauncherContainer::~CCCAppCommLauncherContainer() + { + delete iListBox; + delete iBackground; + delete iModel; + delete iHeaderCtrl; + delete iPbkCmd; + delete iStatusControl; + delete iProvider; + Release( iAppServices ); + delete iViewLauncher; + delete iLongTapDetector; + delete iFactoryExtensionNotifier; + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ConstructL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::ConstructL() + { + // Create the listbox + CreateListboxControlL(); + // Create the header + iHeaderCtrl = CCCAppCommLauncherHeaderControl::NewL( iPlugin ); + iHeaderCtrl->SetContainerWindowL(*this); + + FeatureManager::InitializeLibL(); + if( FeatureManager::FeatureSupported( KFeatureIdFfContactsSocial ) ) + { + MVPbkContactLink* link = NULL; + MVPbkContactLinkArray* contactArray = NULL; + TInt isSame = KErrNotFound; + + iAppServices = CPbk2ApplicationServices::InstanceL(); + iProvider = CSpbContentProvider::NewL( iAppServices->ContactManager(), + iAppServices->StoreManager(), + CSpbContentProvider::EStatusMessage | CSpbContentProvider::EServiceIcon ); + + HBufC& contactData = iPlugin.AppEngine()->Parameter().ContactDataL(); + HBufC8* contactData8 = HBufC8::NewLC( contactData.Size() ); + TPtr8 contactData8Ptr( contactData8->Des() ); + contactData8Ptr.Copy( contactData.Des() ); + + CVPbkContactManager* vPbkContactManager = &iAppServices->ContactManager(); + + if( vPbkContactManager ) + { + contactArray = vPbkContactManager->CreateLinksLC( contactData8Ptr ); + + if( contactArray->Count() > 0 ) + { + link = contactArray->At( 0 ).CloneLC(); + } + + const MVPbkContactStoreProperties& storeProperties = link->ContactStore().StoreProperties(); + TVPbkContactStoreUriPtr uri = storeProperties.Uri(); + + isSame = uri.Compare( VPbkContactStoreUris::DefaultCntDbUri(), + TVPbkContactStoreUriPtr::EContactStoreUriAllComponents ); + } + + if( isSame == 0 ) + { + iStatusControl = CCCAppStatusControl::NewL( *iProvider, *this ); + iStatusControl->SetContainerWindowL( *this ); + iStatusControl->MakeVisible( EFalse ); + + CFbsBitmap* bmp = NULL; + CFbsBitmap* bmpMask = NULL; + + AknIconUtils::CreateIconL( + bmp, + bmpMask, + KCcaIconDefaultFileName, + EMbmPhonebook2eceQgn_prop_wml_bm_ovi, + EMbmPhonebook2eceQgn_prop_wml_bm_ovi_mask ); + + CGulIcon* guiIcon = CGulIcon::NewL( bmp, bmpMask ); + iStatusControl->SetDefaultStatusL( R_QTN_CCA_DEFAULT_STATUS, guiIcon ); + iStatusControl->SetContactLinkL( *link ); + + iFactoryExtensionNotifier = CCCaFactoryExtensionNotifier::NewL(); + TCallBack callBack( CCCAppCommLauncherContainer::CheckExtensionFactoryL, this ); + iFactoryExtensionNotifier->ObserveExtensionFactory( callBack ); + } + + if( link ) + { + CleanupStack::PopAndDestroy(); //link + } + + if( contactArray ) + { + CleanupStack::PopAndDestroy(); // contactArray + } + + CleanupStack::PopAndDestroy(); // contactData8 + } // KFeatureIdFfContactsSocial + FeatureManager::UnInitializeLib(); + + // Get the skin background for the view + iBackground = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain, TRect(0, 0, 0, 0), EFalse); + LongTapDetectorL(); + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::CreateListboxControlL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::CreateListboxControlL() + { + // Will use customed list box later + // iListBox = CCCAppCommLauncherCustomListBox::NewL(); + iListBox = new (ELeave) CAknDoubleLargeStyleListBox(); + iListBox->ConstructL(this, EAknListBoxLoopScrolling); + iListBox->SetContainerWindowL(*this); + iListBox->CreateScrollBarFrameL(ETrue); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + // Set empty text + iListBox->View()->SetListEmptyTextL(KNullDesC()); + + // Creating the model + iModel = CCCAppCommLauncherLPadModel::NewL(*this, *iListBox, iPlugin); + iListBox->Model()->SetItemTextArray(iModel); + iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray); + iListBox->ItemDrawer()->ColumnData()->SetIconArray(iModel->IconArray()); + + //Set listbox observer + iListBox->SetListBoxObserver(this); + iListBox->ActivateL(); + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::Draw() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::Draw(const TRect& /*aRect*/) const + { + // Draw the background using skin + if (iBackground) + { + AknsDrawUtils::Background( + AknsUtils::SkinInstance(), iBackground, this, SystemGc(), Rect()); + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::SizeChanged() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::SizeChanged() + { + const TRect drawRect(Rect()); + const TBool isLandscape(Layout_Meta_Data::IsLandscapeOrientation()); + + // Header, Status and Listbox + TAknLayoutRect headerRect; + headerRect.LayoutRect(drawRect, AknLayoutScalable_Apps::cl_header_pane(isLandscape)); + iHeaderCtrl->SetRect(headerRect.Rect()); + + AknLayoutUtils::LayoutControl( + iListBox, drawRect, AknLayoutScalable_Apps::cl_listscroll_pane(isLandscape)); + + TRect listRect = iListBox->Rect(); + + if (!isLandscape) + { + listRect.iTl.iX = drawRect.iTl.iX; + listRect.iBr.iX = drawRect.iBr.iX; + } + + if( iStatusControl && iStatusControl->IsVisible() ) + { + // status control (similar to list_double2_graphic_pane) + TAknLayoutRect statusLayout; + statusLayout.LayoutRect( listRect, + AknLayoutScalable_Avkon::list_double2_graphic_pane( 0 ) ); + TRect statusRect( statusLayout.Rect() ); + + // list gives space for status control (top of list) + listRect.Move( 0, statusRect.Height() ); + listRect.Resize( 0, -statusRect.Height() ); + + // status control + statusRect.Shrink( 10, 5 ); + iStatusControl->SetRect( statusRect ); + } + + iListBox->SetRect( listRect ); + + // Background skin + if (iBackground) + { + iBackground->SetRect(drawRect); + } + + DrawNow(); + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::CountComponentControls() +// ---------------------------------------------------------------------------- +// +TInt CCCAppCommLauncherContainer::CountComponentControls() const + { + if( iStatusControl ) + { + return KSocialPhonebookEnabled; + } + else + { + return KSocialPhonebookDisabled; + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ComponentControl() +// ---------------------------------------------------------------------------- +// +CCoeControl* CCCAppCommLauncherContainer::ComponentControl(TInt aIndex) const + { + switch (aIndex) + { + case 0: + return iHeaderCtrl; + case 1: + if( iStatusControl ) + { + return iStatusControl; + } + else + { + return iListBox; + } + case 2: + if( iStatusControl ) + { + return iListBox; + } + else + { + return NULL; + } + default: + return NULL; + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::OfferKeyEventL() +// ---------------------------------------------------------------------------- +// +TKeyResponse CCCAppCommLauncherContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType) + { + // Forward the key-event 1st to base-class + TKeyResponse returnValue = + CCCAppViewPluginAknContainer::OfferKeyEventL(aKeyEvent, aType); + + // Offer event to header control. + if (EEventKey == aType + && EKeyWasNotConsumed == returnValue) + { + returnValue = iHeaderCtrl->OfferKeyEventL(aKeyEvent, aType); + } + + /* Uncomment this code if it is necessary to enable navigation hardware keys + * on devices which have these keys (its Map Extension feature) + if( aKeyEvent.iScanCode == EStdKeyApplicationD && aType == EEventKeyUp ) + { + DoShowMapCmdL( (TPbk2CommandId)EPbk2ExtensionAssignFromMap ); + returnValue = EKeyWasConsumed; + } + + if( aKeyEvent.iScanCode == EStdKeyApplicationE && aType == EEventKeyUp ) + { + DoShowMapCmdL( (TPbk2CommandId)EPbk2ExtensionShowOnMap ); + returnValue = EKeyWasConsumed; + }*/ + + if (EEventKey == aType + && EKeyWasNotConsumed == returnValue) + { + // Make send key work as the select key for the list + TKeyEvent keyToList = aKeyEvent; + if (EKeyYes == aKeyEvent.iCode && IsFocused()) + { + keyToList.iCode = EKeyEnter; + } + returnValue = iListBox->OfferKeyEventL(keyToList, aType); + // Update popup when moving up or down in the list + switch(aKeyEvent.iCode) + { + case EKeyUpArrow: + case EKeyDownArrow: + returnValue = EKeyWasConsumed; + break; + } + } + + return returnValue; + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::MopSupplyObject() +// ---------------------------------------------------------------------------- +// +TTypeUid::Ptr CCCAppCommLauncherContainer::MopSupplyObject(TTypeUid aId) + { + // For skinning + if (iBackground && aId.iUid == MAknsControlContext::ETypeId) + { + return MAknsControlContext::SupplyMopObject(aId, iBackground); + } + + return CCoeControl::MopSupplyObject(aId); + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::FocusChanged() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::FocusChanged(TDrawNow aDrawNow) + { + // For enabling animated hilight (if in skin supports it) + CCoeControl::FocusChanged(aDrawNow); + if(iListBox) + { + iListBox->SetFocus(IsFocused(), aDrawNow); + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::HandlePointerEventL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::HandlePointerEventL( + const TPointerEvent& aPointerEvent) + { + TInt index; + if ( iListBox->View()->XYPosToItemIndex( aPointerEvent.iPosition, index ) ) + { + if ( iLongTapDetector ) + { + iLongTapDetector->PointerEventL( aPointerEvent ); + } + if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + // Pressed Down Effect + iListBox->View()->ItemDrawer()->SetFlags( + CListItemDrawer::EPressedDownState ); + } + } + + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::HandleLongTapEventL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::HandleLongTapEventL( const TPoint& aPenEventLocation, + const TPoint& aPenEventScreenLocation ) + { + CCAContactorService* contactorService = iPlugin.ContactorService(); + + if ( contactorService && contactorService->IsBusy() ) + { + return; + } + else if ( CommMethodsAvailable() ) + { + TPtrC fullName; + iPlugin.ContactHandler().ContactFieldItemDataL( + CCmsContactFieldItem::ECmsFullName, fullName ); + + TUint paramFlag = 0;//CCAContactorService::TCSParameter::EEnableDefaults; + CCAContactorService::TCSParameter param( + iPlugin.Container().SelectedCommunicationMethod(), + *iPlugin.ContactHandler().ContactIdentifierLC(),//contactlinkarray + paramFlag, + fullName ); + contactorService->ExecuteServiceL( param ); + + CleanupStack::PopAndDestroy( 1 );// contactlinkarray + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::HandleListBoxEventL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::HandleListBoxEventL( + CEikListBox* /*aListBox*/, TListBoxEvent aEventType) + { + // Handle pointer events + TBool executeContactAction = EFalse; + + if (aEventType == EEventItemDraggingActioned) + { + iHasBeenDragged = ETrue; + } + else if (aEventType == EEventItemSingleClicked) + { + if (!iHasBeenDragged) + { + executeContactAction = ETrue; + } + else + { + iHasBeenDragged = EFalse; + } + } + else if (aEventType == EEventEnterKeyPressed) + { + executeContactAction = ETrue; + iHasBeenDragged = EFalse; + } + + CCAContactorService* contactorService = iPlugin.ContactorService(); + + if ( executeContactAction && contactorService && contactorService->IsBusy()) + { + executeContactAction = EFalse; + } + + if (executeContactAction) + { + if ( iPlugin.Container().SelectedCommunicationMethod() + == VPbkFieldTypeSelectorFactory::EFindOnMapSelector ) + { + DoShowMapCmdL( (TPbk2CommandId)EPbk2ExtensionShowOnMap ); + } + else + { + if(contactorService) + { + TPtrC fullName; + + iPlugin.ContactHandler().ContactFieldItemDataL( + CCmsContactFieldItem::ECmsFullName, fullName); + + TUint paramFlag = CCAContactorService::TCSParameter::EEnableDefaults; + + CCAContactorService::TCSParameter param( + iPlugin.Container().SelectedCommunicationMethod(), + *iPlugin.ContactHandler().ContactIdentifierLC(),//contactlinkarray + paramFlag, + fullName); + + contactorService->ExecuteServiceL(param); + + CleanupStack::PopAndDestroy(1);// contactlinkarray + } + } + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ContactInfoFetchedNotifyL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::ContactInfoFetchedNotifyL( + const CCmsContactFieldInfo& aContactFieldInfo) + { + // update buttons + iModel->UpdateAddressesValidationL( aContactFieldInfo ); + iModel->FillButtonArrayL(); + iListBox->HandleItemAdditionL(); + iHeaderCtrl->ContactInfoFetchedNotifyL(aContactFieldInfo); + + if (!CommMethodsAvailable()) + { + // update the empty string now to avoid flickering + HBufC* string = StringLoader::LoadLC( + R_QTN_CCA_NO_COMMUNICATION_METHODS, iCoeEnv); + iListBox->View()->SetListEmptyTextL(*string); + CleanupStack::PopAndDestroy(string); + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ContactFieldFetchedNotifyL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::ContactFieldFetchedNotifyL( + const CCmsContactField& aContactField) + { + // Forwarding to header-part + iHeaderCtrl->ContactFieldFetchedNotifyL(aContactField); + // Forwarding to listbox-model + iModel->ContactFieldFetchedNotifyL(aContactField); + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ContactFieldFetchedNotifyL() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::ContactFieldFetchingCompletedL() + { + //PERFORMANCE LOGGING: 12. Plugin ready + WriteToPerfLog(); + iHeaderCtrl->ContactFieldFetchingCompletedL(); + + iHeaderCtrl->SetContactStoreL(iPlugin.ContactHandler().ContactStore()); + + //Reset focused row in listbox if items removed/added. + TInt mdlCount = iModel->MdcaCount(); + if (iMdlRowCount != mdlCount) + { + iListBox->SetCurrentItemIndexAndDraw(0); + } + iListBox->DrawDeferred(); + + iMdlRowCount = mdlCount; + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::Plugin +// --------------------------------------------------------------------------- +// +CCCAppCommLauncherPlugin& CCCAppCommLauncherContainer::Plugin() + { + CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherContainer::Plugin()")); + return iPlugin; + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::CommMethodsAvailable +// --------------------------------------------------------------------------- +// +TBool CCCAppCommLauncherContainer::CommMethodsAvailable() + { + return (KErrNotFound == iListBox->CurrentItemIndex()) + ? EFalse : ETrue; + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::SelectedCommunicationMethod +// --------------------------------------------------------------------------- +// +VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector + CCCAppCommLauncherContainer::SelectedCommunicationMethod() + { + return iModel->ButtonData(iListBox->CurrentItemIndex()).iContactAction; + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ContactsChangedL +// --------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::ContactsChangedL() + { + iModel->Reset(); + iListBox->HandleItemRemovalL(); + iHeaderCtrl->ClearL(); + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::ContactPresenceChangedL +// --------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::ContactPresenceChangedL( + const CCmsContactField& aContactField) + { + iModel->ContactPresenceChangedL(aContactField); + DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::MapCommMethodToClipDirection +// --------------------------------------------------------------------------- +// +AknTextUtils::TClipDirection CCCAppCommLauncherContainer::MapCommMethodToClipDirection( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction) + { + switch (aContactAction) + { + case VPbkFieldTypeSelectorFactory::EEmailEditorSelector: + case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector: + case VPbkFieldTypeSelectorFactory::EVOIPCallSelector: + case VPbkFieldTypeSelectorFactory::EVideoCallSelector: + case VPbkFieldTypeSelectorFactory::EVoiceCallSelector: + case VPbkFieldTypeSelectorFactory::EUniEditorSelector: + return AknTextUtils::EClipFromBeginning; + case VPbkFieldTypeSelectorFactory::EURLSelector: + return AknTextUtils::EClipFromEnd; + default: + return AknTextUtils::EClipFromEnd; + } + } + +// ---------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::GetHelpContext() +// ---------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::GetHelpContext(TCoeHelpContext& aContext) const + { + aContext.iMajor.iUid = KPbk2UID3; + aContext.iContext = KHLP_CCA_LAUNCHER; + } + +// --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::DoShowMapCmdL +// --------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::DoShowMapCmdL( TPbk2CommandId aCommandId ) + { + if( !iPbkCmd ) + { + iPbkCmd = CCCAppCommLauncherPbkCmd::NewL( iPlugin ); + } + + iPbkCmd->ExecutePbk2CmdShowMapL( + iPlugin.ContactHandler().ContactIdentifierLC(), aCommandId ); + + CleanupStack::PopAndDestroy( 1 ); // ContactIdentifierLC + } + +// -------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::LongTapDetectorL +// -------------------------------------------------------------------------- +// +CAknLongTapDetector& CCCAppCommLauncherContainer::LongTapDetectorL() + { + if ( !iLongTapDetector ) + { + iLongTapDetector = CAknLongTapDetector::NewL( this ); + } + return *iLongTapDetector; + } + + +//----------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::StatusClicked() +//----------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::StatusClickedL() + { + if ( iViewLauncher ) + { + HBufC& contactData = iPlugin.AppEngine()->Parameter().ContactDataL(); + HBufC8* contactData8 = HBufC8::NewLC( contactData.Size() ); + TPtr8 contactData8Ptr( contactData8->Des() ); + contactData8Ptr.Copy( contactData.Des() ); + iViewLauncher->LaunchViewL( MCCAViewLauncher::ECCAView, &contactData8Ptr ); + CleanupStack::PopAndDestroy( contactData8 ); + } + } + +//----------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::CheckExtensionFactoryL() +//----------------------------------------------------------------------------- +// +TInt CCCAppCommLauncherContainer::CheckExtensionFactoryL(TAny* aPtr) + { + CCCAppCommLauncherContainer* self = static_cast( aPtr ); + self->DoCheckExtensionFactoryL(); + return 0; + } + +//----------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::DoCheckExtensionFactoryL() +//----------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::DoCheckExtensionFactoryL() + { + CCCAExtensionFactory* extension = iFactoryExtensionNotifier->ExtensionFactory(); + // if extension is not null, extensionfactory plugins are available -> + // show statuscontrol + if( extension ) + { + if ( !iViewLauncher ) + { + iViewLauncher = extension->CreateViewLauncherL(); + } + iStatusControl->MakeVisible( ETrue ); + } + else + { + delete iViewLauncher; + iViewLauncher = NULL; + iStatusControl->MakeVisible( EFalse ); + } + + } + +// End of File