/************************************************************************* * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: gengal.cxx,v $ * * $Revision: 1.9 $ * * last change: $Author: ihi $ $Date: 2007-06-05 14:35:58 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. * * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2005 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace ::vos; using namespace ::rtl; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::registry; using namespace ::com::sun::star::lang; typedef ::std::list FileNameList; class GalApp : public Application { public: virtual void Main(); }; Reference< XMultiServiceFactory > createApplicationServiceManager() { Reference< XMultiServiceFactory > xMS; try { Reference< XComponentContext > xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext(); if ( xComponentContext.is() ) xMS = xMS.query( xComponentContext->getServiceManager() ); } catch( ::com::sun::star::uno::Exception& ) { } return xMS; } Gallery* createGallery( const rtl::OUString& aGalleryURL ) { return new Gallery( aGalleryURL ); } void disposeGallery( Gallery* pGallery ) { delete pGallery; } static void createTheme( rtl::OUString aThemeName, rtl::OUString aGalleryURL, rtl::OUString aDestDir, UINT32 nNumFrom, FileNameList &rFiles ) { Gallery * pGallery( createGallery( aGalleryURL ) ); if (!pGallery ) { fprintf( stderr, "Could't acquire '%s'\n", (const sal_Char *) rtl::OUStringToOString( aGalleryURL, RTL_TEXTENCODING_UTF8 ) ); exit( 1 ); } fprintf( stderr, "Work on gallery '%s'\n", (const sal_Char *) rtl::OUStringToOString( aGalleryURL, RTL_TEXTENCODING_UTF8 ) ); fprintf( stderr, "Existing themes: %lu\n", sal::static_int_cast< unsigned long >( pGallery->GetThemeCount() ) ); if( !pGallery->HasTheme( aThemeName) ) { if( !pGallery->CreateTheme( aThemeName, nNumFrom ) ) { fprintf( stderr, "Failed to create theme\n" ); disposeGallery( pGallery ); exit( 1 ); } } fprintf( stderr, "Existing themes: %lu\n", sal::static_int_cast< unsigned long >( pGallery->GetThemeCount() ) ); SfxListener aListener; GalleryTheme *pGalTheme = pGallery->AcquireTheme( aThemeName, aListener ); if ( pGalTheme == NULL ) { fprintf( stderr, "Failed to acquire theme\n" ); disposeGallery( pGallery ); exit( 1 ); } fprintf( stderr, "Using DestDir: %s\n", (const sal_Char *) rtl::OUStringToOString( aDestDir, RTL_TEXTENCODING_UTF8 ) ); pGalTheme->SetDestDir(String(aDestDir)); FileNameList::const_iterator aIter; for( aIter = rFiles.begin(); aIter != rFiles.end(); aIter++ ) { // Should/could use: // if ( ! pGalTheme->InsertFileOrDirURL( aURL ) ) { // Requires a load more components ... Graphic aGraphic; String aFormat; #if 1 if ( ! pGalTheme->InsertURL( *aIter ) ) fprintf( stderr, "Failed to import '%s'\n", (const sal_Char *) rtl::OUStringToOString( *aIter, RTL_TEXTENCODING_UTF8 ) ); else fprintf( stderr, "Imported file '%s' (%lu)\n", (const sal_Char *) rtl::OUStringToOString( *aIter, RTL_TEXTENCODING_UTF8 ), sal::static_int_cast< unsigned long >( pGalTheme->GetObjectCount() ) ); #else // only loads BMPs SvStream *pStream = ::utl::UcbStreamHelper::CreateStream( *aIter, STREAM_READ ); if (!pStream) { fprintf( stderr, "Can't find image to import\n" ); disposeGallery( pGallery ); exit (1); } *pStream >> aGraphic; delete pStream; if( aGraphic.GetType() == GRAPHIC_NONE ) { fprintf( stderr, "Failed to load '%s'\n", (const sal_Char *) rtl::OUStringToOString( *aIter, RTL_TEXTENCODING_UTF8 ) ); continue; } SgaObjectBmp aObject( aGraphic, *aIter, aFormat ); if ( ! aObject.IsValid() ) { fprintf( stderr, "Failed to create thumbnail for image\n" ); continue; } if ( ! pGalTheme->InsertObject( aObject ) ) { fprintf( stderr, "Failed to insert file or URL\n" ); continue; } #endif } pGallery->ReleaseTheme( pGalTheme, aListener ); disposeGallery( pGallery ); } static void PrintHelp() { fprintf( stdout, "Utility to generate OO.o gallery files\n\n" ); fprintf( stdout, "using: gengal --name --path [ --destdir ]\n"); fprintf( stdout, " [ --number-from ] [ files ... ]\n\n" ); fprintf( stdout, "options:\n"); fprintf( stdout, " --name \t\tdefines a name of the created or updated theme.\n"); fprintf( stdout, " --path \t\tdefines directory where the gallery files are created\n"); fprintf( stdout, "\t\t\tor updated.\n"); fprintf( stdout, " --destdir \tdefines a path prefix to be removed from the paths\n"); fprintf( stdout, "\t\t\tstored in the gallery files. It is useful to create\n"); fprintf( stdout, "\t\t\tRPM packages using the BuildRoot feature.\n"); fprintf( stdout, " --number-from \tdefines minimal number for the newly created gallery\n"); fprintf( stdout, "\t\t\ttheme files.\n"); fprintf( stdout, " files\t\t\tlists files to be added to the gallery. Absolute paths\n"); fprintf( stdout, "\t\t\tare required.\n"); } static OUString Smartify( const OUString &rPath ) { INetURLObject aURL; aURL.SetSmartURL( rPath ); return aURL.GetMainURL( INetURLObject::NO_DECODE ); } // Cut/paste [ evilness ] from Desktop::CreateApplicationServiceManager() Reference< XMultiServiceFactory > CreateApplicationServiceManager() { try { Reference xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext(); Reference xMS(xComponentContext->getServiceManager(), UNO_QUERY); return xMS; } catch( ::com::sun::star::uno::Exception& ) { } return Reference< XMultiServiceFactory >(); } void GalApp::Main() { Reference xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext(); Reference xMSF(xComponentContext->getServiceManager(), UNO_QUERY); if( !xMSF.is() ) fprintf( stderr, "Failed to bootstrap\n" ); ::comphelper::setProcessServiceFactory( xMSF ); OUString aEmpty; Sequence< Any > aArgs(6); aArgs[0] <<= rtl::OUString::createFromAscii(UCB_CONFIGURATION_KEY1_LOCAL); aArgs[1] <<= rtl::OUString::createFromAscii(UCB_CONFIGURATION_KEY2_OFFICE); aArgs[2] <<= rtl::OUString::createFromAscii("PIPE"); aArgs[3] <<= aEmpty; aArgs[4] <<= rtl::OUString::createFromAscii("PORTAL"); aArgs[5] <<= aEmpty; if (! ::ucbhelper::ContentBroker::initialize( xMSF, aArgs ) ) fprintf( stderr, "Failed to init content broker\n" ); bool bHelp = false; rtl::OUString aPath, aDestDir; rtl::OUString aName = rtl::OUString::createFromAscii( "Default name" ); UINT32 nNumFrom = 0; FileNameList aFiles; for( USHORT i = 0; i < GetCommandLineParamCount(); i++ ) { OUString aParam = GetCommandLineParam( i ); if( aParam.equalsAscii( "--help" ) || aParam.equalsAscii( "-h" ) ) bHelp = true; else if ( aParam.equalsAscii( "--name" ) ) aName = GetCommandLineParam( ++i ); else if ( aParam.equalsAscii( "--path" ) ) aPath = Smartify( GetCommandLineParam( ++i ) ); else if ( aParam.equalsAscii( "--destdir" ) ) aDestDir = GetCommandLineParam( ++i ); else if ( aParam.equalsAscii( "--number-from" ) ) nNumFrom = GetCommandLineParam( ++i ).ToInt32(); else aFiles.push_back( Smartify( aParam ) ); } if( bHelp ) { PrintHelp(); return; } createTheme( aName, aPath, aDestDir, nNumFrom, aFiles ); } GalApp aGalApp;