diff -r 6b1d113cdff3 -r 6638e7f4bd8f smsprotocols/smsstack/ems/src/EMSFormatIE.cpp --- a/smsprotocols/smsstack/ems/src/EMSFormatIE.cpp Mon May 03 13:37:20 2010 +0300 +++ b/smsprotocols/smsstack/ems/src/EMSFormatIE.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,240 +1,240 @@ -/* -* Copyright (c) 2009 Sony Ericsson Mobile Communications AB -* 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: -* Sony Ericsson Mobile Communications AB - initial contribution. -* Nokia Corporation - additional changes. -* -* Contributors: -* -* Description: -* Implements the Enhanced SMS Format Information Element. -* -*/ - - -/** - * @file - * - * Implements CEmsFormatIE class - */ - -#include - -/** - * Creates a default ems format object. - * - * @return CEmsFormatIE* newly created object - */ -EXPORT_C CEmsFormatIE* CEmsFormatIE::NewL() -/** - * @capability None - */ - { - CEmsFormatIE* self = new (ELeave) CEmsFormatIE(); - self->SetAlignment(ELangDepend); - return self; - } - -/** - * Creates an exact copy of the object. - * - * @return CEmsFormatIE* Newly created object. - */ -EXPORT_C CEmsInformationElement* CEmsFormatIE::DuplicateL() const -/** - * @capability None - */ - { - CEmsFormatIE* copy = new (ELeave) CEmsFormatIE(); - CleanupStack::PushL(copy); - copy->CopyL(*this); - CleanupStack::Pop(copy); - return copy; - } - -EXPORT_C void CEmsFormatIE::SetBold(TBool aBold) -/** - * @capability None - */ - { - iFormat=(TUint8)(aBold? iFormat|EBold: iFormat&(~EBold)); - } - -EXPORT_C TBool CEmsFormatIE::Bold() const -/** - * @capability None - */ - { - return (EBold&iFormat)?ETrue:EFalse; - } - -EXPORT_C void CEmsFormatIE::SetItalic(TBool aItalic) -/** - * @capability None - */ - { - iFormat=(TUint8)(aItalic? iFormat|EItalic: iFormat&(~EItalic)); - } - -EXPORT_C TBool CEmsFormatIE::Italic() const -/** - * @capability None - */ - { - return (EItalic&iFormat)?ETrue:EFalse; - } - -EXPORT_C void CEmsFormatIE::SetUnderline(TBool aUnderline) -/** - * @capability None - */ - { - iFormat=(TUint8)(aUnderline? iFormat|EUnderline: iFormat&(~EUnderline)); - } - -EXPORT_C TBool CEmsFormatIE::Underline() const -/** - * @capability None - */ - { - return (EUnderline&iFormat)?ETrue:EFalse; - } - -EXPORT_C void CEmsFormatIE::SetStrikethrough(TBool aStrikethrough) -/** - * @capability None - */ - { - iFormat=(TUint8)(aStrikethrough? iFormat|EStrikethrough: iFormat&(~EStrikethrough)); - } - -EXPORT_C TBool CEmsFormatIE::Strikethrough() const -/** - * @capability None - */ - { - return (EStrikethrough&iFormat)?ETrue:EFalse; - } - -EXPORT_C void CEmsFormatIE::SetAlignment(TAlignment aAlignment) -/** - * @capability None - */ - { - iFormat=(TUint8)(iFormat&~EAlignmentMask); - iFormat=(TUint8)(iFormat|aAlignment); - } - -EXPORT_C CEmsFormatIE::TAlignment CEmsFormatIE::Alignment() const -/** - * @capability None - */ - { - return (TAlignment)(EAlignmentMask&iFormat); - } - -EXPORT_C void CEmsFormatIE::SetFontSize(TFontSize aSize) -/** - * @capability None - */ - { - iFormat=(TUint8)(iFormat&~EFontSizeMask); - iFormat=(TUint8)(iFormat|(aSize<<2)); - } - -EXPORT_C CEmsFormatIE::TFontSize CEmsFormatIE::FontSize() const -/** - * @capability None - */ - { - return (TFontSize)((EFontSizeMask&iFormat)>>2); - } - - -EXPORT_C void CEmsFormatIE::SetFormatLength(TUint aLength) -/** - * @capability None - */ - { - iFormatLength = aLength; - } - -EXPORT_C TUint CEmsFormatIE::FormatLength() const -/** - * @capability None - */ - { - return iFormatLength; - } - - -CEmsFormatIE::CEmsFormatIE() :CEmsInformationElement(CSmsInformationElement::ESmsEnhancedTextFormatting),iFormat(0){iEncodedBodyLength=EEnhancedFormatSizeV4;} - -/** - * Encodes the format object into its raw format. (no IE id) - * - * @param aPtr the buffer to be used which is to contain the data - * @param aIsForSerialisation boolean to indicate if it is for serialisation or encoding - */ -void CEmsFormatIE::EncodeBodyL(TPtr8 aPtr, TBool aIsForSerialisation) const - { - // This is the only information element which needs to check the - // aIsForSerialisation flag. If it is for PDU encoding, the - // length field is only 8 bits. Otherwise it is 16. (This is - // because format objects when inserted can extend over a PDU - // boundary, but are split on encoding) - if (aIsForSerialisation) - { - aPtr.Append(HI_BYTE(iFormatLength)); - } - - aPtr.Append(LO_BYTE(iFormatLength)); - aPtr.Append(iFormat); - } - -/** - * Decodes the raw data out of an information element into this class. - * - * @param aPtr The raw predefined animation data - * @param aIsFromSerialisation boolean to indicate if it is from serialisation - * @leave KErrargument If the size of the data does not match what is expected. - */ -void CEmsFormatIE::DecodeBodyL(const TPtrC8 aPtr, TBool aIsFromSerialisation) - { - __ASSERT_ALWAYS((aPtr.Length() >= EEnhancedFormatSizeV4), User::Leave(KErrArgument)); - - // index into byte array we are currently looking at - TInt pos = 0; - iFormatLength = 0; - - if (aIsFromSerialisation) - { - iFormatLength = static_cast(aPtr[pos] * 256); - ++pos; - } - iFormatLength += static_cast(aPtr[pos]); - ++pos; - iFormat=aPtr[pos]; - } - -TInt CEmsFormatIE::SerialisedBodyLength() const - { - // extra byte required for 16-bit length field when serialised - return iEncodedBodyLength + 1; - } - -EXPORT_C void CEmsFormatIE::CopyL(const CEmsFormatIE& aSrc) -/** - * @capability None - */ - { - CEmsInformationElement::CopyL(aSrc); - iFormatLength = aSrc.iFormatLength; - iFormat=aSrc.iFormat; - } +/* +* Copyright (c) 2009 Sony Ericsson Mobile Communications AB +* 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: +* Sony Ericsson Mobile Communications AB - initial contribution. +* Nokia Corporation - additional changes. +* +* Contributors: +* +* Description: +* Implements the Enhanced SMS Format Information Element. +* +*/ + + +/** + * @file + * + * Implements CEmsFormatIE class + */ + +#include + +/** + * Creates a default ems format object. + * + * @return CEmsFormatIE* newly created object + */ +EXPORT_C CEmsFormatIE* CEmsFormatIE::NewL() +/** + * @capability None + */ + { + CEmsFormatIE* self = new (ELeave) CEmsFormatIE(); + self->SetAlignment(ELangDepend); + return self; + } + +/** + * Creates an exact copy of the object. + * + * @return CEmsFormatIE* Newly created object. + */ +EXPORT_C CEmsInformationElement* CEmsFormatIE::DuplicateL() const +/** + * @capability None + */ + { + CEmsFormatIE* copy = new (ELeave) CEmsFormatIE(); + CleanupStack::PushL(copy); + copy->CopyL(*this); + CleanupStack::Pop(copy); + return copy; + } + +EXPORT_C void CEmsFormatIE::SetBold(TBool aBold) +/** + * @capability None + */ + { + iFormat=(TUint8)(aBold? iFormat|EBold: iFormat&(~EBold)); + } + +EXPORT_C TBool CEmsFormatIE::Bold() const +/** + * @capability None + */ + { + return (EBold&iFormat)?ETrue:EFalse; + } + +EXPORT_C void CEmsFormatIE::SetItalic(TBool aItalic) +/** + * @capability None + */ + { + iFormat=(TUint8)(aItalic? iFormat|EItalic: iFormat&(~EItalic)); + } + +EXPORT_C TBool CEmsFormatIE::Italic() const +/** + * @capability None + */ + { + return (EItalic&iFormat)?ETrue:EFalse; + } + +EXPORT_C void CEmsFormatIE::SetUnderline(TBool aUnderline) +/** + * @capability None + */ + { + iFormat=(TUint8)(aUnderline? iFormat|EUnderline: iFormat&(~EUnderline)); + } + +EXPORT_C TBool CEmsFormatIE::Underline() const +/** + * @capability None + */ + { + return (EUnderline&iFormat)?ETrue:EFalse; + } + +EXPORT_C void CEmsFormatIE::SetStrikethrough(TBool aStrikethrough) +/** + * @capability None + */ + { + iFormat=(TUint8)(aStrikethrough? iFormat|EStrikethrough: iFormat&(~EStrikethrough)); + } + +EXPORT_C TBool CEmsFormatIE::Strikethrough() const +/** + * @capability None + */ + { + return (EStrikethrough&iFormat)?ETrue:EFalse; + } + +EXPORT_C void CEmsFormatIE::SetAlignment(TAlignment aAlignment) +/** + * @capability None + */ + { + iFormat=(TUint8)(iFormat&~EAlignmentMask); + iFormat=(TUint8)(iFormat|aAlignment); + } + +EXPORT_C CEmsFormatIE::TAlignment CEmsFormatIE::Alignment() const +/** + * @capability None + */ + { + return (TAlignment)(EAlignmentMask&iFormat); + } + +EXPORT_C void CEmsFormatIE::SetFontSize(TFontSize aSize) +/** + * @capability None + */ + { + iFormat=(TUint8)(iFormat&~EFontSizeMask); + iFormat=(TUint8)(iFormat|(aSize<<2)); + } + +EXPORT_C CEmsFormatIE::TFontSize CEmsFormatIE::FontSize() const +/** + * @capability None + */ + { + return (TFontSize)((EFontSizeMask&iFormat)>>2); + } + + +EXPORT_C void CEmsFormatIE::SetFormatLength(TUint aLength) +/** + * @capability None + */ + { + iFormatLength = aLength; + } + +EXPORT_C TUint CEmsFormatIE::FormatLength() const +/** + * @capability None + */ + { + return iFormatLength; + } + + +CEmsFormatIE::CEmsFormatIE() :CEmsInformationElement(CSmsInformationElement::ESmsEnhancedTextFormatting),iFormat(0){iEncodedBodyLength=EEnhancedFormatSizeV4;} + +/** + * Encodes the format object into its raw format. (no IE id) + * + * @param aPtr the buffer to be used which is to contain the data + * @param aIsForSerialisation boolean to indicate if it is for serialisation or encoding + */ +void CEmsFormatIE::EncodeBodyL(TPtr8 aPtr, TBool aIsForSerialisation) const + { + // This is the only information element which needs to check the + // aIsForSerialisation flag. If it is for PDU encoding, the + // length field is only 8 bits. Otherwise it is 16. (This is + // because format objects when inserted can extend over a PDU + // boundary, but are split on encoding) + if (aIsForSerialisation) + { + aPtr.Append(HI_BYTE(iFormatLength)); + } + + aPtr.Append(LO_BYTE(iFormatLength)); + aPtr.Append(iFormat); + } + +/** + * Decodes the raw data out of an information element into this class. + * + * @param aPtr The raw predefined animation data + * @param aIsFromSerialisation boolean to indicate if it is from serialisation + * @leave KErrargument If the size of the data does not match what is expected. + */ +void CEmsFormatIE::DecodeBodyL(const TPtrC8 aPtr, TBool aIsFromSerialisation) + { + __ASSERT_ALWAYS((aPtr.Length() >= EEnhancedFormatSizeV4), User::Leave(KErrArgument)); + + // index into byte array we are currently looking at + TInt pos = 0; + iFormatLength = 0; + + if (aIsFromSerialisation) + { + iFormatLength = static_cast(aPtr[pos] * 256); + ++pos; + } + iFormatLength += static_cast(aPtr[pos]); + ++pos; + iFormat=aPtr[pos]; + } + +TInt CEmsFormatIE::SerialisedBodyLength() const + { + // extra byte required for 16-bit length field when serialised + return iEncodedBodyLength + 1; + } + +EXPORT_C void CEmsFormatIE::CopyL(const CEmsFormatIE& aSrc) +/** + * @capability None + */ + { + CEmsInformationElement::CopyL(aSrc); + iFormatLength = aSrc.iFormatLength; + iFormat=aSrc.iFormat; + }