diff options
Diffstat (limited to 'vcl/source/components')
-rw-r--r-- | vcl/source/components/display.cxx | 345 | ||||
-rw-r--r-- | vcl/source/components/dtranscomp.cxx | 552 | ||||
-rw-r--r-- | vcl/source/components/factory.cxx | 154 | ||||
-rw-r--r-- | vcl/source/components/fontident.cxx | 211 | ||||
-rw-r--r-- | vcl/source/components/makefile.mk | 52 | ||||
-rw-r--r-- | vcl/source/components/stringmirror.cxx | 123 |
6 files changed, 1437 insertions, 0 deletions
diff --git a/vcl/source/components/display.cxx b/vcl/source/components/display.cxx new file mode 100644 index 000000000000..6d7653968229 --- /dev/null +++ b/vcl/source/components/display.cxx @@ -0,0 +1,345 @@ +/************************************************************************* + * + * 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_vcl.hxx" +#include <com/sun/star/container/XIndexAccess.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/awt/Rectangle.hpp> +#include <com/sun/star/lang/DisposedException.hpp> + +#include <vcl/svapp.hxx> + +#include <cppuhelper/implbase3.hxx> +#include <cppuhelper/implbase4.hxx> + +#include <vector> +#include <tools/debug.hxx> + + +using ::rtl::OUString; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::beans; + +// ----------------------------------------------------------------------- + +namespace vcl +{ + +class DisplayInfo : public ::cppu::WeakAggImplHelper3< XPropertySet, XPropertySetInfo, XServiceInfo > +{ +public: + DisplayInfo( sal_uInt32 nDisplay ); + + // XPropertySet + virtual Reference< XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (RuntimeException); + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException); + virtual Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const Reference< XPropertyChangeListener >& xListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const Reference< XPropertyChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + + // XPropertySetInfo + virtual Sequence< Property > SAL_CALL getProperties( ) throw (RuntimeException); + virtual Property SAL_CALL getPropertyByName( const OUString& aName ) throw (UnknownPropertyException, RuntimeException); + virtual ::sal_Bool SAL_CALL hasPropertyByName( const OUString& Name ) throw (RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (RuntimeException); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + +private: + sal_uInt32 mnDisplay; +}; + +static const char* pScreenAreaName = "ScreenArea"; +static const char* pWorkAreaName = "WorkArea"; +static const char* pScreenName = "ScreenName"; + +// -------------------------------------------------------------------- + +DisplayInfo::DisplayInfo( sal_uInt32 nDisplay ) +: mnDisplay( nDisplay ) +{ +} + +// XPropertySet +Reference< XPropertySetInfo > SAL_CALL DisplayInfo::getPropertySetInfo( ) throw (RuntimeException) +{ + return this; +} + +void SAL_CALL DisplayInfo::setPropertyValue( const OUString& /*aPropertyName* */, const Any& /*aValue*/ ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) +{ + throw PropertyVetoException(); +} + +Any SAL_CALL DisplayInfo::getPropertyValue( const OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) +{ + Rectangle aRect; + if( PropertyName.equalsAscii( pScreenAreaName ) ) + { + aRect = Application::GetScreenPosSizePixel( mnDisplay ); + } + else if( PropertyName.equalsAscii( pWorkAreaName ) ) + { + aRect = Application::GetWorkAreaPosSizePixel( mnDisplay ); + } + else if( PropertyName.equalsAscii( pScreenName ) ) + { + return Any( Application::GetScreenName( mnDisplay ) ); + } + else + throw UnknownPropertyException(); + + return Any( com::sun::star::awt::Rectangle( aRect.Left(), aRect.Top(), aRect.getWidth(), aRect.getHeight() ) ); +} + +void SAL_CALL DisplayInfo::addPropertyChangeListener( const OUString&, const Reference< XPropertyChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} +void SAL_CALL DisplayInfo::removePropertyChangeListener( const OUString&, const Reference< XPropertyChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} +void SAL_CALL DisplayInfo::addVetoableChangeListener( const OUString&, const Reference< XVetoableChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} +void SAL_CALL DisplayInfo::removeVetoableChangeListener( const OUString&, const Reference< XVetoableChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} + +// XPropertySetInfo +Sequence< Property > SAL_CALL DisplayInfo::getProperties( ) throw (RuntimeException) +{ + Sequence< Property > aProps(2); + aProps[0] = getPropertyByName( OUString::createFromAscii( pScreenAreaName ) ); + aProps[1] = getPropertyByName( OUString::createFromAscii( pWorkAreaName ) ); + return aProps; +} + +Property SAL_CALL DisplayInfo::getPropertyByName( const OUString& aName ) throw (UnknownPropertyException, RuntimeException) +{ + if( aName.equalsAscii( pScreenAreaName ) || + aName.equalsAscii( pWorkAreaName ) ) + return Property( aName, 0, ::getCppuType( (::com::sun::star::awt::Rectangle const *)0 ), PropertyAttribute::READONLY ); + throw UnknownPropertyException(); +} + +::sal_Bool SAL_CALL DisplayInfo::hasPropertyByName( const OUString& Name ) throw (RuntimeException) +{ + return Name.equalsAscii( pScreenAreaName ) || + Name.equalsAscii( pWorkAreaName ); +} + +// XServiceInfo +OUString SAL_CALL DisplayInfo::getImplementationName( ) throw (RuntimeException) +{ + static OUString aImplementationName( RTL_CONSTASCII_USTRINGPARAM( "vcl::DisplayInfo" ) ); + return aImplementationName; +} + +::sal_Bool SAL_CALL DisplayInfo::supportsService( const OUString& ServiceName ) throw (RuntimeException) +{ + Sequence< OUString > aSN( getSupportedServiceNames() ); + for( sal_Int32 nService = 0; nService < aSN.getLength(); nService++ ) + { + if( aSN[nService] == ServiceName ) + return sal_True; + } + return sal_False; +} + +Sequence< OUString > SAL_CALL DisplayInfo::getSupportedServiceNames( ) throw (RuntimeException) +{ + static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.DisplayInfo" ) ); + static Sequence< OUString > aServiceNames( &aServiceName, 1 ); + return aServiceNames; +} + +// ==================================================================== + +class DisplayAccess : public ::cppu::WeakAggImplHelper4< XPropertySet, XPropertySetInfo, XIndexAccess, XServiceInfo > +{ +public: + DisplayAccess (); + + // XPropertySet + virtual Reference< XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (RuntimeException); + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException); + virtual Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const Reference< XPropertyChangeListener >& xListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const Reference< XPropertyChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException); + + // XPropertySetInfo + virtual Sequence< Property > SAL_CALL getProperties( ) throw (RuntimeException); + virtual Property SAL_CALL getPropertyByName( const OUString& aName ) throw (UnknownPropertyException, RuntimeException); + virtual ::sal_Bool SAL_CALL hasPropertyByName( const OUString& Name ) throw (RuntimeException); + + // XIndexAccess + virtual ::sal_Int32 SAL_CALL getCount() throw (RuntimeException); + virtual Any SAL_CALL getByIndex( ::sal_Int32 Index ) throw (IndexOutOfBoundsException, WrappedTargetException, RuntimeException); + + // XElementAccess + virtual Type SAL_CALL getElementType( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL hasElements( ) throw (RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (RuntimeException); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); +}; + +Sequence< OUString > DisplayAccess_getSupportedServiceNames() +{ + static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.DisplayAccess" ) ); + static Sequence< OUString > aServiceNames( &aServiceName, 1 ); + return aServiceNames; +} + +OUString DisplayAccess_getImplementationName() +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM( "vcl::DisplayAccess" ) ); +} + +Reference< XInterface > SAL_CALL DisplayAccess_createInstance( const Reference< XMultiServiceFactory >& ) +{ + return static_cast< ::cppu::OWeakObject * >( new DisplayAccess ); +} + +DisplayAccess::DisplayAccess() +{ +} + +static const char* pMultiDisplayName = "MultiDisplay"; +static const char* pDefaultDisplayName = "DefaultDisplay"; + +// XPropertySet +Reference< XPropertySetInfo > SAL_CALL DisplayAccess::getPropertySetInfo( ) throw (RuntimeException) +{ + return this; +} + +void SAL_CALL DisplayAccess::setPropertyValue( const OUString& /*aPropertyName* */, const Any& /*aValue*/ ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) +{ + throw PropertyVetoException(); +} + +Any SAL_CALL DisplayAccess::getPropertyValue( const OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) +{ + Any aRet; + if( PropertyName.equalsAscii( pMultiDisplayName ) ) + { + aRet <<= sal_Bool( Application::IsMultiDisplay() ); + } + else if( PropertyName.equalsAscii( pDefaultDisplayName ) ) + { + aRet <<= sal_Int32( Application::GetDefaultDisplayNumber() ); + } + else + throw UnknownPropertyException(); + + return aRet; +} + +void SAL_CALL DisplayAccess::addPropertyChangeListener( const OUString&, const Reference< XPropertyChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} +void SAL_CALL DisplayAccess::removePropertyChangeListener( const OUString&, const Reference< XPropertyChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} +void SAL_CALL DisplayAccess::addVetoableChangeListener( const OUString&, const Reference< XVetoableChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} +void SAL_CALL DisplayAccess::removeVetoableChangeListener( const OUString&, const Reference< XVetoableChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) {} + +// XPropertySetInfo +Sequence< Property > SAL_CALL DisplayAccess::getProperties( ) throw (RuntimeException) +{ + Sequence< Property > aProps(2); + aProps[0] = getPropertyByName( OUString::createFromAscii( pMultiDisplayName ) ); + aProps[1] = getPropertyByName( OUString::createFromAscii( pDefaultDisplayName ) ); + return aProps; +} + +Property SAL_CALL DisplayAccess::getPropertyByName( const OUString& aName ) throw (UnknownPropertyException, RuntimeException) +{ + if( aName.equalsAscii( pMultiDisplayName ) ) + return Property( aName, 0, ::getCppuType( (sal_Bool const *)0 ), PropertyAttribute::READONLY ); + + if( aName.equalsAscii( pDefaultDisplayName ) ) + return Property( aName, 0, ::getCppuType( (sal_Int32 const *)0 ), PropertyAttribute::READONLY ); + throw UnknownPropertyException(); +} + +::sal_Bool SAL_CALL DisplayAccess::hasPropertyByName( const OUString& Name ) throw (RuntimeException) +{ + return Name.equalsAscii( pMultiDisplayName ) || + Name.equalsAscii( pDefaultDisplayName ); +} + +// XIndexAccess +::sal_Int32 SAL_CALL DisplayAccess::getCount() throw (RuntimeException) +{ + return Application::GetScreenCount(); +} + +Any SAL_CALL DisplayAccess::getByIndex( ::sal_Int32 Index ) throw (IndexOutOfBoundsException, WrappedTargetException, RuntimeException) +{ + if( (Index < 0) || (Index >= getCount()) ) + throw IndexOutOfBoundsException(); + + return makeAny( Reference< XPropertySet >( new DisplayInfo( Index ) ) ); +} + +// XElementAccess +Type SAL_CALL DisplayAccess::getElementType( ) throw (RuntimeException) +{ + return XPropertySet::static_type(); +} + +::sal_Bool SAL_CALL DisplayAccess::hasElements() throw (RuntimeException) +{ + return true; +} + +// XServiceInfo +OUString SAL_CALL DisplayAccess::getImplementationName( ) throw (RuntimeException) +{ + return DisplayAccess_getImplementationName(); +} + +::sal_Bool SAL_CALL DisplayAccess::supportsService( const OUString& ServiceName ) throw (RuntimeException) +{ + Sequence< OUString > aSN( DisplayAccess_getSupportedServiceNames() ); + for( sal_Int32 nService = 0; nService < aSN.getLength(); nService++ ) + { + if( aSN[nService] == ServiceName ) + return sal_True; + } + return sal_False; +} + +Sequence< OUString > SAL_CALL DisplayAccess::getSupportedServiceNames( ) throw (RuntimeException) +{ + return DisplayAccess_getSupportedServiceNames(); +} + +} // namespace vcl diff --git a/vcl/source/components/dtranscomp.cxx b/vcl/source/components/dtranscomp.cxx new file mode 100644 index 000000000000..9c88deccec23 --- /dev/null +++ b/vcl/source/components/dtranscomp.cxx @@ -0,0 +1,552 @@ +/************************************************************************* + * + * 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_vcl.hxx" + +#include "com/sun/star/lang/XServiceInfo.hpp" +#include "com/sun/star/lang/XSingleServiceFactory.hpp" +#include "com/sun/star/lang/XInitialization.hpp" +#include "com/sun/star/lang/DisposedException.hpp" +#include "com/sun/star/datatransfer/XTransferable.hpp" +#include "com/sun/star/datatransfer/clipboard/XClipboard.hpp" +#include "com/sun/star/datatransfer/clipboard/XClipboardEx.hpp" +#include "com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp" +#include "com/sun/star/datatransfer/clipboard/XClipboardListener.hpp" +#include "com/sun/star/datatransfer/dnd/XDragSource.hpp" +#include "com/sun/star/datatransfer/dnd/XDropTarget.hpp" +#include "com/sun/star/datatransfer/dnd/DNDConstants.hpp" + +#include "vcl/svapp.hxx" +#include "vcl/svdata.hxx" +#include "vcl/salinst.hxx" +#include "vos/mutex.hxx" +#include "osl/mutex.hxx" + +#include "cppuhelper/compbase1.hxx" +#include "cppuhelper/compbase2.hxx" +#include "cppuhelper/compbase3.hxx" +#include "cppuhelper/implbase1.hxx" + +using rtl::OUString; +using namespace com::sun::star; +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; + +// ----------------------------------------------------------------------- + +namespace vcl +{ +// generic implementation to satisfy SalInstance +class GenericClipboard : + public cppu::WeakComponentImplHelper3 < + datatransfer::clipboard::XClipboardEx, + datatransfer::clipboard::XClipboardNotifier, + XServiceInfo + > +{ + osl::Mutex m_aMutex; + Reference< ::com::sun::star::datatransfer::XTransferable > m_aContents; + Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner > m_aOwner; + std::list< Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener > > m_aListeners; + + void fireChangedContentsEvent(); + void clearContents(); + +public: + + GenericClipboard() : cppu::WeakComponentImplHelper3< + datatransfer::clipboard::XClipboardEx, + datatransfer::clipboard::XClipboardNotifier, + XServiceInfo + >( m_aMutex ) + {} + virtual ~GenericClipboard(); + + /* + * XServiceInfo + */ + + virtual rtl::OUString SAL_CALL getImplementationName() throw( RuntimeException ); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( RuntimeException ); + virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( RuntimeException ); + + static rtl::OUString getImplementationName_static(); + static Sequence< rtl::OUString > getSupportedServiceNames_static(); + + /* + * XClipboard + */ + + virtual Reference< ::com::sun::star::datatransfer::XTransferable > SAL_CALL getContents() + throw(RuntimeException); + + virtual void SAL_CALL setContents( + const Reference< ::com::sun::star::datatransfer::XTransferable >& xTrans, + const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) + throw(RuntimeException); + + virtual ::rtl::OUString SAL_CALL getName() + throw(RuntimeException); + + /* + * XClipboardEx + */ + + virtual sal_Int8 SAL_CALL getRenderingCapabilities() + throw(RuntimeException); + + /* + * XClipboardNotifier + */ + virtual void SAL_CALL addClipboardListener( + const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener >& listener ) + throw(RuntimeException); + + virtual void SAL_CALL removeClipboardListener( + const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener >& listener ) + throw(RuntimeException); +}; + +GenericClipboard::~GenericClipboard() +{ +} + +rtl::OUString GenericClipboard::getImplementationName_static() +{ + return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.datatransfer.VCLGenericClipboard" ) ); +} + +Sequence< rtl::OUString > GenericClipboard::getSupportedServiceNames_static() +{ + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard"); + return aRet; +} + +rtl::OUString GenericClipboard::getImplementationName() throw( RuntimeException ) +{ + return getImplementationName_static(); +} + +Sequence< rtl::OUString > GenericClipboard::getSupportedServiceNames() throw( RuntimeException ) +{ + return getSupportedServiceNames_static(); +} + +sal_Bool GenericClipboard::supportsService( const ::rtl::OUString& ServiceName ) throw( RuntimeException ) +{ + Sequence< OUString > aServices( getSupportedServiceNames() ); + sal_Int32 nServices = aServices.getLength(); + for( sal_Int32 i = 0; i < nServices; i++ ) + { + if( aServices[i] == ServiceName ) + return sal_True; + } + return sal_False; +} + +Reference< ::com::sun::star::datatransfer::XTransferable > GenericClipboard::getContents() throw( RuntimeException ) +{ + return m_aContents; +} + +void GenericClipboard::setContents( + const Reference< ::com::sun::star::datatransfer::XTransferable >& xTrans, + const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) + throw( RuntimeException ) +{ + osl::ClearableMutexGuard aGuard( m_aMutex ); + Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner ); + Reference< datatransfer::XTransferable > xOldContents( m_aContents ); + m_aContents = xTrans; + m_aOwner = xClipboardOwner; + + std::list< Reference< datatransfer::clipboard::XClipboardListener > > xListeners( m_aListeners ); + datatransfer::clipboard::ClipboardEvent aEv; + aEv.Contents = m_aContents; + + aGuard.clear(); + + if( xOldOwner.is() && xOldOwner != xClipboardOwner ) + xOldOwner->lostOwnership( this, xOldContents ); + for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it = + xListeners.begin(); it != xListeners.end() ; ++it ) + { + (*it)->changedContents( aEv ); + } +} + +rtl::OUString GenericClipboard::getName() throw( RuntimeException ) +{ + return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CLIPBOARD" ) ); +} + +sal_Int8 GenericClipboard::getRenderingCapabilities() throw( RuntimeException ) +{ + return 0; +} + +void GenericClipboard::addClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener ) + throw( RuntimeException ) +{ + osl::ClearableMutexGuard aGuard( m_aMutex ); + + m_aListeners.push_back( listener ); +} + +void GenericClipboard::removeClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener ) + throw( RuntimeException ) +{ + osl::ClearableMutexGuard aGuard( m_aMutex ); + + m_aListeners.remove( listener ); +} + +// ------------------------------------------------------------------------ + +class ClipboardFactory : public ::cppu::WeakComponentImplHelper1< + com::sun::star::lang::XSingleServiceFactory +> +{ + osl::Mutex m_aMutex; +public: + ClipboardFactory(); + virtual ~ClipboardFactory(); + + /* + * XSingleServiceFactory + */ + virtual Reference< XInterface > SAL_CALL createInstance() throw(); + virtual Reference< XInterface > SAL_CALL createInstanceWithArguments( const Sequence< Any >& rArgs ) throw(); +}; + +// ------------------------------------------------------------------------ + +ClipboardFactory::ClipboardFactory() : + cppu::WeakComponentImplHelper1< + com::sun::star::lang::XSingleServiceFactory +>( m_aMutex ) +{ +} + +// ------------------------------------------------------------------------ + +ClipboardFactory::~ClipboardFactory() +{ +} + +// ------------------------------------------------------------------------ + +Reference< XInterface > ClipboardFactory::createInstance() throw() +{ + return createInstanceWithArguments( Sequence< Any >() ); +} + +// ------------------------------------------------------------------------ + +Reference< XInterface > ClipboardFactory::createInstanceWithArguments( const Sequence< Any >& arguments ) throw() +{ + vos::OGuard aGuard( Application::GetSolarMutex() ); + Reference< XInterface > xResult = ImplGetSVData()->mpDefInst->CreateClipboard( arguments ); + return xResult; +} + +// ------------------------------------------------------------------------ + +Sequence< OUString > SAL_CALL Clipboard_getSupportedServiceNames() +{ + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard"); + return aRet; +} + +OUString SAL_CALL Clipboard_getImplementationName() +{ + #if defined UNX + return OUString( RTL_CONSTASCII_USTRINGPARAM( + #if ! defined QUARTZ + "com.sun.star.datatransfer.X11ClipboardSupport" + #else + "com.sun.star.datatransfer.clipboard.AquaClipboard" + #endif + ) ); + #else + return GenericClipboard::getImplementationName_static(); + #endif +} + +Reference< XSingleServiceFactory > SAL_CALL Clipboard_createFactory( const Reference< XMultiServiceFactory > & ) +{ + return Reference< XSingleServiceFactory >( new ClipboardFactory() ); +} + +/* +* generic DragSource dummy +*/ +class GenericDragSource : public cppu::WeakComponentImplHelper2< + datatransfer::dnd::XDragSource, + XInitialization + > +{ + osl::Mutex m_aMutex; +public: + GenericDragSource() : cppu::WeakComponentImplHelper2< datatransfer::dnd::XDragSource, XInitialization >( m_aMutex ) {} + virtual ~GenericDragSource(); + + // XDragSource + virtual sal_Bool SAL_CALL isDragImageSupported() throw(); + virtual sal_Int32 SAL_CALL getDefaultCursor( sal_Int8 dragAction ) throw(); + virtual void SAL_CALL startDrag( + const datatransfer::dnd::DragGestureEvent& trigger, + sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image, + const Reference< datatransfer::XTransferable >& transferable, + const Reference< datatransfer::dnd::XDragSourceListener >& listener + ) throw(); + + // XInitialization + virtual void SAL_CALL initialize( const Sequence< Any >& arguments ) throw( ::com::sun::star::uno::Exception ); + + static Sequence< OUString > getSupportedServiceNames_static() + { + Sequence< OUString > aRet( 1 ); + aRet[0] = OUString::createFromAscii( "com.sun.star.datatransfer.dnd.GenericDragSource" ); + return aRet; + } + + static OUString getImplementationName_static() + { + return OUString::createFromAscii( "com.sun.star.datatransfer.dnd.VclGenericDragSource" ); + } +}; + +GenericDragSource::~GenericDragSource() +{ +} + +sal_Bool GenericDragSource::isDragImageSupported() throw() +{ + return sal_False; +} + +sal_Int32 GenericDragSource::getDefaultCursor( sal_Int8 ) throw() +{ + return 0; +} + +void GenericDragSource::startDrag( const datatransfer::dnd::DragGestureEvent&, + sal_Int8 /*sourceActions*/, sal_Int32 /*cursor*/, sal_Int32 /*image*/, + const Reference< datatransfer::XTransferable >&, + const Reference< datatransfer::dnd::XDragSourceListener >& listener + ) throw() +{ + datatransfer::dnd::DragSourceDropEvent aEv; + aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_COPY; + aEv.DropSuccess = sal_False; + listener->dragDropEnd( aEv ); +} + +void GenericDragSource::initialize( const Sequence< Any >& ) throw( Exception ) +{ +} + + +Sequence< OUString > SAL_CALL DragSource_getSupportedServiceNames() +{ + #if defined UNX + static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( + #if ! defined QUARTZ + "com.sun.star.datatransfer.dnd.X11DragSource" + #else + "com.sun.star.datatransfer.dnd.OleDragSource" + #endif + ) ); + static Sequence< OUString > aServiceNames( &aServiceName, 1 ); + return aServiceNames; + #else + return GenericDragSource::getSupportedServiceNames_static(); + #endif +} + +OUString SAL_CALL DragSource_getImplementationName() +{ + #if defined UNX + return OUString( RTL_CONSTASCII_USTRINGPARAM( + #if ! defined QUARTZ + "com.sun.star.datatransfer.dnd.XdndSupport" + #else + "com.sun.star.comp.datatransfer.dnd.OleDragSource_V1" + #endif + ) ); + #else + return GenericDragSource::getImplementationName_static(); + #endif +} + +Reference< XInterface > SAL_CALL DragSource_createInstance( const Reference< XMultiServiceFactory >& ) +{ + vos::OGuard aGuard( Application::GetSolarMutex() ); + Reference< XInterface > xResult = ImplGetSVData()->mpDefInst->CreateDragSource(); + return xResult; +} + +/* +* generic DragSource dummy +*/ + +class GenericDropTarget : public cppu::WeakComponentImplHelper2< + datatransfer::dnd::XDropTarget, + XInitialization + > +{ + osl::Mutex m_aMutex; +public: + GenericDropTarget() : cppu::WeakComponentImplHelper2< + datatransfer::dnd::XDropTarget, + XInitialization + > ( m_aMutex ) + {} + virtual ~GenericDropTarget(); + + // XInitialization + virtual void SAL_CALL initialize( const Sequence< Any >& args ) throw ( Exception ); + + // XDropTarget + virtual void SAL_CALL addDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw(); + virtual void SAL_CALL removeDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw(); + virtual sal_Bool SAL_CALL isActive() throw(); + virtual void SAL_CALL setActive( sal_Bool active ) throw(); + virtual sal_Int8 SAL_CALL getDefaultActions() throw(); + virtual void SAL_CALL setDefaultActions( sal_Int8 actions ) throw(); + + static Sequence< OUString > getSupportedServiceNames_static() + { + Sequence< OUString > aRet( 1 ); + aRet[0] = OUString::createFromAscii( "com.sun.star.datatransfer.dnd.GenericDropTarget" ); + return aRet; + } + + static OUString getImplementationName_static() + { + return OUString::createFromAscii( "com.sun.star.datatransfer.dnd.VclGenericDropTarget" ); + } +}; + +GenericDropTarget::~GenericDropTarget() +{ +} + +void GenericDropTarget::initialize( const Sequence< Any >& ) throw( Exception ) +{ +} + +void GenericDropTarget::addDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw() +{ +} + +void GenericDropTarget::removeDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw() +{ +} + +sal_Bool GenericDropTarget::isActive() throw() +{ + return sal_False; +} + +void GenericDropTarget::setActive( sal_Bool ) throw() +{ +} + +sal_Int8 GenericDropTarget::getDefaultActions() throw() +{ + return 0; +} + +void GenericDropTarget::setDefaultActions( sal_Int8) throw() +{ +} + +Sequence< OUString > SAL_CALL DropTarget_getSupportedServiceNames() +{ + #if defined UNX + static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( + #if ! defined QUARTZ + "com.sun.star.datatransfer.dnd.X11DropTarget" + #else + "com.sun.star.datatransfer.dnd.OleDropTarget" + #endif + ) ); + static Sequence< OUString > aServiceNames( &aServiceName, 1 ); + return aServiceNames; + #else + return GenericDropTarget::getSupportedServiceNames_static(); + #endif +} + +OUString SAL_CALL DropTarget_getImplementationName() +{ + #if defined UNX + return OUString( RTL_CONSTASCII_USTRINGPARAM( + #if ! defined QUARTZ + "com.sun.star.datatransfer.dnd.XdndDropTarget" + #else + "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1" + #endif + ) ); + #else + return GenericDropTarget::getImplementationName_static(); + #endif +} + +Reference< XInterface > SAL_CALL DropTarget_createInstance( const Reference< XMultiServiceFactory >& ) +{ + vos::OGuard aGuard( Application::GetSolarMutex() ); + Reference< XInterface > xResult = ImplGetSVData()->mpDefInst->CreateDropTarget(); + return xResult; +} + + +} // namespace vcl + +/* +* SalInstance generic +*/ +Reference< XInterface > SalInstance::CreateClipboard( const Sequence< Any >& ) +{ + return Reference< XInterface >( ( cppu::OWeakObject * )new vcl::GenericClipboard() ); +} + +Reference< XInterface > SalInstance::CreateDragSource() +{ + return Reference< XInterface >( ( cppu::OWeakObject * )new vcl::GenericDragSource() ); +} + +Reference< XInterface > SalInstance::CreateDropTarget() +{ + return Reference< XInterface >( ( cppu::OWeakObject * )new vcl::GenericDropTarget() ); +} + diff --git a/vcl/source/components/factory.cxx b/vcl/source/components/factory.cxx new file mode 100644 index 000000000000..7cfdecbfdb00 --- /dev/null +++ b/vcl/source/components/factory.cxx @@ -0,0 +1,154 @@ +/************************************************************************* + * + * 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_vcl.hxx" +#include <tools/debug.hxx> +#ifndef _OSL_MUTEX_HXX +#include <osl/mutex.hxx> +#endif +#ifndef _RTL_USTRBUF_HXX +#include <rtl/ustrbuf.hxx> +#endif +#include <uno/dispatcher.h> // declaration of generic uno interface +#include <uno/mapping.hxx> // mapping stuff +#include <cppuhelper/factory.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <vcl/dllapi.h> + +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; + + +// service implementation + +extern Sequence< OUString > SAL_CALL vcl_session_getSupportedServiceNames(); +extern OUString SAL_CALL vcl_session_getImplementationName(); +extern Reference< XInterface > SAL_CALL vcl_session_createInstance( const Reference< XMultiServiceFactory > & ); + +namespace vcl +{ +extern Sequence< OUString > SAL_CALL DisplayAccess_getSupportedServiceNames(); +extern OUString SAL_CALL DisplayAccess_getImplementationName(); +extern Reference< XInterface > SAL_CALL DisplayAccess_createInstance( const Reference< XMultiServiceFactory > & ); + +extern Sequence< OUString > SAL_CALL FontIdentificator_getSupportedServiceNames(); +extern OUString SAL_CALL FontIdentificator_getImplementationName(); +extern Reference< XInterface > SAL_CALL FontIdentificator_createInstance( const Reference< XMultiServiceFactory > & ); + +extern Sequence< OUString > SAL_CALL StringMirror_getSupportedServiceNames(); +extern OUString SAL_CALL StringMirror_getImplementationName(); +extern Reference< XInterface > SAL_CALL StringMirror_createInstance( const Reference< XMultiServiceFactory > & ); + +extern Sequence< OUString > SAL_CALL Clipboard_getSupportedServiceNames(); +extern OUString SAL_CALL Clipboard_getImplementationName(); +extern Reference< XSingleServiceFactory > SAL_CALL Clipboard_createFactory( const Reference< XMultiServiceFactory > & ); + +extern Sequence< OUString > SAL_CALL DragSource_getSupportedServiceNames(); +extern OUString SAL_CALL DragSource_getImplementationName(); +extern Reference< XInterface > SAL_CALL DragSource_createInstance( const Reference< XMultiServiceFactory > & ); + +extern Sequence< OUString > SAL_CALL DropTarget_getSupportedServiceNames(); +extern OUString SAL_CALL DropTarget_getImplementationName(); +extern Reference< XInterface > SAL_CALL DropTarget_createInstance( const Reference< XMultiServiceFactory > & ); +} + +extern "C" { + + VCL_DLLPUBLIC void SAL_CALL component_getImplementationEnvironment( + const sal_Char** ppEnvTypeName, + uno_Environment** /*ppEnv*/ ) + { + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; + } + + VCL_DLLPUBLIC void* SAL_CALL component_getFactory( + const sal_Char* pImplementationName, + void* pXUnoSMgr, + void* /*pXUnoKey*/ + ) + { + void* pRet = 0; + + if( pXUnoSMgr ) + { + Reference< ::com::sun::star::lang::XMultiServiceFactory > xMgr( + reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pXUnoSMgr ) + ); + Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory; + if( vcl_session_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = ::cppu::createSingleFactory( + xMgr, vcl_session_getImplementationName(), vcl_session_createInstance, + vcl_session_getSupportedServiceNames() ); + } + else if( vcl::DisplayAccess_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = ::cppu::createSingleFactory( + xMgr, vcl::DisplayAccess_getImplementationName(), vcl::DisplayAccess_createInstance, + vcl::DisplayAccess_getSupportedServiceNames() ); + } + else if( vcl::FontIdentificator_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = ::cppu::createSingleFactory( + xMgr, vcl::FontIdentificator_getImplementationName(), vcl::FontIdentificator_createInstance, + vcl::FontIdentificator_getSupportedServiceNames() ); + } + else if( vcl::StringMirror_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = ::cppu::createSingleFactory( + xMgr, vcl::StringMirror_getImplementationName(), vcl::StringMirror_createInstance, + vcl::StringMirror_getSupportedServiceNames() ); + } + else if( vcl::Clipboard_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = vcl::Clipboard_createFactory( xMgr ); + } + else if( vcl::DragSource_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = ::cppu::createSingleFactory( + xMgr, vcl::DragSource_getImplementationName(), vcl::DragSource_createInstance, + vcl::DragSource_getSupportedServiceNames() ); + } + else if( vcl::DropTarget_getImplementationName().equalsAscii( pImplementationName ) ) + { + xFactory = ::cppu::createSingleFactory( + xMgr, vcl::DropTarget_getImplementationName(), vcl::DropTarget_createInstance, + vcl::DropTarget_getSupportedServiceNames() ); + } + if( xFactory.is() ) + { + xFactory->acquire(); + pRet = xFactory.get(); + } + } + return pRet; + } + +} /* extern "C" */ diff --git a/vcl/source/components/fontident.cxx b/vcl/source/components/fontident.cxx new file mode 100644 index 000000000000..ad309e4f2560 --- /dev/null +++ b/vcl/source/components/fontident.cxx @@ -0,0 +1,211 @@ +/************************************************************************* + * + * 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_vcl.hxx" + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/beans/XMaterialHolder.hpp> +#include <com/sun/star/awt/FontDescriptor.hpp> +#include <com/sun/star/awt/FontFamily.hpp> +#include <com/sun/star/awt/FontPitch.hpp> +#include <com/sun/star/awt/FontWeight.hpp> +#include <com/sun/star/awt/FontSlant.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/lang/DisposedException.hpp> + +#include "vcl/svapp.hxx" +#include "vcl/svdata.hxx" +#include "vcl/font.hxx" + +#include <cppuhelper/implbase3.hxx> + +#include <tools/debug.hxx> + + +using ::rtl::OUString; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::awt; + +// ----------------------------------------------------------------------- + +namespace vcl +{ + +class FontIdentificator : public ::cppu::WeakAggImplHelper3< XMaterialHolder, XInitialization, XServiceInfo > +{ + Font m_aFont; +public: +FontIdentificator() {} + virtual ~FontIdentificator(); + + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const OUString& ) throw (RuntimeException); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + + // XInitialization + virtual void SAL_CALL initialize( const Sequence< Any >& ) throw (Exception, RuntimeException); + + // XMaterialHolder + virtual Any SAL_CALL getMaterial() throw(RuntimeException); + +}; + +// -------------------------------------------------------------------- + +FontIdentificator::~FontIdentificator() +{ +} + +void SAL_CALL FontIdentificator::initialize( const Sequence<Any>& i_rArgs ) throw(Exception,RuntimeException) +{ + if( !ImplGetSVData() ) + return; // VCL not initialized + + sal_uInt32 nArgs = i_rArgs.getLength(); + const Any* pArgs = i_rArgs.getConstArray(); + Sequence< sal_Int8 > aFontBuf; + for( sal_uInt32 i = 0; i < nArgs; i++ ) + { + if( pArgs[i] >>= aFontBuf ) + { + m_aFont = Font::identifyFont( aFontBuf.getConstArray(), aFontBuf.getLength() ); + break; + } + } +} + +Any SAL_CALL FontIdentificator::getMaterial() throw(RuntimeException) +{ + if( !ImplGetSVData() ) + return Any(); // VCL not initialized + + FontDescriptor aFD; + aFD.Name = m_aFont.GetName(); + aFD.Height = 0; + aFD.Width = 0; + aFD.StyleName = m_aFont.GetStyleName(); + aFD.CharSet = 0; + aFD.CharacterWidth = 0; + aFD.Underline = 0; + aFD.Strikeout = 0; + aFD.Orientation = 0; + aFD.Kerning = sal_False; + aFD.WordLineMode = sal_False; + aFD.Type = 0; + switch( m_aFont.GetFamily() ) + { + case FAMILY_DECORATIVE: aFD.Family = com::sun::star::awt::FontFamily::DECORATIVE;break; + case FAMILY_MODERN: aFD.Family = com::sun::star::awt::FontFamily::MODERN;break; + case FAMILY_ROMAN: aFD.Family = com::sun::star::awt::FontFamily::ROMAN;break; + case FAMILY_SCRIPT: aFD.Family = com::sun::star::awt::FontFamily::SCRIPT;break; + case FAMILY_SWISS: aFD.Family = com::sun::star::awt::FontFamily::SWISS;break; + case FAMILY_SYSTEM: aFD.Family = com::sun::star::awt::FontFamily::SYSTEM;break; + default: + aFD.Family = com::sun::star::awt::FontFamily::DONTKNOW; + break; + } + switch( m_aFont.GetPitch() ) + { + case PITCH_VARIABLE: aFD.Pitch = com::sun::star::awt::FontPitch::VARIABLE;break; + case PITCH_FIXED: aFD.Pitch = com::sun::star::awt::FontPitch::FIXED;break; + default: + aFD.Pitch = com::sun::star::awt::FontPitch::DONTKNOW; + break; + } + switch( m_aFont.GetWeight() ) + { + case WEIGHT_THIN: aFD.Weight = com::sun::star::awt::FontWeight::THIN;break; + case WEIGHT_ULTRALIGHT: aFD.Weight = com::sun::star::awt::FontWeight::ULTRALIGHT;break; + case WEIGHT_LIGHT: aFD.Weight = com::sun::star::awt::FontWeight::LIGHT;break; + case WEIGHT_SEMILIGHT: aFD.Weight = com::sun::star::awt::FontWeight::SEMILIGHT;break; + case WEIGHT_MEDIUM: + case WEIGHT_NORMAL: aFD.Weight = com::sun::star::awt::FontWeight::NORMAL;break; + case WEIGHT_SEMIBOLD: aFD.Weight = com::sun::star::awt::FontWeight::SEMIBOLD;break; + case WEIGHT_BOLD: aFD.Weight = com::sun::star::awt::FontWeight::BOLD;break; + case WEIGHT_ULTRABOLD: aFD.Weight = com::sun::star::awt::FontWeight::ULTRABOLD;break; + case WEIGHT_BLACK: aFD.Weight = com::sun::star::awt::FontWeight::BLACK;break; + default: + aFD.Weight = com::sun::star::awt::FontWeight::DONTKNOW; + break; + } + switch( m_aFont.GetItalic() ) + { + case ITALIC_OBLIQUE: aFD.Slant = com::sun::star::awt::FontSlant_OBLIQUE;break; + case ITALIC_NORMAL: aFD.Slant = com::sun::star::awt::FontSlant_ITALIC;break; + default: + aFD.Slant = com::sun::star::awt::FontSlant_DONTKNOW; + break; + } + return makeAny( aFD ); +} + +Sequence< OUString > FontIdentificator_getSupportedServiceNames() +{ + static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.FontIdentificator" ) ); + static Sequence< OUString > aServiceNames( &aServiceName, 1 ); + return aServiceNames; +} + +OUString FontIdentificator_getImplementationName() +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM( "vcl::FontIdentificator" ) ); +} + +Reference< XInterface > SAL_CALL FontIdentificator_createInstance( const Reference< XMultiServiceFactory >& ) +{ + return static_cast< ::cppu::OWeakObject * >( new FontIdentificator ); +} + + +// XServiceInfo +OUString SAL_CALL FontIdentificator::getImplementationName() throw (RuntimeException) +{ + return FontIdentificator_getImplementationName(); +} + +sal_Bool SAL_CALL FontIdentificator::supportsService( const OUString& i_rServiceName ) throw (RuntimeException) +{ + Sequence< OUString > aSN( FontIdentificator_getSupportedServiceNames() ); + for( sal_Int32 nService = 0; nService < aSN.getLength(); nService++ ) + { + if( aSN[nService] == i_rServiceName ) + return sal_True; + } + return sal_False; +} + +Sequence< OUString > SAL_CALL FontIdentificator::getSupportedServiceNames() throw (RuntimeException) +{ + return FontIdentificator_getSupportedServiceNames(); +} + +} // namespace vcl diff --git a/vcl/source/components/makefile.mk b/vcl/source/components/makefile.mk new file mode 100644 index 000000000000..982687104c01 --- /dev/null +++ b/vcl/source/components/makefile.mk @@ -0,0 +1,52 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=vcl +TARGET=components +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : $(PRJ)$/util$/makefile.pmk +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/util$/makefile2.pmk + +# --- Files -------------------------------------------------------- + +SLOFILES= $(SLO)$/display.obj \ + $(SLO)$/dtranscomp.obj \ + $(SLO)$/fontident.obj \ + $(SLO)$/stringmirror.obj \ + $(SLO)$/factory.obj + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk +.INCLUDE : $(PRJ)$/util$/target.pmk + diff --git a/vcl/source/components/stringmirror.cxx b/vcl/source/components/stringmirror.cxx new file mode 100644 index 000000000000..78806914a7c4 --- /dev/null +++ b/vcl/source/components/stringmirror.cxx @@ -0,0 +1,123 @@ +/************************************************************************* + * + * 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_vcl.hxx" + +#include "com/sun/star/lang/XServiceInfo.hpp" +#include "com/sun/star/util/XStringMapping.hpp" + +#include "cppuhelper/implbase2.hxx" +#include "rtl/ustrbuf.hxx" +#include "vcl/svapp.hxx" + +using ::rtl::OUString; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::util; + +// ----------------------------------------------------------------------- + +namespace vcl +{ + +class StringMirror : public ::cppu::WeakAggImplHelper2< XStringMapping, XServiceInfo > +{ +public: + StringMirror() + {} + + virtual ~StringMirror() + {} + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const OUString& ) throw (RuntimeException); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + + // XStringMapping + virtual sal_Bool SAL_CALL mapStrings( Sequence< OUString >& io_rStrings ) throw (RuntimeException) + { + sal_Int32 nItems = io_rStrings.getLength(); + for( sal_Int32 n = 0; n < nItems; n++ ) + { + rtl::OUString& rStr( io_rStrings.getArray()[n] ); + + sal_Int32 nLen = rStr.getLength(); + rtl::OUStringBuffer aMirror( nLen ); + for(sal_Int32 i = nLen - 1; i >= 0; i--) + { + sal_Unicode cChar = rStr[ i ]; + aMirror.append(sal_Unicode(GetMirroredChar(cChar))); + } + rStr = aMirror.makeStringAndClear(); + } + return sal_True; + } +}; + +Sequence< OUString > StringMirror_getSupportedServiceNames() +{ + static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.StringMirror" ) ); + static Sequence< OUString > aServiceNames( &aServiceName, 1 ); + return aServiceNames; +} + +OUString StringMirror_getImplementationName() +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM( "vcl::StringMirror" ) ); +} + +Reference< XInterface > SAL_CALL StringMirror_createInstance( const Reference< XMultiServiceFactory >& ) +{ + return static_cast< ::cppu::OWeakObject * >( new StringMirror ); +} + + +// XServiceInfo +OUString SAL_CALL StringMirror::getImplementationName() throw (RuntimeException) +{ + return StringMirror_getImplementationName(); +} + +sal_Bool SAL_CALL StringMirror::supportsService( const OUString& i_rServiceName ) throw (RuntimeException) +{ + Sequence< OUString > aSN( StringMirror_getSupportedServiceNames() ); + for( sal_Int32 nService = 0; nService < aSN.getLength(); nService++ ) + { + if( aSN[nService] == i_rServiceName ) + return sal_True; + } + return sal_False; +} + +Sequence< OUString > SAL_CALL StringMirror::getSupportedServiceNames() throw (RuntimeException) +{ + return StringMirror_getSupportedServiceNames(); +} + +} // namespace vcl |