xref: /aoo41x/main/sfx2/source/dialog/filedlgimpl.hxx (revision 353d8f4d)
1*353d8f4dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*353d8f4dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*353d8f4dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*353d8f4dSAndrew Rist  * distributed with this work for additional information
6*353d8f4dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*353d8f4dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*353d8f4dSAndrew Rist  * "License"); you may not use this file except in compliance
9*353d8f4dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*353d8f4dSAndrew Rist  *
11*353d8f4dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*353d8f4dSAndrew Rist  *
13*353d8f4dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*353d8f4dSAndrew Rist  * software distributed under the License is distributed on an
15*353d8f4dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*353d8f4dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*353d8f4dSAndrew Rist  * specific language governing permissions and limitations
18*353d8f4dSAndrew Rist  * under the License.
19*353d8f4dSAndrew Rist  *
20*353d8f4dSAndrew Rist  *************************************************************/
21*353d8f4dSAndrew Rist 
22*353d8f4dSAndrew Rist 
23cdf0e10cSrcweir #ifndef _SFX_FILEDLGIMPL_HXX
24cdf0e10cSrcweir #define _SFX_FILEDLGIMPL_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <vcl/timer.hxx>
27cdf0e10cSrcweir #include <vcl/graph.hxx>
28cdf0e10cSrcweir #include <cppuhelper/implbase2.hxx>
29cdf0e10cSrcweir #include <com/sun/star/beans/StringPair.hpp>
30cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
31cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
32cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilePickerListener.hpp>
33cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XDialogClosedListener.hpp>
34cdf0e10cSrcweir #include <sfx2/fcontnr.hxx>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR
37cdf0e10cSrcweir #include <svl/svstdarr.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx>
40cdf0e10cSrcweir #include <comphelper/sequenceasvector.hxx>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir class SfxFilterMatcher;
43cdf0e10cSrcweir class GraphicFilter;
44cdf0e10cSrcweir class FileDialogHelper;
45cdf0e10cSrcweir 
46cdf0e10cSrcweir namespace sfx2
47cdf0e10cSrcweir {
48cdf0e10cSrcweir     typedef ::com::sun::star::beans::StringPair FilterPair;
49cdf0e10cSrcweir 
50cdf0e10cSrcweir     class FileDialogHelper_Impl :
51cdf0e10cSrcweir         public ::cppu::WeakImplHelper2<
52cdf0e10cSrcweir             ::com::sun::star::ui::dialogs::XFilePickerListener,
53cdf0e10cSrcweir             ::com::sun::star::ui::dialogs::XDialogClosedListener >
54cdf0e10cSrcweir 	{
55cdf0e10cSrcweir 		friend class FileDialogHelper;
56cdf0e10cSrcweir 
57cdf0e10cSrcweir 		::com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XFilePicker >	mxFileDlg;
58cdf0e10cSrcweir 		::com::sun::star::uno::Reference < ::com::sun::star::container::XNameAccess >	mxFilterCFG;
59cdf0e10cSrcweir 
60cdf0e10cSrcweir 		std::vector< FilterPair >	maFilters;
61cdf0e10cSrcweir 
62cdf0e10cSrcweir 		SfxFilterMatcher*			mpMatcher;
63cdf0e10cSrcweir 		GraphicFilter*				mpGraphicFilter;
64cdf0e10cSrcweir 		FileDialogHelper*			mpAntiImpl;
65cdf0e10cSrcweir 		Window*						mpPreferredParentWindow;
66cdf0e10cSrcweir 
67cdf0e10cSrcweir         ::comphelper::SequenceAsVector< ::rtl::OUString > mlLastURLs;
68cdf0e10cSrcweir 
69cdf0e10cSrcweir 		::rtl::OUString				maPath;
70cdf0e10cSrcweir 		::rtl::OUString				maFileName;
71cdf0e10cSrcweir 		::rtl::OUString				maCurFilter;
72cdf0e10cSrcweir 		::rtl::OUString				maSelectFilter;
73cdf0e10cSrcweir 		::rtl::OUString				maButtonLabel;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 		Timer						maPreViewTimer;
76cdf0e10cSrcweir 		Graphic 					maGraphic;
77cdf0e10cSrcweir 
78cdf0e10cSrcweir 		const short 				m_nDialogType;
79cdf0e10cSrcweir 
80cdf0e10cSrcweir 		SfxFilterFlags				m_nMustFlags;
81cdf0e10cSrcweir 		SfxFilterFlags				m_nDontFlags;
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 		sal_uIntPtr						mnPostUserEventId;
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 		ErrCode 					mnError;
86cdf0e10cSrcweir 
87cdf0e10cSrcweir 		FileDialogHelper::Context	meContext;
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 		sal_Bool					mbHasPassword			: 1;
90cdf0e10cSrcweir 		sal_Bool					mbIsPwdEnabled			: 1;
91cdf0e10cSrcweir 		sal_Bool					m_bHaveFilterOptions	: 1;
92cdf0e10cSrcweir 		sal_Bool					mbHasVersions			: 1;
93cdf0e10cSrcweir 		sal_Bool					mbHasAutoExt			: 1;
94cdf0e10cSrcweir 		sal_Bool					mbHasLink				: 1;
95cdf0e10cSrcweir 		sal_Bool					mbHasPreview			: 1;
96cdf0e10cSrcweir 		sal_Bool					mbShowPreview			: 1;
97cdf0e10cSrcweir 		sal_Bool					mbIsSaveDlg 			: 1;
98cdf0e10cSrcweir 		sal_Bool					mbExport	 			: 1;
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 		sal_Bool					mbDeleteMatcher 		: 1;
101cdf0e10cSrcweir 		sal_Bool					mbInsert				: 1;
102cdf0e10cSrcweir 		sal_Bool					mbSystemPicker			: 1;
103cdf0e10cSrcweir 		sal_Bool					mbPwdCheckBoxState		: 1;
104cdf0e10cSrcweir 		sal_Bool					mbSelection				: 1;
105cdf0e10cSrcweir 		sal_Bool					mbSelectionEnabled   	: 1;
106cdf0e10cSrcweir 		sal_Bool                    mbHasSelectionBox       : 1;
107cdf0e10cSrcweir 		sal_Bool                    mbSelectionFltrEnabled  : 1;
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 	private:
110cdf0e10cSrcweir 		void					addFilters( sal_Int64 nFlags,
111cdf0e10cSrcweir 											const String& rFactory,
112cdf0e10cSrcweir 											SfxFilterFlags nMust,
113cdf0e10cSrcweir 											SfxFilterFlags nDont );
114cdf0e10cSrcweir 		void					addFilter( const ::rtl::OUString& rFilterName,
115cdf0e10cSrcweir 										   const ::rtl::OUString& rExtension );
116cdf0e10cSrcweir 		void					addGraphicFilter();
117cdf0e10cSrcweir 		void					enablePasswordBox( sal_Bool bInit );
118cdf0e10cSrcweir 		void					updateFilterOptionsBox();
119cdf0e10cSrcweir 		void					updateExportButton();
120cdf0e10cSrcweir 		void					updateSelectionBox();
121cdf0e10cSrcweir 		void					updateVersions();
122cdf0e10cSrcweir 		void					updatePreviewState( sal_Bool _bUpdatePreviewWindow = sal_True );
123cdf0e10cSrcweir 		void					dispose();
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 		void					loadConfig();
126cdf0e10cSrcweir 		void					saveConfig();
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 		const SfxFilter*		getCurentSfxFilter();
129cdf0e10cSrcweir 		sal_Bool				updateExtendedControl( sal_Int16 _nExtendedControlId, sal_Bool _bEnable );
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 		ErrCode 				getGraphic( const ::rtl::OUString& rURL, Graphic& rGraphic ) const;
132cdf0e10cSrcweir 		void					setDefaultValues();
133cdf0e10cSrcweir 
134cdf0e10cSrcweir 		void					preExecute();
135cdf0e10cSrcweir 		void					postExecute( sal_Int16 _nResult );
136cdf0e10cSrcweir         sal_Int16               implDoExecute();
137cdf0e10cSrcweir         void                    implStartExecute();
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 		void					correctVirtualDialogType();
140cdf0e10cSrcweir 
141cdf0e10cSrcweir 		void					setControlHelpIds( const sal_Int16* _pControlId, const char** _pHelpId );
142cdf0e10cSrcweir 
143cdf0e10cSrcweir 		sal_Bool 				CheckFilterOptionsCapability( const SfxFilter* _pFilter );
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 		sal_Bool				isInOpenMode() const;
146cdf0e10cSrcweir 		String					getCurrentFilterUIName() const;
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 		void					LoadLastUsedFilter( const ::rtl::OUString& _rContextIdentifier );
149cdf0e10cSrcweir 		void					SaveLastUsedFilter( const ::rtl::OUString& _rContextIdentifier );
150cdf0e10cSrcweir 		void					SaveLastUsedFilter( void );
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 		void					implInitializeFileName( );
153cdf0e10cSrcweir 
154cdf0e10cSrcweir         void                    implGetAndCacheFiles( const ::com::sun::star::uno::Reference< XInterface >& xPicker  ,
155cdf0e10cSrcweir                                                             SvStringsDtor*&               rpURLList,
156cdf0e10cSrcweir                                                       const SfxFilter*                    pFilter  );
157cdf0e10cSrcweir         String                  implEnsureURLExtension(const String& sURL      ,
158cdf0e10cSrcweir                                                        const String& sExtension);
159cdf0e10cSrcweir 
160cdf0e10cSrcweir 		DECL_LINK( TimeOutHdl_Impl, Timer* );
161cdf0e10cSrcweir 		DECL_LINK( HandleEvent, FileDialogHelper* );
162cdf0e10cSrcweir         DECL_LINK( InitControls, void* );
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 	public:
165cdf0e10cSrcweir 		// XFilePickerListener methods
166cdf0e10cSrcweir 		virtual void SAL_CALL				fileSelectionChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
167cdf0e10cSrcweir 		virtual void SAL_CALL				directoryChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
168cdf0e10cSrcweir 		virtual ::rtl::OUString SAL_CALL	helpRequested( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
169cdf0e10cSrcweir 		virtual void SAL_CALL				controlStateChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
170cdf0e10cSrcweir 		virtual void SAL_CALL				dialogSizeChanged() throw( ::com::sun::star::uno::RuntimeException );
171cdf0e10cSrcweir 
172cdf0e10cSrcweir         // XDialogClosedListener methods
173cdf0e10cSrcweir         virtual void SAL_CALL               dialogClosed( const ::com::sun::star::ui::dialogs::DialogClosedEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
174cdf0e10cSrcweir 
175cdf0e10cSrcweir         // XEventListener methods
176cdf0e10cSrcweir 		virtual void SAL_CALL		disposing( const ::com::sun::star::lang::EventObject& Source ) throw( ::com::sun::star::uno::RuntimeException );
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 		// handle XFilePickerListener events
179cdf0e10cSrcweir 		void					handleFileSelectionChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
180cdf0e10cSrcweir 		void					handleDirectoryChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
181cdf0e10cSrcweir 		::rtl::OUString			handleHelpRequested( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
182cdf0e10cSrcweir 		void					handleControlStateChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
183cdf0e10cSrcweir 		void					handleDialogSizeChanged();
184cdf0e10cSrcweir 
185cdf0e10cSrcweir         // Own methods
186cdf0e10cSrcweir 								FileDialogHelper_Impl(
187cdf0e10cSrcweir 									FileDialogHelper* _pAntiImpl,
188cdf0e10cSrcweir 									const short nDialogType,
189cdf0e10cSrcweir 									sal_Int64 nFlags,
190cdf0e10cSrcweir 									sal_Int16 nDialog = SFX2_IMPL_DIALOG_CONFIG,
191cdf0e10cSrcweir 									Window* _pPreferredParentWindow = NULL,
192cdf0e10cSrcweir 									const String& sStandardDir = String::CreateFromAscii( "" ),
193cdf0e10cSrcweir 									const ::com::sun::star::uno::Sequence< ::rtl::OUString >&	rBlackList = ::com::sun::star::uno::Sequence< ::rtl::OUString >()
194cdf0e10cSrcweir 								);
195cdf0e10cSrcweir 		virtual					~FileDialogHelper_Impl();
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 		ErrCode 				execute( SvStringsDtor*& rpURLList,
198cdf0e10cSrcweir 										 SfxItemSet *&	 rpSet,
199cdf0e10cSrcweir 										 String&		 rFilter );
200cdf0e10cSrcweir 		ErrCode 				execute();
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 		void					setFilter( const ::rtl::OUString& rFilter );
203cdf0e10cSrcweir 
204cdf0e10cSrcweir 		/** sets the directory which should be browsed
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 			<p>If the given path does not point to a valid (existent and accessible) folder, the request
207cdf0e10cSrcweir 			is silently dropped</p>
208cdf0e10cSrcweir 		*/
209cdf0e10cSrcweir 		void					displayFolder( const ::rtl::OUString& rPath );
210cdf0e10cSrcweir 		void					setFileName( const ::rtl::OUString& _rFile );
211cdf0e10cSrcweir 
212cdf0e10cSrcweir 		::rtl::OUString			getPath() const;
213cdf0e10cSrcweir 		::rtl::OUString			getFilter() const;
214cdf0e10cSrcweir 		void					getRealFilter( String& _rFilter ) const;
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 		ErrCode 				getGraphic( Graphic& rGraphic ) const;
217cdf0e10cSrcweir 		void 					createMatcher( const String& rFactory );
218cdf0e10cSrcweir 
219cdf0e10cSrcweir 		sal_Bool				isShowFilterExtensionEnabled() const;
220cdf0e10cSrcweir 		void					addFilterPair( const ::rtl::OUString& rFilter,
221cdf0e10cSrcweir 											   const ::rtl::OUString& rFilterWithExtension );
222cdf0e10cSrcweir 		::rtl::OUString			getFilterName( const ::rtl::OUString& rFilterWithExtension ) const;
223cdf0e10cSrcweir 		::rtl::OUString			getFilterWithExtension( const ::rtl::OUString& rFilter ) const;
224cdf0e10cSrcweir 
225cdf0e10cSrcweir 		void					SetContext( FileDialogHelper::Context _eNewContext );
226cdf0e10cSrcweir 
isSystemFilePicker() const227cdf0e10cSrcweir         inline sal_Bool         isSystemFilePicker() const { return mbSystemPicker; }
isPasswordEnabled() const228cdf0e10cSrcweir         inline sal_Bool         isPasswordEnabled() const { return mbIsPwdEnabled; }
229cdf0e10cSrcweir 	};
230cdf0e10cSrcweir 
231cdf0e10cSrcweir }	// end of namespace sfx2
232cdf0e10cSrcweir 
233cdf0e10cSrcweir #endif // _SFX_FILEDLGIMPL_HXX
234cdf0e10cSrcweir 
235