387 lines
16 KiB
C++
387 lines
16 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*************************************************************************
|
|
*
|
|
* 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.
|
|
*
|
|
************************************************************************/
|
|
|
|
#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:
|
|
XColorListRef pList;
|
|
|
|
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()
|
|
{
|
|
pList = XPropertyList::CreatePropertyList( XCOLOR_LIST, SvtPathOptions().GetPalettePath() )->AsColorList();
|
|
}
|
|
|
|
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();
|
|
|
|
if( pList.is() )
|
|
{
|
|
XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName );
|
|
pList->Insert( pEntry, pList->Count() );
|
|
}
|
|
}
|
|
|
|
void SAL_CALL SvxUnoColorTable::removeByName( const OUString& Name )
|
|
throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
|
|
{
|
|
long nIndex = pList.is() ? pList->Get( Name ) : -1;
|
|
if( nIndex == -1 )
|
|
throw container::NoSuchElementException();
|
|
|
|
pList->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 = pList.is() ? pList->Get( aName ) : -1;
|
|
if( nIndex == -1 )
|
|
throw container::NoSuchElementException();
|
|
|
|
XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName );
|
|
delete pList->Replace( nIndex, pEntry );
|
|
}
|
|
|
|
// XNameAccess
|
|
uno::Any SAL_CALL SvxUnoColorTable::getByName( const OUString& aName )
|
|
throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
|
|
{
|
|
long nIndex = pList.is() ? pList->Get( aName ) : -1;
|
|
if( nIndex == -1 )
|
|
throw container::NoSuchElementException();
|
|
|
|
XColorEntry* pEntry = pList->GetColor( nIndex );
|
|
return uno::Any( (sal_Int32) pEntry->GetColor().GetRGBColor() );
|
|
}
|
|
|
|
uno::Sequence< OUString > SAL_CALL SvxUnoColorTable::getElementNames()
|
|
throw( uno::RuntimeException )
|
|
{
|
|
const long nCount = pList.is() ? pList->Count() : 0;
|
|
|
|
uno::Sequence< OUString > aSeq( nCount );
|
|
OUString* pStrings = aSeq.getArray();
|
|
|
|
for( long nIndex = 0; nIndex < nCount; nIndex++ )
|
|
{
|
|
XColorEntry* pEntry = pList->GetColor( (long)nIndex );
|
|
pStrings[nIndex] = pEntry->GetName();
|
|
}
|
|
|
|
return aSeq;
|
|
}
|
|
|
|
sal_Bool SAL_CALL SvxUnoColorTable::hasByName( const OUString& aName )
|
|
throw( uno::RuntimeException )
|
|
{
|
|
long nIndex = pList.is() ? pList->Get( aName ) : -1;
|
|
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 pList.is() && pList->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>
|
|
|
|
/*
|
|
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 svx_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::ExtrusionDepthController_getImplementationName().equalsAscii( pImplName ) )
|
|
{
|
|
xFactory = ::cppu::createSingleFactory(
|
|
reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
|
|
::svx::ExtrusionDepthController_getImplementationName(),
|
|
::svx::ExtrusionDepthController_createInstance,
|
|
::svx::ExtrusionDepthController_getSupportedServiceNames() );
|
|
}
|
|
*/
|
|
if( xFactory.is())
|
|
{
|
|
xFactory->acquire();
|
|
pRet = xFactory.get();
|
|
}
|
|
}
|
|
|
|
return pRet;
|
|
}
|
|
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|