diff options
author | Marcos Paulo de Souza <marcos.souza.org@gmail.com> | 2013-10-31 06:30:33 -0200 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2013-11-21 03:54:00 -0600 |
commit | 668d6ada160438c396849a8309864f5fd33f33ac (patch) | |
tree | 371e18a5654fbcad24e19ae5e601d605665c22b0 /desktop/source | |
parent | a50a2111a31e4d9dd5e2659a146e9de8e292de75 (diff) |
fdo#60698: Unify spl and spl_unx
Change-Id: Ifd328ff3ce12364e95d05405759df6588b3a86bc
Reviewed-on: https://gerrit.libreoffice.org/6503
Tested-by: LibreOffice gerrit bot <gerrit@libreoffice.org>
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Tested-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'desktop/source')
-rw-r--r-- | desktop/source/splash/services_spl.cxx | 14 | ||||
-rw-r--r-- | desktop/source/splash/spl.component | 3 | ||||
-rw-r--r-- | desktop/source/splash/unxsplash.cxx | 153 | ||||
-rw-r--r-- | desktop/source/splash/unxsplash.hxx | 69 |
4 files changed, 237 insertions, 2 deletions
diff --git a/desktop/source/splash/services_spl.cxx b/desktop/source/splash/services_spl.cxx index 71155a4f3e6a..eb451325699f 100644 --- a/desktop/source/splash/services_spl.cxx +++ b/desktop/source/splash/services_spl.cxx @@ -24,13 +24,23 @@ #include "sal/types.h" #include "splash.hxx" +#include "unxsplash.hxx" namespace { static cppu::ImplementationEntry const services[] = { - { &desktop::splash::create, &desktop::splash::getImplementationName, + { + &desktop::splash::create, + &desktop::splash::getImplementationName, &desktop::splash::getSupportedServiceNames, - &cppu::createSingleComponentFactory, 0, 0 }, + &cppu::createSingleComponentFactory, 0, 0 + }, + { + UnxSplash_createInstance, + UnxSplash_getImplementationName, + UnxSplash_getSupportedServiceNames, + ::cppu::createSingleComponentFactory, 0, 0 + }, { 0, 0, 0, 0, 0, 0 } }; diff --git a/desktop/source/splash/spl.component b/desktop/source/splash/spl.component index c71554cbbc82..9a135db23b35 100644 --- a/desktop/source/splash/spl.component +++ b/desktop/source/splash/spl.component @@ -25,4 +25,7 @@ <implementation name="com.sun.star.office.comp.SplashScreen"> <service name="com.sun.star.office.SplashScreen"/> </implementation> + <implementation name="com.sun.star.office.comp.PipeSplashScreen"> + <service name="com.sun.star.office.PipeSplashScreen"/> + </implementation> </component> diff --git a/desktop/source/splash/unxsplash.cxx b/desktop/source/splash/unxsplash.cxx new file mode 100644 index 000000000000..665a106b1fec --- /dev/null +++ b/desktop/source/splash/unxsplash.cxx @@ -0,0 +1,153 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "unxsplash.hxx" +#include <stdio.h> +#include <osl/process.h> +//#include <com/sun/star/registry/XRegistryKey.hpp> +#include <cppuhelper/implementationentry.hxx> +#include <rtl/ustrbuf.hxx> +#include <rtl/math.hxx> + +#define PIPE_ARG "--splash-pipe=" + +namespace desktop +{ + UnxSplashScreen::UnxSplashScreen( const Reference< uno::XComponentContext >& xCtx ) + : m_xCtx( xCtx ), + m_pOutFd( NULL ) +{ +} + +UnxSplashScreen::~UnxSplashScreen() +{ +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "UnxSplashScreen::~UnxSplashScreen()\n" ); +#endif + + if ( m_pOutFd ) + { + fclose( m_pOutFd ); + m_pOutFd = NULL; + } +} + +void SAL_CALL UnxSplashScreen::start( const OUString& /*aText*/, sal_Int32 /*nRange*/ ) + throw ( RuntimeException ) +{ +} + +void SAL_CALL UnxSplashScreen::end() + throw ( RuntimeException ) +{ +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "UnxSplashScreen::end()\n" ); +#endif + if( !m_pOutFd ) + return; + + fprintf( m_pOutFd, "end\n" ); + fflush( m_pOutFd ); +} + +void SAL_CALL UnxSplashScreen::reset() + throw ( RuntimeException ) +{ +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "UnxSplashScreen::reset()\n" ); +#endif + if( !m_pOutFd ) + return; + + fprintf( m_pOutFd, "restart\n" ); + fflush( m_pOutFd ); +} + +void SAL_CALL UnxSplashScreen::setText( const OUString& /*aText*/ ) + throw ( RuntimeException ) +{ + // TODO? +} + +void SAL_CALL UnxSplashScreen::setValue( sal_Int32 nValue ) + throw ( RuntimeException ) +{ + if ( m_pOutFd ) + { + fprintf( m_pOutFd, "%" SAL_PRIdINT32 "%%\n", nValue ); + fflush( m_pOutFd ); + } +} + +// XInitialize +void SAL_CALL +UnxSplashScreen::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>& ) + throw ( RuntimeException ) +{ + for ( sal_uInt32 i = 0; i < osl_getCommandArgCount(); i++ ) + { + OUString aArg; + if ( osl_getCommandArg( i, &aArg.pData ) ) + break; + if ( aArg.matchIgnoreAsciiCaseAsciiL( PIPE_ARG, sizeof( PIPE_ARG ) - 1, 0 ) ) + { + OUString aNum = aArg.copy( sizeof( PIPE_ARG ) - 1 ); + int fd = aNum.toInt32(); + m_pOutFd = fdopen( fd, "w" ); +#if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "Got argument '--splash-pipe=%d ('%s') (%p)\n", + fd, OUStringToOString( aNum, RTL_TEXTENCODING_UTF8 ).getStr(), + m_pOutFd ); +#endif + } + } +} +} + +using namespace desktop; + +// get service instance... +static uno::Reference< uno::XInterface > m_xINSTANCE; + +uno::Reference< uno::XInterface > UnxSplash_createInstance(const uno::Reference< uno::XComponentContext > & xCtx ) throw( uno::Exception ) +{ + static osl::Mutex m_aMutex; + if ( !m_xINSTANCE.is() ) + { + osl::MutexGuard guard( m_aMutex ); + if ( !m_xINSTANCE.is() ) + m_xINSTANCE = (cppu::OWeakObject*) new UnxSplashScreen( xCtx ); + } + + return m_xINSTANCE; +} + +OUString UnxSplash_getImplementationName() +{ + return OUString( "com.sun.star.office.comp.PipeSplashScreen" ); +} + +uno::Sequence< OUString > UnxSplash_getSupportedServiceNames() throw() +{ + const OUString aServiceName( "com.sun.star.office.PipeSplashScreen" ); + const uno::Sequence< OUString > aSeq( &aServiceName, 1 ); + return aSeq; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/splash/unxsplash.hxx b/desktop/source/splash/unxsplash.hxx new file mode 100644 index 000000000000..a1282bb667bc --- /dev/null +++ b/desktop/source/splash/unxsplash.hxx @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include <stdio.h> + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/uno/Exception.hpp> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/registry/XRegistryKey.hpp> +#include <com/sun/star/task/XStatusIndicator.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <cppuhelper/implbase2.hxx> +#include <cppuhelper/interfacecontainer.h> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <osl/mutex.hxx> +#include <rtl/bootstrap.hxx> + +using namespace ::rtl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::uno; + +namespace desktop { + +class UnxSplashScreen : public ::cppu::WeakImplHelper2< css::task::XStatusIndicator, css::lang::XInitialization > +{ +private: + // don't allow anybody but ourselves to create instances of this class + UnxSplashScreen( const UnxSplashScreen& ); + UnxSplashScreen( void ); + UnxSplashScreen operator =( const UnxSplashScreen& ); + + virtual ~UnxSplashScreen(); + + static UnxSplashScreen *m_pINSTANCE; + + static osl::Mutex m_aMutex; + css::uno::Reference< css::uno::XComponentContext > m_xCtx; + + FILE *m_pOutFd; + +public: + UnxSplashScreen( const css::uno::Reference< css::uno::XComponentContext >& xCtx ); + + // XStatusIndicator + virtual void SAL_CALL start( const OUString& aText, sal_Int32 nRange ) throw ( css::uno::RuntimeException ); + virtual void SAL_CALL end() throw ( css::uno::RuntimeException ); + virtual void SAL_CALL reset() throw ( css::uno::RuntimeException ); + virtual void SAL_CALL setText( const OUString& aText ) throw ( css::uno::RuntimeException ); + virtual void SAL_CALL setValue( sal_Int32 nValue ) throw ( css::uno::RuntimeException ); + + // XInitialize + virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any>& aArguments ) throw ( css::uno::RuntimeException ); +}; + +} + +uno::Reference< uno::XInterface > SAL_CALL UnxSplash_createInstance(const uno::Reference< uno::XComponentContext > & xCtx ) throw( uno::Exception ); +OUString UnxSplash_getImplementationName(); +com::sun::star::uno::Sequence< OUString > SAL_CALL UnxSplash_getSupportedServiceNames() throw (); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |