diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/activepalette/Src/ActivePalette2HUI.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/activepalette/Src/ActivePalette2HUI.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,1181 @@ +/* +* Copyright (c) 2007 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: AP implementation using HUITK* +*/ + + +/** + * @file ActivePalette2HUI.cpp + * AP implementation using HUITK + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ActivePalette2HUI.h" +#include "ActivePalette2Cfg.h" +#include "ActivePalette2Item.h" +#include "ActivePalette2Utils.h" +#include "ActivePalette2Model.h" + + + +#define PREPROCESS_BITMAPS + +#define KPaletteHiddenXPos (iScreenSize.iWidth) + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::CActivePalette2HUI() +// ----------------------------------------------------------------------------- +// +CActivePalette2HUI::CActivePalette2HUI(CHuiEnv& aEnv) +: CHuiControl(aEnv) + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::NewL() +// ----------------------------------------------------------------------------- +// +CActivePalette2HUI* CActivePalette2HUI::NewL(CHuiEnv& aEnv) + { + CActivePalette2HUI* self = new(ELeave) CActivePalette2HUI(aEnv); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ConstructL() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::ConstructL() + { + TRendererCallBacks callBacks; + callBacks.iTooltipDescriptive = this; + callBacks.iItemScrollDescriptive = this; + callBacks.iFocusDescriptive = this; + callBacks.iAppearanceDescriptive = this; + + iModel = CActivePalette2Model::NewL(*this, ActivePalette2Utils::APDimensionSize( EItemSize ), callBacks); + + UpdateTopLeftCornerWithScreenSize(); + + // Full screen layout, used to get screen-orientation notifications + iFullScreenLayout = AppendLayoutL(EHuiLayoutTypeAnchor); + iFullScreenLayout->SetFlags(EHuiVisualFlagLayoutUpdateNotification); + + iPaletteLayout = AppendLayoutL(EHuiLayoutTypeAnchor); + iPaletteLayout->SetFlags(EHuiVisualFlagManualLayout); + iPaletteLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(EPaletteWidth), ActivePalette2Utils::APDimension(ETopSectionHeight) + ActivePalette2Utils::APDimension(EBottomSectionHeight) ))); + iPaletteLayout->SetPos(THuiRealPoint(iTopLeftCorner)); + iPaletteLayout->SetClipping(ETrue); + + CFbsBitmap* picture; + CFbsBitmap* mask; + + // Background top-section + iBackgroundTopSectionLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + iBackgroundTopSectionLayout->SetFlags(EHuiVisualFlagManualLayout); + iBackgroundTopSectionLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(EPaletteWidth), ActivePalette2Utils::APDimension(ETopSectionHeight)))); + iBackgroundTopSectionLayout->SetPos(THuiRealPoint(TopScrollPanePosition())); + + iBackgroundTopSectionVisual = CHuiImageVisual::AddNewL(*this, iBackgroundTopSectionLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_top, EMbmActivepalette2graphicsQgn_graf_cam4_tb_top_mask); + + iBackgroundTopSectionTexture = CHuiTexture::NewL(); + iBackgroundTopSectionTexture->UploadL(*picture, mask); + + iBackgroundTopSectionVisual->SetImage( THuiImage( *iBackgroundTopSectionTexture ) ); + + CleanupStack::PopAndDestroy(); // picture + CleanupStack::PopAndDestroy(); // mask + + + // Background mid-section + iBackgroundMidSectionLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + iBackgroundMidSectionLayout->SetFlags(EHuiVisualFlagManualLayout); + iBackgroundMidSectionLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(EPaletteWidth), 0))); + iBackgroundMidSectionLayout->SetPos(THuiRealPoint(TopScrollPanePosition() + TPoint(0, ActivePalette2Utils::APDimension(ETopSectionHeight)))); + + iBackgroundMidSectionVisual = CHuiImageVisual::AddNewL(*this, iBackgroundMidSectionLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_body, EMbmActivepalette2graphicsQgn_graf_cam4_tb_body_mask); + + iBackgroundMidSectionTexture = CHuiTexture::NewL(); + iBackgroundMidSectionTexture->UploadL(*picture, mask); + + iBackgroundMidSectionVisual->SetImage( THuiImage( *iBackgroundMidSectionTexture ) ); + + CleanupStack::PopAndDestroy(); // picture + CleanupStack::PopAndDestroy(); // mask + + + // Background bottom-section + iBackgroundBottomSectionLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + iBackgroundBottomSectionLayout->SetFlags(EHuiVisualFlagManualLayout); + iBackgroundBottomSectionLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(EPaletteWidth), ActivePalette2Utils::APDimension(EBottomSectionHeight)))); + iBackgroundBottomSectionLayout->SetPos(THuiRealPoint(BottomScrollPanePosition())); + + iBackgroundBottomSectionVisual = CHuiImageVisual::AddNewL(*this, iBackgroundBottomSectionLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_bottom, EMbmActivepalette2graphicsQgn_graf_cam4_tb_bottom_mask); + + iBackgroundBottomSectionTexture = CHuiTexture::NewL(); + iBackgroundBottomSectionTexture->UploadL(*picture, mask); + + iBackgroundBottomSectionVisual->SetImage( THuiImage( *iBackgroundBottomSectionTexture ) ); + + CleanupStack::PopAndDestroy(); // picture + CleanupStack::PopAndDestroy(); // mask + + + // Item layouts + for( TInt i = 0; i < NAP2Cfg::KMaxNofItemsInView + 1; i++) + { + CHuiLayout* layout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + layout->SetFlags(EHuiVisualFlagManualLayout); + layout->SetSize(THuiRealSize(ActivePalette2Utils::APDimensionSize( EItemSize ))); + layout->SetPos(THuiRealPoint(ItemPosition(i))); + iItemLayout.Append(layout); + + CHuiImageVisual* image = CHuiImageVisual::AddNewL(*this, layout); + iItemVisual.Append(image); + + CHuiTexture* texture = CHuiTexture::NewL(); + iItemTexture.Append(texture); + + image->SetImage( THuiImage( *texture ) ); + } + + + // Top scroll icon + iTopScrollLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + iTopScrollLayout->SetFlags(EHuiVisualFlagManualLayout); + iTopScrollLayout->SetSize(THuiRealSize(ActivePalette2Utils::APDimensionSize(E3dScrollIconSize))); + iTopScrollLayout->SetPos(THuiRealPoint(TopScrollPanePosition() + ActivePalette2Utils::APDimensionPoint(E3dScrollIconOffset))); + + iTopScrollVisual = CHuiImageVisual::AddNewL(*this, iTopScrollLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_arrow_up, EMbmActivepalette2graphicsQgn_graf_cam4_tb_arrow_up_mask); + + iTopScrollTexture = CHuiTexture::NewL(); + iTopScrollTexture->UploadL(*picture, mask); + + iTopScrollVisual->SetImage( THuiImage( *iTopScrollTexture ) ); + + CleanupStack::PopAndDestroy(); + CleanupStack::PopAndDestroy(); + + + // Bottom scroll icon + iBottomScrollLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + iBottomScrollLayout->SetFlags(EHuiVisualFlagManualLayout); + iBottomScrollLayout->SetSize(THuiRealSize(ActivePalette2Utils::APDimensionSize(E3dScrollIconSize))); + iBottomScrollLayout->SetPos(THuiRealPoint(BottomScrollPanePosition() + ActivePalette2Utils::APDimensionPoint(E3dScrollIconOffset))); + + iBottomScrollVisual = CHuiImageVisual::AddNewL(*this, iBottomScrollLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_arrow_down, EMbmActivepalette2graphicsQgn_graf_cam4_tb_arrow_down_mask); + + iBottomScrollTexture = CHuiTexture::NewL(); + iBottomScrollTexture->UploadL(*picture, mask); + + iBottomScrollVisual->SetImage( THuiImage( *iBottomScrollTexture ) ); + + CleanupStack::PopAndDestroy(); + CleanupStack::PopAndDestroy(); + + + // Focus ring + iFocusRingLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iPaletteLayout); + iFocusRingLayout->SetFlags(EHuiVisualFlagManualLayout); + iFocusRingLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(EFocusRingWidth), ActivePalette2Utils::APDimension(EFocusRingHeight)))); + iFocusRingLayout->SetPos(THuiRealPoint(ItemPosition(0) + TPoint(ActivePalette2Utils::APDimension(EFocusRingXOffset), ActivePalette2Utils::APDimension(EFocusRingYOffset)))); + + iFocusRingVisual = CHuiImageVisual::AddNewL(*this, iFocusRingLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_focus, EMbmActivepalette2graphicsQgn_graf_cam4_tb_focus_mask); + + iFocusRingTexture = CHuiTexture::NewL(); + iFocusRingTexture->UploadL(*picture, mask); + + iFocusRingVisual->SetImage( THuiImage( *iFocusRingTexture ) ); + + CleanupStack::PopAndDestroy(); + CleanupStack::PopAndDestroy(); + + + // Tooltip + iTooltipLayout = AppendLayoutL(EHuiLayoutTypeAnchor); + iTooltipLayout->SetFlags(EHuiVisualFlagManualLayout); + iTooltipLayout->SetSize(THuiRealSize(TSize(0, 0))); + iTooltipLayout->SetPos(THuiRealPoint(iTopLeftCorner)); + iTooltipLayout->SetClipping(ETrue); + + + // Tooltip background for nose section + iTooltipBackgroundNoseLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iTooltipLayout); + iTooltipBackgroundNoseLayout->SetFlags(EHuiVisualFlagManualLayout); + iTooltipBackgroundNoseLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(ETooltipNose), ActivePalette2Utils::APDimension(ETooltipHeight)))); + iTooltipBackgroundNoseLayout->SetPos(THuiRealPoint(TPoint(0,0))); + + iTooltipBackgroundNoseVisual = CHuiImageVisual::AddNewL(*this, iTooltipBackgroundNoseLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_tooltip_end, EMbmActivepalette2graphicsQgn_graf_cam4_tb_tooltip_end_mask); + + iTooltipBackgroundNoseTexture = CHuiTexture::NewL(); + iTooltipBackgroundNoseTexture->UploadL(*picture, mask); + + iTooltipBackgroundNoseVisual->SetImage( THuiImage( *iTooltipBackgroundNoseTexture ) ); + + CleanupStack::PopAndDestroy(); // picture + CleanupStack::PopAndDestroy(); // mask + + + // Tooltip background for nose section + iTooltipBackgroundBodyLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iTooltipLayout); + iTooltipBackgroundBodyLayout->SetFlags(EHuiVisualFlagManualLayout); + iTooltipBackgroundBodyLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(E3dTooltipMaxWidth), ActivePalette2Utils::APDimension(ETooltipHeight)))); + iTooltipBackgroundBodyLayout->SetPos(THuiRealPoint(TPoint(ActivePalette2Utils::APDimension(ETooltipNose),0))); + + iTooltipBackgroundBodyVisual = CHuiImageVisual::AddNewL(*this, iTooltipBackgroundBodyLayout); + + AknIconUtils::CreateIconLC(picture, mask, NAP2Cfg::KUIGraphics, EMbmActivepalette2graphicsQgn_graf_cam4_tb_tooltip_body, EMbmActivepalette2graphicsQgn_graf_cam4_tb_tooltip_body_mask); + + iTooltipBackgroundBodyTexture = CHuiTexture::NewL(); + iTooltipBackgroundBodyTexture->UploadL(*picture, mask); + + iTooltipBackgroundBodyVisual->SetImage( THuiImage( *iTooltipBackgroundBodyTexture ) ); + + CleanupStack::PopAndDestroy(); // picture + CleanupStack::PopAndDestroy(); // mask + + + // Tooltip text layouts + iTooltipTextLayout = AppendLayoutL(EHuiLayoutTypeAnchor, iTooltipLayout); + iTooltipTextLayout->SetFlags(EHuiVisualFlagManualLayout); + iTooltipTextLayout->SetSize(THuiRealSize(TSize(ActivePalette2Utils::APDimension(E3dTooltipMaxWidth), ActivePalette2Utils::APDimension(ETooltipHeight)))); + iTooltipTextLayout->SetPos(THuiRealPoint(TPoint(ActivePalette2Utils::APDimension(ETooltipNose), ActivePalette2Utils::APDimension(E3dTooltipTextYOffset)))); + + iTooltipTextVisual = CHuiTextVisual::AddNewL(*this, iTooltipTextLayout); + iTooltipTextVisual->SetStyle(EHuiTextStyleMenuSmall, EHuiBackgroundTypeLight); + iTooltipTextVisual->SetMaxLineCount(1); + iTooltipTextVisual->SetAlign(EHuiAlignHLeft, EHuiAlignVCenter); + iTooltipTextVisual->SetTextL(_L("")); + + + iGeneralTimer = CPeriodic::NewL(CActive::EPriorityStandard); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::~CActivePalette2HUI() +// ----------------------------------------------------------------------------- +// +CActivePalette2HUI::~CActivePalette2HUI() + { + if (iGeneralTimer) + { + iGeneralTimer->Cancel(); + delete iGeneralTimer; + } + + iItemLayout.Reset(); + iItemVisual.Reset(); + iItemTexture.ResetAndDestroy(); + + delete iBackgroundTopSectionTexture; + delete iBackgroundMidSectionTexture; + delete iBackgroundBottomSectionTexture; + + delete iFocusRingTexture; + + delete iBottomScrollTexture; + delete iTopScrollTexture; + + delete iTooltipBackgroundBodyTexture; + delete iTooltipBackgroundNoseTexture; + + delete iModel; + iModel = NULL; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::InstallItemL() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::InstallItemL(const TActivePalette2ItemVisible& aItemVisible, + const TUid& aPluginUid, + const TDesC8& aCustomDataDes) + { + return iModel->InstallItemL(aItemVisible, aPluginUid, aCustomDataDes); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::InstallItemL() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::InstallItemL(const TActivePalette2ItemVisible& aItemVisible, + const TUid& aPluginUid, + TInt aCustomDataInt ) + { + return iModel->InstallItemL(aItemVisible, aPluginUid, aCustomDataInt); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::InstallItemL() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::InstallItemL(const TActivePalette2ItemVisible& aItemVisible, + const TUid& aPluginUid, + TInt aCustomDataInt, + const TDesC8& aCustomDataDes) + { + return iModel->InstallItemL(aItemVisible, aPluginUid, aCustomDataInt, aCustomDataDes); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::RemoveItem() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::RemoveItem(const TInt aItemId) + { + return iModel->RemoveItem(aItemId); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetItemVisibility() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SetItemVisibility(const TInt aItemId, const TBool aIsVisible) + { + return iModel->SetItemVisibility(aItemId, aIsVisible); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::GetItemVisibility() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::GetItemVisibility(const TInt aItemId, TBool &aIsVisible) const + { + return iModel->GetItemVisibility(aItemId, aIsVisible); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::GetItemList() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::GetItemList(RArray& aItemVisibleList) const + { + return iModel->GetItemList(aItemVisibleList); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetItemList() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SetItemList(const RArray& aItemVisibleList) + { + return iModel->SetItemList(aItemVisibleList); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SendMessage() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SendMessage(TInt aItemId, TInt aMessageId, const TDesC8& aDataDes) + { + return iModel->SendMessage(aItemId, aMessageId, aDataDes); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SendMessage() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SendMessage(TInt aItemId, TInt aMessageId, TInt aDataInt) + { + return iModel->SendMessage(aItemId, aMessageId, aDataInt); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::GetCurrentItem() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::GetCurrentItem(TInt& aItemId) const + { + return iModel->GetCurrentItem(aItemId); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetCurrentItem() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SetCurrentItem(const TInt aItemId) + { + return iModel->SetCurrentItem(aItemId); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetPaletteVisibility() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SetPaletteVisibility(TBool aVisible, TBool aAnimated, TInt aDelayedStartMilliseconds) + { + return iModel->SetPaletteVisibility(aVisible, aAnimated, aDelayedStartMilliseconds); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetPaletteVisibilityAnimationDuration() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::SetPaletteVisibilityAnimationDuration(TInt aTimeInMilliseconds) + { + return iModel->SetPaletteVisibilityAnimationDuration(aTimeInMilliseconds); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::GetPaletteVisibilityAnimationDuration() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::GetPaletteVisibilityAnimationDuration(TInt& aTimeInMilliseconds) const + { + return iModel->GetPaletteVisibilityAnimationDuration(aTimeInMilliseconds); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::CoeControl() +// ----------------------------------------------------------------------------- +// +CCoeControl* CActivePalette2HUI::CoeControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::HuiControl() +// ----------------------------------------------------------------------------- +// +CHuiControl* CActivePalette2HUI::HuiControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetGc() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::SetGc(CBitmapContext* /*aGc*/) + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::RenderActivePalette() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::RenderActivePalette(const TRect& /*aRect*/) const + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetObserver() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::SetObserver(MActivePalette2Observer* aObserver) + { + iObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::GetAvailablePlugins() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::GetAvailablePlugins(RArray& aPluginList) const + { + return iModel->GetAvailablePlugins(aPluginList); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::LocateTo() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::LocateTo(const TPoint& aTopLeft) + { + iTopLeftCorner = aTopLeft; + iPaletteLayout->SetPos(THuiRealPoint(PalettePosition())); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::Location() +// ----------------------------------------------------------------------------- +// +TPoint CActivePalette2HUI::Location() const + { + return iTopLeftCorner; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::SetNavigationKeys() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::SetNavigationKeys(const TActivePalette2NavigationKeys& aNavigationKeys) + { + iNavigationKeys = aNavigationKeys; + } + + + + + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ShowTooltipUpdated() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::ShowTooltipUpdated() + { + if ( iModel->ShowTooltip() ) + { + iTooltipLayout->iOpacity.Set(KOpacityFull); + } + else + { + iTooltipLayout->iOpacity.Set(KOpacityNone); + } + } + + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ItemsUpdated() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::ItemsUpdated() + { + // Update size + TSize overallSize(PaletteSize()); + iPaletteLayout->SetSize(THuiRealSize(overallSize)); + TSize itemsSize(overallSize); + itemsSize.iHeight -= (ActivePalette2Utils::APDimension(ETopSectionHeight) + ActivePalette2Utils::APDimension(EBottomSectionHeight)); + iBackgroundMidSectionLayout->SetSize(THuiRealSize(itemsSize)); + iBackgroundBottomSectionLayout->SetPos(THuiRealPoint(BottomScrollPanePosition())); + + Render(); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ItemAnimated() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::ItemAnimated(TInt aScreenPos, CActivePalette2Item* aItem, TInt aAnimFrame) + { + // animation frame + TBool ownershipTransferForFrame; + TBool ownershipTransferForMask; + CFbsBitmap* frame = NULL; + CFbsBitmap* frameMask = NULL; + + aItem->Plugin().ProduceAniFrame( + CActivePalettePluginBase::EAniFocused, + aAnimFrame, + iModel->ItemAnimInfo(), + aItem->Icon(), + aItem->Mask(), + &frame, + &frameMask, + ownershipTransferForFrame, + ownershipTransferForMask); + + TRAP_IGNORE(iItemTexture[aScreenPos]->UploadL(*frame, frameMask)); + iItemVisual[aScreenPos]->SetChanged(); + + // release resources + if (ownershipTransferForFrame) + { + delete frame; + } + if (ownershipTransferForMask) + { + delete frameMask; + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ItemAnimationComplete() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::ItemAnimationComplete(TInt /*aScreenPos*/, CActivePalette2Item* aItem) + { + aItem->Plugin().ReleaseAniFrames(CActivePalettePluginBase::EAniFocused); + Render(); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::PaletteAppearingUpdated() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::PaletteAppearingUpdated() + { + iGeneralTimer->Cancel(); + iPaletteLayout->SetPos(THuiRealPoint(PalettePosition())); + UpdateFocus(); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::UpdateFocus() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::UpdateFocus() + { + if ( iModel->PaletteActive() + && iModel->CountItemsOnScreen() > 0 ) + { + TPoint startPos = ItemPosition(iModel->FocusedItem()) + TPoint(ActivePalette2Utils::APDimension(EFocusRingXOffset), ActivePalette2Utils::APDimension(EFocusRingYOffset)); + iFocusRingLayout->SetPos(THuiRealPoint(startPos)); + iFocusRingVisual->iOpacity.Set(1.0); + } + else + { + iFocusRingVisual->iOpacity.Set(0.0); + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::APObserver() +// ----------------------------------------------------------------------------- +// +MActivePalette2Observer* CActivePalette2HUI::APObserver() const + { + return iObserver; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::Render() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::Render() + { +#ifdef PREPROCESS_BITMAPS + CFbsBitmap* tempBitmap = NULL; + CFbsBitmapDevice* tempDevice = NULL; + CBitmapContext* tempGc = NULL; + + CFbsBitmap* tempMaskBitmap = NULL; + CFbsBitmapDevice* tempMaskDevice = NULL; + CBitmapContext* tempMaskGc = NULL; + + TRAPD(err, + ActivePalette2Utils::CreateDrawingObjectsL(EColor16MU, ActivePalette2Utils::APDimensionSize( EItemSize ), + &tempBitmap, + &tempDevice, + &tempGc)); + + if ( err != KErrNone ) + { + return; + } + + TRAPD(err2, ActivePalette2Utils::CreateDrawingObjectsL(EGray256, + ActivePalette2Utils::APDimensionSize( EItemSize ), + &tempMaskBitmap, + &tempMaskDevice, + &tempMaskGc)); + + if ( err2 != KErrNone ) + { + return; + } + +#endif // PREPROCESS_BITMAPS + + if ( iModel->ShowTopScrollIndicator() ) + { + iTopScrollVisual->iOpacity.Set(KOpacityFull, NAP2Cfg::K3dScrollIndicatorFadeTime); + } + else + { + iTopScrollVisual->iOpacity.Set(KOpacityNone, NAP2Cfg::K3dScrollIndicatorFadeTime); + } + + + TInt numItemsOnScreen = iModel->CountItemsOnScreen(); + + numItemsOnScreen++; + + TPoint scrollOffset = CurrentScrollOffset(); + + TInt i; + for ( i = 0; i < numItemsOnScreen; i++ ) + { + CActivePalette2Item* item = iModel->ItemFromScreenPos(i); + + if ( item ) + { + iItemLayout[i]->SetPos(THuiRealPoint(ItemPosition(i) + scrollOffset)); + +#ifdef PREPROCESS_BITMAPS + tempGc->BitBlt(TPoint(0,0), &(item->Icon())); + tempMaskGc->BitBlt(TPoint(0,0), item->Mask()); + TRAP_IGNORE(iItemTexture[i]->UploadL(*tempBitmap, tempMaskBitmap)); +#else + TRAP_IGNORE(iItemTexture[i]->UploadL(item->Icon(), item->Mask())); +#endif + iItemVisual[i]->iOpacity.Set(KOpacityFull); + } + } + + if ( iModel->ItemScrollOffset() == 0 ) + { + iItemVisual[numItemsOnScreen-1]->iOpacity.Set(KOpacityNone); + } + else + { + ItemsScrolledSetItemOpacities(); + } + + + for ( i = numItemsOnScreen; i < iItemVisual.Count(); i++ ) + { + iItemVisual[i]->iOpacity.Set(KOpacityNone); + } + + if ( iModel->ShowBottomScrollIndicator() ) + { + iBottomScrollLayout->SetPos(THuiRealPoint(BottomScrollPanePosition() + ActivePalette2Utils::APDimensionPoint(E3dScrollIconOffset))); + iBottomScrollVisual->iOpacity.Set(KOpacityFull, NAP2Cfg::K3dScrollIndicatorFadeTime); + } + else + { + iBottomScrollVisual->iOpacity.Set(KOpacityNone, NAP2Cfg::K3dScrollIndicatorFadeTime); + } + + UpdateFocus(); + +#ifdef PREPROCESS_BITMAPS + ActivePalette2Utils::DeleteDrawingObjects(&tempMaskBitmap, + &tempMaskDevice, + &tempMaskGc); + ActivePalette2Utils::DeleteDrawingObjects(&tempBitmap, + &tempDevice, + &tempGc); +#endif + } + + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::OfferEventL() +// ----------------------------------------------------------------------------- +// +TBool CActivePalette2HUI::OfferEventL(const THuiEvent& aEvent) + { + TBool res = EFalse; + + if(aEvent.IsKeyEvent() && aEvent.iCode == EEventKey) + { + if (aEvent.iKeyEvent.iScanCode == iNavigationKeys.iNaviPrev) + { + // go to previous + res = iModel->ProcessInputEvent(EAP2InputUp); + } + else if (aEvent.iKeyEvent.iScanCode == iNavigationKeys.iNaviNext) + { + // go to next + res = iModel->ProcessInputEvent(EAP2InputDown); + } + else if (aEvent.iKeyEvent.iScanCode == iNavigationKeys.iNaviSelect) + { + // select item + res = iModel->ProcessInputEvent(EAP2InputSelect); + } + else + { + // lint + } + } + + return res; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::PalettePosition() +// ----------------------------------------------------------------------------- +// +TPoint CActivePalette2HUI::PalettePosition() const + { + TInt totalFrames = Max(1, iModel->PaletteAppearingTotalFrames()); + TInt xOffset = ((KPaletteHiddenXPos - iTopLeftCorner.iX) * (totalFrames - iModel->PaletteAppearingCurrentFrame())) / totalFrames; + return TPoint(iTopLeftCorner.iX + xOffset, iTopLeftCorner.iY); + } + + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ItemsScrolledSetItemOpacities() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::ItemsScrolledSetItemOpacities() + { + TInt currentOffset = iModel->ItemScrollOffset(); + TInt totalFrames = Max(1, iModel->ItemScrollTotalFrames()); + + iItemVisual[0]->iOpacity.Set(TReal(totalFrames - currentOffset) / totalFrames); + iItemVisual[iModel->CountItemsOnScreen()]->iOpacity.Set(TReal(currentOffset) / totalFrames); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocus() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::AnimateFocus(TInt aCurrentPos, TInt aTargetPos, TInt aTimeInMilliseconds) + { + if ( iModel->PaletteActive() + && iModel->CountItemsOnScreen() > 0 ) + { + iFocusRingLayout->SetPos(THuiRealPoint(ItemPosition(aCurrentPos) + TPoint(ActivePalette2Utils::APDimension(EFocusRingXOffset), ActivePalette2Utils::APDimension(EFocusRingYOffset)))); + + iFocusRingLayout->SetPos(THuiRealPoint(ItemPosition(aTargetPos) + TPoint(ActivePalette2Utils::APDimension(EFocusRingXOffset), ActivePalette2Utils::APDimension(EFocusRingYOffset))), aTimeInMilliseconds); + + iFocusRingVisual->iOpacity.Set(KOpacityFull); + + iGeneralTimer->Cancel(); + iGeneralTimer->Start( + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + TCallBack(&CActivePalette2HUI::AnimateFocusTimerCallback,(TAny *)this)); + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocusTimerCallback() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateFocusTimerCallback(TAny* aPtr) + { + CActivePalette2HUI* self = (CActivePalette2HUI*) aPtr; + + if ( self ) + { + return self->AnimateFocusTimerComplete(); + } + else + { + return KCallbackFinished; + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocusTimerComplete() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateFocusTimerComplete() + { + iGeneralTimer->Cancel(); + iModel->AnimateFocusRendererComplete(); + return KCallbackFinished; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::ItemPosition() +// ----------------------------------------------------------------------------- +// +TPoint CActivePalette2HUI::ItemPosition(TInt aScreenPos) const + { + return TPoint(ActivePalette2Utils::APDimension(EItemXOffset), ActivePalette2Utils::APDimension(ETopSectionHeight) + aScreenPos * (ActivePalette2Utils::APDimension(EItemHeight) + ActivePalette2Utils::APDimension(EGapBetweenItems))); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::TopScrollPanePosition() +// ----------------------------------------------------------------------------- +// +TPoint CActivePalette2HUI::TopScrollPanePosition() const + { + return TPoint(0, 0); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::BottomScrollPanePosition() +// ----------------------------------------------------------------------------- +// +TPoint CActivePalette2HUI::BottomScrollPanePosition() const + { + TInt gaps = Max(0, iModel->CountItemsOnScreen() - 1); + return TPoint(0, ActivePalette2Utils::APDimension(ETopSectionHeight) + iModel->CountItemsOnScreen() * ActivePalette2Utils::APDimension(EItemHeight) + gaps * ActivePalette2Utils::APDimension(EGapBetweenItems)); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::PaletteSize() +// ----------------------------------------------------------------------------- +// +TSize CActivePalette2HUI::PaletteSize() const + { + return TSize(ActivePalette2Utils::APDimension(EPaletteWidth), BottomScrollPanePosition().iY + ActivePalette2Utils::APDimension(EBottomSectionHeight)); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::CurrentScrollOffset() +// ----------------------------------------------------------------------------- +// +TPoint CActivePalette2HUI::CurrentScrollOffset() const + { + return TPoint(0, -((ActivePalette2Utils::APDimension(EItemHeight) + ActivePalette2Utils::APDimension(EGapBetweenItems)) * iModel->ItemScrollOffset())/Max(1, iModel->ItemScrollTotalFrames())); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2BasicUI::AnimateAppearance() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::AnimateAppearance(TBool aVisible, TInt aTimeInMilliseconds) + { + if ( aVisible ) + { + iPaletteLayout->SetPos(THuiRealPoint(TPoint(iTopLeftCorner.iX, iTopLeftCorner.iY)), aTimeInMilliseconds); + } + else + { + iPaletteLayout->SetPos(THuiRealPoint(TPoint(KPaletteHiddenXPos, iTopLeftCorner.iY)), aTimeInMilliseconds); + } + + iGeneralTimer->Cancel(); + iGeneralTimer->Start( + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + TCallBack(&CActivePalette2HUI::AnimateAppearanceTimerCallback,(TAny *)this)); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocusTimerCallback() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateAppearanceTimerCallback(TAny* aPtr) + { + CActivePalette2HUI* self = (CActivePalette2HUI*) aPtr; + + if ( self ) + { + return self->AnimateAppearanceTimerComplete(); + } + else + { + return KCallbackFinished; + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocusTimerComplete() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateAppearanceTimerComplete() + { + iGeneralTimer->Cancel(); + iModel->AnimateAppearanceRendererComplete(); + return KCallbackFinished; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::GuessCurrentAppearanceFrame() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::GuessCurrentAppearanceFrame() + { + if ( KPaletteHiddenXPos - iTopLeftCorner.iX == 0 ) + { + return 0; + } + else + { + TInt currentPos = iPaletteLayout->Pos().Now().iX; + return ((KPaletteHiddenXPos - currentPos) * iModel->PaletteAppearingTotalFrames()) / (KPaletteHiddenXPos - iTopLeftCorner.iX); + } + } + + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateItemScroll() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::AnimateItemScroll(TInt aDirection, TInt aTimeInMilliseconds) + { + + TInt numItems = iModel->CountItemsOnScreen(); + + TInt itemOffset = 0; + if ( aDirection == 1 ) + { + itemOffset = -1; + } + + for( TInt i = 0; i <= numItems; i++) + { + iItemLayout[i]->SetPos(THuiRealPoint(ItemPosition(i + itemOffset)), aTimeInMilliseconds); + } + + if ( aDirection > 0 ) + { + iItemVisual[0]->iOpacity.Set(KOpacityNone, aTimeInMilliseconds); + iItemVisual[numItems]->iOpacity.Set(KOpacityFull, aTimeInMilliseconds); + } + else + { + iItemVisual[0]->iOpacity.Set(KOpacityFull, aTimeInMilliseconds); + iItemVisual[numItems]->iOpacity.Set(KOpacityNone, aTimeInMilliseconds); + } + + iGeneralTimer->Cancel(); + iGeneralTimer->Start( + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + TCallBack(&CActivePalette2HUI::AnimateItemScrollTimerCallback,(TAny *)this)); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocusTimerCallback() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateItemScrollTimerCallback(TAny* aPtr) + { + CActivePalette2HUI* self = (CActivePalette2HUI*) aPtr; + + if ( self ) + { + return self->AnimateItemScrollTimerComplete(); + } + else + { + return KCallbackFinished; + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateFocusTimerComplete() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateItemScrollTimerComplete() + { + iGeneralTimer->Cancel(); + iModel->AnimateItemScrollRendererComplete(); + return KCallbackFinished; + } + + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::TooltipUpdated() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::TooltipUpdated() + { + TRAP_IGNORE(iTooltipTextVisual->SetTextL(*(iModel->TooltipText()))); + TSize textSize = iTooltipTextVisual->TextExtents(); + return textSize.iWidth + ActivePalette2Utils::APDimension(ETooltipTail) + ActivePalette2Utils::APDimension(ETooltipNose); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateTooltip() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::AnimateTooltip(TBool aToShow, TInt aTimeInMilliseconds) + { + TInt startMultiplier = aToShow ? 0 : 1; + TInt endMultiplier = aToShow ? 1 : 0; + + TPoint startPos(iTopLeftCorner + ItemPosition(iModel->TooltipScreenPosition()) + ActivePalette2Utils::APDimensionPoint(E3dTooltipOffset)); + TSize startSize(((iTooltipTextVisual->TextExtents().iWidth + ActivePalette2Utils::APDimension(ETooltipNose) + ActivePalette2Utils::APDimension(ETooltipTail)) * startMultiplier), ActivePalette2Utils::APDimension(ETooltipHeight)); + startPos.iX -= startSize.iWidth; + + iTooltipLayout->SetSize(THuiRealSize(startSize)); + iTooltipLayout->SetPos(THuiRealPoint(startPos)); + + TPoint endPos(iTopLeftCorner + ItemPosition(iModel->TooltipScreenPosition()) + ActivePalette2Utils::APDimensionPoint(E3dTooltipOffset)); + TSize endSize(((iTooltipTextVisual->TextExtents().iWidth + ActivePalette2Utils::APDimension(ETooltipNose) + ActivePalette2Utils::APDimension(ETooltipTail)) * endMultiplier), ActivePalette2Utils::APDimension(ETooltipHeight)); + endPos.iX -= endSize.iWidth; + + iTooltipLayout->SetSize(THuiRealSize(endSize), aTimeInMilliseconds); + iTooltipLayout->SetPos(THuiRealPoint(endPos), aTimeInMilliseconds); + + ShowTooltipUpdated(); + + iGeneralTimer->Cancel(); + iGeneralTimer->Start( + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + aTimeInMilliseconds * KMicrosecondsPerMillisecond, + TCallBack(&CActivePalette2HUI::AnimateTooltipTimerCallback,(TAny *)this)); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateTooltipTimerCallback() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateTooltipTimerCallback(TAny* aPtr) + { + CActivePalette2HUI* self = (CActivePalette2HUI*) aPtr; + + if ( self ) + { + return self->AnimateTooltipTimerComplete(); + } + else + { + return KCallbackFinished; + } + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::AnimateTooltipTimerComplete() +// ----------------------------------------------------------------------------- +// +TInt CActivePalette2HUI::AnimateTooltipTimerComplete() + { + iGeneralTimer->Cancel(); + iModel->AnimateTooltipRendererComplete(); + return KCallbackFinished; + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::VisualLayoutUpdated() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::VisualLayoutUpdated(CHuiVisual& /*aVisual*/) + { + UpdateTopLeftCornerWithScreenSize(); + iPaletteLayout->SetPos(THuiRealPoint(PalettePosition())); + } + +// ----------------------------------------------------------------------------- +// CActivePalette2HUI::UpdateTopLeftCornerWithScreenSize() +// ----------------------------------------------------------------------------- +// +void CActivePalette2HUI::UpdateTopLeftCornerWithScreenSize() + { + AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EScreen, iScreenSize ); + + // This uses the same logic that MC Photos used. If in landscape mode or no + // location specified in portrait mode then position the palette relative to + // the top RH corner of the screen using the default settings + if ( ( iScreenSize.iWidth > iScreenSize.iHeight ) || + ( ! iLocated ) ) + { + iTopLeftCorner.iX = iScreenSize.iWidth + ActivePalette2Utils::APDimensionPoint(EDefault3dPaletteOffset).iX; + iTopLeftCorner.iY = ActivePalette2Utils::APDimensionPoint(EDefault3dPaletteOffset).iY; + } + }