fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlExactWordPopupContent.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlExactWordPopupContent.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* 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: Contents of the exact word tooltip shown above inline editor
+* when the exact word differs from the inline word in Western
+* QWERTY predictive mode.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+#include <eiklabel.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <AknPreviewPopUpController.h>
+#include "AknFepUiAvkonCtrlExactWordPopupContent.h"
+
+
+const TInt KArrowWidth = 10;
+const TInt KArrowHeight = 5;
+
+CAknFepExactWordPopupContent* CAknFepExactWordPopupContent::NewL()
+ {
+ CAknFepExactWordPopupContent* self = new (ELeave) CAknFepExactWordPopupContent;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+CAknFepExactWordPopupContent::CAknFepExactWordPopupContent()
+ : iIsPopUpVisible(EFalse)
+ , iLabel( NULL )
+ , iPopupController( NULL )
+ , iArrowDirection( EUpwards )
+ {
+ }
+
+
+void CAknFepExactWordPopupContent::ConstructL()
+ {
+ iLabel = new (ELeave) CEikLabel;
+ iLabel->SetTextL(KNullDesC);
+
+ const CFont* font = AknLayoutUtils::FontFromId( AknLayout::Link_shortcut_title_texts_Line_1().FontId() );
+ iLabel->SetFont(font);
+
+ TRgb textColor(KRgbBlack);
+ iLabel->GetColor(EColorLabelText, textColor);
+ AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), textColor,
+ KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG20);
+ TRAP_IGNORE( AknLayoutUtils::OverrideControlColorL(*iLabel, EColorLabelText, textColor) );
+
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
+ iLabel->SetRect( screenRect );
+ SetRect( screenRect );
+
+ iPopupController = CAknPreviewPopUpController::NewL( *this,
+ CAknPreviewPopUpController::EPermanentMode );
+ iPopupController->SetPopUpShowDelay(0);
+ }
+
+MAknFepUiWordPopupContent::~MAknFepUiWordPopupContent()
+ {
+
+ }
+
+CAknFepExactWordPopupContent::~CAknFepExactWordPopupContent()
+ {
+ delete iLabel;
+ delete iPopupController;
+ }
+
+
+void CAknFepExactWordPopupContent::SetTextL( const TDesC& aText )
+ {
+ iLabel->SetTextL(aText);
+ }
+
+
+void CAknFepExactWordPopupContent::SetArrowDirection( MAknFepUiWordPopupContent::TArrowDirection aDirection )
+ {
+ iArrowDirection = aDirection;
+ }
+
+
+TSize CAknFepExactWordPopupContent::MinimumSize()
+ {
+ // Ensure we are on top. Otherwise the popup would be left on background in many applications
+ // (e.g. Notes, ActiveNotes, Messaging, Contacts).
+ Window().SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront);
+
+ TSize minSize = iLabel->MinimumSize();
+ //minSize.iHeight *= 2;
+ return minSize;
+ }
+
+
+void CAknFepExactWordPopupContent::Draw( const TRect& aRect ) const
+ {
+ TRect labelRect(aRect);
+
+ if ( iPopupController )
+ {
+ labelRect.SetSize( iPopupController->Size() );
+ }
+
+ // Reserve some space for the arrow, if it is going to be shown below the text
+ if ( iArrowDirection == EUpwards )
+ {
+ labelRect.iTl.iY -= KArrowHeight;
+ }
+
+ iLabel->SetRect( labelRect );
+ iLabel->Draw( labelRect );
+
+ TRAP_IGNORE( DrawArrowL( aRect ) );
+ }
+
+
+void CAknFepExactWordPopupContent::DrawArrowL( const TRect& aTextRect ) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.SetPenColor( iEikonEnv->ControlColor(EColorLabelText,*this) );
+ gc.SetBrushColor( iEikonEnv->ControlColor(EColorControlBackground,*this) );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+ CArrayFix<TPoint>* arrow = new (ELeave) CArrayFixFlat<TPoint>(3);
+ CleanupStack::PushL(arrow);
+
+ TPoint offset( aTextRect.iTl.iX + aTextRect.Width()/2 - KArrowWidth/2, 0 );
+
+ TPoint angle1;
+ TPoint angle2;
+ TPoint angle3;
+
+
+ if ( iArrowDirection == EDownwards )
+ {
+ offset.iY = aTextRect.iTl.iY - KArrowHeight;
+ angle1.SetXY( 0, 0 );
+ angle2.SetXY( KArrowWidth, 0 );
+ angle3.SetXY( KArrowWidth/2, KArrowHeight );
+ }
+ else // EUpwards
+ {
+ offset.iY = aTextRect.iBr.iY;
+ angle1.SetXY( 0, KArrowHeight );
+ angle2.SetXY( KArrowWidth, KArrowHeight );
+ angle3.SetXY( KArrowWidth/2, 0 );
+ }
+
+ arrow->AppendL( angle1 + offset );
+ arrow->AppendL( angle2 + offset );
+ arrow->AppendL( angle3 + offset );
+
+ gc.DrawPolygon(arrow);
+ CleanupStack::PopAndDestroy(arrow);
+ }
+
+void CAknFepExactWordPopupContent::SetPopUpShowDelay( const TTimeIntervalMicroSeconds32& aDelay )
+ {
+ iPopupController->SetPopUpShowDelay( aDelay );
+ }
+void CAknFepExactWordPopupContent::ShowPopUp()
+ {
+ iIsPopUpVisible = ETrue;
+ iPopupController->ShowPopUp();
+ }
+void CAknFepExactWordPopupContent::HidePopUp()
+ {
+ iIsPopUpVisible = EFalse;
+ iPopupController->HidePopUp();
+ }
+void CAknFepExactWordPopupContent::SetPosition( const TPoint& aPoint )
+ {
+ iPopupController->SetPosition( aPoint );
+ }
+void CAknFepExactWordPopupContent::UpdateContentSize()
+ {
+ iPopupController->UpdateContentSize();
+ }
+TSize CAknFepExactWordPopupContent::Size() const
+ {
+ return iPopupController->Size();
+ }
+TBool CAknFepExactWordPopupContent::IsPopUpVisible()
+ {
+ return iIsPopUpVisible;
+ }
+
+void CAknFepExactWordPopupContent::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+ {
+ if( !AknLayoutUtils::PenEnabled() )
+ {
+ return;
+ }
+
+ if (TPointerEvent::EButton1Down == aPointerEvent.iType)
+ {
+ TKeyEvent keyUp = {EKeyUpArrow, EStdKeyUpArrow, 0, 0};
+ CCoeEnv::Static()->WsSession().SimulateKeyEvent(keyUp);
+ }
+ }