wvuing/wvuiave/AppSrc/CCAMessageExtensionsHandler.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAMessageExtensionsHandler.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,288 @@
+/*
+* 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:  Message extension handler
+*
+*/
+
+
+#include "CCAMessageExtensionsHandler.h"
+#include "CCASmileyUtil.h"
+#include "ChatDefinitions.h"
+#include "IMUtils.h"
+
+// The Settings have been moved to Cenrep (also retained in the Resource file),
+// so the enums for keys and central repository header is added here
+#include 	"VariantKeys.h"
+#include <eikrted.h>
+#include <txtrich.h>
+
+_LIT( KRIGHT_TO_LEFT_MAKR, "\x200F" );
+const TInt KLENGTHOFACHAR = 1;
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::CCAMessageExtensionsHandler
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CCAMessageExtensionsHandler::CCAMessageExtensionsHandler()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::~CCAMessageExtensionsHandler
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCAMessageExtensionsHandler::~CCAMessageExtensionsHandler()
+    {
+    iExtensionArray.ResetAndDestroy();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::ConstructL
+// Symbian OS Constructor
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::ConstructL( MCASkinVariant& aSkinVariant,
+                                              MCAAppUi& aAppUi, TBool aAddSmileyHandler )
+    {
+    if ( aAddSmileyHandler )
+        {
+        //Register smileyUtils with identification type.
+        CCASmileyUtil* smiley = CCASmileyUtil::NewL( aSkinVariant, aAppUi, EMessageExtensionSmiley );
+        CleanupStack::PushL( smiley );
+        User::LeaveIfError( iExtensionArray.Append( smiley ) );
+        CleanupStack::Pop( smiley );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::NewL
+// Symbian two phased constructor
+// -----------------------------------------------------------------------------
+//
+CCAMessageExtensionsHandler* CCAMessageExtensionsHandler::NewL(
+    MCASkinVariant& aSkinVariant,
+    MCAAppUi& aAppUi,
+    TBool aAddSmileyHandler /*= ETrue */ )
+    {
+    CCAMessageExtensionsHandler* self =
+        new ( ELeave ) CCAMessageExtensionsHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL( aSkinVariant, aAppUi, aAddSmileyHandler );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::ProcessMessageLC
+// Process messages trough extensions.
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAMessageExtensionsHandler::ProcessMessageLC(
+    CEikRichTextEditor& aEditor )
+    {
+    HBufC* msg = ExtensionToStringLC( aEditor );
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        iExtensionArray[ a ]->Reset();
+        }
+    return msg;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionHandler::ExtensionToStringL
+// Convert extensions to strings.
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAMessageExtensionsHandler::ExtensionToStringLC(
+    CEikRichTextEditor& aEditor )
+    {
+    HBufC* text = HBufC::NewMaxLC( IMUtils::MaxMsgLength() );
+    TPtr tBuf( text->Des() );
+
+    HBufC* msgBuf = aEditor.GetTextInHBufL();
+
+    // Because the comments in TSW, we delete the mark first and add it anywhere to
+    // let the akn components know.
+
+    // Get the pointer of the buffer.
+    TPtr bufPtr = msgBuf->Des();
+
+    // An indicator for whether the buffer is processed.
+    TBool isProcessed( EFalse );
+
+    // Delete the mark any way
+    for ( TInt i = 0; i < bufPtr.Length(); i++ )
+        {
+        TInt pos = bufPtr.Find( KRIGHT_TO_LEFT_MAKR );
+
+        // If can not find the right-to-left mark pos = -1
+        if ( pos >= 0 )
+            {
+            bufPtr.Delete( pos, KLENGTHOFACHAR );
+            isProcessed = ETrue;
+            }
+        }
+
+    // Re-add the mark back
+    if ( isProcessed )
+        {
+        bufPtr.Insert( 0, KRIGHT_TO_LEFT_MAKR );
+        bufPtr.Insert( bufPtr.Length(), KRIGHT_TO_LEFT_MAKR );
+        }
+
+    CleanupStack::PushL( msgBuf );
+    TPtr msgPtr( msgBuf->Des() );
+
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        tBuf = msgPtr;
+        iExtensionArray[ a ]->ExtensionToStringL( aEditor, tBuf );
+        CleanupStack::PopAndDestroy( msgBuf );
+        msgBuf = NULL;
+        msgBuf = tBuf.AllocLC();
+        TPtr newPtr( msgBuf->Des() );
+        msgPtr.Set( newPtr );
+        }
+
+    tBuf = msgPtr;
+
+    TInt length = tBuf.Length();
+    for ( TInt i = length - 1; i >= 0 ; --i )
+        {
+        if ( tBuf[ i ] ==  CEditableText::EZeroWidthNoBreakSpace )
+            {
+            tBuf.Delete( i, 1 ); // removing 1 character
+            }
+        }
+    CleanupStack::PopAndDestroy( msgBuf );
+    return text;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::InsertExtensionIcon
+// Find right extension handler and insert extension
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::InsertExtensionL( CEikRichTextEditor& aEditor,
+                                                    TMessageExtensionTypes aType,
+                                                    TBool& aCancelled )
+    {
+    TBool flag( EFalse );
+    for ( TInt a( 0 ); a < iExtensionArray.Count() && !flag; ++a )
+        {
+        if ( aType == iExtensionArray[ a ]->Type() )
+            {
+            iExtensionArray[ a ]->InsertExtensionL( aEditor, aCancelled );
+            flag = ETrue;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::DeleteExtensionIcon
+// Find right extension handler and delete extension
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::DeleteExtensionL( CEikRichTextEditor& aEditor,
+                                                    TMessageExtensionTypes aType,
+                                                    TInt aPos )
+    {
+    TBool flag( EFalse );
+    for ( TInt a( 0 ); a < iExtensionArray.Count() && !flag; ++a )
+        {
+        if ( aType == iExtensionArray[ a ]->Type() )
+            {
+            iExtensionArray[ a ]->DeleteExtensionL( aEditor, aPos );
+            flag = ETrue;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::ConvertSelectionToExtensionL
+// Convert all extensions from strings to extensions in area.
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::ConvertSelectionToExtensionL(
+    CEikRichTextEditor& aEditor )
+    {
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        iExtensionArray[ a ]->ConvertSelectionToExtensionL( aEditor );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::ConvertSelectionToExtensionL
+// Convert all extensions from strings to extensions in area.
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::ConvertSelectionToExtensionL(
+    CRichText& aRichText, TCursorSelection& aSelection )
+    {
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        iExtensionArray[ a ]->ConvertSelectionToExtensionL( aRichText, aSelection );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::ConvertSelectionToStringL
+// Convert all extensions from extensions to strings in area.
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::ConvertSelectionToStringL(
+    CEikRichTextEditor& aEditor, TBool aPreserve /*= EFalse*/ )
+    {
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        iExtensionArray[ a ]->ConvertSelectionToStringL( aEditor, aPreserve );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::SizeChanged
+// Convert all extensions from extensions to strings in area.
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::SizeChanged( TSize& aSize )
+    {
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        iExtensionArray[ a ]->SizeChanged( aSize );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageExtensionsHandler::ConvertSelectionToStringL
+// Convert all extensions from extensions to strings in area.
+// -----------------------------------------------------------------------------
+//
+void CCAMessageExtensionsHandler::ConvertSelectionToStringL(
+    CEikRichTextEditor& aEditor,
+    TDes& aResultString,
+    TCursorSelection& aSelectionAfterConversion,
+    TBool aPreserve )
+    {
+    for ( TInt a( 0 ); a < iExtensionArray.Count(); ++a )
+        {
+        iExtensionArray[ a ]->ConvertSelectionToStringL(
+            aEditor, aResultString, aSelectionAfterConversion, aPreserve );
+        }
+    }
+
+// end of file