masterfix DEV300: #i10000# added missing file

This commit is contained in:
Ivo Hinkelmann 2011-02-21 12:34:10 +01:00
parent fc6f2208c5
commit 2ea89ad160
4 changed files with 301 additions and 3 deletions

86
basic/inc/basic/vbahelper.hxx Executable file
View file

@ -0,0 +1,86 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef BASIC_VBAHELPR_HXX
#define BASIC_VBAHELPR_HXX
#include <com/sun/star/frame/XModel.hpp>
namespace basic {
namespace vba {
/* This header contains public helper functions for VBA used from this module
and from other VBA implementation modules such as vbahelper.
*/
// ============================================================================
/** Locks or unlocks the controllers of all documents that have the same type
as the specified document.
First, the global module manager (com.sun.star.frame.ModuleManager) is
asked for the type of the passed model, and all open documents with the
same type will be locked or unlocked.
@param rxModel
A document model determining the type of the documents to be locked or
unlocked.
@param bLockControllers
Passing true will lock all controllers, passing false will unlock them.
*/
void lockControllersOfAllDocuments(
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxModel,
sal_Bool bLockControllers );
// ============================================================================
/** Enables or disables the container windows of all controllers of all
documents that have the same type as the specified document.
First, the global module manager (com.sun.star.frame.ModuleManager) is
asked for the type of the passed model, and the container windows of all
open documents with the same type will be enabled or disabled.
@param rxModel
A document model determining the type of the documents to be enabled or
disabled.
@param bEnableWindows
Passing true will enable all container windows of all controllers,
passing false will disable them.
*/
void enableContainerWindowsOfAllDocuments(
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxModel,
sal_Bool bEnableWindows );
// ============================================================================
} // namespace vba
} // namespace basic
#endif

View file

@ -39,8 +39,8 @@ ENABLE_EXCEPTIONS=TRUE
SLOFILES= \
$(SLO)$/basmgr.obj \
$(SLO)$/basicmanagerrepository.obj
# $(SLO)$/vbahelper.obj
$(SLO)$/basicmanagerrepository.obj\
$(SLO)$/vbahelper.obj
# --- Targets -------------------------------------------------------------

212
basic/source/basmgr/vbahelper.cxx Executable file
View file

@ -0,0 +1,212 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_basic.hxx"
#include "basic/vbahelper.hxx"
#include <com/sun/star/container/XEnumeration.hpp>
#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/frame/XModel2.hpp>
#include <com/sun/star/frame/XModuleManager.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <comphelper/processfactory.hxx>
namespace basic {
namespace vba {
using namespace ::com::sun::star;
// ============================================================================
namespace {
/** Creates the global module manager needed to identify the type of documents.
*/
uno::Reference< frame::XModuleManager > lclCreateModuleManager()
{
uno::Reference< frame::XModuleManager > xModuleManager;
try
{
uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory(), uno::UNO_SET_THROW );
xModuleManager.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ModuleManager" ) ) ), uno::UNO_QUERY );
}
catch( uno::Exception& )
{
}
OSL_ENSURE( xModuleManager.is(), "::basic::vba::lclCreateModuleManager - cannot create module manager" );
return xModuleManager;
}
// ----------------------------------------------------------------------------
/** Returns the document service name of the specified document.
*/
::rtl::OUString lclIdentifyDocument( const uno::Reference< frame::XModuleManager >& rxModuleManager, const uno::Reference< frame::XModel >& rxModel )
{
::rtl::OUString aServiceName;
if( rxModuleManager.is() )
{
try
{
aServiceName = rxModuleManager->identify( rxModel );
}
catch( uno::Exception& )
{
}
OSL_ENSURE( aServiceName.getLength() > 0, "::basic::vba::lclIdentifyDocument - cannot identify document" );
}
return aServiceName;
}
// ----------------------------------------------------------------------------
/** Returns an enumeration of all open documents.
*/
uno::Reference< container::XEnumeration > lclCreateDocumentEnumeration()
{
uno::Reference< container::XEnumeration > xEnumeration;
try
{
uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory(), uno::UNO_SET_THROW );
uno::Reference< frame::XDesktop > xDesktop( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ), uno::UNO_QUERY_THROW );
uno::Reference< container::XEnumerationAccess > xComponentsEA( xDesktop->getComponents(), uno::UNO_SET_THROW );
xEnumeration = xComponentsEA->createEnumeration();
}
catch( uno::Exception& )
{
}
OSL_ENSURE( xEnumeration.is(), "::basic::vba::lclCreateDocumentEnumeration - cannot create enumeration of all documents" );
return xEnumeration;
}
// ----------------------------------------------------------------------------
/** Locks or unlocks the controllers of the specified document model.
*/
void lclLockControllers( const uno::Reference< frame::XModel >& rxModel, sal_Bool bLockControllers )
{
if( rxModel.is() ) try
{
if( bLockControllers )
rxModel->lockControllers();
else
rxModel->unlockControllers();
}
catch( uno::Exception& )
{
}
}
// ----------------------------------------------------------------------------
/** Enables or disables the container windows of all controllers of the
specified document model.
*/
void lclEnableContainerWindows( const uno::Reference< frame::XModel >& rxModel, sal_Bool bEnableWindows )
{
try
{
uno::Reference< frame::XModel2 > xModel2( rxModel, uno::UNO_QUERY_THROW );
uno::Reference< container::XEnumeration > xControllersEnum( xModel2->getControllers(), uno::UNO_SET_THROW );
// iterate over all controllers
while( xControllersEnum->hasMoreElements() )
{
try
{
uno::Reference< frame::XController > xController( xControllersEnum->nextElement(), uno::UNO_QUERY_THROW );
uno::Reference< frame::XFrame > xFrame( xController->getFrame(), uno::UNO_SET_THROW );
uno::Reference< awt::XWindow > xWindow( xFrame->getContainerWindow(), uno::UNO_SET_THROW );
xWindow->setEnable( bEnableWindows );
}
catch( uno::Exception& )
{
}
}
}
catch( uno::Exception& )
{
}
}
// ----------------------------------------------------------------------------
typedef void (*ModifyDocumentFunc)( const uno::Reference< frame::XModel >&, sal_Bool );
/** Implementation iterating over all documents that have the same type as the
specified model, and calling the passed functor.
*/
void lclIterateDocuments( ModifyDocumentFunc pModifyDocumentFunc, const uno::Reference< frame::XModel >& rxModel, sal_Bool bModificator )
{
uno::Reference< frame::XModuleManager > xModuleManager = lclCreateModuleManager();
uno::Reference< container::XEnumeration > xDocumentsEnum = lclCreateDocumentEnumeration();
::rtl::OUString aIdentifier = lclIdentifyDocument( xModuleManager, rxModel );
if( xModuleManager.is() && xDocumentsEnum.is() && (aIdentifier.getLength() > 0) )
{
// iterate over all open documents
while( xDocumentsEnum->hasMoreElements() )
{
try
{
uno::Reference< frame::XModel > xCurrModel( xDocumentsEnum->nextElement(), uno::UNO_QUERY_THROW );
::rtl::OUString aCurrIdentifier = lclIdentifyDocument( xModuleManager, xCurrModel );
if( aCurrIdentifier == aIdentifier )
pModifyDocumentFunc( xCurrModel, bModificator );
}
catch( uno::Exception& )
{
}
}
}
else
{
// no module manager, no documents enumeration, no identifier -> at least process the passed document
pModifyDocumentFunc( rxModel, bModificator );
}
}
} // namespace
// ============================================================================
void lockControllersOfAllDocuments( const uno::Reference< frame::XModel >& rxModel, sal_Bool bLockControllers )
{
lclIterateDocuments( &lclLockControllers, rxModel, bLockControllers );
}
// ============================================================================
void enableContainerWindowsOfAllDocuments( const uno::Reference< frame::XModel >& rxModel, sal_Bool bEnableWindows )
{
lclIterateDocuments( &lclEnableContainerWindows, rxModel, bEnableWindows );
}
// ============================================================================
} // namespace vba
} // namespace basic

View file

@ -54,7 +54,7 @@
#include <basic/basrdll.hxx>
#include <vos/mutex.hxx>
#include <basic/sbobjmod.hxx>
//#include <basic/vbahelper.hxx>
#include <basic/vbahelper.hxx>
#include <cppuhelper/implbase3.hxx>
#include <unotools/eventcfg.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>