--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/ems/src/EMSFormatIE.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +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 <emsformatie.h>
+
+/**
+ * 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<TUint>(aPtr[pos] * 256);
+ ++pos;
+ }
+ iFormatLength += static_cast<TUint>(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;
+ }