示例#1
0
 /// <summary>
 /// Adds several rules to the filter
 /// </summary>
 /// <param name="Rules">List of patterns to match.</param>
 /// <param name="Type">Whether the rules are include or exclude rules</param>
 public void AddRules(IEnumerable <string> Rules, FileFilterType Type)
 {
     foreach (string Rule in Rules)
     {
         AddRule(Rule, Type);
     }
 }
示例#2
0
        /// <summary>
        /// Default constructor
        /// </summary>
        public FileFilter(FileFilterType DefaultType = FileFilterType.Exclude)
        {
            RootNode = new FileFilterNode(null, "");

            DefaultNode      = new FileFilterNode(RootNode, "...");
            DefaultNode.Type = DefaultType;
        }
示例#3
0
        private void Init(FileFilterType filterType)
        {
            Gtk.FileFilter libs = new Gtk.FileFilter ();
            Gtk.FileFilter all = new Gtk.FileFilter ();

            switch (filterType) {
            case FileFilterType.DFiles:
                libs.AddPattern ("*.d");
                libs.AddPattern ("*.di");
                libs.Name = "D Files";
                break;
            case FileFilterType.LibraryFiles:
                libs.AddPattern ("*.a");
                libs.AddPattern ("*.lib");
                libs.AddPattern ("*.so");
                libs.AddPattern ("*.dylib");
                libs.Name = "Libraries";
                break;
            }

            all.AddPattern ("*.*");
            all.Name = "All Files";

            file_chooser_widget.AddFilter (libs);
            file_chooser_widget.AddFilter (all);

            if (Environment.OSVersion.Platform == PlatformID.Unix)
                file_chooser_widget.SetCurrentFolder ("/usr/share/d/di");
        }
示例#4
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public FileFilterNode(FileFilterNode InParent, string InPattern)
 {
     Parent     = InParent;
     Pattern    = InPattern;
     RuleNumber = -1;
     Type       = FileFilterType.Exclude;
 }
示例#5
0
        private void Init(FileFilterType filterType)
        {
            Gtk.FileFilter libs = new Gtk.FileFilter();
            Gtk.FileFilter all  = new Gtk.FileFilter();

            switch (filterType)
            {
            case FileFilterType.DFiles:
                libs.AddPattern("*.d");
                libs.AddPattern("*.di");
                libs.Name = "D Files";
                break;

            case FileFilterType.LibraryFiles:
                libs.AddPattern("*.a");
                libs.AddPattern("*.lib");
                libs.AddPattern("*.so");
                libs.AddPattern("*.dylib");
                libs.Name = "Libraries";
                break;
            }

            all.AddPattern("*.*");
            all.Name = "All Files";

            file_chooser_widget.AddFilter(libs);
            file_chooser_widget.AddFilter(all);

            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                file_chooser_widget.SetCurrentFolder("/usr/share/d/di");
            }
        }
		/// <summary>
		/// Default constructor
		/// </summary>
		public FileFilter(FileFilterType DefaultType = FileFilterType.Exclude)
		{
			RootNode = new FileFilterNode(null, "");

			DefaultNode = new FileFilterNode(RootNode, "...");
			DefaultNode.Type = DefaultType;
		}
示例#7
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Builds a filter specification for a single file type for SaveFileDialog or
        /// OpenFileDialog.
        /// </summary>
        /// <param name="type">The type of files to include in the filter. Do not use any of the
        /// enumeration values starting with "All" for a filter intended to be used in a
        /// SaveFileDialog.</param>
        /// <returns>A string suitable for setting the Filter property of a SaveFileDialog or
        /// OpenFileDialog</returns>
        /// ------------------------------------------------------------------------------------
        public static string FileFilter(FileFilterType type)
        {
            string filter = String.Format("{0} ({1})|{1}",
                                          GetResourceString("kstid" + type.ToString()),
                                          s_fileFilterExtensions[type]);

            return(FileUtils.FileDialogFilterCaseInsensitiveCombinations(filter));
        }
示例#8
0
 public AddLibraryDialog(FileFilterType filterType)
 {
     this.Build();
     Init(filterType);
 }
示例#9
0
 public FileFilter(string name, FileFilterType type)
 {
     Name = name;
     Type = type;
 }
示例#10
0
		/// <summary>
		/// Adds several rules to the filter
		/// </summary>
		/// <param name="Rules">List of patterns to match.</param>
		/// <param name="Type">Whether the rules are include or exclude rules</param>
		public void AddRules(IEnumerable<string> Rules, FileFilterType Type)
		{
			foreach(string Rule in Rules)
			{
				AddRule(Rule, Type);
			}
		}
示例#11
0
 static void UnzipAndAddRuleForHeaders(string ZipFileName, FileFilter Filter, FileFilterType Type)
 {
     IEnumerable<string> FileNames = CommandUtils.UnzipFiles(ZipFileName, CommandUtils.CmdEnv.LocalRoot);
     Filter.AddRuleForFiles(FileNames, CommandUtils.CmdEnv.LocalRoot, FileFilterType.Include);
 }
示例#12
0
 /// <summary>
 /// Adds a rule which matches a filename relative to a given base directory.
 /// </summary>
 /// <param name="FileName">The filename to add a rule for</param>
 /// <param name="BaseDirectoryName">Base directory for the rule</param>
 /// <param name="Type">Whether to add an include or exclude rule</param>
 public void AddRuleForFile(FileReference File, DirectoryReference BaseDirectory, FileFilterType Type)
 {
     AddRuleForFiles(new FileReference[] { File }, BaseDirectory, Type);
 }
示例#13
0
		/// <summary>
		/// Default constructor.
		/// </summary>
		public FileFilterNode(FileFilterNode InParent, string InPattern)
		{
			Parent = InParent;
			Pattern = InPattern;
			RuleNumber = -1;
			Type = FileFilterType.Exclude;
		}
示例#14
0
		/// <summary>
		/// Adds an include or exclude rule to the filter
		/// </summary>
		/// <param name="Pattern">The pattern which the rule should match</param>
		/// <param name="bInclude">Whether to include or exclude files matching this rule</param>
		public void AddRule(string Pattern, FileFilterType Type)
		{
			string NormalizedPattern = Pattern.Replace('\\', '/');

			// Remove the slash from the start of the pattern. Any exclude pattern that doesn't contain a directory separator is assumed to apply to any directory (eg. *.cpp), otherwise it's 
			// taken relative to the root.
			if (NormalizedPattern.StartsWith("/"))
			{
				NormalizedPattern = NormalizedPattern.Substring(1);
			}
			else if(!NormalizedPattern.Contains("/") && !NormalizedPattern.StartsWith("..."))
			{
				NormalizedPattern = ".../" + NormalizedPattern;
			}

			// All directories indicate a wildcard match
			if (NormalizedPattern.EndsWith("/"))
			{
				NormalizedPattern += "...";
			}

			// Replace any directory wildcards mid-string
			for (int Idx = NormalizedPattern.IndexOf("..."); Idx != -1; Idx = NormalizedPattern.IndexOf("...", Idx))
			{
				if (Idx > 0 && NormalizedPattern[Idx - 1] != '/')
				{
					NormalizedPattern = NormalizedPattern.Insert(Idx, "*/");
					Idx++;
				}

				Idx += 3;

				if (Idx < NormalizedPattern.Length && NormalizedPattern[Idx] != '/')
				{
					NormalizedPattern = NormalizedPattern.Insert(Idx, "/*");
					Idx += 2;
				}
			}

			// Split the pattern into fragments
			string[] BranchPatterns = NormalizedPattern.Split('/');

			// Add it into the tree
			FileFilterNode LastNode = RootNode;
			foreach (string BranchPattern in BranchPatterns)
			{
				FileFilterNode NextNode = LastNode.Branches.FirstOrDefault(x => x.Pattern == BranchPattern);
				if (NextNode == null)
				{
					NextNode = new FileFilterNode(LastNode, BranchPattern);
					LastNode.Branches.Add(NextNode);
				}
				LastNode = NextNode;
			}

			// We've reached the end of the pattern, so mark it as a leaf node
			Rules.Add(LastNode);
			LastNode.RuleNumber = Rules.Count - 1;
			LastNode.Type = Type;

			// Update the maximums along that path
			for (FileFilterNode UpdateNode = LastNode; UpdateNode != null; UpdateNode = UpdateNode.Parent)
			{
				if (Type == FileFilterType.Include)
				{
					UpdateNode.MaxIncludeRuleNumber = LastNode.RuleNumber;
				}
				else
				{
					UpdateNode.MaxExcludeRuleNumber = LastNode.RuleNumber;
				}
			}
		}
示例#15
0
		/// <summary>
		/// Adds rules for files which match the given names
		/// </summary>
		/// <param name="FileName">The filenames to rules for</param>
		/// <param name="BaseDirectoryName">Base directory for the rules</param>
		/// <param name="Type">Whether to add an include or exclude rule</param>
		public void AddRuleForFiles(IEnumerable<FileReference> Files, DirectoryReference BaseDirectory, FileFilterType Type)
		{
			foreach (FileReference File in Files)
			{
				AddRule("/" + File.MakeRelativeTo(BaseDirectory), Type);
			}
		}
示例#16
0
		/// <summary>
		/// Adds rules for files which match the given names
		/// </summary>
		/// <param name="FileName">The filenames to rules for</param>
		/// <param name="BaseDirectoryName">Base directory for the rules</param>
		/// <param name="Type">Whether to add an include or exclude rule</param>
		public void AddRuleForFiles(IEnumerable<string> FileNames, string BaseDirectoryName, FileFilterType Type)
		{
			string FullBaseDirectoryName = Path.GetFullPath(BaseDirectoryName);
			foreach (string FileName in FileNames)
			{
				AddRule("/" + CommandUtils.StripBaseDirectory(Path.GetFullPath(FileName), FullBaseDirectoryName), Type);
			}
		}
示例#17
0
		/// <summary>
		/// Adds a rule which matches a filename relative to a given base directory.
		/// </summary>
		/// <param name="FileName">The filename to add a rule for</param>
		/// <param name="BaseDirectoryName">Base directory for the rule</param>
		/// <param name="Type">Whether to add an include or exclude rule</param>
		public void AddRuleForFile(string FileName, string BaseDirectoryName, FileFilterType Type)
		{
			AddRuleForFiles(new string[]{ FileName }, BaseDirectoryName, Type);
		}
示例#18
0
		/// ------------------------------------------------------------------------------------
		/// <summary>
		/// Builds a filter specification for a single file type for SaveFileDialog or
		/// OpenFileDialog.
		/// </summary>
		/// <param name="type">The type of files to include in the filter. Do not use any of the
		/// enumeration values starting with "All" for a filter intended to be used in a
		/// SaveFileDialog.</param>
		/// <returns>A string suitable for setting the Filter property of a SaveFileDialog or
		/// OpenFileDialog</returns>
		/// ------------------------------------------------------------------------------------
		public static string FileFilter(FileFilterType type)
		{
			return String.Format("{0} ({1})|{1}",
				GetResourceString("kstid" + type.ToString()),
				m_fileFilterExtensions[type]);
		}
示例#19
0
		/// ------------------------------------------------------------------------------------
		/// <summary>
		/// Builds a filter specification for a single file type for SaveFileDialog or
		/// OpenFileDialog.
		/// </summary>
		/// <param name="type">The type of files to include in the filter. Do not use any of the
		/// enumeration values starting with "All" for a filter intended to be used in a
		/// SaveFileDialog.</param>
		/// <returns>A string suitable for setting the Filter property of a SaveFileDialog or
		/// OpenFileDialog</returns>
		/// ------------------------------------------------------------------------------------
		public static string FileFilter(FileFilterType type)
		{
			string filter = String.Format("{0} ({1})|{1}",
				GetResourceString("kstid" + type.ToString()),
				s_fileFilterExtensions[type]);

			return FileUtils.FileDialogFilterCaseInsensitiveCombinations(filter);
		}
示例#20
0
 /// <summary>
 /// Adds rules for files which match the given names
 /// </summary>
 /// <param name="FileName">The filenames to rules for</param>
 /// <param name="BaseDirectoryName">Base directory for the rules</param>
 /// <param name="Type">Whether to add an include or exclude rule</param>
 public void AddRuleForFiles(IEnumerable <FileReference> Files, DirectoryReference BaseDirectory, FileFilterType Type)
 {
     foreach (FileReference File in Files)
     {
         AddRule("/" + File.MakeRelativeTo(BaseDirectory), Type);
     }
 }
示例#21
0
 /// <summary>
 /// Adds a rule which matches a filename relative to a given base directory.
 /// </summary>
 /// <param name="File">The filename to add a rule for</param>
 /// <param name="BaseDirectory">Base directory for the rule</param>
 /// <param name="Type">Whether to add an include or exclude rule</param>
 public void AddRuleForFile(FileReference File, DirectoryReference BaseDirectory, FileFilterType Type)
 {
     AddRule("/" + File.MakeRelativeTo(BaseDirectory), Type);
 }
示例#22
0
 static void AddRuleForBuildProducts(FileFilter Filter, GUBP bp, string NodeName, FileFilterType Type)
 {
     GUBP.GUBPNode Node = bp.FindNode(NodeName);
     if(Node == null)
     {
         throw new AutomationException("Couldn't find node '{0}'", NodeName);
     }
     Filter.AddRuleForFiles(Node.BuildProducts, CommandUtils.CmdEnv.LocalRoot, Type);
 }
示例#23
0
        /// <summary>
        /// Adds an include or exclude rule to the filter
        /// </summary>
        /// <param name="Pattern">The pattern which the rule should match</param>
        /// <param name="Type">Whether to include or exclude files matching this rule</param>
        public void AddRule(string Pattern, FileFilterType Type)
        {
            string NormalizedPattern = Pattern.Replace('\\', '/');

            // Remove the slash from the start of the pattern. Any exclude pattern that doesn't contain a directory separator is assumed to apply to any directory (eg. *.cpp), otherwise it's
            // taken relative to the root.
            if (NormalizedPattern.StartsWith("/"))
            {
                NormalizedPattern = NormalizedPattern.Substring(1);
            }
            else if (!NormalizedPattern.Contains("/") && !NormalizedPattern.StartsWith("..."))
            {
                NormalizedPattern = ".../" + NormalizedPattern;
            }

            // All directories indicate a wildcard match
            if (NormalizedPattern.EndsWith("/"))
            {
                NormalizedPattern += "...";
            }

            // Replace any directory wildcards mid-string
            for (int Idx = NormalizedPattern.IndexOf("..."); Idx != -1; Idx = NormalizedPattern.IndexOf("...", Idx))
            {
                if (Idx > 0 && NormalizedPattern[Idx - 1] != '/')
                {
                    NormalizedPattern = NormalizedPattern.Insert(Idx, "*/");
                    Idx++;
                }

                Idx += 3;

                if (Idx < NormalizedPattern.Length && NormalizedPattern[Idx] != '/')
                {
                    NormalizedPattern = NormalizedPattern.Insert(Idx, "/*");
                    Idx += 2;
                }
            }

            // Split the pattern into fragments
            string[] BranchPatterns = NormalizedPattern.Split('/');

            // Add it into the tree
            FileFilterNode LastNode = RootNode;

            foreach (string BranchPattern in BranchPatterns)
            {
                FileFilterNode NextNode = LastNode.Branches.FirstOrDefault(x => x.Pattern == BranchPattern);
                if (NextNode == null)
                {
                    NextNode = new FileFilterNode(LastNode, BranchPattern);
                    LastNode.Branches.Add(NextNode);
                }
                LastNode = NextNode;
            }

            // We've reached the end of the pattern, so mark it as a leaf node
            Rules.Add(LastNode);
            LastNode.RuleNumber = Rules.Count - 1;
            LastNode.Type       = Type;

            // Update the maximums along that path
            for (FileFilterNode UpdateNode = LastNode; UpdateNode != null; UpdateNode = UpdateNode.Parent)
            {
                if (Type == FileFilterType.Include)
                {
                    UpdateNode.MaxIncludeRuleNumber = LastNode.RuleNumber;
                }
                else
                {
                    UpdateNode.MaxExcludeRuleNumber = LastNode.RuleNumber;
                }
            }
        }
 /// <summary>
 /// Adds a rule which matches a filename relative to a given base directory.
 /// </summary>
 /// <param name="FileName">The filename to add a rule for</param>
 /// <param name="BaseDirectoryName">Base directory for the rule</param>
 /// <param name="Type">Whether to add an include or exclude rule</param>
 public void AddRuleForFile(string FileName, string BaseDirectoryName, FileFilterType Type)
 {
     AddRuleForFiles(new string[] { FileName }, BaseDirectoryName, Type);
 }
		private string GetFile(string currentFile, string pathForInitialDirectory,
			FileFilterType[] types, bool checkFileExists, string title, Func<string, bool> isValidFile)
		{
			using (var openFileDialog = new OpenFileDialogAdapter())
			{
				openFileDialog.Filter = ResourceHelper.BuildFileFilter(types);
				openFileDialog.CheckFileExists = checkFileExists;
				openFileDialog.Multiselect = false;

				bool done = false;
				while (!done)
				{
					// LT-6620 : putting in an invalid path was causing an exception in the openFileDialog.ShowDialog()
					// Now we make sure parts are valid before setting the values in the openfile dialog.
					string dir = string.Empty;
					try
					{
						dir = Path.GetDirectoryName(pathForInitialDirectory);
					}
					catch
					{
					}
					if (Directory.Exists(dir))
						openFileDialog.InitialDirectory = dir;
					if (File.Exists(currentFile))
						openFileDialog.FileName = currentFile;
					else
						openFileDialog.FileName = "";

					openFileDialog.Title = title;
					if (openFileDialog.ShowDialog() == DialogResult.OK)
					{
						if (!(isValidFile(openFileDialog.FileName)))
						{
							string msg = String.Format(ITextStrings.ksInvalidFileAreYouSure,
								openFileDialog.FileName);
							DialogResult dr = MessageBox.Show(this, msg,
								ITextStrings.ksPossibleInvalidFile,
								MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
							if (dr == DialogResult.Yes)
								return openFileDialog.FileName;
							else if (dr == DialogResult.No)
									continue;
								else
									break;	// exit with current still
						}
						return openFileDialog.FileName;
					}
					else
						done = true;
				}
				return currentFile;
			}
		}
示例#26
0
 /// <summary>
 /// Adds rules for files which match the given names
 /// </summary>
 /// <param name="Files">The filenames to rules for</param>
 /// <param name="BaseDirectory">Base directory for the rules</param>
 /// <param name="Type">Whether to add an include or exclude rule</param>
 public void AddRuleForFiles(IEnumerable <FileReference> Files, DirectoryReference BaseDirectory, FileFilterType Type)
 {
     foreach (FileReference File in Files)
     {
         AddRuleForFile(File, BaseDirectory, Type);
     }
 }
        /// <summary>
        /// Adds rules for files which match the given names
        /// </summary>
        /// <param name="FileName">The filenames to rules for</param>
        /// <param name="BaseDirectoryName">Base directory for the rules</param>
        /// <param name="Type">Whether to add an include or exclude rule</param>
        public void AddRuleForFiles(IEnumerable <string> FileNames, string BaseDirectoryName, FileFilterType Type)
        {
            string FullBaseDirectoryName = Path.GetFullPath(BaseDirectoryName);

            foreach (string FileName in FileNames)
            {
                AddRule("/" + CommandUtils.StripBaseDirectory(Path.GetFullPath(FileName), FullBaseDirectoryName), Type);
            }
        }
示例#28
0
 public AddLibraryDialog(FileFilterType filterType)
 {
     this.Build ();
     Init (filterType);
 }
示例#29
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Builds a filter specification for a single file type for SaveFileDialog or
 /// OpenFileDialog.
 /// </summary>
 /// <param name="type">The type of files to include in the filter. Do not use any of the
 /// enumeration values starting with "All" for a filter intended to be used in a
 /// SaveFileDialog.</param>
 /// <returns>A string suitable for setting the Filter property of a SaveFileDialog or
 /// OpenFileDialog</returns>
 /// ------------------------------------------------------------------------------------
 public static string FileFilter(FileFilterType type)
 {
     return(String.Format("{0} ({1})|{1}",
                          GetResourceString("kstid" + type.ToString()),
                          m_fileFilterExtensions[type]));
 }