diff -r 25fce757be94 -r e02eb84a14d2 usbuis/usbui/USBClassChangeUIPlugin/src/USBClassChangeUIPluginContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbuis/usbui/USBClassChangeUIPlugin/src/USBClassChangeUIPluginContainer.cpp Wed Sep 01 12:20:49 2010 +0100 @@ -0,0 +1,446 @@ +/* +* Copyright (c) 2005-2009 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: Container that contains the USB mode listbox +* +*/ + + +// INCLUDE FILES +#include // Resource reader + +#include +#include // Resources +#include // Help id +#include +#include +#include +#include + +#include "USBClassChangeUIPlugin.h" +#include "USBClassChangeUIPluginContainer.h" +#include "USBClassChangeUIPluginModel.h" +#include "USBClassChangeUIPluginView.h" +#include "USBClassChangeUIPluginDebug.h" + +// ----------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CUSBClassChangeUIPluginContainer* +CUSBClassChangeUIPluginContainer::NewL( + CUSBClassChangeUIPluginView* aView, + CUSBClassChangeUIPluginModel* aModel) + { + FLOG(_L("[USBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer:NewL")); + CUSBClassChangeUIPluginContainer* self + = new (ELeave) CUSBClassChangeUIPluginContainer(aView, aModel); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::ConstructL(const TRect& aRect) +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::ConstructL() + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::ConstructL()")); + + CreateWindowL(); + iPopupController = CAknInfoPopupNoteController::NewL(); + + iUSBAllItemsArray = new ( ELeave ) CDesCArrayFlat( + KUSBClassChangeUISupportedModesGranularity ); + iUSBAllItemsArrayDefault = new ( ELeave ) CDesCArrayFlat( + KUSBClassChangeUISupportedModesGranularity ); + iUSBAllItemsArrayActive = new ( ELeave ) CDesCArrayFlat( + KUSBClassChangeUISupportedModesGranularity ); + iPopUpItems = new ( ELeave ) CDesCArrayFlat( + KUSBClassChangeUISupportedModesGranularity ); + CArrayPtrFlat* iconArray = new(ELeave) CArrayPtrFlat(KUSBClassChangeUIIconGranularity); + CleanupStack::PushL( iconArray ); + + // prepare the listbox items and the tooltip strings for the USB UI view + iModelRef->SupportedUSBModeArraysL( *iUSBAllItemsArray, *iUSBAllItemsArrayDefault, *iUSBAllItemsArrayActive, *iPopUpItems, *iconArray); + + // Create DoubleLargeStyleListBox for USB UI view + // + iUSBMainListBox = new ( ELeave ) CAknDoubleLargeStyleListBox; + iUSBMainListBox->SetContainerWindowL( *this ); + iUSBMainListBox->ConstructL( this, EAknListBoxMarkableList ); + + // Set up scroll bar for the Listbox + iUSBMainListBox->CreateScrollBarFrameL( ETrue ); + iUSBMainListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto ); + + // As soon as the list is created the tooltip info of the first item in the list is shown + + + //creating a handle to the icon array and passing its ownership to data object + //no need to handle its deletion + iUSBMainListBox->ItemDrawer()->FormattedCellData()->SetIconArray(iconArray); + CleanupStack::Pop(iconArray); + + iUSBMainListBox->Model()->SetItemTextArray( this ); + iUSBMainListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + iUSBMainListBox->SetListBoxObserver( this ); + + SetRect( iViewRef->ClientRect() ); + + const RArray usbIds = iModelRef->GetUsbIds(); + TInt currentMode = usbIds.Find(iViewRef->USBMode()); + ShowPopUpsL(currentMode); + ActivateL(); + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::ConstructL complete")); + } + +// ---------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +CUSBClassChangeUIPluginContainer::CUSBClassChangeUIPluginContainer( + CUSBClassChangeUIPluginView* aView, + CUSBClassChangeUIPluginModel* aModel) : + iViewRef(aView), iModelRef(aModel) + { + } + +// ---------------------------------------------------------------------------- +// Destructor +// ---------------------------------------------------------------------------- +// +CUSBClassChangeUIPluginContainer::~CUSBClassChangeUIPluginContainer() + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::Destructor")); + + delete iUSBMainListBox; + + delete iUSBAllItemsArray; + delete iUSBAllItemsArrayDefault; + delete iUSBAllItemsArrayActive; + delete iPopUpItems; + + delete iPopupController; + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::Destructor complete")); + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::SizeChanged() +// Called by framework when the view size is changed +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::SizeChanged() + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::SizeChangedL()")); + + iUSBMainListBox->SetRect( Rect() ); + iUSBMainListBox->SetFocus( ETrue ); + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::SizeChangedL complete")); + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::FocusChanged() +// Called by framework when the focus is changed +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::FocusChanged( TDrawNow /*aDranow*/ ) + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::FocusChanged()")); + if( iUSBMainListBox) + { + iUSBMainListBox->SetFocus( IsFocused() ); + } + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::FocusChanged() complete")); + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::CountComponentControls() const +// Returns the number of controls inside this container +// ---------------------------------------------------------------------------- +// +TInt CUSBClassChangeUIPluginContainer::CountComponentControls() const + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::CountComponentControls()")); + + return KUSBClassChangeUIComponentCount; + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::ComponentControl(TInt aIndex) const +// Returns the control inside this container. Note that this function is +// inherited from CCoeControl and thus must be const even it returns a pointer, +// which can be used for modifying the class. +// ---------------------------------------------------------------------------- +// +CCoeControl* CUSBClassChangeUIPluginContainer::ComponentControl( + TInt aIndex ) const + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::ComponentControl()")); + + switch ( aIndex ) + { + case 0: + { + return iUSBMainListBox; + } + default: + { + return NULL; + } + } + } + + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::OfferKeyEventL +// Redirects keypresses to the listbox +// ---------------------------------------------------------------------------- +// +TKeyResponse CUSBClassChangeUIPluginContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent,TEventCode aType ) + { + TInt maxItemcount = iModelRef->PersonalityCount(); + TInt maxIndex = maxItemcount-1; + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::OfferKeyEventL()")); + TBool isfocus = iViewRef->MenuBar()->ItemSpecificCommandsEnabled(); + if ( isfocus && aType == EEventKey && + (aKeyEvent.iCode == EKeyDownArrow || aKeyEvent.iCode == EKeyUpArrow) ) + { + iCurrentItemIndex = iUSBMainListBox->CurrentItemIndex(); + if( aKeyEvent.iCode == EKeyDownArrow ) + { + if( iCurrentItemIndex >= maxIndex ) + { + iCurrentItemIndex = 0; + } + else + { + iCurrentItemIndex++; + } + } + else // ( aKeyEvent.iCode == EKeyUpArrow ) + { + if( iCurrentItemIndex <= 0 ) + { + iCurrentItemIndex = maxIndex; + } + else + { + iCurrentItemIndex--; + } + } + ShowPopUpsL( iCurrentItemIndex ); + iCurrentItemIndex = iUSBMainListBox->CurrentItemIndex(); + } + + + TKeyResponse res = iUSBMainListBox->OfferKeyEventL( aKeyEvent, aType ); + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::OfferKeyEventL complete")); + + return res; + } + +//------------------------------------------------------------------------------ +// CUSBClassChangeUIPluginContainer::showpopupsFinal(TInt &aValue) +// Display the popups +//------------------------------------------------------------------------------ +// +void CUSBClassChangeUIPluginContainer::ShowPopUpsL(TInt aIndex) + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::ShowPopUpsL ")); + if ( aIndex >= 0 && aIndex < iPopUpItems->Count() ) + { + iPopupController->SetTimePopupInView( KMaxVisibleTime); + TPtrC chosen = iPopUpItems->MdcaPoint(aIndex); + iPopupController->SetTextL( chosen ); + iPopupController->SetPositionByHighlight( TRect( + iUSBMainListBox->View()->ItemPos( aIndex + 1 ), + iUSBMainListBox->View()->ItemSize() ) ); + iPopupController->SetTimeDelayBeforeShow( KMsToWaitBeforePopup ); + iPopupController->ShowInfoPopupNote(); + } + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::ShowPopUpsL complete")); + +} + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::HandleListBoxEventL( +// CEikListBox* aListBox,TListBoxEvent aEventType) +// Handle events from the ListBox +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::HandleListBoxEventL( + CEikListBox* /*aListBox*/,TListBoxEvent aEventType ) + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::HandleListBoxEventL()")); + + __ASSERT_DEBUG( iViewRef!=0, PANIC( EUSBUIPanicIllegalValue ) ); + + //Selection key pressed, when MSK is not enabled. Or touch stylus + //double clicked. + // + if( AknLayoutUtils::PenEnabled() ) + { + switch ( aEventType ) + { + case EEventItemSingleClicked: + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t HandleListBoxEventL()EEventItemSingleClicked")); + iViewRef->HandleCommandL( EUSBUICmdSelect ); + break; + } + case EEventPenDownOnItem: + { + ShowPopUpsL (CurrentItemIndex()); + break; + } + case EEventPanningStarted: + case EEventPanningStopped: + case EEventFlickStarted: + case EEventFlickStopped: + case EEventItemDraggingActioned: + break; + default: + break; + } + } + if( (aEventType == EEventEnterKeyPressed) || + (aEventType == EEventItemDoubleClicked) ) //for touch support + { + iViewRef->HandleCommandL( EUSBUICmdSelect ); + } + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::HandleListBoxEventL complete")); + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::MdcaCount() +// ---------------------------------------------------------------------------- +// +TInt CUSBClassChangeUIPluginContainer::MdcaCount() const + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::MdcaCount()")); + TInt numberOfMainViewItems =iModelRef->PersonalityCount(); + FTRACE(FPrint(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::MdcaCount()= %d"), numberOfMainViewItems)); + return numberOfMainViewItems; + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::MdcaPoint() +// Main view listbox item formatter: +// Returns the current format string depending value +// of the item concerned. +// ---------------------------------------------------------------------------- +// +TPtrC CUSBClassChangeUIPluginContainer::MdcaPoint( TInt aIndex ) const + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::MdcaPoint()")); + + TPtrC chosen; + const RArray usbIds = iModelRef->GetUsbIds(); + TInt currentIndex = usbIds.Find(iViewRef->USBMode()); + if (aIndex == currentIndex) + { + if(iViewRef->IsUSBDeviceConnected()) + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t MdcaPoint()The selected mode and usbconnected")); + chosen.Set(iUSBAllItemsArrayActive->MdcaPoint(aIndex)); + } + else + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t MdcaPoint()The selected mode and usb not connected")); + chosen.Set(iUSBAllItemsArrayDefault->MdcaPoint(aIndex)); + } + } + else + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t MdcaPoint()not selected mode")); + chosen.Set(iUSBAllItemsArray->MdcaPoint(aIndex)); + } + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::MdcaPoint complete")); + + return chosen; + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::SettingChanged +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::SettingChanged() + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::SettingChangedL()")); + + iUSBMainListBox->DrawDeferred(); + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::SettingChangedL complete")); + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::GetHelpContext +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::GetHelpContext(TCoeHelpContext& aContext) const + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::GetHelpContext()")); + + aContext.iMajor = KUidUSBClassChangeUI; + aContext.iContext = KUSB_HLP_MAIN; + + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::GetHelpContext complete")); + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::HandleResourceChange +// ---------------------------------------------------------------------------- +// +void CUSBClassChangeUIPluginContainer::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + if( aType == KEikDynamicLayoutVariantSwitch ) + { + SetRect( iViewRef->ClientRect() ); + DrawNow(); + } + else + { + if ( aType == KAknsMessageSkinChange ) + { + iUSBMainListBox->HandleResourceChange( aType ); + } + } + } + +// ---------------------------------------------------------------------------- +// CUSBClassChangeUIPluginContainer::CurrentItemIndex +// ---------------------------------------------------------------------------- +// +TInt CUSBClassChangeUIPluginContainer::CurrentItemIndex() + { + FLOG(_L("[CUSBClassChangeUIPlugin]\t CUSBClassChangeUIPluginContainer::CurrentItemIndex()")); + + return iUSBMainListBox->CurrentItemIndex(); + } + +// End of File