blob: 463375c241b58a0dc63bb0b715600cbcfa680741 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include <unotools/pathoptions.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
#include <cppuhelper/implbase2.hxx>
#include "../customshapes/EnhancedCustomShapeEngine.hxx"
#include <svx/xtable.hxx>
#include "svx/unoshcol.hxx"
#include "recoveryui.hxx"
#include "svx/xmlgrhlp.hxx"
#include "tbunocontroller.hxx"
#include "tbunosearchcontrollers.hxx"
using namespace ::com::sun::star;
using namespace ::rtl;
using namespace ::cppu;
class SvxUnoColorTable : public WeakImplHelper2< container::XNameContainer, lang::XServiceInfo >
{
private:
XColorListSharedPtr maTable;
public:
SvxUnoColorTable() throw();
virtual ~SvxUnoColorTable() throw();
// XServiceInfo
virtual OUString SAL_CALL getImplementationName( ) throw( uno::RuntimeException );
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw( uno::RuntimeException);
virtual uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw( uno::RuntimeException);
static OUString getImplementationName_Static() throw()
{
return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.SvxUnoColorTable"));
}
static uno::Sequence< OUString > getSupportedServiceNames_Static(void) throw();
// XNameContainer
virtual void SAL_CALL insertByName( const OUString& aName, const uno::Any& aElement ) throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException);
virtual void SAL_CALL removeByName( const OUString& Name ) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException);
// XNameReplace
virtual void SAL_CALL replaceByName( const OUString& aName, const uno::Any& aElement ) throw( lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException);
// XNameAccess
virtual uno::Any SAL_CALL getByName( const OUString& aName ) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException);
virtual uno::Sequence< OUString > SAL_CALL getElementNames( ) throw( uno::RuntimeException);
virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) throw( uno::RuntimeException);
// XElementAccess
virtual uno::Type SAL_CALL getElementType( ) throw( uno::RuntimeException);
virtual sal_Bool SAL_CALL hasElements( ) throw( uno::RuntimeException);
};
SvxUnoColorTable::SvxUnoColorTable() throw()
: maTable(XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath()))
{
}
SvxUnoColorTable::~SvxUnoColorTable() throw()
{
}
sal_Bool SAL_CALL SvxUnoColorTable::supportsService( const OUString& ServiceName ) throw(uno::RuntimeException)
{
uno::Sequence< OUString > aSNL( getSupportedServiceNames() );
const OUString * pArray = aSNL.getConstArray();
for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
if( pArray[i] == ServiceName )
return sal_True;
return sal_False;
}
OUString SAL_CALL SvxUnoColorTable::getImplementationName() throw( uno::RuntimeException )
{
return OUString( RTL_CONSTASCII_USTRINGPARAM("SvxUnoColorTable") );
}
uno::Sequence< OUString > SAL_CALL SvxUnoColorTable::getSupportedServiceNames( )
throw( uno::RuntimeException )
{
return getSupportedServiceNames_Static();
}
uno::Sequence< OUString > SvxUnoColorTable::getSupportedServiceNames_Static(void) throw()
{
uno::Sequence< OUString > aSNS( 1 );
aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.ColorTable" ));
return aSNS;
}
// XNameContainer
void SAL_CALL SvxUnoColorTable::insertByName( const OUString& aName, const uno::Any& aElement )
throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException )
{
if( hasByName( aName ) )
throw container::ElementExistException();
sal_Int32 nColor = 0;
if( !(aElement >>= nColor) )
throw lang::IllegalArgumentException();
XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName );
maTable->Insert( pEntry, maTable->Count() );
}
void SAL_CALL SvxUnoColorTable::removeByName( const OUString& Name )
throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
{
long nIndex = maTable->GetIndex(Name);
if( nIndex == -1 )
throw container::NoSuchElementException();
maTable->Remove( nIndex );
}
// XNameReplace
void SAL_CALL SvxUnoColorTable::replaceByName( const OUString& aName, const uno::Any& aElement )
throw( lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
{
sal_Int32 nColor = 0;
if( !(aElement >>= nColor) )
throw lang::IllegalArgumentException();
long nIndex = maTable->GetIndex(aName);
if( nIndex == -1 )
throw container::NoSuchElementException();
XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName );
delete maTable->Replace( pEntry, nIndex );
}
// XNameAccess
uno::Any SAL_CALL SvxUnoColorTable::getByName( const OUString& aName )
throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
{
long nIndex = maTable->GetIndex(aName);
if( nIndex == -1 )
throw container::NoSuchElementException();
XColorEntry* pEntry = maTable->GetColor( nIndex );
return uno::Any( (sal_Int32) pEntry->GetColor().GetRGBColor() );
}
uno::Sequence< OUString > SAL_CALL SvxUnoColorTable::getElementNames( )
throw( uno::RuntimeException )
{
const long nCount = maTable->Count();
uno::Sequence< OUString > aSeq( nCount );
OUString* pStrings = aSeq.getArray();
for( long nIndex = 0; nIndex < nCount; nIndex++ )
{
XColorEntry* pEntry = maTable->GetColor( (long)nIndex );
pStrings[nIndex] = pEntry->GetName();
}
return aSeq;
}
sal_Bool SAL_CALL SvxUnoColorTable::hasByName( const OUString& aName )
throw( uno::RuntimeException )
{
long nIndex = maTable->GetIndex( aName );
return nIndex != -1;
}
// XElementAccess
uno::Type SAL_CALL SvxUnoColorTable::getElementType( )
throw( uno::RuntimeException )
{
return ::getCppuType((const sal_Int32*)0);
}
sal_Bool SAL_CALL SvxUnoColorTable::hasElements( )
throw( uno::RuntimeException )
{
return maTable->Count() != 0;
}
/**
* Create a colortable
*/
uno::Reference< uno::XInterface > SAL_CALL SvxUnoColorTable_createInstance(const uno::Reference< lang::XMultiServiceFactory > & ) throw(uno::Exception)
{
return *new SvxUnoColorTable();
}
uno::Reference< uno::XInterface > SAL_CALL create_EnhancedCustomShapeEngine( const uno::Reference< lang::XMultiServiceFactory >& rxFact ) throw(uno::Exception)
{
return *new EnhancedCustomShapeEngine( rxFact );
}
//
// export this service
//
#include "UnoGraphicExporter.hxx"
#include "unogalthemeprovider.hxx"
#include <com/sun/star/registry/XRegistryKey.hpp>
#include "sal/types.h"
#include "osl/diagnose.h"
#include "cppuhelper/factory.hxx"
#include "uno/lbnames.h"
#include <svx/sdr/primitive2d/primitiveFactory2d.hxx>
#include "sidebar/PanelFactory.hxx"
/*
namespace svx
{
extern OUString SAL_CALL ExtrusionDepthController_getImplementationName();
extern uno::Reference< uno::XInterface > SAL_CALL ExtrusionDepthController_createInstance(const uno::Reference< lang::XMultiServiceFactory > &) throw( uno::RuntimeException );
extern uno::Sequence< OUString > SAL_CALL ExtrusionDepthController_getSupportedServiceNames() throw( uno::RuntimeException );
}
*/
extern "C"
{
SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment (
const sal_Char ** ppEnvTypeName, uno_Environment ** )
{
*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory (
const sal_Char * pImplName, void * pServiceManager, void * )
{
void * pRet = 0;
if( pServiceManager )
{
uno::Reference< lang::XSingleServiceFactory > xFactory;
if( rtl_str_compare( pImplName, "com.sun.star.drawing.SvxUnoColorTable" ) == 0 )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
SvxUnoColorTable::getImplementationName_Static(),
SvxUnoColorTable_createInstance,
SvxUnoColorTable::getSupportedServiceNames_Static() );
}
else if ( rtl_str_compare( pImplName, "com.sun.star.drawing.EnhancedCustomShapeEngine" ) == 0 )
{
xFactory = createSingleFactory( reinterpret_cast< NMSP_LANG::XMultiServiceFactory* >( pServiceManager ),
EnhancedCustomShapeEngine_getImplementationName(),
create_EnhancedCustomShapeEngine,
EnhancedCustomShapeEngine_getSupportedServiceNames() );
}
else if( rtl_str_compare( pImplName, "com.sun.star.drawing.SvxShapeCollection" ) == 0 )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
SvxShapeCollection::getImplementationName_Static(),
SvxShapeCollection_createInstance,
SvxShapeCollection::getSupportedServiceNames_Static() );
}
else if( svx::RecoveryUI::st_getImplementationName().equalsAscii( pImplName ) )
{
xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::RecoveryUI::st_getImplementationName(),
svx::RecoveryUI::st_createInstance,
svx::RecoveryUI::st_getSupportedServiceNames() );
}
else if( svx::GraphicExporter_getImplementationName().equalsAscii( pImplName ) )
{
xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::GraphicExporter_getImplementationName(),
svx::GraphicExporter_createInstance,
svx::GraphicExporter_getSupportedServiceNames() );
}
else if ( svx::FontHeightToolBoxControl::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::FontHeightToolBoxControl::getImplementationName_Static(),
svx::FontHeightToolBoxControl_createInstance,
svx::FontHeightToolBoxControl::getSupportedServiceNames_Static() );
}
else if ( svx::FindTextToolbarController::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::FindTextToolbarController::getImplementationName_Static(),
svx::FindTextToolbarController_createInstance,
svx::FindTextToolbarController::getSupportedServiceNames_Static() );
}
else if ( svx::DownSearchToolboxController::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::DownSearchToolboxController::getImplementationName_Static(),
svx::DownSearchToolboxController_createInstance,
svx::DownSearchToolboxController::getSupportedServiceNames_Static() );
}
else if ( svx::UpSearchToolboxController::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::UpSearchToolboxController::getImplementationName_Static(),
svx::UpSearchToolboxController_createInstance,
svx::UpSearchToolboxController::getSupportedServiceNames_Static() );
}
else if ( svx::FindbarDispatcher::getImplementationName_Static().equalsAscii( pImplName ) )
{
xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
svx::FindbarDispatcher::getImplementationName_Static(),
svx::FindbarDispatcher_createInstance,
svx::FindbarDispatcher::getSupportedServiceNames_Static() );
}
else if( ::unogallery::GalleryThemeProvider_getImplementationName().equalsAscii( pImplName ) )
{
xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
::unogallery::GalleryThemeProvider_getImplementationName(),
::unogallery::GalleryThemeProvider_createInstance,
::unogallery::GalleryThemeProvider_getSupportedServiceNames() );
}
else if( drawinglayer::primitive2d::PrimitiveFactory2D::getImplementationName_Static().equalsAscii( pImplName ) )
{
// XPrimitiveFactory2D
xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
drawinglayer::primitive2d::PrimitiveFactory2D::getImplementationName_Static(),
drawinglayer::primitive2d::XPrimitiveFactory2DProvider_createInstance,
drawinglayer::primitive2d::PrimitiveFactory2D::getSupportedServiceNames_Static() );
}
else if( ::svx::SvXMLGraphicImportHelper_getImplementationName().equalsAscii( pImplName ) )
{
xFactory = ::cppu::createSingleFactory(
reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
::svx::SvXMLGraphicImportHelper_getImplementationName(),
::svx::SvXMLGraphicImportHelper_createInstance,
::svx::SvXMLGraphicImportHelper_getSupportedServiceNames() );
}
else if( ::svx::SvXMLGraphicExportHelper_getImplementationName().equalsAscii( pImplName ) )
{
xFactory = ::cppu::createSingleFactory(
reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
::svx::SvXMLGraphicExportHelper_getImplementationName(),
::svx::SvXMLGraphicExportHelper_createInstance,
::svx::SvXMLGraphicExportHelper_getSupportedServiceNames() );
}
else if (::svx::sidebar::PanelFactory::getImplementationName().equalsAscii(pImplName))
{
xFactory = ::cppu::createSingleFactory(
reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
::svx::sidebar::PanelFactory::getImplementationName(),
::svx::sidebar::PanelFactory::createInstance,
::svx::sidebar::PanelFactory::getSupportedServiceNames());
}
if( xFactory.is())
{
xFactory->acquire();
pRet = xFactory.get();
}
}
return pRet;
}
}