diff -r 000000000000 -r 951a5db380a0 videditor/VideoEditorUiComponents/src/VeiTimeLabelNavi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/VideoEditorUiComponents/src/VeiTimeLabelNavi.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,395 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* +*/ + + +// INCLUDE FILES +// System includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef RD_TACTILE_FEEDBACK +#include +#endif /* RD_TACTILE_FEEDBACK */ + +// User includes +#include "VeiTimeLabelNavi.h" +#include "VideoEditorCommon.h" +#include "VideoEditorUtils.h" +#include "VideoEditorDebugUtils.h" +#include "mtimelabelnaviobserver.h" + +// CONSTANTS +_LIT(KDefaultLabel,""); // empty label text + +enum TVeiTimeLabelLayout + { + EArrayItem = 0, + ESpeakerItem, + EPausedItem + }; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CTimeLabelNavi::~CTimeLabelNavi() +// Destructor +// --------------------------------------------------------- +// +EXPORT_C CVeiTimeLabelNavi::~CVeiTimeLabelNavi() + { + DeleteBitmaps(); + } + +void CVeiTimeLabelNavi::DeleteBitmaps() + { + delete iArrowBitmap; + iArrowBitmap = NULL; + + delete iArrowBitmapMask; + iArrowBitmapMask = NULL; + + delete iVolumeBitmap; + iVolumeBitmap = NULL; + + delete iVolumeBitmapMask; + iVolumeBitmapMask = NULL; + + delete iMutedBitmap; + iMutedBitmap = NULL; + + delete iMutedBitmapMask; + iMutedBitmapMask = NULL; + + delete iPausedBitmap; + iPausedBitmap = NULL; + + delete iPausedBitmapMask; + iPausedBitmapMask = NULL; + } + +// --------------------------------------------------------- +// CTimeLabelNavi::CTimeLabelNavi() +// Constructor +// --------------------------------------------------------- +// +CVeiTimeLabelNavi::CVeiTimeLabelNavi(): +iArrowVisible(ETrue), +iVolumeIconVisible(ETrue), +iPauseIconVisible(EFalse) + { + iLabel = KDefaultLabel; + } + +// --------------------------------------------------------- +// CTimeLabelNavi::ConstructL() +// Constructor +// --------------------------------------------------------- +// +void CVeiTimeLabelNavi::ConstructL() + { + LoadBitmapsL(); + } + +void CVeiTimeLabelNavi::LoadBitmapsL() + { + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::LoadBitmapsL: in"); + + TFileName bitmapfile( VideoEditorUtils::IconFileNameAndPath( + KVideoEditorUiComponentsIconFileId) ); + + //Loads a specific bitmap from a multi-bitmap file. + //const bitmapfile = the filename of the multi-bitmap (.mbm) file. + MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); + +/* muted bitmap */ + AknsUtils::CreateColorIconL( + skinInstance, KAknsIIDQgnIndiSpeakerMuted,KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG6, + iMutedBitmap, iMutedBitmapMask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_speaker_muted, + EMbmAvkonQgn_indi_speaker_muted_mask,KRgbBlack); +// Arrow bitmap + AknsUtils::CreateColorIconL( + skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG6, + iArrowBitmap, iArrowBitmapMask, + bitmapfile, + EMbmVideoeditoruicomponentsQgn_indi_vded_volume_up_down, + EMbmVideoeditoruicomponentsQgn_indi_vded_volume_up_down_mask, + KRgbBlack); + +/* Speaker bitmap */ + AknsUtils::CreateColorIconL( + skinInstance, KAknsIIDQgnIndiSpeaker,KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG6, + iVolumeBitmap, iVolumeBitmapMask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_speaker, EMbmAvkonQgn_indi_speaker_mask, + KRgbBlack); + +/* Pause bitmap */ +// Pause bitmap in not used anywhere at the moment. There is not proper +// icon to be used for it anyway in the platform. If needed in the future, +// a new icon graphic need to be requested. +/* + AknsUtils::CreateColorIconL( + skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG6, + iPausedBitmap, iPausedBitmapMask, + bitmapfile, + EMbmVideoeditoruicomponentsQgn_prop_ve_pause, + EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask,KRgbBlack); +*/ + +#ifdef RD_TACTILE_FEEDBACK + iTouchFeedBack = MTouchFeedback::Instance(); +#endif /* RD_TACTILE_FEEDBACK */ + + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::LoadBitmapsL: out"); + } + + +// --------------------------------------------------------- +// CTimeLabelNavi::NewL() +// Symbian OS two-phase contruction +// --------------------------------------------------------- +// +EXPORT_C CVeiTimeLabelNavi* CVeiTimeLabelNavi::NewL() + { + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewL: in"); + + CVeiTimeLabelNavi* self = CVeiTimeLabelNavi::NewLC(); + CleanupStack::Pop( self ); + + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewL: out"); + return self; + } + +EXPORT_C CVeiTimeLabelNavi* CVeiTimeLabelNavi::NewLC() + { + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewLC: in"); + + CVeiTimeLabelNavi* self = new(ELeave) CVeiTimeLabelNavi(); + CleanupStack::PushL(self); + self->ConstructL(); + + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewLC: out"); + return self; + } + + +EXPORT_C void CVeiTimeLabelNavi::SetLabelL( const TDesC& aLabel ) + { + #ifdef VERBOSE + LOGFMT(KVideoEditorLogFile, "CVeiTimeLabelNavi::SetLabelL: %S", &aLabel); + #endif + + if (aLabel.Length() <= iLabel.MaxLength()) + { + iLabel = aLabel; + } + ReportEventL(MCoeControlObserver::EEventStateChanged); + } + +EXPORT_C void CVeiTimeLabelNavi::SetLeftArrowVisibilityL(TBool aVisible) + { + iArrowVisible = aVisible; + ReportEventL(MCoeControlObserver::EEventStateChanged); + } + +EXPORT_C void CVeiTimeLabelNavi::SetRightArrowVisibilityL(TBool aVisible) + { + iArrowVisible = aVisible; + ReportEventL(MCoeControlObserver::EEventStateChanged); + } + +EXPORT_C void CVeiTimeLabelNavi::SetVolumeIconVisibilityL(TBool aVisible) + { + iVolumeIconVisible = aVisible; + ReportEventL(MCoeControlObserver::EEventStateChanged); + } + +EXPORT_C void CVeiTimeLabelNavi::SetPauseIconVisibilityL(TBool aVisible) + { + iPauseIconVisible = aVisible; + ReportEventL(MCoeControlObserver::EEventStateChanged); + } + +void CVeiTimeLabelNavi::SizeChanged() + { + TRect parentRect(Rect()); + parentRect.iTl.iY+=2; + /* + const TRect & aParent, + TInt C, + TInt l, + TInt t, + TInt r, + TInt b, + TInt W, + TInt H + + //C colour index, 0..255 + //l left margin + //r right margin + //B Baseline from top of the parent rectangle + //W text width in pixels + //J justification. ELayoutAlignNone; ELayoutAlignCenter; ELayoutAlignLeft; ELayoutAlignRight +*/ + + const CFont* myFont = AknLayoutUtils::FontFromId( ELatinBold19/*EAknLogicalFontSecondaryFont*/ ); + TInt baseline = ( parentRect.Height() / 2 ) + ( myFont->AscentInPixels() / 2 ); + TInt iconHeightWidth = parentRect.Height(); + + TSize iconSize = TSize(STATIC_CAST(TInt,0.0649*parentRect.Width()), + STATIC_CAST(TInt,0.5625*parentRect.Height() )); //14,18 + + AknIconUtils::SetSize( + iArrowBitmap, + iconSize, + EAspectRatioNotPreserved ); + + AknIconUtils::SetSize( + iPausedBitmap, + iconSize, + EAspectRatioNotPreserved ); + + TInt arrowTop = ( parentRect.iBr.iY/2 - iconSize.iHeight/2 ); + + iBitmapLayout[EArrayItem].LayoutRect(parentRect, ELayoutEmpty, STATIC_CAST(TInt, 0.0926*parentRect.Width()), arrowTop, ELayoutEmpty, ELayoutEmpty,iconHeightWidth,iconSize.iHeight); + iBitmapLayout[ESpeakerItem].LayoutRect(parentRect, ELayoutEmpty, STATIC_CAST(TInt, 0.1625*parentRect.Width()), 0, ELayoutEmpty, ELayoutEmpty, iconHeightWidth, iconHeightWidth); + iBitmapLayout[EPausedItem].LayoutRect(parentRect, ELayoutEmpty, 0, 0, ELayoutEmpty, ELayoutEmpty, 17, 16); + + TInt textLeftMargin = STATIC_CAST( TInt, 0.6045*parentRect.Width() ); + TInt textRightMargin = STATIC_CAST( TInt, 0.9546*parentRect.Width() ); + + if( parentRect.iBr.iX != 108 ) + { + iTextLayout.LayoutText(parentRect, ELatinBold19, 0, textLeftMargin, 0, + baseline, textRightMargin-textLeftMargin, ELayoutAlignLeft); + + } + else + { + arrowTop = STATIC_CAST( TInt, parentRect.iBr.iY/2 - 9/2 ); + iBitmapLayout[EArrayItem].LayoutRect(parentRect, ELayoutEmpty, 14, arrowTop, ELayoutEmpty, ELayoutEmpty,iconHeightWidth,9); + iBitmapLayout[ESpeakerItem].LayoutRect(parentRect, ELayoutEmpty, 20, 0, ELayoutEmpty, ELayoutEmpty,iconHeightWidth,iconHeightWidth); + iBitmapLayout[EPausedItem].LayoutRect(parentRect, ELayoutEmpty, 0, 0, ELayoutEmpty, ELayoutEmpty,17, 16); + + + textLeftMargin = STATIC_CAST( TInt, 0.7273*parentRect.Width()/2 +20); + textRightMargin = STATIC_CAST( TInt, 0.9546*parentRect.Width()/2 +20); + + iTextLayout.LayoutText(parentRect, ELatinBold19, 0, textLeftMargin, 0, + baseline, textRightMargin-textLeftMargin, ELayoutAlignLeft); + } + + + AknIconUtils::SetSize( iVolumeBitmap, TSize( iconHeightWidth, iconHeightWidth) ); + + AknIconUtils::SetSize( iMutedBitmap, TSize( iconHeightWidth, iconHeightWidth) ); + } + +void CVeiTimeLabelNavi::Draw(const TRect& /*aRect*/) const + { + CWindowGc& gc=SystemGc(); + + if ( iVolumeIconVisible ) + { + iBitmapLayout[ESpeakerItem].DrawImage( gc, iVolumeBitmap, iVolumeBitmapMask ); + + if ( iArrowVisible && !AknLayoutUtils::PenEnabled() ) + { + iBitmapLayout[EArrayItem].DrawImage( gc, iArrowBitmap, iArrowBitmapMask ); + } + } + else + { + iBitmapLayout[ESpeakerItem].DrawImage( gc, iMutedBitmap, iMutedBitmapMask ); + } + + if ( iPauseIconVisible ) + { + // not in use at the moment, pause icon is drawed in main pane instead + //iBitmapLayout[EPausedItem].DrawImage( gc, iPausedBitmap, NULL ); + } + + TBuf<32> labelWithConvNumbers; + labelWithConvNumbers.Append( iLabel ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( labelWithConvNumbers ); + + MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); + //AknsDrawUtils::DrawCachedImage(skinInstance,gc,TRect(0,0,24,24),KAknsIIDQgnIndiSpeaker); + + // Get navi pane text color from skin + TRgb textColor( KRgbBlack ); + // Note: we are using the navi icon color for the text. There should + // be separate color definition for the text, but I could not find + // out what it is. Apparently KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 + // is NOT the correct color. Someone should find out which color is used + // for the label in CAknNavigationDecorator. + //AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 ); + AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG6 ); + + gc.SetBrushStyle( CGraphicsContext::ENullBrush ); + iTextLayout.DrawText(gc, labelWithConvNumbers, ETrue, textColor); + } + +void CVeiTimeLabelNavi::HandleResourceChange(TInt aType) + { + LOGFMT(KVideoEditorLogFile, "CVeiTimeLabelNavi::HandleResourceChange() In, aType:%d", aType); + + if (KAknsMessageSkinChange == aType) + { + // Reload the icon bitmaps with the current skin color + DeleteBitmaps(); + TRAP_IGNORE( LoadBitmapsL() ); + } + CCoeControl::HandleResourceChange(aType); + + LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::HandleResourceChange() Out"); + } + +void CVeiTimeLabelNavi::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + if( iObserver && + iBitmapLayout[ESpeakerItem].Rect().Contains( aPointerEvent.iPosition ) ) + { +#ifdef RD_TACTILE_FEEDBACK + if ( iTouchFeedBack ) + { + iTouchFeedBack->InstantFeedback( ETouchFeedbackBasic ); + } +#endif /* RD_TACTILE_FEEDBACK */ + + iObserver->HandleNaviEventL(); + } + } + +// End of File +