110ce8018SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
310ce8018SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
410ce8018SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
510ce8018SAndrew Rist  * distributed with this work for additional information
610ce8018SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
710ce8018SAndrew Rist  * to you under the Apache License, Version 2.0 (the
810ce8018SAndrew Rist  * "License"); you may not use this file except in compliance
910ce8018SAndrew Rist  * with the License.  You may obtain a copy of the License at
1010ce8018SAndrew Rist  *
1110ce8018SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1210ce8018SAndrew Rist  *
1310ce8018SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1410ce8018SAndrew Rist  * software distributed under the License is distributed on an
1510ce8018SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1610ce8018SAndrew Rist  * KIND, either express or implied.  See the License for the
1710ce8018SAndrew Rist  * specific language governing permissions and limitations
1810ce8018SAndrew Rist  * under the License.
1910ce8018SAndrew Rist  *
2010ce8018SAndrew Rist  *************************************************************/
2110ce8018SAndrew Rist 
2210ce8018SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef FPICKER_WIN32_VISTA_FILEPICKERIMPL_HXX
25cdf0e10cSrcweir #define FPICKER_WIN32_VISTA_FILEPICKERIMPL_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir //-----------------------------------------------------------------------------
28cdf0e10cSrcweir // includes
29cdf0e10cSrcweir //-----------------------------------------------------------------------------
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #if defined(_MSC_VER) && (_MSC_VER >= 1400)
32cdf0e10cSrcweir #pragma warning( disable : 4917 )
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include "platform_vista.h"
36cdf0e10cSrcweir #include "asyncrequests.hxx"
37cdf0e10cSrcweir #include "comptr.hxx"
38cdf0e10cSrcweir #include "vistatypes.h"
39cdf0e10cSrcweir #include "FilterContainer.hxx"
40cdf0e10cSrcweir #include "VistaFilePickerEventHandler.hxx"
41cdf0e10cSrcweir #include "IVistaFilePickerInternalNotify.hxx"
42cdf0e10cSrcweir #include "..\misc\resourceprovider.hxx"
43cdf0e10cSrcweir 
44cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir #include <comphelper/sequenceashashmap.hxx>
47cdf0e10cSrcweir #include <cppuhelper/interfacecontainer.h>
48cdf0e10cSrcweir #include <cppuhelper/basemutex.hxx>
49cdf0e10cSrcweir #include <osl/thread.hxx>
50cdf0e10cSrcweir #include <osl/conditn.hxx>
51cdf0e10cSrcweir #include <rtl/ustring.hxx>
52cdf0e10cSrcweir 
53cdf0e10cSrcweir #if defined _MSC_VER
54cdf0e10cSrcweir #pragma warning(push, 1)
55cdf0e10cSrcweir #endif
56cdf0e10cSrcweir #include <shobjidl.h>
57cdf0e10cSrcweir #if defined _MSC_VER
58cdf0e10cSrcweir #pragma warning(pop)
59cdf0e10cSrcweir #endif
60cdf0e10cSrcweir 
61cdf0e10cSrcweir //-----------------------------------------------------------------------------
62cdf0e10cSrcweir // namespace
63cdf0e10cSrcweir //-----------------------------------------------------------------------------
64cdf0e10cSrcweir 
65cdf0e10cSrcweir #ifdef css
66cdf0e10cSrcweir     #error "Clash on using CSS as namespace define."
67cdf0e10cSrcweir #else
68cdf0e10cSrcweir     #define css ::com::sun::star
69cdf0e10cSrcweir #endif
70cdf0e10cSrcweir 
71cdf0e10cSrcweir namespace fpicker{
72cdf0e10cSrcweir namespace win32{
73cdf0e10cSrcweir namespace vista{
74cdf0e10cSrcweir 
75cdf0e10cSrcweir //-----------------------------------------------------------------------------
76cdf0e10cSrcweir // types, const etcpp
77cdf0e10cSrcweir //-----------------------------------------------------------------------------
78cdf0e10cSrcweir 
79cdf0e10cSrcweir static const ::sal_Int32 FEATURE_AUTOEXTENSION  =    1;
80cdf0e10cSrcweir static const ::sal_Int32 FEATURE_PASSWORD       =    2;
81cdf0e10cSrcweir static const ::sal_Int32 FEATURE_FILTEROPTIONS  =    4;
82cdf0e10cSrcweir static const ::sal_Int32 FEATURE_SELECTION      =    8;
83cdf0e10cSrcweir static const ::sal_Int32 FEATURE_TEMPLATE       =   16;
84cdf0e10cSrcweir static const ::sal_Int32 FEATURE_LINK           =   32;
85cdf0e10cSrcweir static const ::sal_Int32 FEATURE_PREVIEW        =   64;
86cdf0e10cSrcweir static const ::sal_Int32 FEATURE_IMAGETEMPLATE  =  128;
87cdf0e10cSrcweir static const ::sal_Int32 FEATURE_PLAY           =  256;
88cdf0e10cSrcweir static const ::sal_Int32 FEATURE_READONLY       =  512;
89cdf0e10cSrcweir static const ::sal_Int32 FEATURE_VERSION        = 1024;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir static const ::rtl::OUString PROP_PICKER_LISTENER     = ::rtl::OUString::createFromAscii("picker_listener"    ); // [XFilePickerListenert]
92cdf0e10cSrcweir static const ::rtl::OUString PROP_DIALOG_SHOW_RESULT  = ::rtl::OUString::createFromAscii("dialog_show_result" ); // [sal_Bool] true=OK, false=CANCEL
93cdf0e10cSrcweir static const ::rtl::OUString PROP_SELECTED_FILES      = ::rtl::OUString::createFromAscii("selected_files"     ); // [seq< OUString >] contains all user selected files (can be empty!)
94cdf0e10cSrcweir static const ::rtl::OUString PROP_MULTISELECTION_MODE = ::rtl::OUString::createFromAscii("multiselection_mode"); // [sal_Bool] true=ON, false=OFF
95cdf0e10cSrcweir static const ::rtl::OUString PROP_TITLE               = ::rtl::OUString::createFromAscii("title"              ); // [OUString]
96cdf0e10cSrcweir static const ::rtl::OUString PROP_FILENAME			  = ::rtl::OUString::createFromAscii("filename"           ); // [OUString]
97cdf0e10cSrcweir static const ::rtl::OUString PROP_DIRECTORY           = ::rtl::OUString::createFromAscii("directory"          ); // [OUString]
98cdf0e10cSrcweir static const ::rtl::OUString PROP_FEATURES            = ::rtl::OUString::createFromAscii("features"           ); // [sal_Int32]
99cdf0e10cSrcweir static const ::rtl::OUString PROP_TEMPLATE_DESCR	  = ::rtl::OUString::createFromAscii("templatedescription"); // [sal_Int32]
100cdf0e10cSrcweir static const ::rtl::OUString PROP_FILTER_TITLE        = ::rtl::OUString::createFromAscii("filter_title"       ); // [OUString]
101cdf0e10cSrcweir static const ::rtl::OUString PROP_FILTER_VALUE        = ::rtl::OUString::createFromAscii("filter_value"       ); // [OUString]
102cdf0e10cSrcweir static const ::rtl::OUString PROP_FORCE               = ::rtl::OUString::createFromAscii("force"              ); // [sal_Bool]
103cdf0e10cSrcweir static const ::rtl::OUString PROP_FILTER_GROUP		  = ::rtl::OUString::createFromAscii("filter_group"       ); // [seq< css:beans::StringPair >] contains a group of filters
104cdf0e10cSrcweir 
105cdf0e10cSrcweir static const ::rtl::OUString PROP_CONTROL_ID          = ::rtl::OUString::createFromAscii("control_id"         ); // [sal_Int16]
106cdf0e10cSrcweir static const ::rtl::OUString PROP_CONTROL_ACTION      = ::rtl::OUString::createFromAscii("control_action"     ); // [sal_Int16]
107cdf0e10cSrcweir static const ::rtl::OUString PROP_CONTROL_VALUE       = ::rtl::OUString::createFromAscii("control_value"      ); // [Any]
108cdf0e10cSrcweir static const ::rtl::OUString PROP_CONTROL_LABEL       = ::rtl::OUString::createFromAscii("control_label"      ); // [OUString]
109cdf0e10cSrcweir static const ::rtl::OUString PROP_CONTROL_ENABLE      = ::rtl::OUString::createFromAscii("control_enable"     ); // [sal_Bool] true=ON, false=OFF
110cdf0e10cSrcweir static const ::rtl::OUString STRING_SEPARATOR         = ::rtl::OUString::createFromAscii("------------------------------------------" );
111cdf0e10cSrcweir 
112cdf0e10cSrcweir //-----------------------------------------------------------------------------
113*a49f1911Smseidel /** native implementation of the file picker on Vista and upcoming Windows versions.
114*a49f1911Smseidel  *  This dialog uses COM internally. Further it marshall every request so it will
115cdf0e10cSrcweir  *  be executed within it's own STA thread !
116cdf0e10cSrcweir  */
117cdf0e10cSrcweir //-----------------------------------------------------------------------------
118cdf0e10cSrcweir class VistaFilePickerImpl : private ::cppu::BaseMutex
119cdf0e10cSrcweir                           , public  RequestHandler
120cdf0e10cSrcweir                           , public  IVistaFilePickerInternalNotify
121cdf0e10cSrcweir {
122cdf0e10cSrcweir     public:
123cdf0e10cSrcweir 
124cdf0e10cSrcweir         //---------------------------------------------------------------------
125cdf0e10cSrcweir         /** used for marshalling requests.
126cdf0e10cSrcweir          *  Will be used to map requests to the right implementations.
127cdf0e10cSrcweir          */
128cdf0e10cSrcweir         enum ERequest
129cdf0e10cSrcweir         {
130cdf0e10cSrcweir             E_NO_REQUEST,
131cdf0e10cSrcweir             E_ADD_PICKER_LISTENER,
132cdf0e10cSrcweir             E_REMOVE_PICKER_LISTENER,
133cdf0e10cSrcweir             E_APPEND_FILTER,
134cdf0e10cSrcweir             E_SET_CURRENT_FILTER,
135cdf0e10cSrcweir             E_GET_CURRENT_FILTER,
136cdf0e10cSrcweir             E_CREATE_OPEN_DIALOG,
137cdf0e10cSrcweir             E_CREATE_SAVE_DIALOG,
138cdf0e10cSrcweir             E_SET_MULTISELECTION_MODE,
139cdf0e10cSrcweir             E_SET_TITLE,
140cdf0e10cSrcweir 			E_SET_FILENAME,
141cdf0e10cSrcweir             E_GET_DIRECTORY,
142cdf0e10cSrcweir             E_SET_DIRECTORY,
143cdf0e10cSrcweir 			E_SET_DEFAULT_NAME,
144cdf0e10cSrcweir 			E_GET_SELECTED_FILES,
145cdf0e10cSrcweir             E_SHOW_DIALOG_MODAL,
146cdf0e10cSrcweir             E_SET_CONTROL_VALUE,
147cdf0e10cSrcweir             E_GET_CONTROL_VALUE,
148cdf0e10cSrcweir             E_SET_CONTROL_LABEL,
149cdf0e10cSrcweir             E_GET_CONTROL_LABEL,
150cdf0e10cSrcweir             E_ENABLE_CONTROL,
151cdf0e10cSrcweir 			E_APPEND_FILTERGROUP
152cdf0e10cSrcweir         };
153cdf0e10cSrcweir 
154cdf0e10cSrcweir     public:
155cdf0e10cSrcweir 
156cdf0e10cSrcweir         //---------------------------------------------------------------------
157cdf0e10cSrcweir         // ctor/dtor - nothing special
158cdf0e10cSrcweir         //---------------------------------------------------------------------
159cdf0e10cSrcweir                  VistaFilePickerImpl();
160cdf0e10cSrcweir         virtual ~VistaFilePickerImpl();
161cdf0e10cSrcweir 
162cdf0e10cSrcweir         //---------------------------------------------------------------------
163cdf0e10cSrcweir         // RequestHandler
164cdf0e10cSrcweir         //---------------------------------------------------------------------
165cdf0e10cSrcweir 
166cdf0e10cSrcweir         virtual void before();
167cdf0e10cSrcweir         virtual void doRequest(const RequestRef& rRequest);
168cdf0e10cSrcweir         virtual void after();
169cdf0e10cSrcweir 
170cdf0e10cSrcweir         //---------------------------------------------------------------------
171cdf0e10cSrcweir 		// IVistaFilePickerInternalNotify
172cdf0e10cSrcweir 		//---------------------------------------------------------------------
173cdf0e10cSrcweir         virtual void onAutoExtensionChanged (bool bChecked);
174cdf0e10cSrcweir 		virtual bool onFileTypeChanged( UINT nTypeIndex );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir     private:
177cdf0e10cSrcweir 
178cdf0e10cSrcweir         //---------------------------------------------------------------------
179cdf0e10cSrcweir         /// implementation of request E_ADD_FILEPICKER_LISTENER
180cdf0e10cSrcweir         void impl_sta_addFilePickerListener(const RequestRef& rRequest);
181cdf0e10cSrcweir 
182cdf0e10cSrcweir         //---------------------------------------------------------------------
183cdf0e10cSrcweir         /// implementation of request E_REMOVE_FILEPICKER_LISTENER
184cdf0e10cSrcweir         void impl_sta_removeFilePickerListener(const RequestRef& rRequest);
185cdf0e10cSrcweir 
186cdf0e10cSrcweir         //---------------------------------------------------------------------
187cdf0e10cSrcweir         /// implementation of request E_APPEND_FILTER
188cdf0e10cSrcweir         void impl_sta_appendFilter(const RequestRef& rRequest);
189cdf0e10cSrcweir 
190cdf0e10cSrcweir         //---------------------------------------------------------------------
191cdf0e10cSrcweir         /// implementation of request E_APPEND_FILTERGROUP
192cdf0e10cSrcweir         void impl_sta_appendFilterGroup(const RequestRef& rRequest);
193cdf0e10cSrcweir 
194cdf0e10cSrcweir 		//---------------------------------------------------------------------
195cdf0e10cSrcweir         /// implementation of request E_SET_CURRENT_FILTER
196cdf0e10cSrcweir         void impl_sta_setCurrentFilter(const RequestRef& rRequest);
197cdf0e10cSrcweir 
198cdf0e10cSrcweir         //---------------------------------------------------------------------
199cdf0e10cSrcweir         /// implementation of request E_GET_CURRENT_FILTER
200cdf0e10cSrcweir         void impl_sta_getCurrentFilter(const RequestRef& rRequest);
201cdf0e10cSrcweir 
202cdf0e10cSrcweir         //---------------------------------------------------------------------
203cdf0e10cSrcweir         /// implementation of request E_CREATE_OPEN_DIALOG
204cdf0e10cSrcweir         void impl_sta_CreateOpenDialog(const RequestRef& rRequest);
205cdf0e10cSrcweir 
206cdf0e10cSrcweir         //---------------------------------------------------------------------
207cdf0e10cSrcweir         /// implementation of request E_CREATE_SAVE_DIALOG
208cdf0e10cSrcweir         void impl_sta_CreateSaveDialog(const RequestRef& rRequest);
209cdf0e10cSrcweir 
210cdf0e10cSrcweir         //---------------------------------------------------------------------
211cdf0e10cSrcweir         /// implementation of request E_SET_MULTISELECTION_MODE
212cdf0e10cSrcweir         void impl_sta_SetMultiSelectionMode(const RequestRef& rRequest);
213cdf0e10cSrcweir 
214cdf0e10cSrcweir         //---------------------------------------------------------------------
215cdf0e10cSrcweir         /// implementation of request E_SET_TITLE
216cdf0e10cSrcweir         void impl_sta_SetTitle(const RequestRef& rRequest);
217cdf0e10cSrcweir 
218cdf0e10cSrcweir         //---------------------------------------------------------------------
219cdf0e10cSrcweir         /// implementation of request E_SET_FILENAME
220cdf0e10cSrcweir         void impl_sta_SetFileName(const RequestRef& rRequest);
221cdf0e10cSrcweir 
222cdf0e10cSrcweir         //---------------------------------------------------------------------
223cdf0e10cSrcweir         /// implementation of request E_SET_DIRECTORY
224cdf0e10cSrcweir         void impl_sta_SetDirectory(const RequestRef& rRequest);
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 		//---------------------------------------------------------------------
227cdf0e10cSrcweir         /// implementation of request E_GET_DIRECTORY
228cdf0e10cSrcweir         void impl_sta_GetDirectory(const RequestRef& rRequest);
229cdf0e10cSrcweir 
230cdf0e10cSrcweir 		//---------------------------------------------------------------------
231cdf0e10cSrcweir         /// implementation of request E_SET_DEFAULT_NAME
232cdf0e10cSrcweir         void impl_sta_SetDefaultName(const RequestRef& rRequest);
233cdf0e10cSrcweir 
234cdf0e10cSrcweir         //---------------------------------------------------------------------
235cdf0e10cSrcweir         /// implementation of request E_GET_SELECTED_FILES
236cdf0e10cSrcweir         void impl_sta_getSelectedFiles(const RequestRef& rRequest);
237cdf0e10cSrcweir 
238cdf0e10cSrcweir         //---------------------------------------------------------------------
239cdf0e10cSrcweir         /// implementation of request E_SHOW_DIALOG_MODAL
240cdf0e10cSrcweir         void impl_sta_ShowDialogModal(const RequestRef& rRequest);
241cdf0e10cSrcweir 
242cdf0e10cSrcweir         //---------------------------------------------------------------------
243cdf0e10cSrcweir         /// implementation of request E_SET_CONTROL_VALUE
244cdf0e10cSrcweir         void impl_sta_SetControlValue(const RequestRef& rRequest);
245cdf0e10cSrcweir 
246cdf0e10cSrcweir         //---------------------------------------------------------------------
247cdf0e10cSrcweir         /// implementation of request E_GET_CONTROL_VALUE
248cdf0e10cSrcweir         void impl_sta_GetControlValue(const RequestRef& rRequest);
249cdf0e10cSrcweir 
250cdf0e10cSrcweir         //---------------------------------------------------------------------
251cdf0e10cSrcweir         /// implementation of request E_SET_CONTROL_LABEL
252cdf0e10cSrcweir         void impl_sta_SetControlLabel(const RequestRef& rRequest);
253cdf0e10cSrcweir 
254cdf0e10cSrcweir         //---------------------------------------------------------------------
255cdf0e10cSrcweir         /// implementation of request E_GET_CONTROL_LABEL
256cdf0e10cSrcweir         void impl_sta_GetControlLabel(const RequestRef& rRequest);
257cdf0e10cSrcweir 
258cdf0e10cSrcweir         //---------------------------------------------------------------------
259cdf0e10cSrcweir         /// implementation of request E_ENABLE_CONTROL
260cdf0e10cSrcweir         void impl_sta_EnableControl(const RequestRef& rRequest);
261cdf0e10cSrcweir 
262cdf0e10cSrcweir         //---------------------------------------------------------------------
26307a3d7f1SPedro Giffuni         /** create all needed (optional!) UI controls addressed by the field nFeatures.
264cdf0e10cSrcweir          *  The given number nFeatures is used as a flag field. Use const values FEATURE_XXX
26507a3d7f1SPedro Giffuni          *  to address it.
266cdf0e10cSrcweir          *
267cdf0e10cSrcweir          *  Internal new controls will be added to the dialog. Every control can be accessed
268cdf0e10cSrcweir          *  by it's own control id. Those control ID must be one of the const set
269cdf0e10cSrcweir          *  css::ui::dialogs::ExtendedFilePickerElementIds.
270cdf0e10cSrcweir          *
271cdf0e10cSrcweir          *  @see setControlValue()
272cdf0e10cSrcweir          *  @see getControlValue()
273cdf0e10cSrcweir          *  @see setControlLabel()
274cdf0e10cSrcweir          *  @see getControlLabel()
275cdf0e10cSrcweir          *  @see enableControl()
276cdf0e10cSrcweir          *
277cdf0e10cSrcweir          *  @param  nFeatures
278cdf0e10cSrcweir          *          flag field(!) knows all features wich must be enabled.
279cdf0e10cSrcweir          */
280cdf0e10cSrcweir 		void impl_sta_enableFeatures(::sal_Int32 nFeatures, ::sal_Int32 nTemplate);
281cdf0e10cSrcweir 
282cdf0e10cSrcweir         //---------------------------------------------------------------------
283*a49f1911Smseidel         /** returns an interface, which can be used to customize the internally used
284cdf0e10cSrcweir          *  COM dialog.
285cdf0e10cSrcweir          *
286*a49f1911Smseidel          *  Because we use two members (open/save dialog) internally, this method
287*a49f1911Smseidel          *  asks the current active one for its customization interface.
288cdf0e10cSrcweir          *
289cdf0e10cSrcweir          *  @return the customization interface for the current used dialog.
290cdf0e10cSrcweir          *          Must not be null.
291cdf0e10cSrcweir          */
292cdf0e10cSrcweir         TFileDialogCustomize impl_getCustomizeInterface();
293cdf0e10cSrcweir         TFileDialog impl_getBaseDialogInterface();
294cdf0e10cSrcweir 
295cdf0e10cSrcweir         //---------------------------------------------------------------------
296cdf0e10cSrcweir         /// fill filter list of internal used dialog.
297cdf0e10cSrcweir         void impl_sta_setFiltersOnDialog();
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 		void impl_SetDefaultExtension( const rtl::OUString& currentFilter );
300cdf0e10cSrcweir 
301cdf0e10cSrcweir    private:
302cdf0e10cSrcweir 
303cdf0e10cSrcweir         //---------------------------------------------------------------------
304cdf0e10cSrcweir         /// COM object representing a file open dialog
305cdf0e10cSrcweir         TFileOpenDialog m_iDialogOpen;
306cdf0e10cSrcweir 
307cdf0e10cSrcweir         //---------------------------------------------------------------------
308cdf0e10cSrcweir         /// COM object representing a file save dialog
309cdf0e10cSrcweir         TFileSaveDialog m_iDialogSave;
310cdf0e10cSrcweir 
311cdf0e10cSrcweir         //---------------------------------------------------------------------
312cdf0e10cSrcweir         /// knows the return state of the last COM call
313cdf0e10cSrcweir         HRESULT m_hLastResult;
314cdf0e10cSrcweir 
315cdf0e10cSrcweir         //---------------------------------------------------------------------
316cdf0e10cSrcweir         /// @todo document me
317cdf0e10cSrcweir         CFilterContainer m_lFilters;
318cdf0e10cSrcweir 
319cdf0e10cSrcweir         //---------------------------------------------------------------------
320cdf0e10cSrcweir         /** cache last selected list of files
321*a49f1911Smseidel          *  Because those lists must be retrieved directly after closing the dialog
322*a49f1911Smseidel          *  (and only in case it was finished successfully) we cache it internally.
323cdf0e10cSrcweir          *  Because the outside provided UNO API decouple showing the dialog
324cdf0e10cSrcweir          *  and asking for results .-)
325cdf0e10cSrcweir          */
326cdf0e10cSrcweir         css::uno::Sequence< ::rtl::OUString > m_lLastFiles;
327cdf0e10cSrcweir 
328cdf0e10cSrcweir         //---------------------------------------------------------------------
329cdf0e10cSrcweir         /** help us to handle dialog events and provide them to interested office
330cdf0e10cSrcweir          *  listener.
331cdf0e10cSrcweir          */
332cdf0e10cSrcweir         TFileDialogEvents m_iEventHandler;
333cdf0e10cSrcweir 
334cdf0e10cSrcweir         //---------------------------------------------------------------------
335cdf0e10cSrcweir         /// @todo document me
336cdf0e10cSrcweir         ::sal_Bool m_bInExecute;
337cdf0e10cSrcweir 
338cdf0e10cSrcweir         ::sal_Bool m_bWasExecuted;
339cdf0e10cSrcweir 
340cdf0e10cSrcweir 		// handle to parent window
341cdf0e10cSrcweir 		HWND m_hParentWindow;
342cdf0e10cSrcweir 
343cdf0e10cSrcweir 		//
344cdf0e10cSrcweir 		::rtl::OUString m_sDirectory;
345cdf0e10cSrcweir 
346cdf0e10cSrcweir 		//
347cdf0e10cSrcweir 		::rtl::OUString m_sFilename;
348cdf0e10cSrcweir 
349cdf0e10cSrcweir         // Resource provider
350cdf0e10cSrcweir         CResourceProvider m_ResProvider;
351cdf0e10cSrcweir };
352cdf0e10cSrcweir 
353cdf0e10cSrcweir } // namespace vista
354cdf0e10cSrcweir } // namespace win32
355cdf0e10cSrcweir } // namespace fpicker
356cdf0e10cSrcweir 
357cdf0e10cSrcweir #undef css
358cdf0e10cSrcweir 
359cdf0e10cSrcweir #endif // FPICKER_WIN32_VISTA_FILEPICKERIMPL_HXX
360