xref: /AOO41X/main/fpicker/source/win32/filepicker/VistaFilePicker.hxx (revision 10ce801889b00990ebdbcb412f4f91e2a9e6f21d)
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