1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef FPICKER_WIN32_VISTA_FILEPICKER_HXX 25 #define FPICKER_WIN32_VISTA_FILEPICKER_HXX 26 27 //----------------------------------------------------------------------------- 28 // includes 29 //----------------------------------------------------------------------------- 30 31 #include "asyncrequests.hxx" 32 #include "VistaFilePickerImpl.hxx" 33 #include "VistaFilePickerEventHandler.hxx" 34 35 #include <com/sun/star/lang/XInitialization.hpp> 36 #include <com/sun/star/lang/XServiceInfo.hpp> 37 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 38 #include <com/sun/star/ui/dialogs/XFilePicker.hpp> 39 #include <com/sun/star/ui/dialogs/XFilePicker2.hpp> 40 #include <com/sun/star/ui/dialogs/XFilePickerNotifier.hpp> 41 #include <com/sun/star/ui/dialogs/XFilterManager.hpp> 42 #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp> 43 #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> 44 #include <com/sun/star/ui/dialogs/XFilePreview.hpp> 45 #include <com/sun/star/util/XCancellable.hpp> 46 47 #include <cppuhelper/compbase10.hxx> 48 #include <cppuhelper/basemutex.hxx> 49 #include <rtl/ustring.hxx> 50 51 //----------------------------------------------------------------------------- 52 // namespace 53 //----------------------------------------------------------------------------- 54 55 #ifdef css 56 #error "Clash on using CSS as namespace define." 57 #else 58 #define css ::com::sun::star 59 #endif 60 61 namespace fpicker{ 62 namespace win32{ 63 namespace vista{ 64 65 //----------------------------------------------------------------------------- 66 // types 67 //----------------------------------------------------------------------------- 68 69 typedef ::cppu::WeakComponentImplHelper10< 70 css::ui::dialogs::XFilePicker2, 71 css::ui::dialogs::XFilterManager, 72 css::ui::dialogs::XFilterGroupManager, 73 css::ui::dialogs::XFilePickerControlAccess, 74 css::ui::dialogs::XFilePickerNotifier, 75 css::ui::dialogs::XFilePreview, 76 css::lang::XInitialization, 77 css::util::XCancellable, 78 css::lang::XEventListener, 79 css::lang::XServiceInfo > TVistaFilePickerBase; 80 81 //----------------------------------------------------------------------------- 82 /** Implements the XFilePicker & friends interface(s) 83 for Windos Vista and upcoming versions. 84 85 Note: This will be an UNO wrapper for the real file picker 86 implementation oly. The real implementation is done in class 87 VistaFilePickerImpl. 88 */ 89 class VistaFilePicker : public ::cppu::BaseMutex 90 , public TVistaFilePickerBase 91 { 92 public: 93 94 //------------------------------------------------------------------------------------ 95 // ctor/dtor 96 //------------------------------------------------------------------------------------ 97 98 VistaFilePicker( const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR ); 99 virtual ~VistaFilePicker(); 100 101 //------------------------------------------------------------------------------------ 102 // XFilePickerNotifier 103 //------------------------------------------------------------------------------------ 104 105 virtual void SAL_CALL addFilePickerListener( const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener ) 106 throw( css::uno::RuntimeException ); 107 108 virtual void SAL_CALL removeFilePickerListener( const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener ) 109 throw( css::uno::RuntimeException ); 110 111 //------------------------------------------------------------------------------------ 112 // XExecutableDialog functions 113 //------------------------------------------------------------------------------------ 114 115 virtual void SAL_CALL setTitle( const ::rtl::OUString& sTitle ) 116 throw( css::uno::RuntimeException ); 117 118 virtual sal_Int16 SAL_CALL execute( ) 119 throw( css::uno::RuntimeException ); 120 121 //------------------------------------------------------------------------------------ 122 // XFilePicker functions 123 //------------------------------------------------------------------------------------ 124 125 virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) 126 throw( css::uno::RuntimeException ); 127 128 virtual void SAL_CALL setDefaultName( const ::rtl::OUString& sName ) 129 throw( css::uno::RuntimeException ); 130 131 virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString& sDirectory ) 132 throw (css::lang::IllegalArgumentException, 133 css::uno::RuntimeException ); 134 135 virtual ::rtl::OUString SAL_CALL getDisplayDirectory( ) 136 throw( css::uno::RuntimeException ); 137 138 virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles( ) 139 throw( css::uno::RuntimeException ); 140 141 //------------------------------------------------------------------------------------ 142 // XFilePicker2 functions 143 //------------------------------------------------------------------------------------ 144 145 virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSelectedFiles( ) 146 throw( css::uno::RuntimeException ); 147 148 //------------------------------------------------------------------------------------ 149 // XFilterManager functions 150 //------------------------------------------------------------------------------------ 151 152 virtual void SAL_CALL appendFilter( const ::rtl::OUString& sTitle , 153 const ::rtl::OUString& sFilter ) 154 throw (css::lang::IllegalArgumentException, 155 css::uno::RuntimeException ); 156 157 virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString& sTitle ) 158 throw (css::lang::IllegalArgumentException, 159 css::uno::RuntimeException ); 160 161 virtual ::rtl::OUString SAL_CALL getCurrentFilter( ) 162 throw( css::uno::RuntimeException ); 163 164 //------------------------------------------------------------------------------------ 165 // XFilterGroupManager functions 166 //------------------------------------------------------------------------------------ 167 168 virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString& sGroupTitle, 169 const css::uno::Sequence< css::beans::StringPair >& lFilters ) 170 throw (css::lang::IllegalArgumentException, 171 css::uno::RuntimeException ); 172 173 //------------------------------------------------------------------------------------ 174 // XFilePickerControlAccess functions 175 //------------------------------------------------------------------------------------ 176 177 virtual void SAL_CALL setValue( sal_Int16 nControlId , 178 sal_Int16 nControlAction, 179 const css::uno::Any& aValue ) 180 throw (css::uno::RuntimeException); 181 182 virtual css::uno::Any SAL_CALL getValue( sal_Int16 nControlId , 183 sal_Int16 nControlAction ) 184 throw (css::uno::RuntimeException); 185 186 virtual void SAL_CALL enableControl( sal_Int16 nControlId, 187 sal_Bool bEnable ) 188 throw(css::uno::RuntimeException ); 189 190 virtual void SAL_CALL setLabel( sal_Int16 nControlId, 191 const ::rtl::OUString& sLabel ) 192 throw (css::uno::RuntimeException); 193 194 virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId ) 195 throw (css::uno::RuntimeException); 196 197 //------------------------------------------------ 198 // XFilePreview 199 //------------------------------------------------ 200 201 virtual css::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ) 202 throw (css::uno::RuntimeException); 203 204 virtual sal_Int32 SAL_CALL getTargetColorDepth( ) 205 throw (css::uno::RuntimeException); 206 207 virtual sal_Int32 SAL_CALL getAvailableWidth( ) 208 throw (css::uno::RuntimeException); 209 210 virtual sal_Int32 SAL_CALL getAvailableHeight( ) 211 throw (css::uno::RuntimeException); 212 213 virtual void SAL_CALL setImage( sal_Int16 nImageFormat, 214 const css::uno::Any& aImage ) 215 throw (css::lang::IllegalArgumentException, css::uno::RuntimeException); 216 217 virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState ) 218 throw (css::uno::RuntimeException); 219 220 virtual sal_Bool SAL_CALL getShowState( ) 221 throw (css::uno::RuntimeException); 222 223 //------------------------------------------------ 224 // XInitialization 225 //------------------------------------------------ 226 227 virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& lArguments ) 228 throw(css::uno::Exception , 229 css::uno::RuntimeException); 230 231 //------------------------------------------------ 232 // XCancellable 233 //------------------------------------------------ 234 235 virtual void SAL_CALL cancel( ) 236 throw(css::uno::RuntimeException); 237 238 //------------------------------------------------ 239 // XEventListener 240 //------------------------------------------------ 241 242 virtual void SAL_CALL disposing( const css::lang::EventObject& aEvent ) 243 throw(css::uno::RuntimeException); 244 245 //------------------------------------------------ 246 // XServiceInfo 247 //------------------------------------------------ 248 249 virtual ::rtl::OUString SAL_CALL getImplementationName( ) 250 throw(css::uno::RuntimeException); 251 252 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 253 throw(css::uno::RuntimeException); 254 255 virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) 256 throw(css::uno::RuntimeException); 257 258 /* 259 //------------------------------------------------------------------------------------ 260 // FilePicker Event functions 261 //------------------------------------------------------------------------------------ 262 263 void SAL_CALL fileSelectionChanged(const css::ui::dialogs::FilePickerEvent& aEvent ); 264 void SAL_CALL directoryChanged(const css::ui::dialogs::FilePickerEvent& aEvent ); 265 ::rtl::OUString SAL_CALL helpRequested(const css::ui::dialogs::FilePickerEvent& aEvent ) const; 266 void SAL_CALL controlStateChanged(const css::ui::dialogs::FilePickerEvent& aEvent ); 267 void SAL_CALL dialogSizeChanged( ); 268 269 bool startupEventNotification(bool bStartupSuspended); 270 void shutdownEventNotification(); 271 void suspendEventNotification(); 272 void resumeEventNotification(); 273 */ 274 275 private: 276 277 // prevent copy and assignment 278 VistaFilePicker( const VistaFilePicker& ); 279 VistaFilePicker& operator=( const VistaFilePicker& ); 280 281 using WeakComponentImplHelperBase::disposing; 282 283 private: 284 285 //--------------------------------------------------------------------- 286 /// service manager to create own used uno services 287 css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR; 288 289 //--------------------------------------------------------------------- 290 css::uno::Sequence< ::rtl::OUString > m_lLastFiles; 291 292 //--------------------------------------------------------------------- 293 /** execute the COM dialog within a STA thread 294 * Must be used on the heap ... because it's implemented as OSL thread .-) 295 */ 296 RequestHandlerRef m_rDialog; 297 AsyncRequests m_aAsyncExecute; 298 299 //--------------------------------------------------------------------- 300 oslThreadIdentifier m_nFilePickerThreadId; 301 302 bool m_bInitialized; 303 }; 304 305 } // namespace vista 306 } // namespace win32 307 } // namespace fpicker 308 309 #undef css 310 311 #endif // FPICKER_WIN32_VISTA_FILEPICKER_HXX 312