diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2006-03-14 10:38:23 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2006-03-14 10:38:23 +0000 |
commit | 9a3ec7b70b0784331350cde457354a8e8bd83939 (patch) | |
tree | 6eaf766616937ab44b40728dd4a99a3314cb9d2f /unotools/source/misc | |
parent | 45fe530d4ec65ecbe392abc0dbf9c2b174268ddf (diff) |
INTEGRATION: CWS pbrwuno (1.1.2); FILE ADDED
2005/11/01 13:37:28 fs 1.1.2.2: #i10000#
2005/10/21 12:26:54 fs 1.1.2.1: helper for implementing a library containing UNO components, plus resource access
Diffstat (limited to 'unotools/source/misc')
-rw-r--r-- | unotools/source/misc/componentresmodule.cxx | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/unotools/source/misc/componentresmodule.cxx b/unotools/source/misc/componentresmodule.cxx new file mode 100644 index 000000000000..a1fed20bb920 --- /dev/null +++ b/unotools/source/misc/componentresmodule.cxx @@ -0,0 +1,160 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: componentresmodule.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2006-03-14 11:38:23 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#ifndef UNOTOOLS_INC_UNOTOOLS_COMPONENTRESMODULE_HXX +#include <unotools/componentresmodule.hxx> +#endif + +/** === begin UNO includes === **/ +/** === end UNO includes === **/ + +#ifndef _TOOLS_RESMGR_HXX +#include <tools/resmgr.hxx> +#endif +#ifndef _OSL_DIAGNOSE_H_ +#include <osl/diagnose.h> +#endif + +//........................................................................ +namespace utl +{ +//........................................................................ + + //==================================================================== + //= OComponentResModuleImpl + //==================================================================== + /** PIMPL-class for OComponentResourceModule + + not threadsafe! + */ + class OComponentResModuleImpl + { + private: + ResMgr* m_pRessources; + bool m_bInitialized; + ::rtl::OString m_sResFilePrefix; + + public: + OComponentResModuleImpl( const ::rtl::OString& _rResFilePrefix ) + :m_pRessources( NULL ) + ,m_bInitialized( false ) + ,m_sResFilePrefix( _rResFilePrefix ) + { + } + + ~OComponentResModuleImpl() + { + freeResManager(); + } + + /** releases our resource manager + */ + void freeResManager(); + + /** retrieves our resource manager + */ + ResMgr* getResManager(); + + private: + OComponentResModuleImpl(); // never implemented + OComponentResModuleImpl( const OComponentResModuleImpl& ); // never implemented + OComponentResModuleImpl& operator=( const OComponentResModuleImpl& ); // never implemented + }; + + //-------------------------------------------------------------------- + void OComponentResModuleImpl::freeResManager() + { + delete m_pRessources, m_pRessources = NULL; + m_bInitialized = false; + } + + //-------------------------------------------------------------------- + ResMgr* OComponentResModuleImpl::getResManager() + { + if ( !m_pRessources && !m_bInitialized ) + { + // create a manager with a fixed prefix + ByteString aMgrName = m_sResFilePrefix; + aMgrName += ByteString::CreateFromInt32(SUPD); + + m_pRessources = ResMgr::CreateResMgr( aMgrName.GetBuffer() ); + OSL_ENSURE( m_pRessources, + ( ByteString( "OModuleImpl::getResManager: could not create the resource manager (file name: " ) + += aMgrName + += ByteString( ")!" ) ).GetBuffer() ); + + m_bInitialized = sal_True; + } + return m_pRessources; + } + + //==================================================================== + //= OComponentResourceModule + //==================================================================== + //-------------------------------------------------------------------- + OComponentResourceModule::OComponentResourceModule( const ::rtl::OString& _rResFilePrefix ) + :BaseClass() + ,m_pImpl( new OComponentResModuleImpl( _rResFilePrefix ) ) + { + } + + //-------------------------------------------------------------------- + OComponentResourceModule::~OComponentResourceModule() + { + } + + //------------------------------------------------------------------------- + ResMgr* OComponentResourceModule::getResManager() + { + ::osl::MutexGuard aGuard( m_aMutex ); + return m_pImpl->getResManager(); + } + + //-------------------------------------------------------------------------- + void OComponentResourceModule::onFirstClient() + { + BaseClass::onFirstClient(); + } + + //-------------------------------------------------------------------------- + void OComponentResourceModule::onLastClient() + { + m_pImpl->freeResManager(); + BaseClass::onLastClient(); + } + +//........................................................................ +} // namespace utl +//........................................................................ |