camerauis/activepalette/Src/ActivePalette2HUI.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 0 1ddebce53859
--- /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 <uiacceltk/HuiEvent.h>
+#include <uiacceltk/HuiImageVisual.h>
+#include <uiacceltk/HuiUtil.h>
+#include <uiacceltk/HuiFlowLayout.h>
+#include <uiacceltk/HuiTextVisual.h>
+#include <uiacceltk/HuiMeshVisual.h>
+#include <AknUtils.h>
+#include <AknIconUtils.h>
+#include <activepalette2factory.h>
+#include <activepalette2observer.h>
+#include <activepalette2ui.h>
+#include <activepalette2graphics.mbg>
+
+#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<TActivePalette2ItemVisible>& aItemVisibleList) const
+    { 
+    return iModel->GetItemList(aItemVisibleList);
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2HUI::SetItemList()
+// -----------------------------------------------------------------------------
+//
+TInt CActivePalette2HUI::SetItemList(const RArray<TActivePalette2ItemVisible>& 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<TUid>& 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;
+      }
+	}