/// <summary>
		/// Shows the OpenWith dialog for the specified file.
		/// </summary>
		static void OpenWith(string fileName)
		{
			var codons = DisplayBindingService.GetCodonsPerFileName(fileName);
			int defaultCodonIndex = codons.IndexOf(DisplayBindingService.GetDefaultCodonPerFileName(fileName));
			using (OpenWithDialog dlg = new OpenWithDialog(codons, defaultCodonIndex, Path.GetExtension(fileName))) {
				if (dlg.ShowDialog(WorkbenchSingleton.MainForm) == DialogResult.OK) {
					FileUtility.ObservedLoad(new FileService.LoadFileWrapper(dlg.SelectedBinding.Binding, true).Invoke, fileName);
				}
			}
		}
		/// <summary>
		/// Shows the OpenWith dialog for the specified files.
		/// </summary>
		public static void OpenFilesWith(string[] fileNames)
		{
			if (fileNames.Length == 0)
				return;
			
			List<DisplayBindingDescriptor> codons = DisplayBindingService.GetCodonsPerFileName(fileNames[0]).ToList();
			for (int i = 1; i < fileNames.Length; i++) {
				var codonsForThisFile = DisplayBindingService.GetCodonsPerFileName(fileNames[1]);
				codons.RemoveAll(c => !codonsForThisFile.Contains(c));
			}
			if (codons.Count == 0)
				return;
			
			int defaultCodonIndex = codons.IndexOf(DisplayBindingService.GetDefaultCodonPerFileName(fileNames[0]));
			if (defaultCodonIndex < 0)
				defaultCodonIndex = 0;
			using (OpenWithDialog dlg = new OpenWithDialog(codons, defaultCodonIndex, Path.GetExtension(fileNames[0]))) {
				if (dlg.ShowDialog(WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
					foreach (string fileName in fileNames) {
						FileUtility.ObservedLoad(new FileService.LoadFileWrapper(dlg.SelectedBinding.Binding, true).Invoke, fileName);
					}
				}
			}
		}