--- a/messagingapp/msgui/conversationview/src/msgcharcounter_p.cpp Mon May 03 12:29:07 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,208 +0,0 @@
-/*
- * Copyright (c) 2009 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:Implements Symbian functionality to get message pdu details.
- *
- */
-#include "msgcharcounter_p.h"
-
-#include <smuthdr.h>
-#include <gsmuset.h>
-#include <gsmumsg.h>
-#include <txtetext.h>
-#include <txtrich.h>
-
-#include "msgcharcounter.h"
-#include "s60qconversions.h"
-
-enum MsgCharSupport
-{
- msgCharSupportFull = 0, msgCharSupportReduced
-};
-
-// ---------------------------------------------------------------------------
-// Default Constructor ( 1st phase )
-// ---------------------------------------------------------------------------
-//
-MsgCharCounterPrivate::MsgCharCounterPrivate(MsgCharCounter *msgCharCounter) :
- q_ptr(msgCharCounter)
-{
- // No implementation required
-}
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-MsgCharCounterPrivate::~MsgCharCounterPrivate()
-{
- q_ptr = NULL;
-
- if (mParaFormatLayer)
- {
- delete mParaFormatLayer;
- mParaFormatLayer = NULL;
- }
-
- if (mCharFormatLayer)
- {
- delete mCharFormatLayer;
- mCharFormatLayer = NULL;
- }
-
- if (mRichText)
- {
- delete mRichText;
- mRichText = NULL;
- }
-
- if (mSmsHeader)
- {
- delete mSmsHeader;
- mSmsHeader = NULL;
- }
-}
-
-// ---------------------------------------------------------------------------
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-MsgCharCounterPrivate* MsgCharCounterPrivate::newL(
- MsgCharCounter *msgCharCounter)
-{
- MsgCharCounterPrivate* self = new (ELeave) MsgCharCounterPrivate(
- msgCharCounter);
- CleanupStack::PushL(self);
- self->constructL();
- CleanupStack::Pop(); // self;
- return self;
-}
-
-// ---------------------------------------------------------------------------
-// EPOC default constructor for performing 2nd stage construction
-// ---------------------------------------------------------------------------
-//
-void MsgCharCounterPrivate::constructL()
-{
- mParaFormatLayer = CParaFormatLayer::NewL();
- mCharFormatLayer = CCharFormatLayer::NewL();
- mRichText = CRichText::NewL(mParaFormatLayer, mCharFormatLayer);
-
- mSmsHeader = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *mRichText);
-}
-
-// ---------------------------------------------------------------------------
-// To Set encoding settings like encoding type, character support and
-// alternative encoding if any.
-// ---------------------------------------------------------------------------
-//
-void MsgCharCounterPrivate::setEncodingSettings(bool unicodeMode,
- int alternativeEncodingType, int charSupportType)
-{
- TSmsUserDataSettings smsSettings;
- CSmsMessage& smsMsg = mSmsHeader->Message();
-
- mUnicodeMode = unicodeMode;
- mCharSupportType = charSupportType;
- mAlternativeEncodingType = (TSmsEncoding) alternativeEncodingType;
-
- if (mUnicodeMode)
- {
- smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabetUCS2);
- }
- else
- {
- smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabet7Bit);
- }
- smsSettings.SetTextCompressed(EFalse);
- smsMsg.SetUserDataSettingsL(smsSettings);
- //First try without any alternate encoding
- smsMsg.SetAlternative7bitEncoding(ESmsEncodingNone);
-}
-
-// ---------------------------------------------------------------------------
-// To get PDU Info: extracts details of number of PDUs, number of remaining
-// chars in last PDU and encoding types used.
-// ---------------------------------------------------------------------------
-//
-void MsgCharCounterPrivate::getNumPDUs(const QString &buf,
- int &numOfRemainingChars, int &numOfPDUs, bool &unicodeMode,
- int &alternativeEncodingType)
-{
- TInt numOfUnconvChars;
- TInt numOfDowngradedChars;
- TInt isAltEncSupported;
- TSmsEncoding currentAlternativeEncodingType;
-
- CSmsMessage& smsMsg = mSmsHeader->Message();
-
- // need to set the input buffer to SMS buffer through iRichText
- // (which is reference to SMS Buffer object)
- HBufC* buffer = S60QConversions::qStringToS60Desc(buf);
- CleanupStack::PushL(buffer);
- mRichText->Reset();
- mRichText->InsertL(0, *buffer);
-
- //call SMS stack API to get PDU info
- smsMsg.GetEncodingInfoL(numOfPDUs, numOfUnconvChars, numOfDowngradedChars,
- numOfRemainingChars);
-
- //Algo to switch to Unicode if required
- while ( (numOfUnconvChars || numOfDowngradedChars) && !mUnicodeMode)
- {
- currentAlternativeEncodingType = smsMsg.Alternative7bitEncoding();
- if (currentAlternativeEncodingType != mAlternativeEncodingType)
- {
- //try with this new alternative encoding type
- isAltEncSupported = smsMsg.SetAlternative7bitEncoding(
- mAlternativeEncodingType);
- if (isAltEncSupported == KErrNotSupported)
- {
- // if required alternative encoding plugin is not supported,
- // retain the existing encoding mechanism.
- mAlternativeEncodingType = currentAlternativeEncodingType;
- continue;
- }
- }
- else if (numOfUnconvChars || (MsgCharSupport) mCharSupportType
- == msgCharSupportFull)
- {
- //switch to Unicode
- //mUnicodeMode = ETrue;
- setEncodingSettings(ETrue, ESmsEncodingNone, mCharSupportType);
- }
- else
- {
- //Get out of while loop and return the results
- break;
- }
- //get the PDU info with new settings
- mRichText->Reset();
- mRichText->InsertL(0, *buffer);
- smsMsg.GetEncodingInfoL(numOfPDUs, numOfUnconvChars,
- numOfDowngradedChars, numOfRemainingChars);
- } // end of while
-
- CleanupStack::PopAndDestroy(buffer);
- unicodeMode = mUnicodeMode;
- alternativeEncodingType = mAlternativeEncodingType;
- if (mUnicodeMode)
- {
- // In case of Unicode mode, SMS Stack returns number of available free
- // User Data units. Need to convert them w.r.t characters.
- // Each char takse 2 UD units.
- numOfRemainingChars = numOfRemainingChars / 2;
- }
-}
-
-//EOF