summaryrefslogtreecommitdiff
path: root/unotools/source
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2006-03-14 10:38:23 +0000
committerVladimir Glazounov <vg@openoffice.org>2006-03-14 10:38:23 +0000
commit9a3ec7b70b0784331350cde457354a8e8bd83939 (patch)
tree6eaf766616937ab44b40728dd4a99a3314cb9d2f /unotools/source
parent45fe530d4ec65ecbe392abc0dbf9c2b174268ddf (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')
-rw-r--r--unotools/source/misc/componentresmodule.cxx160
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
+//........................................................................