diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/smileyiconrecord.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/smileyiconrecord.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2008 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: smiely engine class +* +*/ + +#include "smileymanager.h" +#include "smileyiconrecord.h" +#include "smileyimagedata.h" + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// CSmileyIcon::CSmileyIcon +// --------------------------------------------------------------------------- +// +CSmileyIcon::CSmileyIcon( TText aCode ) : iCode( aCode ) + { + } + +// --------------------------------------------------------------------------- +// CSmileyIcon::~CSmileyIcon +// --------------------------------------------------------------------------- +// +CSmileyIcon::~CSmileyIcon() + { + if ( iImage ) + { + iImage->RemoveFromRefArray( this ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyIcon::SetSmileyString +// --------------------------------------------------------------------------- +// +void CSmileyIcon::SetSmileyString( const TDesC& aString ) + { + TInt strLength( aString.Length() ); + if ( strLength > CSmileyManager::KMaxLength ) + { + strLength = CSmileyManager::KMaxLength; + } + iStr.Copy( aString.Mid( 0, strLength ) ); + }; + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// CSmileyIconRecord::CSmileyIconRecord +// --------------------------------------------------------------------------- +// +CSmileyIconRecord::CSmileyIconRecord() + { + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::~CSmileyIconRecord +// --------------------------------------------------------------------------- +// +CSmileyIconRecord::~CSmileyIconRecord() + { + iIconArray.ResetAndDestroy(); + iIconArray.Close(); + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::InsertIcon +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::InsertIconL( CSmileyIcon* aIcon ) + { + if ( !aIcon ) + { + return; + } + TInt index( 0 ); + for ( ; index < iIconArray.Count(); index++ ) + { + if ( iIconArray[index]->DocPos() >= aIcon->DocPos() ) + { + break; + } + } + InsertIconAtL( aIcon, index ); + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::HandleTextDelete +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::HandleTextDelete( TInt aStart, TInt aLength ) + { + DeleteIconsIn( aStart, aLength ); + TInt index( FirstIndexAfter( aStart ) ); + for ( ; index != KErrNotFound && index < iIconArray.Count(); index++ ) + { + TInt newPos( iIconArray[index]->DocPos() - aLength ); + iIconArray[index]->SetDocPos( newPos ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::HandleTextDelete +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::HandleTextInsert( TInt aStart, TInt aLength ) + { + TInt index( FirstIndexAfter( aStart ) ); + for ( ; index != KErrNotFound && index < iIconArray.Count(); index++ ) + { + TInt newPos( iIconArray[index]->DocPos() + aLength ); + iIconArray[index]->SetDocPos( newPos ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::SmileyRange +// --------------------------------------------------------------------------- +// +CSmileyIcon* CSmileyIconRecord::SmileyIconAtPos( TInt aDocPos ) + { + TInt count( iIconArray.Count() ); + for ( TInt i( 0 ); i < iIconArray.Count(); i++ ) + { + CSmileyIcon* icon( iIconArray[i] ); + if ( iIconArray[i]->DocPos() <= aDocPos && + iIconArray[i]->DocPos() + iIconArray[i]->SmileyLength() > aDocPos ) + { + return iIconArray[i]; + } + } + return NULL; + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::SmileyRange +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::CancelSelection() + { + for ( TInt i( 0 ); i < iIconArray.Count(); i++ ) + { + iIconArray[i]->EnableHighlight( EFalse ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::SmileyRange +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::SetSelection( TInt aStart, TInt aLength ) + { + TInt firstIndex( FirstIndexIn( aStart, aLength ) ); + TInt lastIndex( LastIndexIn( aStart, aLength, firstIndex ) ); + for ( TInt i( firstIndex ); i != KErrNotFound && i <= lastIndex; i++ ) + { + iIconArray[i]->EnableHighlight( ETrue ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::HasSmileyIcon +// --------------------------------------------------------------------------- +// +TBool CSmileyIconRecord::HasSmileyIcon() + { + return ( iIconArray.Count() > 0 ); + } + +//-------------------Private member function---------------------------------- +// --------------------------------------------------------------------------- +// CSmileyIconRecord::InsertIconAtL +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::InsertIconAtL( CSmileyIcon* aIcon, TInt aIndex ) + { + TInt index( aIndex < 0 ? 0 : aIndex ); + if ( index >= iIconArray.Count() ) + { + iIconArray.AppendL( aIcon ); + } + else + { + iIconArray.InsertL( aIcon, index ); + } + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::DeleteIconsIn +// --------------------------------------------------------------------------- +// +void CSmileyIconRecord::DeleteIconsIn( TInt aStart, TInt aLength ) + { + TInt startIndex( FirstIndexIn( aStart, aLength ) ); + TInt endIndex( LastIndexIn( aStart, aLength, startIndex ) ); + TInt count( endIndex - startIndex ); + for ( TInt i( 0 ); startIndex != KErrNotFound && i <= count; i++ ) + { + CSmileyIcon* icon( iIconArray[startIndex] ); + iIconArray.Remove( startIndex ); + delete icon; + } + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::InsertIconAtL +// --------------------------------------------------------------------------- +// +TInt CSmileyIconRecord::FirstIndexAfter( TInt aDocPos, TInt aSearchStart ) + { + TInt i = ( aSearchStart < 0 || aSearchStart >= iIconArray.Count() ? 0 : + aSearchStart ); + for ( ; i < iIconArray.Count(); i++ ) + { + if ( iIconArray[i]->DocPos() >= aDocPos ) + { + return i; + } + } + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::InsertIconAtL +// --------------------------------------------------------------------------- +// +TInt CSmileyIconRecord::FirstIndexIn( TInt aStart, TInt aLength ) + { + for ( TInt i( 0 ); i < iIconArray.Count(); i++ ) + { + if ( iIconArray[i]->DocPos() < aStart + aLength && + iIconArray[i]->EndPos() > aStart ) + { + return i; + } + } + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// CSmileyIconRecord::InsertIconAtL +// --------------------------------------------------------------------------- +// +TInt CSmileyIconRecord::LastIndexIn( TInt aStart, TInt aLength, + TInt aFirstIndex ) + { + TInt index( FirstIndexAfter( aStart + aLength, aFirstIndex ) ); + if ( index == KErrNotFound ) + { + return iIconArray.Count() > 0 ? iIconArray.Count() - 1 : index; + } + if ( index > 0 ) + { + return index - 1; + } + return aFirstIndex; + } + + +