Hi,

I work on an extension based on the example "DocumentLoader" from the
SDK and I need few informations to complete it.
Here are its main features :
- load a presentation document,
- start the slideshow on given monitor (multimonitors system),
- close the presentation at its end.
This extension will be called by another program with no user interaction.

Here are my problem :
There is a service called "com.sun.star.awt.DisplayAccess" which
instance is a XPropertySet and the integer property "DefaultDisplay"
may be what I am looking for. When using it, I have this error :

SlideShowLoader.cxx(52) : fatal error C1083:
Cannot open include file: 'comphelper/processfactory.hxx':
No such file or directory

In my opinion, this is an issue in my makefile. I added
"$(COMPHELPERLIB)" line 114 and 117 without success...
Some help would be very appreciated !

ps sorry for my english
/*************************************************************************
 *
 *  $RCSfile: SlideShowLoader.cxx,v $
 *
 *  $Revision: 1.12 $
 *
 *  last change: $Author: kz $ $Date: 2006/11/06 15:04:14 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  the BSD license.
 *  
 *  Copyright (c) 2003 by Sun Microsystems, Inc.
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *  3. Neither the name of Sun Microsystems, Inc. nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *     
 *************************************************************************/

/*****************************************************************************
 *****************************************************************************
 *
 * Simple client application using the UnoUrlResolver service.
 *
 *****************************************************************************
 *****************************************************************************/
#include <stdio.h>
#include <wchar.h>

#include <cppuhelper/bootstrap.hxx>
#include <comphelper/processfactory.hxx>

#include <osl/file.hxx>
#include <osl/process.h>

#include <com/sun/star/awt/PosSize.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/bridge/XUnoUrlResolver.hpp>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/frame/XComponentLoader.hpp>
#include <com/sun/star/frame/XController.hpp>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/presentation/XPresentation.hpp>
#include <com/sun/star/presentation/XPresentationSupplier.hpp>

#include <string.h>

using namespace rtl;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::bridge;
using namespace com::sun::star::frame;
using namespace com::sun::star::registry;
using namespace com::sun::star::presentation;
using namespace com::sun::star::awt;

//============================================================================
int SAL_CALL main( int argc, char **argv )
{
  OUString 
sConnectionString(RTL_CONSTASCII_USTRINGPARAM("uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"));
  if (argc < 2)
  {
    printf("using: SlideShowLoader <file_url> [<uno_connection_url>]\n\n"
           "example: SlideShowLoader  \"file:///e:/temp/test.odp\" 
\"uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager\"\n");
    exit(1);
  }
  if (argc == 3)
  {
    sConnectionString = OUString::createFromAscii(argv[2]);        
  }

  // creates a simple registry service instance
  Reference< XSimpleRegistry > xSimpleRegistry(
    ::cppu::createSimpleRegistry() );

  // connects the registry to a persistent data source represented by an url
  xSimpleRegistry->open(
    OUString( RTL_CONSTASCII_USTRINGPARAM( "SlideShowLoader.rdb" ) ),
    sal_True,
    sal_False );

  /* bootstraps an initial component context with
     service manager upon a given registry
     this includes insertion of initial services :
     - (registry) service manager, shared lib loader,
     - simple registry, nested registry,
     - implementation registration
     - registry typedescription provider, typedescription manager (also 
installs it into cppu core)
  */
  Reference< XComponentContext > xComponentContext(
    ::cppu::bootstrap_InitialComponentContext( xSimpleRegistry ) );

  /* gets the service manager instance to be used (or null)
     this method has been added for convenience,
     because the service manager is a often used object
  */
  Reference< XMultiComponentFactory > xMultiComponentFactoryClient(
    xComponentContext->getServiceManager() );

  /* creates an instance of a component which
     supports the services specified by the factory.
  */
  Reference< XInterface > xInterface =
    xMultiComponentFactoryClient->createInstanceWithContext( 
      OUString::createFromAscii( "com.sun.star.bridge.UnoUrlResolver" ),
      xComponentContext );

  Reference< XUnoUrlResolver > resolver( xInterface,
                                         UNO_QUERY );

  // resolves the component context from the office,
  // on the uno URL given by argv[1].
  try
  {    
    xInterface = Reference< XInterface >(
      resolver->resolve( sConnectionString ),
      UNO_QUERY );
  }
  catch ( Exception& e )
  {
    printf("Error: cannot establish a connection using '%s':\n       %s\n",
           OUStringToOString(sConnectionString,
                             RTL_TEXTENCODING_ASCII_US).getStr(),
           OUStringToOString(e.Message,
                             RTL_TEXTENCODING_ASCII_US).getStr());
    exit(1);
  }

  // gets the server component context as property of the office component 
factory
  Reference< XPropertySet > xPropSet( xInterface,
                                      UNO_QUERY );
  xPropSet->getPropertyValue( OUString::createFromAscii("DefaultContext") ) >>= 
xComponentContext;

  // gets the service manager from the office
  Reference< XMultiComponentFactory > xMultiComponentFactoryServer(
    xComponentContext->getServiceManager() );

  /* creates an instance of a component which
     supports the services specified by the factory.
     important : using the office component context.
  */
  Reference < XComponentLoader > xComponentLoader(
    xMultiComponentFactoryServer->createInstanceWithContext( 
      OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop" ) ),
      xComponentContext ),
    UNO_QUERY );

  /* loads a component specified by an url into
     the specified new or existing frame
  */
  OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl;
  osl_getProcessWorkingDir(&sWorkingDir.pData);
  osl::FileBase::getFileURLFromSystemPath( OUString::createFromAscii(argv[1]),
                                           sDocPathUrl);
  osl::FileBase::getAbsoluteFileURL( sWorkingDir,
                                     sDocPathUrl,
                                     sAbsoluteDocUrl);

  //properties value for the component
  Sequence < PropertyValue > ComponentPropertyValue(1); 
//  sal_Bool boStartPres = true;
//  ComponentPropertyValue[0].Name = OUString::createFromAscii( 
"StartPresentation" );
//  ComponentPropertyValue[0].Value = makeAny( boStartPres );
  sal_Bool boHidden = true;
  ComponentPropertyValue[0].Name = OUString::createFromAscii( "Hidden" );
  ComponentPropertyValue[0].Value = makeAny( boHidden );

  Reference< XComponent > xComponent =
    xComponentLoader->loadComponentFromURL(
      sAbsoluteDocUrl,
      OUString( RTL_CONSTASCII_USTRINGPARAM("_blank") ),
      0,
      ComponentPropertyValue );

  /* access to xwindow from xcomponent
  */
  //
  Reference< XModel > xModel ( xComponent, UNO_QUERY );
  Reference< XController > xController = xModel->getCurrentController();
  Reference< XFrame > xFrame = xController->getFrame();
  Reference< XWindow > xWindow = xFrame->getContainerWindow();
  xWindow->setPosSize(0,
                      0,
                      116,
                      0,
                      PosSize::POSSIZE);

  Reference< XMultiServiceFactory > xFactory(
    ::comphelper::getProcessServiceFactory(),
    UNO_QUERY_THROW );
  Reference< XPropertySet > xMonProps(
    xFactory->createInstance(
      OUString(
        RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.DisplayAccess" ) ) ),
    UNO_QUERY );
  const OUString sPropName( RTL_CONSTASCII_USTRINGPARAM( "DefaultDisplay" ) );
  xMonProps->setPropertyValue( sPropName ) >>= 0;

  /* start a presentation
  */
  Reference< XPresentationSupplier > xPresentationSupplier(xComponent, 
UNO_QUERY);
  Reference< XPresentation > xPresentation = 
xPresentationSupplier->getPresentation();
  xWindow->setVisible( boHidden );
  xPresentation->start();

  /* detect the end of the presentation
  */
  //!\ important : try to detect the end of the presentation here

  /* close the document
  */
  //!\ important : remove next comment // when last step complete
  //xComponent->dispose();

        // dispose the local service manager
  Reference< XComponent >::query( xMultiComponentFactoryClient )->dispose();

  return 0;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to