Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : *
9 : : * This file incorporates work covered by the following license notice:
10 : : *
11 : : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : : * contributor license agreements. See the NOTICE file distributed
13 : : * with this work for additional information regarding copyright
14 : : * ownership. The ASF licenses this file to you under the Apache
15 : : * License, Version 2.0 (the "License"); you may not use this file
16 : : * except in compliance with the License. You may obtain a copy of
17 : : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : : */
19 : : #ifndef _FILEDLGHELPER_HXX
20 : : #define _FILEDLGHELPER_HXX
21 : :
22 : : #include "sal/config.h"
23 : : #include "sfx2/dllapi.h"
24 : : #include "sal/types.h"
25 : : #include <com/sun/star/uno/Reference.hxx>
26 : : #include <com/sun/star/uno/Sequence.hxx>
27 : : #include <rtl/ustring.hxx>
28 : : #include <tools/solar.h>
29 : : #include <tools/string.hxx>
30 : : #include <tools/errcode.hxx>
31 : : #include <vcl/dialog.hxx>
32 : : #include <vcl/edit.hxx>
33 : : #include <vcl/button.hxx>
34 : : #include <vcl/graph.hxx>
35 : : #include <sfx2/sfxdefs.hxx>
36 : : #include <sfx2/sfxuno.hxx>
37 : : #include <sfx2/docfilt.hxx>
38 : :
39 : : //-----------------------------------------------------------------------------
40 : :
41 : : namespace com
42 : : {
43 : : namespace sun
44 : : {
45 : : namespace star
46 : : {
47 : : namespace ui
48 : : {
49 : : namespace dialogs
50 : : {
51 : : class XFilePicker;
52 : : class XFilePickerListener;
53 : : struct FilePickerEvent;
54 : : struct DialogClosedEvent;
55 : : }
56 : : }
57 : : }
58 : : }
59 : : }
60 : :
61 : : class SfxItemSet;
62 : : class Window;
63 : :
64 : : // the SFXWB constants are for the nFlags parameter of the constructor
65 : : #define SFXWB_INSERT 0x04000000L // turn Open into Insert dialog
66 : : #define SFXWB_EXPORT 0x40000000L // turn Save into Export dialog
67 : : #define SFXWB_MULTISELECTION 0x20000000L
68 : : #define SFXWB_GRAPHIC 0x00800000L // register graphic formats
69 : :
70 : : #define FILEDIALOG_FILTER_ALL "*.*"
71 : :
72 : : #define FILE_OPEN_SERVICE_NAME "com.sun.star.ui.dialogs.FilePicker"
73 : : #define FOLDER_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.FolderPicker"
74 : : #define FILE_OPEN_SERVICE_NAME_OOO "com.sun.star.ui.dialogs.OfficeFilePicker"
75 : :
76 : : namespace sfx2 {
77 : :
78 : : class FileDialogHelper_Impl;
79 : :
80 : : class SFX2_DLLPUBLIC FileDialogHelper
81 : : {
82 : : public:
83 : : enum Context // context where the FileDialogHelper is used
84 : : {
85 : : UNKNOWN_CONTEXT, // unknown context
86 : : SW_INSERT_GRAPHIC, // insert graphic in writer
87 : : SW_INSERT_SOUND, // insert sound in writer
88 : : SW_INSERT_VIDEO, // insert video in writer
89 : : SC_INSERT_GRAPHIC, // insert graphic in calc
90 : : SC_INSERT_SOUND, // insert sound in calc
91 : : SC_INSERT_VIDEO, // insert video in calc
92 : : SD_INSERT_GRAPHIC, // insert graphic in draw
93 : : SD_INSERT_SOUND, // insert sound in draw
94 : : SD_INSERT_VIDEO, // insert video in draw
95 : : SD_EXPORT, // export in draw
96 : : SI_EXPORT, // export in impress
97 : : SW_EXPORT // export in writer
98 : : };
99 : :
100 : : private:
101 : : Link m_aDialogClosedLink;
102 : : ErrCode m_nError;
103 : :
104 : : ::com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XFilePickerListener > mxImp;
105 : : FileDialogHelper_Impl *mpImp;
106 : :
107 : :
108 : : public:
109 : : FileDialogHelper( sal_Int16 nDialogType,
110 : : sal_Int64 nFlags,
111 : : Window* _pPreferredParent = NULL );
112 : :
113 : : FileDialogHelper( sal_Int16 nDialogType,
114 : : sal_Int64 nFlags,
115 : : const String& rFactory,
116 : : SfxFilterFlags nMust = 0,
117 : : SfxFilterFlags nDont = 0 );
118 : :
119 : : FileDialogHelper( sal_Int16 nDialogType,
120 : : sal_Int64 nFlags,
121 : : const String& rFactory,
122 : : sal_Int16 nDialog,
123 : : SfxFilterFlags nMust,
124 : : SfxFilterFlags nDont,
125 : : const String& rStandardDir,
126 : : const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList);
127 : :
128 : : FileDialogHelper( sal_Int16 nDialogType,
129 : : sal_Int64 nFlags,
130 : : const ::rtl::OUString& aFilterUIName,
131 : : const ::rtl::OUString& aExtName,
132 : : const ::rtl::OUString& rStandardDir,
133 : : const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList,
134 : : Window* _pPreferredParent = NULL );
135 : :
136 : :
137 : : virtual ~FileDialogHelper();
138 : :
139 : : ErrCode Execute();
140 : : void StartExecuteModal( const Link& rEndDialogHdl );
141 : 0 : inline ErrCode GetError() const { return m_nError; }
142 : : sal_Int16 GetDialogType() const;
143 : : sal_Bool IsPasswordEnabled() const;
144 : : String GetRealFilter() const;
145 : :
146 : : void SetTitle( const String& rNewTitle );
147 : : String GetPath() const;
148 : :
149 : : /** @deprected: Don't use this method to retrieve the selected files
150 : : There are file picker which can provide multiple selected file which belong
151 : : to different folders. As this method always provides the root folder for all selected
152 : : files this cannot work.
153 : : */
154 : : ::com::sun::star::uno::Sequence< ::rtl::OUString > GetMPath() const;
155 : :
156 : : /** Provides the selected files with full path information */
157 : : ::com::sun::star::uno::Sequence< ::rtl::OUString > GetSelectedFiles() const;
158 : :
159 : : void AddFilter( const String& rFilterName, const String& rExtension );
160 : : void SetCurrentFilter( const String& rFilter );
161 : :
162 : : /** sets an initial display directory/file name
163 : :
164 : : @deprecated
165 : : don't use this method. It contains a lot of magic in determining whether the
166 : : last segment of the given path/URL denotes a file name or a folder, and by
167 : : definition, it cannot succeed with this magic *all* the time - there will
168 : : always be scenarios where it fails.
169 : :
170 : : Use SetDisplayFolder and SetFileName.
171 : : */
172 : : void SetDisplayDirectory( const String& rPath );
173 : :
174 : : /** sets a new folder whose content is to be displayed in the file picker
175 : :
176 : : @param _rURL
177 : : specifies the URL of the folder whose content is to be displayed.<br/>
178 : : If the URL doesn't denote a valid (existent and accessible) folder, the
179 : : request is silently dropped.
180 : : @throws ::com::sun::star::uno::RuntimeException
181 : : if the invocation of any of the file picker or UCB methods throws a RuntimeException.
182 : : */
183 : : void SetDisplayFolder( const String& _rURL );
184 : :
185 : : /** sets an initial file name to display
186 : :
187 : : This method is usually used in "save-as" contexts, where the application should
188 : : suggest an initial name for the file to save.
189 : :
190 : : Calling this method is nearly equivalent to calling <code>GetFilePicker().setDefaultName( _rFileName )</code>,
191 : : with the following differences:
192 : : <ul><li>The FileDialogHelper remembers the given file name, and upon execution,
193 : : strips its extension if the dialog is set up for "automatic file name extension".</li>
194 : : <li>Exceptions thrown from the <code>XFilePicker</code> are caught and silenced.</li>
195 : : </ul>
196 : : */
197 : : void SetFileName( const String& _rFileName );
198 : :
199 : : String GetCurrentFilter() const;
200 : : String GetDisplayDirectory() const;
201 : : ErrCode GetGraphic( Graphic& rGraphic ) const;
202 : :
203 : : ::com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XFilePicker > GetFilePicker() const;
204 : :
205 : : // XFilePickerListener methods
206 : : virtual void SAL_CALL FileSelectionChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
207 : : virtual void SAL_CALL DirectoryChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
208 : : virtual void SAL_CALL ControlStateChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
209 : : virtual void SAL_CALL DialogSizeChanged();
210 : : virtual ::rtl::OUString SAL_CALL HelpRequested( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent );
211 : :
212 : : // XDialogClosedListener methods
213 : : virtual void SAL_CALL DialogClosed( const ::com::sun::star::ui::dialogs::DialogClosedEvent& _rEvent );
214 : :
215 : : /** sets help ids for the controls in the dialog
216 : : @param _pControlId
217 : : Pointer to a 0-terminated array of control ids. They must be recruited from the
218 : : CommonFilePickerElementIds and ExtendedFilePickerElementIds values.
219 : : @param _pHelpId
220 : : Pointer to an array of help ids. For each element in _pControlId, there must be
221 : : a corresponding element herein.
222 : : */
223 : : void SetControlHelpIds( const sal_Int16* _pControlId, const char** _pHelpId );
224 : : void CreateMatcher( const String& rName );
225 : :
226 : : /** sets the context of the dialog and trigger necessary actions e.g. loading config, setting help id
227 : : @param _eNewContext
228 : : New context for the dialog.
229 : : */
230 : : void SetContext( Context _eNewContext );
231 : :
232 : : DECL_LINK( ExecuteSystemFilePicker, void* );
233 : :
234 : : ErrCode Execute( std::vector<rtl::OUString>& rpURLList,
235 : : SfxItemSet *& rpSet,
236 : : String& rFilter,
237 : : const String& rDirPath );
238 : : ErrCode Execute( SfxItemSet *& rpSet,
239 : : String& rFilter );
240 : : };
241 : :
242 : : #define SFX2_IMPL_DIALOG_CONFIG 0
243 : : #define SFX2_IMPL_DIALOG_SYSTEM 1
244 : : #define SFX2_IMPL_DIALOG_OOO 2
245 : :
246 : : ErrCode FileOpenDialog_Impl( sal_Int16 nDialogType,
247 : : sal_Int64 nFlags,
248 : : const String& rFact,
249 : : std::vector<rtl::OUString>& rpURLList,
250 : : String& rFilter,
251 : : SfxItemSet *& rpSet,
252 : : const String* pPath = NULL,
253 : : sal_Int16 nDialog = SFX2_IMPL_DIALOG_CONFIG,
254 : : const String& rStandardDir = rtl::OUString(),
255 : : const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList = ::com::sun::star::uno::Sequence< ::rtl::OUString >());
256 : :
257 : :
258 : : ErrCode RequestPassword(const SfxFilter* pCurrentFilter, rtl::OUString& aURL, SfxItemSet* pSet);
259 : : }
260 : :
261 : : #endif
262 : :
263 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|