idlehomescreen/xmluicontroller/src/emptycontenttransactionelement.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 15:47:59 +0300
branchRCL_3
changeset 34 d05a55b217df
parent 0 f72a12da539e
child 54 1b758917cafc
permissions -rw-r--r--
Revision: 201013 Kit: 201015

/*
* 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:  Transaction element for publishing empty content
*
*/


#include "xntype.h"
#include "xnnewsticker.h"
#include "xnbitmap.h"
#include "xntext.h"
#include "xntexteditor.h"
#include "emptycontenttransactionelement.h"
#include "aixmluiconstants.h"
#include "aixmluiutils.h"

using namespace AiXmlUiController;
using namespace XnImageInterface;
using namespace XnTextInterface;
using namespace AiUiDef::xml;

const TInt KControlIndexOffset = 1;

// ======== MEMBER FUNCTIONS ========

CEmptyContentTransactionElement::CEmptyContentTransactionElement(
                                AiUtility::CContentPriorityMap& aContentPriorityMap)
    : CTransactionElement( aContentPriorityMap ),
      iIndex( KErrNotFound )
    {
    }

CEmptyContentTransactionElement* CEmptyContentTransactionElement::NewL(
                                AiUtility::CContentPriorityMap& aContentPriorityMap)
    {
    CEmptyContentTransactionElement* self =
            new( ELeave ) CEmptyContentTransactionElement( aContentPriorityMap );
    return self;
    }

CEmptyContentTransactionElement::~CEmptyContentTransactionElement()
    {
    }

void CEmptyContentTransactionElement::InitializeL( CXnNodeAppIf& aTarget, TInt aIndex )
    {
    SetTarget( aTarget );
    
    // Indexes in XML theme run 1...n, but in control interface 0...n-1
    iIndex = aIndex - KControlIndexOffset;
    }

void CEmptyContentTransactionElement::Reset()
    {
    CTransactionElement::Reset();
    iIndex = KErrNotFound;
    }

void CEmptyContentTransactionElement::UpdateDataL()
    {
    CXnType* type = Target().Type();

    if ( type->Type() == XnImageInterface::MXnImageInterface::Type() )
        {
        MXnImageInterface* imageIntr = NULL;
        if ( !XnComponentInterface::MakeInterfaceL( imageIntr, Target() ) )
            {
            User::Leave( KErrNotSupported );
            }
        // Clears the bitmaps from component
        imageIntr->SetContentBitmaps( NULL, NULL );
        }
    else if ( type->Type() == XnTextInterface::MXnTextInterface::Type() ) // text element
        {
        // Get control interface
        XnTextInterface::MXnTextInterface* textControl = NULL;
        XnComponentInterface::MakeInterfaceL( textControl, Target() );
        LeaveIfNull( textControl, KErrNotSupported );
        
        // Clears the text from component
        textControl->SetTextL( KNullDesC );
        }
    else if ( type->Type() == XnTextEditorInterface::MXnTextEditorInterface::Type() ) // texteditor element
        {
        // Get control interface
        XnTextEditorInterface::MXnTextEditorInterface* editorControl = NULL;
        XnComponentInterface::MakeInterfaceL( editorControl, Target() );
        LeaveIfNull( editorControl, KErrNotSupported );
        
        // Clears the text from component
        editorControl->SetTextL( KNullDesC );
        }
    else
        {
        CXnNodeAppIf* parent = Target().ParentL();
        LeaveIfNull( parent, KErrNotSupported );
        const TDesC8& type = LeaveIfNull( parent->Type(), KErrNotSupported )->Type();
            
        if ( type == XnNewstickerInterface::MXnNewstickerInterface::Type() )
            {
            XnNewstickerInterface::MXnNewstickerInterface* newsticker = NULL;
            XnComponentInterface::MakeInterfaceL( newsticker, *parent );
            LeaveIfNull( newsticker, KErrGeneral );
            TInt titleIndexVal = -1;
            CXnProperty* titleIndex = Target().GetPropertyL( XnPropertyNames::title::KTitleIndex );
            if ( titleIndex )
                {
                TLex8 lex( titleIndex->StringValue() );
                TInt err = lex.Val( titleIndexVal );
                if ( err == KErrNone && titleIndexVal > -1 )
                    {
                    newsticker->DeleteTitle( titleIndexVal );
                    }
                }
            }
        }
    // Clear current content priority
    ClearContentPriorityL();
    }