// // // // // $Revision$ // using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.SharpDevelop.Gui { public partial class EditAvailableConfigurationsDialog { Solution solution; IProject project; bool editPlatforms; private EditAvailableConfigurationsDialog() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); foreach (Control ctl in this.Controls) { ctl.Text = StringParser.Parse(ctl.Text); } } public EditAvailableConfigurationsDialog(Solution solution, bool editPlatforms) : this() { this.solution = solution; this.editPlatforms = editPlatforms; InitList(); if (editPlatforms) this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditSolutionPlatforms}"); else this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditSolutionConfigurations}"); } public EditAvailableConfigurationsDialog(IProject project, bool editPlatforms) : this() { this.project = project; this.solution = project.ParentSolution; this.editPlatforms = editPlatforms; InitList(); if (editPlatforms) this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditProjectPlatforms}"); else this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditProjectConfigurations}"); } void InitList() { if (project != null) { if (editPlatforms) { ShowEntries(project.PlatformNames, project.ActivePlatform); } else { ShowEntries(project.ConfigurationNames, project.ActiveConfiguration); } } else { if (editPlatforms) { ShowEntries(solution.GetPlatformNames(), solution.Preferences.ActivePlatform); } else { ShowEntries(solution.GetConfigurationNames(), solution.Preferences.ActiveConfiguration); } } } void ShowEntries(IEnumerable list, string activeItem) { string[] array = list.ToArray(); listBox.Items.Clear(); listBox.Items.AddRange(array); if (listBox.Items.Count == 0) { throw new Exception("There must be at least one configuration/platform"); } listBox.SelectedIndex = Math.Max(Array.IndexOf(array, activeItem), 0); } void RemoveButtonClick(object sender, EventArgs e) { if (listBox.Items.Count == 1) { MessageService.ShowMessage("${res:Dialog.EditAvailableConfigurationsDialog.CannotDeleteAllConfigurationsOrPlatforms}"); return; } string name = listBox.SelectedItem.ToString(); if (MessageService.AskQuestionFormatted("${res:Dialog.EditAvailableConfigurationsDialog.ConfirmRemoveConfigurationOrPlatform}", new string[] { name })) { if (project != null) { Remove(project, name, editPlatforms); } else { Remove(solution, name, editPlatforms); } InitList(); } } static void Remove(IProject project, string name, bool isPlatform) { if (isPlatform) { project.ParentSolution.RemoveProjectPlatform(project, name); } else { project.ParentSolution.RemoveProjectConfiguration(project, name); } } static void Remove(Solution solution, string name, bool isPlatform) { if (isPlatform) { solution.RemoveSolutionPlatform(name); } else { solution.RemoveSolutionConfiguration(name); } } void RenameButtonClick(object sender, EventArgs e) { string oldName = listBox.SelectedItem.ToString(); string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:Dialog.EditAvailableConfigurationsDialog.EnterNewName}", oldName); if (string.IsNullOrEmpty(newName) || newName == oldName) return; if (!EnsureCorrectName(ref newName)) return; if (project != null) { Rename(project, oldName, newName); } else { if (editPlatforms) { solution.RenameSolutionPlatform(oldName, newName); if (solution.Preferences.ActivePlatform == oldName) { solution.Preferences.ActivePlatform = newName; } } else { solution.RenameSolutionConfiguration(oldName, newName); if (solution.Preferences.ActiveConfiguration == oldName) { solution.Preferences.ActiveConfiguration = newName; } } // Solution platform name => project platform name foreach (IProject p in solution.Projects) { Rename(p, oldName, newName); } } InitList(); } void Rename(IProject project, string oldName, string newName) { if (editPlatforms) { if (project.PlatformNames.Contains(newName)) return; solution.RenameProjectPlatform(project, oldName, newName); } else { if (project.ConfigurationNames.Contains(newName)) return; solution.RenameProjectConfiguration(project, oldName, newName); } } bool EnsureCorrectName(ref string newName) { newName = newName.Trim(); if (editPlatforms && string.Equals(newName, "AnyCPU", StringComparison.OrdinalIgnoreCase)) newName = "Any CPU"; foreach (string item in listBox.Items) { if (string.Equals(item, newName, StringComparison.OrdinalIgnoreCase)) { MessageService.ShowMessage("${res:Dialog.EditAvailableConfigurationsDialog.DuplicateName}"); return false; } } if (MSBuildInternals.Escape(newName) != newName || !FileUtility.IsValidDirectoryEntryName(newName) || newName.Contains("'")) { MessageService.ShowMessage("${res:Dialog.EditAvailableConfigurationsDialog.InvalidName}"); return false; } return true; } void AddButtonClick(object sender, EventArgs e) { IEnumerable availableSourceItems; if (project != null) { if (editPlatforms) { availableSourceItems = project.PlatformNames; } else { availableSourceItems = project.ConfigurationNames; } } else { if (editPlatforms) { availableSourceItems = solution.GetPlatformNames(); } else { availableSourceItems = solution.GetConfigurationNames(); } } using (AddNewConfigurationDialog dlg = new AddNewConfigurationDialog (project == null, editPlatforms, availableSourceItems, delegate (string name) { return EnsureCorrectName(ref name); } )) { if (dlg.ShowDialog(this) == DialogResult.OK) { string newName = dlg.NewName; // fix up the new name if (!EnsureCorrectName(ref newName)) return; if (project != null) { IProjectAllowChangeConfigurations pacc = project as IProjectAllowChangeConfigurations; if (pacc != null) { if (editPlatforms) { pacc.AddProjectPlatform(newName, dlg.CopyFrom); } else { pacc.AddProjectConfiguration(newName, dlg.CopyFrom); } } } else { if (editPlatforms) { solution.AddSolutionPlatform(newName, dlg.CopyFrom, dlg.CreateInAllProjects); } else { solution.AddSolutionConfiguration(newName, dlg.CopyFrom, dlg.CreateInAllProjects); } } InitList(); } } } } }