messagingappbase/msgeditor/viewsrc/MsgEditorCustomDraw.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgeditor/viewsrc/MsgEditorCustomDraw.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,258 @@
+/*
+* 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:  MsgEditorCustomDraw implementation
+*
+*/
+
+
+
+// ========== INCLUDE FILES ================================
+#include "MsgEditorCustomDraw.h"
+
+#include <gulicon.h>
+#include <AknUtils.h>                      
+#include <eikedwin.h>
+#include "MsgEditor.hrh"                   // for typedefs
+
+#include <AknsUtils.h>
+#include <applayout.cdl.h>                 
+#include <aknlayoutscalable_apps.cdl.h>
+
+#include <msgeditor.mbg>
+
+#include "MsgEditorCommon.h"
+
+// ========== EXTERNAL DATA STRUCTURES =====================
+
+// ========== EXTERNAL FUNCTION PROTOTYPES =================
+
+// ========== CONSTANTS ====================================
+
+// ========== MACROS =======================================
+
+// ========== LOCAL CONSTANTS AND MACROS ===================
+
+// ========== MODULE DATA STRUCTURES =======================
+
+// ========== LOCAL FUNCTION PROTOTYPES ====================
+
+// ========== LOCAL FUNCTIONS ==============================
+
+// ========== MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::NewL
+// ---------------------------------------------------------
+//
+CMsgEditorCustomDraw* CMsgEditorCustomDraw::NewL( const MFormCustomDraw* aParentCustomDraw,
+                                                  const CEikEdwin* aParentControl,const TInt aControlType  )
+    {
+    CMsgEditorCustomDraw* self = new (ELeave) CMsgEditorCustomDraw( aParentCustomDraw,
+                                                                    aParentControl,aControlType );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::ConstructL
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::ConstructL()
+    {
+    iIcon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
+                                       KAknsIIDQgnGrafLineMessageHorizontal,
+                                       KMsgEditorMbm,
+                                       EMbmMsgeditorQgn_graf_line_message_horizontal,
+                                       EMbmMsgeditorQgn_graf_line_message_horizontal_mask );
+    
+    ResolveLayouts();
+    }
+
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::CMsgEditorCustomDraw
+// ---------------------------------------------------------
+//
+CMsgEditorCustomDraw::CMsgEditorCustomDraw( const MFormCustomDraw* aParentCustomDraw,
+                                            const CEikEdwin* aParentControl,const TInt aControlType ) :
+    iParentCustomDraw( aParentCustomDraw ),
+    iParentControl( aParentControl ),
+    iControlType(aControlType)
+    {
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::~CMsgEditorCustomDraw
+// ---------------------------------------------------------
+//
+CMsgEditorCustomDraw::~CMsgEditorCustomDraw()
+    {
+    delete iIcon;
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::ResolveLayouts
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::ResolveLayouts()
+    {
+    TRect dataPane = MsgEditorCommons::MsgDataPane();
+
+    TAknLayoutRect msgTextPane;
+    msgTextPane.LayoutRect( dataPane,
+                            AknLayoutScalable_Apps::msg_text_pane( 0 ).LayoutLine() );
+        
+    TAknLayoutRect msgBodyPane;
+    msgBodyPane.LayoutRect( msgTextPane.Rect(),
+                            AknLayoutScalable_Apps::msg_body_pane().LayoutLine() );
+        
+    TAknLayoutRect lineLayout;
+    lineLayout.LayoutRect( msgBodyPane.Rect(),
+                           AknLayoutScalable_Apps::msg_body_pane_g1().LayoutLine() );
+    
+    AknIconUtils::SetSize( iIcon->Bitmap(), 
+                           lineLayout.Rect().Size(), 
+                           EAspectRatioNotPreserved );
+
+    TInt lineOffset = MsgEditorCommons::MsgBaseLineOffset();
+    
+    iLineDelta = MsgEditorCommons::MsgBaseLineDelta();
+    
+    // Calculate first line rectangle's correct position.
+    iFirstLineRect = TRect( TPoint( lineLayout.Rect().iTl.iX,
+                                    lineOffset + iLineDelta - lineLayout.Rect().Height() ),
+                                    lineLayout.Rect().Size() );
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::DrawBackground
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::DrawBackground( const TParam& aParam,
+                                           const TRgb& aRgb,
+                                           TRect& aDrawn ) const 
+    {
+    iParentCustomDraw->DrawBackground( aParam, aRgb, aDrawn );
+    
+    if ( !iParentControl->IsReadOnly() || iControlType == EMsgAttachmentControl)
+        {
+        DrawEditorLines( aParam );
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::DrawBackground
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::DrawLineGraphics( const TParam& aParam, 
+                                             const TLineInfo& aLineInfo ) const
+    {
+    iParentCustomDraw->DrawLineGraphics( aParam, aLineInfo );
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::DrawText
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::DrawText( const TParam& aParam,
+                                     const TLineInfo& aLineInfo,
+                                     const TCharFormat& aFormat,
+                                     const TDesC& aText,
+                                     const TPoint& aTextOrigin,
+                                     TInt aExtraPixels ) const
+    {
+    iParentCustomDraw->DrawText( aParam, 
+                                 aLineInfo, 
+                                 aFormat, 
+                                 aText, 
+                                 aTextOrigin, 
+                                 aExtraPixels );
+    }
+    
+// 107-24185 : Emoticon support for SMS and MMS
+
+// -----------------------------------------------------------------------------
+// CMsgEditorCustomDraw::DrawText
+// -----------------------------------------------------------------------------
+//
+void CMsgEditorCustomDraw::DrawText( const TParam& aParam, 
+    const TLineInfo& aLineInfo, const TCharFormat& aFormat, const TDesC& aText, 
+    const TInt aStart, const TInt aEnd, const TPoint& aTextOrigin, 
+    TInt aExtraPixels ) const
+    {
+    iParentCustomDraw->DrawText( aParam, aLineInfo, aFormat, 
+        aText.Mid( aStart, aEnd - aStart ), aTextOrigin, aExtraPixels );
+    }
+    
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::DrawText
+// ---------------------------------------------------------
+//
+TRgb CMsgEditorCustomDraw::SystemColor( TUint aColorIndex, TRgb aDefaultColor ) const
+    {
+    return iParentCustomDraw->SystemColor( aColorIndex, aDefaultColor );
+    }
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::DrawEditorLines
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::DrawEditorLines( const TParam& aParam ) const
+    {
+    TRect currentRect( iFirstLineRect );
+    
+    while ( currentRect.iBr.iY <= aParam.iDrawRect.iBr.iY )
+        {
+        if ( currentRect.iTl.iY >= aParam.iDrawRect.iTl.iY  )
+            {
+            aParam.iGc.DrawBitmapMasked( currentRect,
+                                         iIcon->Bitmap(), 
+                                         TRect( TPoint( 0 ,0 ), currentRect.Size() ), 
+                                         iIcon->Mask(),
+                                         ETrue );
+            }
+            
+        currentRect.Move( 0, iLineDelta );
+        }
+    } 
+
+// ---------------------------------------------------------
+// CMsgEditorCustomDraw::SkinChanged
+//
+//
+// ---------------------------------------------------------
+//
+void CMsgEditorCustomDraw::SkinChanged()
+    {
+    CGulIcon* newIcon = NULL;
+    TRAP_IGNORE( newIcon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
+    												  KAknsIIDQgnGrafLineMessageHorizontal,
+    												  KMsgEditorMbm,
+    												  EMbmMsgeditorQgn_graf_line_message_horizontal,
+    												  EMbmMsgeditorQgn_graf_line_message_horizontal_mask ) );
+    
+    if ( newIcon )
+    	{
+    	delete iIcon;
+    	iIcon = newIcon;
+    	
+        ResolveLayouts();
+    	}
+    }
+
+//  End of File