diff -r 000000000000 -r f72a12da539e idlehomescreen/xmluicontroller/src/texttransactionelement.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluicontroller/src/texttransactionelement.cpp Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2005-2007 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: Text transaction element +* +*/ + + +#include "texttransactionelement.h" +#include "aixmluiutils.h" + +#include "xntype.h" +#include "xnproperty.h" +#include "xntext.h" +#include "xnmenuadapter.h" +#include "xnnewsticker.h" +//#include +#include "mxncomponentinterface.h" +#include "xnnodeappif.h" +#include "xnuiengineappif.h" +#include "xnproperty.h" +#include "xndompropertyvalue.h" +#include "xnvolumecontrol.h" +#include "aistrcnv.h" + +// ============================ MEMBER FUNCTIONS =============================== + +using namespace AiXmlUiController; +using namespace XnTextInterface; + +CTextTransactionElement::CTextTransactionElement(AiUtility::CContentPriorityMap& aContentPriorityMap) + : CTransactionElement(aContentPriorityMap) + { + } + +CTextTransactionElement* CTextTransactionElement::NewL(AiUtility::CContentPriorityMap& aContentPriorityMap) + { + CTextTransactionElement* self = new( ELeave ) CTextTransactionElement(aContentPriorityMap); + + return self; + } + +CTextTransactionElement::~CTextTransactionElement() + { + if (iNewText) + { + delete iNewText; + iNewText = NULL; + } + } + +void CTextTransactionElement::InitializeL( CXnNodeAppIf& aTarget, const TDesC& aText ) + { + CheckTypeL( aTarget ); + SetTarget( aTarget ); + + if (iNewText) + { + delete iNewText; + iNewText = NULL; + } + iNewText = aText.AllocL(); + } + +void CTextTransactionElement::UpdateDataL() + { + // Set new text + SetTextL(); + + // Update content priority + UpdateContentPriorityL(); + } + +void CTextTransactionElement::Reset() + { + CTransactionElement::Reset(); + + + if (iNewText) + { + delete iNewText; + iNewText = NULL; + } + } + +TBool CTextTransactionElement::IsSupported( CXnNodeAppIf& aTarget ) + { + CXnType* typeInfo = aTarget.Type(); + + if ( !typeInfo ) + { + return EFalse; + } + + const TDesC8& type = typeInfo->Type(); + + // Text element, menu item, newsticker, and marquee supported + return ( type == XnTextInterface::MXnTextInterface::Type() || + type == KXnMenuItem || + type == KXnMenu || + type == XnPropertyNames::softkey::KNodeName || + type == XnPropertyNames::volumecontrol::KSlider /*|| + type == XnNewstickerInterface::MXnNewstickerInterface::Type() || + type == XnMarqueeInterface::MXnMarqueeInterface::Type() */); + } + +void CTextTransactionElement::CheckTypeL( CXnNodeAppIf& aTarget ) + { + if ( !IsSupported( aTarget ) ) + { + User::Leave( KErrNotSupported ); + } + } + +void CTextTransactionElement::SetTextL() + { + // Get type info + const TDesC8& type = LeaveIfNull( Target().Type(), KErrNotSupported )->Type(); + + if ( type == XnTextInterface::MXnTextInterface::Type() ) // text element + { + // Get control interface + XnTextInterface::MXnTextInterface* textControl = NULL; + XnComponentInterface::MakeInterfaceL( textControl, Target() ); + LeaveIfNull( textControl, KErrNotSupported ); + + // Set text + + textControl->SetTextL( *iNewText ); + } + + // Menu softkey texts + else if ( type == XnPropertyNames::softkey::KNodeName) + { + CXnNodeAppIf& target = Target(); + // Set the label of the softkey + CXnDomPropertyValue* propertyValue = + CXnDomPropertyValue::NewL( target.UiEngineL()->StringPool() ); + + CleanupStack::PushL( propertyValue ); + + // Convert unicode to UTF-8 + HBufC8* textBuf = NULL; + + textBuf = AiUtility::CopyToBufferL( textBuf, *iNewText ); + CleanupStack::PushL( textBuf ); + + propertyValue->SetStringValueL( CXnDomPropertyValue::EString, + *textBuf ); + + CleanupStack::PopAndDestroy( textBuf ); + + CXnProperty* newProperty = CXnProperty::NewL( XnPropertyNames::menu::KLabel, + propertyValue, + target.UiEngineL()->StringPool() ); + CleanupStack::Pop( propertyValue ); + + CleanupStack::PushL( newProperty ); + + target.SetPropertyL( newProperty ); + + CleanupStack::Pop( newProperty ); + target.UiEngineL()->RefreshMenuL(); + + } + + else if ( type == XnPropertyNames::volumecontrol::KSlider ) // slider + { + // Get volume control interface + XnVolumeControlInterface::MXnVolumeControlInterface* volumeControl = NULL; + XnComponentInterface::MakeInterfaceL( volumeControl, Target() ); + LeaveIfNull( volumeControl, KErrNotSupported ); + + TInt32 volume = 0; + + User::LeaveIfError( AiUtility::ParseInt( volume, *iNewText ) ); + volumeControl->SetValue( volume ); + } +/* else if ( type == XnNewstickerInterface::MXnNewstickerInterface::Type() ) + { + // Get Newsticker control interface + XnNewstickerInterface::MXnNewstickerInterface* newsTicker = NULL; + XnComponentInterface::MakeInterfaceL( newsTicker, Target() ); + LeaveIfNull( newsTicker, KErrNotSupported ); + + // Append new title + newsTicker->ClearTitles(); + newsTicker->AppendTitleL( iNewText ); + } + else if ( type == XnMarqueeInterface::MXnMarqueeInterface::Type() ) + { + // Get marquee interface + XnMarqueeInterface::MXnMarqueeInterface* marquee = NULL; + XnComponentInterface::MakeInterfaceL( marquee, Target() ); + LeaveIfNull( marquee, KErrNotSupported ); + + // Set new text + marquee->SetTextL( iNewText ); + }*/ + else + { + User::Leave( KErrNotSupported ); + } + } + +// End of File