Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@xamarin.com>2011-10-21 12:48:12 +0400
committerLluis Sanchez <lluis@xamarin.com>2011-10-21 12:48:12 +0400
commitfb81fb9072261d2d912453c61f5703c50cbfb30f (patch)
treee663750c7f0427ebea6f3418a8149b9481c5acf0 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components
parent45ac5f0eb9a8f3d84a851f450a0a94748e0880f5 (diff)
[Ide] Added support for file filters in FileEntry and FolderEntry
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components/BaseFileEntry.cs5
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileEntry.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileFilterSet.cs138
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FolderEntry.cs2
4 files changed, 145 insertions, 2 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/BaseFileEntry.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/BaseFileEntry.cs
index a6f47047f7..2c25e7ac35 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/BaseFileEntry.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/BaseFileEntry.cs
@@ -41,6 +41,7 @@ namespace MonoDevelop.Components {
Entry text;
Button browse;
bool loading;
+ protected FileFilterSet filterSet = new FileFilterSet ();
public event EventHandler PathChanged;
@@ -92,6 +93,10 @@ namespace MonoDevelop.Components {
}
}
+ public FileFilterSet FileFilters {
+ get { return filterSet; }
+ }
+
void OnButtonClicked (object o, EventArgs args)
{
string start_in;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileEntry.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileEntry.cs
index e342cd034f..f46d1f19eb 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileEntry.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileEntry.cs
@@ -50,8 +50,8 @@ namespace MonoDevelop.Components {
if (start_in != null)
fd.InitialFileName = start_in;
+ fd.SetFilters (filterSet);
fd.TransientFor = GetTransientFor ();
-
if (fd.Run ())
return fd.SelectedFile;
else
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileFilterSet.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileFilterSet.cs
new file mode 100644
index 0000000000..f15d3346b7
--- /dev/null
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FileFilterSet.cs
@@ -0,0 +1,138 @@
+//
+// FileFilterSet.cs
+//
+// Author:
+// Lluis Sanchez <lluis@xamarin.com>
+//
+// Copyright (c) 2011 Xamarin Inc
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Collections.Generic;
+using MonoDevelop.Components.Extensions;
+using Mono.Addins;
+using MonoDevelop.Core;
+
+namespace MonoDevelop.Components
+{
+ public class FileFilterSet
+ {
+ List<SelectFileDialogFilter> filters = new List<SelectFileDialogFilter> ();
+
+ internal FileFilterSet ()
+ {
+ }
+
+ public SelectFileDialogFilter DefaultFilter { get; set; }
+
+ internal IList<SelectFileDialogFilter> Filters {
+ get { return filters; }
+ }
+
+ public SelectFileDialogFilter AddFilter (string label, params string[] patterns)
+ {
+ return AddFilter (new SelectFileDialogFilter (label, patterns));
+ }
+
+ public SelectFileDialogFilter AddFilter (SelectFileDialogFilter filter)
+ {
+ if (useDefaultFilters)
+ throw new InvalidOperationException ("Cannot mix default filters and custom filters");
+ filters.Add (filter);
+ return filter;
+ }
+
+ public SelectFileDialogFilter AddAllFilesFilter ()
+ {
+ return AddFilter (SelectFileDialogFilter.AllFiles);
+ }
+
+ public bool HasFilters {
+ get {
+ return filters.Count > 0;
+ }
+ }
+
+ /// <summary>
+ /// Adds the default file filters registered by MD core and addins. Includes the All Files filter.
+ /// </summary>
+ public void AddDefaultFileFilters ()
+ {
+ if (HasFilters)
+ throw new InvalidOperationException ("Cannot mix default filters and custom filters");
+ if (useDefaultFilters)
+ throw new InvalidOperationException ("Already called");
+
+ useDefaultFilters = true;
+
+ foreach (var f in GetDefaultFilters ())
+ filters.Add (f);
+ filters.Add (SelectFileDialogFilter.AllFiles);
+
+ LoadDefaultFilter ();
+ }
+
+ static IEnumerable<SelectFileDialogFilter> GetDefaultFilters ()
+ {
+ foreach (var f in ParseFilters (AddinManager.GetExtensionObjects ("/MonoDevelop/Ide/ProjectFileFilters")))
+ yield return f;
+ foreach (var f in ParseFilters (AddinManager.GetExtensionObjects ("/MonoDevelop/Ide/FileFilters")))
+ yield return f;
+ }
+
+ static IEnumerable<SelectFileDialogFilter> ParseFilters (System.Collections.IEnumerable filterStrings)
+ {
+ if (filterStrings == null)
+ yield break;
+ foreach (string filterStr in filterStrings) {
+ var parts = filterStr.Split ('|');
+ var f = new SelectFileDialogFilter (parts[0], parts[1].Split (';'));
+ yield return f;
+ }
+ }
+
+ bool useDefaultFilters;
+
+ ///<summary>Loads last default filter from MD prefs</summary>
+ void LoadDefaultFilter ()
+ {
+ // Load last used filter pattern
+ var lastPattern = PropertyService.Get ("Monodevelop.FileSelector.LastPattern", "*");
+ foreach (var filter in Filters) {
+ if (filter.Patterns != null && filter.Patterns.Contains (lastPattern)) {
+ DefaultFilter = filter;
+ break;
+ }
+ }
+ }
+
+ ///<summary>Saves last default filter to MD prefs, if necessary</summary>
+ internal void SaveDefaultFilter ()
+ {
+ if (!useDefaultFilters)
+ return;
+
+ // Save active filter
+ //it may be null if e.g. SetSelectedFile was used
+ if (DefaultFilter != null && DefaultFilter.Patterns != null && DefaultFilter.Patterns.Count > 0)
+ PropertyService.Set ("Monodevelop.FileSelector.LastPattern", DefaultFilter.Patterns[0]);
+ }
+ }
+}
+
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FolderEntry.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FolderEntry.cs
index 63e5c2f34e..b01fb9380b 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FolderEntry.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/FolderEntry.cs
@@ -50,7 +50,7 @@ namespace MonoDevelop.Components {
SelectFolderDialog fd = new SelectFolderDialog (name);
if (start_in != null)
fd.InitialFileName = start_in;
-
+ fd.SetFilters (filterSet);
fd.TransientFor = GetTransientFor ();
if (fd.Run ())