securitydialogs/SecUi/Src/SecUi.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
child 21 09b1ac925e3f
permissions -rw-r--r--
Revision: 201004

/*
* Copyright (c) 2002 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:  Provides initialization and uninitialization for
*               secui resource file.
*
*
*/


#include <e32std.h>
#include <eikenv.h>
#include <bautils.h>
#include "secui.h"
#include 	<data_caging_path_literals.hrh>

_LIT(KDirAndFile,"z:SecUi.rsc");


// ================= MEMBER FUNCTIONS =======================
//
// ----------------------------------------------------------
// TSecUi::InitializeLibL()
// Initializes SecUi resource file
// ----------------------------------------------------------
//
EXPORT_C void TSecUi::InitializeLibL()
	{
	if (Dll::Tls()!=NULL)
    {//Secui has been initialized already; increase client count.
        #if defined(_DEBUG)
        RDebug::Print(_L("(SECUI): InitializeLibL: Secui has been initialized already"));
        #endif
        TSecUi* instance=(TSecUi*) Dll::Tls();
        instance->IncreaseClientCount();
        return;
    }
    #if defined(_DEBUG)
    RDebug::Print(_L("(SECUI): InitializeLibL: First initialization"));
    #endif
	TSecUi* self = new (ELeave) TSecUi();
	CleanupStack::PushL(self);
	self->ConstructL();
    self->IncreaseClientCount();
	Dll::SetTls(self);
	CleanupStack::Pop();
	}
//
// ----------------------------------------------------------
// TSecUi::UnInitializeLib()
// Uninitializes SecUi resource file
// ----------------------------------------------------------
//
EXPORT_C void TSecUi::UnInitializeLib()
	{
    if (Dll::Tls()==NULL)
        return;
    #if defined(_DEBUG)
    RDebug::Print(_L("(SECUI): UnInitializeLibL"));
    #endif
	TSecUi* instance=(TSecUi*) Dll::Tls();
    instance->DecreaseClientCount();
    //only delete the lib is there are no clients using it
    if(instance->CanBeFreed())
        {
        #if defined(_DEBUG)
        RDebug::Print(_L("(SECUI): UnInitializeLibL: Last uninitialize"));
        #endif
	    delete instance;
	    Dll::SetTls(NULL);
        }
	}

//
// ----------------------------------------------------------
// TSecUi::TSecUi()
// C++ default constructor
// ----------------------------------------------------------
//
TSecUi::TSecUi()
	{
	
	}
//
// ----------------------------------------------------------
// TSecUi::TSecUi()
// Destructor
// ----------------------------------------------------------
//
TSecUi::~TSecUi()
	{
	if (iResourceFileOffset >= 0)
		{
		CEikonEnv::Static()->DeleteResourceFile(iResourceFileOffset);
		}
	}
//
// ----------------------------------------------------------
// TSecUi::ConstructL()
// Symbian OS default constructor
// ----------------------------------------------------------
//
void TSecUi::ConstructL()
	{
	iResourceFileOffset = CCoeEnv::Static()->AddResourceFileL(ResourceFileName());
    iClientCount = 0;
	}
//
// ----------------------------------------------------------
// TSecUi::ResourceFileName
// Returns the resource file name of SecurityUI dll.
// ----------------------------------------------------------
//
TFileName TSecUi::ResourceFileName()
	{
	
	TParse parse;
    parse.Set(KDirAndFile, &KDC_RESOURCE_FILES_DIR, NULL); 
	TFileName resourceFileName(parse.FullName());
	BaflUtils::NearestLanguageFile(CCoeEnv::Static()->FsSession(), resourceFileName);
	return resourceFileName;
	
	}

// -----------------------------------------------------------------------------
// TSecUi::CanBeFreed()
// -----------------------------------------------------------------------------
//
TBool TSecUi::CanBeFreed()
    {
	if (iClientCount <= 0)
	{
        #if defined(_DEBUG)
		RDebug::Print(_L("(SECUI): No clients; Can be freed: clients(%d) "), iClientCount);
        #endif
		return ETrue;
	}
	else
	{
        #if defined(_DEBUG)
		RDebug::Print(_L("(SECUI): Can NOT be freed: clients(%d) "), iClientCount);
		#endif
        return EFalse;
	}
    }

// -----------------------------------------------------------------------------
// TSecUi::IncreaseClientCount()
// -----------------------------------------------------------------------------
//
void TSecUi::IncreaseClientCount()
    {
	++iClientCount;
    #if defined(_DEBUG)
	RDebug::Print(_L("(SECUI): IncreaseClientCount, clients now(%d) "), iClientCount);
    #endif
    }

// -----------------------------------------------------------------------------
// TSecUi::DecreaseClientCount()
// -----------------------------------------------------------------------------
//

void TSecUi::DecreaseClientCount()
    {
	--iClientCount;
    #if defined(_DEBUG)
	RDebug::Print(_L("(SECUI): DecreaseClientCount, clients now(%d) "), iClientCount);
    #endif
    }

	
// End of file