--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxplaybackviewinfolabel.cpp Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2006 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: Text label for Playback view
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <AknsSkinInstance.h>
+#include <AknsDrawUtils.h>
+#include <AknsUtils.h>
+#include <AknMarqueeControl.h>
+#include <AknUtils.h>
+#include <AknLayoutFont.h>
+
+#include "mpxplaybackviewinfolabel.h"
+
+// CONSTANTS
+#ifdef _DEBUG
+_LIT( KPanicCat, "CMPXPlaybackViewInfoLabel" );
+#endif
+
+// MODULE DATA STRUCTURES
+enum TPanicCode
+ {
+ ENoPanic = 0,
+ EAlreadyScrolling,
+ ENoTextSet,
+ EFontNotSet
+ };
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CMPXPlaybackViewInfoLabel::CMPXPlaybackViewInfoLabel()
+ {
+ // do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::ConstructL(TBool aEnableMarqueeSupport)
+ {
+ if ( aEnableMarqueeSupport )
+ {
+ iMarquee = CAknMarqueeControl::NewL();
+ TCallBack callback( RedrawCallback, this );
+ iMarquee->SetRedrawCallBack( callback );
+ iMarquee->SetLoops( 1 );
+ iMarquee->SetContainerWindowL( *this );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CMPXPlaybackViewInfoLabel::~CMPXPlaybackViewInfoLabel()
+ {
+ delete iFullText;
+ delete iMarquee;
+ iBackground = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// Set background bitmap
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::SetBackground(
+ MAknsControlContext* aBackground )
+ {
+ iBackground = aBackground;
+ }
+
+// ---------------------------------------------------------------------------
+// Redraw rectangle
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::RedrawRect( const TRect& aRect ) const
+ {
+ if ( aRect.Intersects( Rect() ) )
+ {
+ CWindowGc& gc = SystemGc();
+ if ( iBackground )
+ {
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ AknsDrawUtils::Background( skin, iBackground, gc, Rect() );
+ }
+
+ CGraphicsContext::TTextAlign align=iAlignment.TextAlign();
+
+ // Get baseline for current font
+ TInt baselineOffset = 0;
+ if ( iMarquee )
+ {
+ const CAknLayoutFont* layoutFont =
+ CAknLayoutFont::AsCAknLayoutFontOrNull( Font() );
+ if ( layoutFont )
+ {
+ baselineOffset= layoutFont->TextPaneTopToBaseline();
+ }
+ }
+
+ gc.UseFont( Font() );
+ gc.SetPenColor( iEikonEnv->ControlColor( EColorLabelText,*this ) );
+
+ // Draw marquee, if supported and necessary
+ if ( !iMarquee || !iMarquee->IsMarqueeOn() || iMarquee->DrawText(
+ gc, // aGc
+ Rect(), // aTextRect
+ FullText(), // aText
+ baselineOffset, // aBaselineOffset
+ align, // aAlign
+ *Font() ) ) // aFont
+ {
+ // Marquee is not enabled or all the loops have been executed
+ // -> the text needs to be drawn here
+ CEikLabel::Draw( aRect );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Start marquee scrolling if supported and needed.
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::StartMarquee()
+ {
+ if ( iMarquee )
+ {
+ TBool need = NeedToScroll();
+ if ( need && !iMarquee->IsMarqueeOn() )
+ {
+ iMarquee->Reset();
+ }
+ iMarquee->EnableMarquee( need );
+ if ( need )
+ {
+ iMarquee->Start();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Stop marquee scrolling.
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::StopMarquee()
+ {
+ if ( iMarquee )
+ {
+ iMarquee->EnableMarquee( EFalse );
+ iMarquee->Stop();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Get the full unclipped text for the label
+// ---------------------------------------------------------------------------
+//
+const TDesC& CMPXPlaybackViewInfoLabel::FullText() const
+ {
+ if ( iFullText )
+ {
+ return *iFullText;
+ }
+ else
+ {
+ return *Text();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Set label text and clip if necessary.
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::SetLabelTextL( const TDesC& aText )
+ {
+ if ( iMarquee )
+ {
+ delete iFullText;
+ iFullText = NULL;
+ iFullText = aText.AllocL();
+ }
+
+ // magic: allocate 3 chars more (make sure "..." fits).
+ HBufC* buf = HBufC::NewLC( aText.Length() + 3 );
+ *buf = aText;
+ TPtr ptr( buf->Des() );
+ AknTextUtils::ClipToFit( ptr,
+ *Font(),
+ Rect().Width() );
+ SetTextL( *buf );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// ---------------------------------------------------------------------------
+// Check if scrolling is needed.
+// ---------------------------------------------------------------------------
+//
+TBool CMPXPlaybackViewInfoLabel::NeedToScroll() const
+ {
+ __ASSERT_DEBUG( iFont, User::Panic( KPanicCat, EFontNotSet ) );
+
+ TBool need( EFalse );
+ if ( iFullText && iFont->TextWidthInPixels( *iFullText ) > Size().iWidth )
+ {
+ need = ETrue;
+ }
+ return need;
+ }
+
+// ---------------------------------------------------------------------------
+// Redraw callback for marquee control
+// ---------------------------------------------------------------------------
+//
+TInt CMPXPlaybackViewInfoLabel::RedrawCallback( TAny* aPtr )
+ {
+ CMPXPlaybackViewInfoLabel* self =
+ static_cast<CMPXPlaybackViewInfoLabel*>( aPtr );
+ CWindowGc& gc = self->SystemGc();
+ gc.Activate( *self->DrawableWindow() );
+ self->Draw( self->Rect() );
+ gc.Deactivate();
+
+ return static_cast<TBool>( ETrue ); // True -> draw again
+ }
+
+// ---------------------------------------------------------------------------
+// Draws the control.
+// ---------------------------------------------------------------------------
+//
+void CMPXPlaybackViewInfoLabel::Draw( const TRect& aRect ) const
+ {
+ RedrawRect( aRect );
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the number of controls contained in a compound control.
+// ---------------------------------------------------------------------------
+//
+TInt CMPXPlaybackViewInfoLabel::CountComponentControls() const
+ {
+ TInt childCount = 0;
+ if ( iMarquee )
+ {
+ childCount++;
+ }
+ return childCount;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets an indexed component of a compound control.
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CMPXPlaybackViewInfoLabel::ComponentControl(
+ TInt aIndex ) const
+ {
+ ASSERT( aIndex == 0 ); // only 1 control
+ return iMarquee;
+ }
+
+// End of File