idlefw/tsrc/devicestatusplugin/stub/src/stubdataholder.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:13:44 +0300
branchRCL_3
changeset 111 053c6c7c14f3
permissions -rw-r--r--
Revision: 201026 Kit: 201033

/*
* Copyright (c)  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:  ?Description
*
*/


#include "stubdataholder.h"


CProfileName::~CProfileName()
    {
    delete iName;
    }


TInt CProfileName::Id() const
    {
    return iId;
    }


const TDesC& CProfileName::Name() const
    {
    if( iName )
        {
        return *iName;
        }
    return KNullDesC;
    }

const TDesC& CProfileName::NaviName() const
    {
    if( iNaviName )
        {
        return *iNaviName;
        }
    return KNullDesC;
    }

const TDesC& CProfileName::TitleName() const
    {
    if( iTitleName )
        {
        return *iTitleName;
        }
    return KNullDesC;
    }


void CProfileName::SetL( const TDesC& aName, TInt aId )
    {
    delete iName;
    iName = NULL;
    iName = aName.AllocL();
    iId = aId;
    }


const TDesC& CProfileName::ShortName() const
	{
    if( iName )
        {
        return *iName;
        }
    return KNullDesC;
	}


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

// ---------------------------------------------------------------------------
// ?description_if_needed
// ---------------------------------------------------------------------------
//
CStubDataHolder::CStubDataHolder()
    {
    }


// ---------------------------------------------------------------------------
// ?description_if_needed
// ---------------------------------------------------------------------------
//
void CStubDataHolder::ConstructL()
    {
    iProfile = new( ELeave ) CProfileName;

    User::LeaveIfError( Dll::SetTls( this ) );
    }


// ---------------------------------------------------------------------------
// ?description_if_needed
// ---------------------------------------------------------------------------
//
EXPORT_C CStubDataHolder* CStubDataHolder::InstanceL()
    {
    CStubDataHolder* ptr = static_cast<CStubDataHolder*>( Dll::Tls() );

    if( ptr )
        {
        return ptr;
        }

    CStubDataHolder* self = new( ELeave ) CStubDataHolder;
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }


EXPORT_C CStubDataHolder* CStubDataHolder::Instance()
    {
    CStubDataHolder* ptr = static_cast<CStubDataHolder*>( Dll::Tls() );

    if( !ptr )
        {
        User::Panic( _L("StubDataHolder"), 1 );
        }

    return ptr;
    }


EXPORT_C void CStubDataHolder::Release()
    {
    CStubDataHolder* ptr = static_cast<CStubDataHolder*>( Dll::Tls() );

    if( ptr )
        {
        delete ptr;
        }
    }


// ---------------------------------------------------------------------------
// ?description_if_needed
// ---------------------------------------------------------------------------
//

// ---------------------------------------------------------------------------
// ?description_if_needed
// ---------------------------------------------------------------------------
//
CStubDataHolder::~CStubDataHolder()
    {
    iSSSettingValues.Reset();
    iSSSettingsObservers.Reset();
    iProfileChangeObservers.Reset();
    delete iProfile;
    Dll::SetTls( NULL );
    }


// ---------------------------------------------------------------------------
// ?implementation_description
// ---------------------------------------------------------------------------
//
EXPORT_C void CStubDataHolder::AddProfileChangeObserverL( MProfileChangeObserver& aObserver, CBase* aOwner )
    {
    TProfileObserver obs;
    obs.iOwner = aOwner;
    obs.iObserver = &aObserver;
    User::LeaveIfError( iProfileChangeObservers.Append( obs ) );
    }


EXPORT_C void CStubDataHolder::RemoveProfileChangeObserver( CBase* aOwner )
    {
    const TInt count = iProfileChangeObservers.Count();
    
    for( TInt i( 0 ); i < count; i++ )
        {
        if( iProfileChangeObservers[i].iOwner == aOwner )        
            {
            iProfileChangeObservers.Remove( i );
            break;
            }
        }
    }


EXPORT_C RArray<TProfileObserver>& CStubDataHolder::ProfileChangeObservers()
    {
    return iProfileChangeObservers;
    }


EXPORT_C void CStubDataHolder::SetCurrentProfileL( const TDesC& aName, TInt aId )
    {
    iProfile->SetL( aName, aId );
    }


EXPORT_C MProfileName* CStubDataHolder::CurrentProfile()
    {
    return iProfile;
    }


EXPORT_C void CStubDataHolder::SetNWMessageObserver( MNWMessageObserver& aObserver, TNWInfo& aInfo )
    {
    iNWObserver = &aObserver;
    iNWInfo = &aInfo;
    }


EXPORT_C MNWMessageObserver* CStubDataHolder::NWMessageObserver()
    {
    return iNWObserver;
    }


EXPORT_C TNWInfo* CStubDataHolder::NWInfo()
    {
    return iNWInfo;
    }

// ---------------------------------------------------------------------------
// From class ?base_class.
// ?implementation_description
// ---------------------------------------------------------------------------
//
void CStubDataHolder::AddSSSettingsObserverL( MSSSettingsObserver& aObserver )
    {
    User::LeaveIfError( iSSSettingsObservers.Append( &aObserver ) );    
    };


TInt CStubDataHolder::GetSSSettingsValueL( TSSSettingsSetting aSetting )
    {
    const TInt count = iSSSettingValues.Count();
    
    for( TInt i( 0 ); i < count; i++ )    
        {
        if( iSSSettingValues[i].iSetting == aSetting )
            {
            return iSSSettingValues[i].iValue;
            }
        }
        
    User::Leave( KErrNotFound );
    return KErrNotFound;
    }
    

void CStubDataHolder::RemoveSSSettingsObserver( MSSSettingsObserver& aObserver )
    {
    const TInt count = iSSSettingsObservers.Count();
    
    for( TInt i( 0 ); i < count; i++ )
        {
        if( iSSSettingsObservers[i] == &aObserver )
            {
            iSSSettingsObservers.Remove( i );
            break;
            }
        }
    }
    

EXPORT_C RArray<MSSSettingsObserver*>& CStubDataHolder::SSSettingsObservers()
    {
    return iSSSettingsObservers;    
    }


EXPORT_C void CStubDataHolder::SetSSSettingsValueL( TSSSettingsSetting aSetting, TInt aValue )
    {
    TSSSettingsValue ss;
    ss.iSetting = aSetting;
    ss.iValue = aValue;
    User::LeaveIfError( iSSSettingValues.Append( ss ) );
    }


EXPORT_C void CStubDataHolder::RemoveSSSetting( TSSSettingsSetting aSetting )
    {
    const TInt count = iSSSettingValues.Count();
    
    for( TInt i( count - 1 ); i >= 0; i-- )    
        {
        if( iSSSettingValues[i].iSetting == aSetting )
            {
            iSSSettingValues.Remove( i );
            }
        }
    }