diff -r 000000000000 -r 5e5d6b214f4f imstutils/imconversationview/imcvuiapp/inc/cimcvappsmileiconutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imstutils/imconversationview/imcvuiapp/inc/cimcvappsmileiconutility.h Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2007-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: Utility for selecting smile icon and converting +* between smile id and smile string. +* Description : Handles statuspane, context pane, navi pane +* +*/ + + +#ifndef CIMCVAPPSMILEICONUTILITY_H +#define CIMCVAPPSMILEICONUTILITY_H + +// INCLUDES +#include +#include "mimcvappresourcechangeobserver.h" +#include + +// FORWARD DECLARATIONS +class CGulIcon; +class CIMCVAppSmileString; +class CIMCVAppSmileyInformation; +class MIMCVUiAppSkinVariant; +class CIMCVUiAppIconFileProvider; +class CIMCVEngine; + + +class MIMCVAppUi; + +// CLASS DECLARATION + +/** +* CIMCVAppSmileIconUtility +* +* Utility for selecting smile icon and mapping +* between smile icons and smile strings. +*/ +class CIMCVAppSmileIconUtility : public CBase, + public MIMCVAppResourceChangeObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor using default smile icon array. + *@param aAppUi : CIMCVAppUI reference + */ + static CIMCVAppSmileIconUtility* NewL( + MIMCVUiAppSkinVariant& aSkinVariant, + MIMCVAppUi& aAppUi, + CIMCVEngine& aServiceEngine ); + + /** + * Destructor. + */ + ~CIMCVAppSmileIconUtility(); + + public: + + /** + * Launch pop-up dialog for selecting smile icon. + * @param aSelectedSmileIndex Returns selected smile icon index + * @return (TInt) Return dialog value + */ + TInt LaunchSmileIconDialogL( TInt& aSelectedSmileIndex ); + + /** + * Smile icon count. + * @return (TInt) Smile icon count + */ + TInt SmileIconCount() const; + + /** + * Return needed smile icon pointer from icon array. + * @param aSmileIndex Smile icon index + */ + const CGulIcon* GetSmileIcon( TInt aSmileIndex ) const; + + /** + * Return needed smile string reference from string array. + * @param aSmileIndex Smile icon index + */ + const TDesC& GetSmileString( TInt aSmileIndex ) const; + + /** + * Search smileys from buffer. Replace every found smiley with KPuaCodeSmileyIconPadding + * @param aStr String to search smiles from. + * @param aFixedStr, Target string where smileys are replaced with KPUaCodeSmileyIconPadding + * @param aArray Array reference to icon array indexes in right order + */ + void SearchSmilesL( const TDesC& aStr, TDes& aFixedStr, + RArray* aArray ); + + /** + * Search smileys from buffer. + * @param aStr String to search smiles from. + * @param aSmileyInfoArray Information of found smileys. + * @param aFixedStr, Target string where smileys are replaced with KPUaCodeSmileyIconPadding + * @param aStartPos, Absolute position of index 0 in source string. Used when position of smiley is calculated. + */ + void SearchSmilesL( const TDesC& aStr, + RPointerArray< CIMCVAppSmileyInformation >& aSmileyInfoArray, + TDes* aFixedStr = NULL, TInt aStartPos = 0 ) const; + + /** + * Compares two TSmileyInformation objects' position field. + * @param aFirst Reference to the first TSmileyInformation + * @param aSecond Reference to the second TSmileyInformation + * @return (TInt) Positive if aFirst > aSecond, negative if opposite, + * 0 if aFirst == aSecond + */ + static TInt Compare( const CIMCVAppSmileyInformation& aFirst, + const CIMCVAppSmileyInformation& aSecond ); + + /** + * Compares two CIMCVAppSmileString objects' smiley length. + * @param aFirst Reference to the first CIMCVAppSmileString + * @param aSecond Reference to the second CIMCVAppSmileString + * @return (TInt) Positive if aFirst(length) < aSecond(length), + * negative if opposite, 0 if aFirst == aSecond + */ + static TInt CompareSmileyLengthReversed( + const CIMCVAppSmileString& aFirst, + const CIMCVAppSmileString& aSecond ); + + /** + * Resizes all icons. + * @param aSize new icon size + */ + void ResizeIcons( const TSize& aSize ); + + + /** + * @return aResourceId to use + */ + void ConstructSmileDialogIconArrayL( CIMCVEngine& aServiceEngine ); + + /** + * parses whole smiley string from branding and extracts each smiley code + */ + void ParseAllSmileyStringL(RPointerArray aAllSmileyString); + + public: // From MIMCVAppResourceChangeObserver + + /** + * Reload all icons on resource change + */ + void ResourceChangedL(); + + private: // Constructors and destructor + + /** + * C++ constructor. + */ + CIMCVAppSmileIconUtility( + MIMCVUiAppSkinVariant& aSkinVariant, + MIMCVAppUi& aAppUi ); + + /** + * Second-phased constructor + */ + void ConstructL(CIMCVEngine& aServiceEngine ); + + private: // New methods + + /** + * Seek the first smiley which points to a given icon. + * This is slow method, and it should only be used to + * precalculate the index table. + * @param aIconIndex index of icon in iIconArray + * @return index of smiley in iStringArray + */ + TInt GetFirstSmileyIndex( TInt aIconIndex ) const; + + + + private: // Data + // NOT Own + MIMCVUiAppSkinVariant& iSkinVariant; + + // Own. Smiley strings with ref to icon array + RPointerArray iStringArray; + + // Own. Temporary array for searching the smileys. + // This should be empty when not searching. + RPointerArray iSmileArray; + + // Own. Icon reference to string smileys. + // Using a precalculated array makes seeking a lot faster, + RArray iIconToSmileyPointers; + + // Cache length, so we don't need the seek this every time. + TInt iLongestSmileyLength; + + // does not own + MIMCVAppUi& iAppUi; + + //Own. Smiley icons for SmileDialog + RPointerArray iSmileDlgIconArray; + + //Owns + RFile iFile; + + + }; + +#endif // CIMCVAPPSMILEICONUTILITY_H