diff -r e8c1ea2c6496 -r 8758140453c0 graphics/gdi/src/T_DataMeasureTextInput.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphics/gdi/src/T_DataMeasureTextInput.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,426 @@ +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +/** +@test +@internalComponent + +This contains CT_DataMeasureTextInput +*/ + +#include "T_DataMeasureTextInput.h" + + +/*@{*/ +/// Parameters +_LIT(KValue, "value"); +_LIT(KFlag, "flag%d"); + +/// CFont::TMeasureTextInput::TFlags +_LIT(KEFVisualOrder, "EFVisualOrder"); +_LIT(KEFVisualOrderRightToLeft, "EFVisualOrderRightToLeft"); +_LIT(KEFIncludePenPositionInBoundsCheck, "EFIncludePenPositionInBoundsCheck"); + +/// Commands +_LIT(KCmdNew, "new"); +_LIT(KCmdDestructor, "~"); +_LIT(KCmdSetCharJustExcess, "iCharJustExcess"); +_LIT(KCmdSetCharJustNum, "iCharJustNum"); +_LIT(KCmdSetDirection, "iDirection"); +_LIT(KCmdSetEndInputChar, "iEndInputChar"); +_LIT(KCmdSetFlags, "iFlags"); +_LIT(KCmdSetMaxAdvance, "iMaxAdvance"); +_LIT(KCmdSetMaxBounds, "iMaxBounds"); +_LIT(KCmdSetStartInputChar, "iStartInputChar"); +_LIT(KCmdSetWordJustExcess, "iWordJustExcess"); +_LIT(KCmdSetWordJustNum, "iWordJustNum"); +/*@}*/ + + +/** +* Two phase constructor +*/ +CT_DataMeasureTextInput* CT_DataMeasureTextInput::NewL() + { + CT_DataMeasureTextInput* ret = new (ELeave) CT_DataMeasureTextInput(); + CleanupStack::PushL(ret); + ret->ConstructL(); + CleanupStack::Pop(ret); + return ret; + } + + +/** +* Protected constructor. First phase construction +*/ +CT_DataMeasureTextInput::CT_DataMeasureTextInput() +: CDataWrapperBase() +, iMeasureTextInput(NULL) + { + } + + +/** +* Protected second phase construction +*/ +void CT_DataMeasureTextInput::ConstructL() + { + } + + +/** +* Destructor. +*/ +CT_DataMeasureTextInput::~CT_DataMeasureTextInput() + { + DestroyData(); + } + + +/** +* cleanup implementation. +*/ +void CT_DataMeasureTextInput::DestroyData() + { + delete iMeasureTextInput; + iMeasureTextInput = NULL; + } + + +/** +* Return a pointer to the object that the data wraps +* +* @return pointer to the object that the data wraps +*/ +TAny* CT_DataMeasureTextInput::GetObject() + { + return iMeasureTextInput; + } + + +/** +* Process a command read from the ini file +* +* @param aDataWrapper test step requiring command to be processed +* @param aCommand the command to process +* @param aSection the entry in the ini file requiring the command to be processed +* +* @return ETrue if the command is processed +*/ +TBool CT_DataMeasureTextInput::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/) + { + TBool retVal = ETrue; + + if (aCommand == KCmdNew) + { + DoCmdNew(); + } + else if (aCommand == KCmdDestructor) + { + DoCmdDestructor(); + } + else if (aCommand == KCmdSetCharJustExcess) + { + DoCmdSetCharJustExcess(aSection); + } + else if (aCommand == KCmdSetCharJustNum) + { + DoCmdSetCharJustNum(aSection); + } + else if (aCommand == KCmdSetDirection) + { + DoCmdSetDirection(aSection); + } + else if (aCommand == KCmdSetEndInputChar) + { + DoCmdSetEndInputChar(aSection); + } + else if (aCommand == KCmdSetFlags) + { + DoCmdSetFlags(aSection); + } + else if (aCommand == KCmdSetMaxAdvance) + { + DoCmdSetMaxAdvance(aSection); + } + else if (aCommand == KCmdSetMaxBounds) + { + DoCmdSetMaxBounds(aSection); + } + else if (aCommand == KCmdSetStartInputChar) + { + DoCmdSetStartInputChar(aSection); + } + else if (aCommand == KCmdSetWordJustExcess) + { + DoCmdSetWordJustExcess(aSection); + } + else if (aCommand == KCmdSetWordJustNum) + { + DoCmdSetWordJustNum(aSection); + } + else + { + retVal=EFalse; + } + + return retVal; + } + + +////////////////// COMMANDS IMPLEMENTATION //////////////////////// + +/** Creates an instance of TMeasureTextInput structure */ +void CT_DataMeasureTextInput::DoCmdNew() + { + INFO_PRINTF1(_L("Creates an instance of TMeasureTextInput structure")); + + // cleanup if any + delete iMeasureTextInput; + iMeasureTextInput = NULL; + + // call new operator + TRAPD(err, iMeasureTextInput = new (ELeave) CFont::TMeasureTextInput()); + + // check error code + if (err != KErrNone) + { + ERR_PRINTF2(_L("Error creating an instance: %d"), err); + SetError(err); + } + } + + +/** Destructor */ +void CT_DataMeasureTextInput::DoCmdDestructor() + { + DestroyData(); + } + +/** Sets TMeasureTextInputData::iStartInputChar */ +void CT_DataMeasureTextInput::DoCmdSetStartInputChar(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iStartInputChar")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iStartInputChar = value; + } + } + + +/** Sets TMeasureTextInputData::iEndInputChar */ +void CT_DataMeasureTextInput::DoCmdSetEndInputChar(const TDesC& aSection) + { + INFO_PRINTF2(_L("Sets TMeasureTextInputData::iEndInputChar %S"), &aSection); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iEndInputChar = value; + } + } + + +/** Sets TMeasureTextInputData::iDirection */ +void CT_DataMeasureTextInput::DoCmdSetDirection(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iDirection")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iDirection = value; + } + } + + +/** Sets TMeasureTextInputData::iFlags */ +void CT_DataMeasureTextInput::DoCmdSetFlags(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iFlags")); + + // get value from parameters + if ( !ReadFlags(aSection, iMeasureTextInput->iFlags) ) + { + ERR_PRINTF2(_L("No %S"), &aSection); + SetBlockResult(EFail); + } + } + + +/** Sets TMeasureTextInputData::iMaxAdvance */ +void CT_DataMeasureTextInput::DoCmdSetMaxAdvance(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iMaxAdvance")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iMaxAdvance = value; + } + } + + +/** Sets TMeasureTextInputData::iMaxBounds */ +void CT_DataMeasureTextInput::DoCmdSetMaxBounds(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iMaxBounds")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iMaxBounds = value; + } + } + + +/** Sets TMeasureTextInputData::iCharJustNum */ +void CT_DataMeasureTextInput::DoCmdSetCharJustNum(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iCharJustNum")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iCharJustNum = value; + } + } + + +/** Sets TMeasureTextInputData::iCharJustExcess */ +void CT_DataMeasureTextInput::DoCmdSetCharJustExcess(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iCharJustExcess")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iCharJustExcess = value; + } + } + + +/** Sets TMeasureTextInputData::iWordJustNum */ +void CT_DataMeasureTextInput::DoCmdSetWordJustNum(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iWordJustNum")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iWordJustNum = value; + } + } + + +/** Sets TMeasureTextInputData::iWordJustExcess */ +void CT_DataMeasureTextInput::DoCmdSetWordJustExcess(const TDesC& aSection) + { + INFO_PRINTF1(_L("Sets TMeasureTextInputData::iWordJustExcess")); + + // get value from parameters + TInt value; + if (GetValueFromConfig(aSection, value)) + { + iMeasureTextInput->iWordJustExcess = value; + } + } + + +///////////////////////////////// UTIL METHODS ////////////////////////////////////// + + +/** +* Utility method that fetches a int value from parameters +*/ +TBool CT_DataMeasureTextInput::GetValueFromConfig(const TDesC& aSection, TInt& aValue) + { + TBool ret=GetIntFromConfig(aSection, KValue(), aValue); + if ( !ret ) + { + ERR_PRINTF2(_L("No %S"), &KValue()); + SetBlockResult(EFail); + } + + return ret; + } + +/** + ReadFlags - read in bitwise measeure text input flags + @internalComponent + @param aSection - main entry in .ini file + @param aFlags - bitwise flags output + @return ETrue if data is valid in the ini file + @pre None + @post 2nd stage construction complete +*/ +TBool CT_DataMeasureTextInput::ReadFlags(const TDesC& aSection, TUint16& aFlags) + { + TBuf tempStore; + TInt index=0; + TBool moreData=ETrue; + TPtrC flagString; + TBool ret=ETrue; + + aFlags=0; + while ( moreData && ret ) + { + tempStore.Format(KFlag(), &aSection, ++index); + if ( GetStringFromConfig(aSection, tempStore, flagString) ) + { + TInt flag=0; + + if ( flagString==KEFVisualOrder ) + { + flag=CFont::TMeasureTextInput::EFVisualOrder; + } + else if ( flagString==KEFVisualOrderRightToLeft ) + { + flag=CFont::TMeasureTextInput::EFVisualOrderRightToLeft; + } + else if ( flagString==KEFIncludePenPositionInBoundsCheck ) + { + flag=CFont::TMeasureTextInput::EFIncludePenPositionInBoundsCheck; + } + else + { + ret=GetIntFromConfig(aSection, tempStore, flag); + } + + if ( ret ) + { + aFlags |= flag; + } + } + else + { + moreData=EFalse; + } + } + + return ret; + }