1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_fpicker.hxx" 30 31 //---------------------------------------------- 32 // includes of other projects 33 //---------------------------------------------- 34 #include <cppuhelper/factory.hxx> 35 #include <com/sun/star/container/XSet.hpp> 36 #include <osl/diagnose.h> 37 #include "FilePicker.hxx" 38 #include "FPServiceInfo.hxx" 39 40 #pragma warning (disable:4917) 41 #include "VistaFilePicker.hxx" 42 #include "..\misc\WinImplHelper.hxx" 43 #include <stdio.h> 44 45 //----------------------------------------------- 46 // namespace directives 47 //----------------------------------------------- 48 49 using namespace ::rtl ; 50 using namespace ::com::sun::star::uno ; 51 using namespace ::com::sun::star::container ; 52 using namespace ::com::sun::star::lang ; 53 using namespace ::com::sun::star::registry ; 54 using namespace ::cppu ; 55 using ::com::sun::star::ui::dialogs::XFilePicker; 56 using ::com::sun::star::ui::dialogs::XFilePicker2; 57 58 //------------------------------------------------ 59 // 60 //------------------------------------------------ 61 62 static Reference< XInterface > SAL_CALL createInstance( 63 const Reference< XMultiServiceFactory >& rServiceManager ) 64 { 65 Reference< XInterface > xDlg; 66 bool bVistaOrNewer = IsWindowsVistaOrNewer(); 67 68 if (bVistaOrNewer) 69 { 70 OSL_TRACE("use special (vista) system file picker ..."); 71 xDlg.set( 72 static_cast< XFilePicker2* >( 73 new ::fpicker::win32::vista::VistaFilePicker( rServiceManager ) ) ); 74 } 75 else 76 { 77 OSL_TRACE("use normal system file picker ..."); 78 xDlg.set( 79 static_cast< XFilePicker2* >( 80 new CFilePicker( rServiceManager ) ) ); 81 } 82 83 return xDlg; 84 } 85 86 //------------------------------------------------ 87 // the three uno functions that will be exported 88 //------------------------------------------------ 89 90 extern "C" 91 { 92 93 //------------------------------------------------ 94 // component_getImplementationEnvironment 95 //------------------------------------------------ 96 97 void SAL_CALL component_getImplementationEnvironment( 98 const sal_Char ** ppEnvTypeName, uno_Environment ** ) 99 { 100 *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; 101 } 102 103 //------------------------------------------------ 104 // 105 //------------------------------------------------ 106 107 void* SAL_CALL component_getFactory( 108 const sal_Char* pImplName, uno_Interface* pSrvManager, uno_Interface* ) 109 { 110 void* pRet = 0; 111 112 if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) ) 113 { 114 Sequence< OUString > aSNS( 1 ); 115 aSNS.getArray( )[0] = OUString::createFromAscii( FILE_PICKER_SERVICE_NAME ); 116 117 Reference< XSingleServiceFactory > xFactory ( createSingleFactory( 118 reinterpret_cast< XMultiServiceFactory* > ( pSrvManager ), 119 OUString::createFromAscii( pImplName ), 120 createInstance, 121 aSNS ) ); 122 if ( xFactory.is() ) 123 { 124 xFactory->acquire(); 125 pRet = xFactory.get(); 126 } 127 } 128 129 return pRet; 130 } 131 132 } // extern "C" 133