36
37
/// This interface can be implemented to provide a custom implementation
37
38
/// for the SelectFileDialog dialog.
39
public interface ISelectFileDialogHandler
41
bool Run (SelectFileDialogData data);
40
public interface ISelectFileDialogHandler : IDialogHandler<SelectFileDialogData>
67
67
this.Patterns = patterns;
70
public SelectFileDialogFilter (string name, IList<string> patterns, IList<string> mimetypes)
73
this.Patterns = patterns;
74
this.MimeTypes = mimetypes;
70
77
/// <summary>Label for the filter</summary>
71
78
public string Name { get; private set; }
76
83
/// <summary>MIME types permitted by this filter</summary>
77
84
public IList<string> MimeTypes { get; private set; }
86
public static SelectFileDialogFilter AllFiles {
88
return new SelectFileDialogFilter (GettextCatalog.GetString ("All Files"), "*");
82
95
/// The T type argument is the type of the handler.
83
96
/// The U type is the type of the data parameter (must subclass SelectFileDialogData)
85
public class SelectFileDialog<T,U>: PlatformDialog<T,U> where U:SelectFileDialogData, new()
98
public abstract class SelectFileDialog<T>: PlatformDialog<T> where T:SelectFileDialogData, new()
88
101
/// Action to perform with the file dialog.
155
168
public SelectFileDialogFilter AddFilter (SelectFileDialogFilter filter)
170
if (useDefaultFilters)
171
throw new InvalidOperationException ("Cannot mix default filters and custom filters");
157
172
data.Filters.Add (filter);
161
176
public SelectFileDialogFilter AddAllFilesFilter ()
163
return AddFilter (GettextCatalog.GetString ("All Files"), "*");
178
return AddFilter (SelectFileDialogFilter.AllFiles);
181
public bool HasFilters {
183
return data.Filters != null && data.Filters.Count > 0;
188
/// Adds the default file filters registered by MD core and addins. Includes the All Files filter.
190
public void AddDefaultFileFilters ()
193
throw new InvalidOperationException ("Cannot mix default filters and custom filters");
194
if (useDefaultFilters)
195
throw new InvalidOperationException ("Already called");
197
useDefaultFilters = true;
199
foreach (var f in GetDefaultFilters ())
200
data.Filters.Add (f);
201
data.Filters.Add (SelectFileDialogFilter.AllFiles);
203
LoadDefaultFilter ();
206
bool useDefaultFilters;
208
///<summary>Loads last default filter from MD prefs</summary>
209
void LoadDefaultFilter ()
211
// Load last used filter pattern
212
var lastPattern = PropertyService.Get ("Monodevelop.FileSelector.LastPattern", "*");
213
foreach (var filter in Filters) {
214
if (filter.Patterns != null && filter.Patterns.Contains (lastPattern)) {
215
DefaultFilter = filter;
221
///<summary>Saves last default filter to MD prefs, if necessary</summary>
222
protected void SaveDefaultFilter ()
224
if (!useDefaultFilters)
227
// Save active filter
228
//it may be null if e.g. SetSelectedFile was used
229
if (DefaultFilter != null && DefaultFilter.Patterns != null && DefaultFilter.Patterns.Count > 0)
230
PropertyService.Set ("Monodevelop.FileSelector.LastPattern", DefaultFilter.Patterns[0]);
233
static IEnumerable<SelectFileDialogFilter> GetDefaultFilters ()
235
foreach (var f in ParseFilters (AddinManager.GetExtensionObjects ("/MonoDevelop/Ide/ProjectFileFilters")))
237
foreach (var f in ParseFilters (AddinManager.GetExtensionObjects ("/MonoDevelop/Ide/FileFilters")))
241
static IEnumerable<SelectFileDialogFilter> ParseFilters (System.Collections.IEnumerable filterStrings)
243
if (filterStrings == null)
245
foreach (string filterStr in filterStrings) {
246
var parts = filterStr.Split ('|');
247
var f = new SelectFileDialogFilter (parts[0], parts[1].Split (';'));
166
252
void SetGtkFileFilters (FileSelector fdiag)
195
281
[GLib.ConnectBefore]
196
282
void CaptureDefaultFilter (object sender, EventArgs e)
284
FileSelector fsel = (FileSelector) sender;
285
if (fsel.Filter == null)
287
var name = fsel.Filter.Name;
288
foreach (var filter in data.Filters) {
289
if (filter.Name == name) {
290
data.DefaultFilter = filter;
241
/// Runs the default implementation of the dialog.
243
protected bool RunDefault ()
245
var fdiag = new FileSelector ();
335
public override bool Run ()
338
AddDefaultFileFilters ();
340
bool success = base.Run ();
342
if (success && useDefaultFilters)
343
SaveDefaultFilter ();
348
/// <summary>Runs the default implementation of the dialog.</summary>
349
protected override bool RunDefault ()
351
var fdiag = new FileSelector ();
246
352
SetDefaultProperties (fdiag);
248
354
int result = MessageService.RunCustomDialog (fdiag, data.TransientFor ?? MessageService.RootWindow);