From 2818a84d16d557457eee04264f54b5a24de8b582 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 21 Sep 2005 16:09:41 +0000 Subject: [PATCH] Fixed SD-371: Adding empty combine to a combine causes exception and worked on SD2-425. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@497 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../ProjectOptions/AbstractBuildOptions.cs | 11 ++- .../OptionPanels/ProjectOptions/Signing.cs | 5 +- .../CompilerMessageView.cs | 26 +++--- .../Commands/SolutionNodeCommands.cs | 4 + .../Project/Src/Project/AbstractProject.cs | 9 ++- .../Src/Project/ConfigurationGuiHelper.cs | 80 ++++++++++++++----- .../Pad/BookmarkPadToolbarCommands.cs | 6 +- 7 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs index 33c4f2dd08..30c88ad5ff 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs @@ -87,7 +87,8 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels if (bool.Parse(Get("false"))) { all.Checked = true; } else { - if (this.Helper.GetProperty("WarningsAsErrors", "").Length > 0) { + PropertyStorageLocation tmp; + if (this.Helper.GetProperty("WarningsAsErrors", "", out tmp).Length > 0) { specific.Checked = true; } else { none.Checked = true; @@ -109,9 +110,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels } } + ConfigurationGuiBinding debugInfoBinding; + protected void InitAdvanced() { - helper.BindEnum("debugInfoComboBox", "DebugType"); + debugInfoBinding = helper.BindEnum("debugInfoComboBox", "DebugType"); helper.BindBoolean("registerCOMInteropCheckBox", "RegisterForComInterop", false); helper.BindStringEnum("generateSerializationAssemblyComboBox", "GenerateSerializationAssemblies", "Auto", @@ -131,9 +134,9 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels { if (base.StorePanelContents()) { if ((DebugSymbolType)Get("debugInfo").SelectedIndex == DebugSymbolType.Full) { - helper.SetProperty("DebugSymbols", "true"); + helper.SetProperty("DebugSymbols", "true", debugInfoBinding.Location); } else { - helper.SetProperty("DebugSymbols", "false"); + helper.SetProperty("DebugSymbols", "false", debugInfoBinding.Location); } return true; } else { diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/Signing.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/Signing.cs index 78114bb1aa..6ea8396a85 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/Signing.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/Signing.cs @@ -18,6 +18,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels public class Signing : AbstractProjectOptionPanel { ComboBox keyFile; + ConfigurationGuiBinding signAssemblyBinding; const string KeyFileExtensions = "*.snk;*.pfx;*.key"; @@ -26,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels SetupFromXmlResource("ProjectOptions.Signing.xfrm"); InitializeHelper(); - helper.BindBoolean("signAssemblyCheckBox", "SignAssembly", false); + signAssemblyBinding = helper.BindBoolean("signAssemblyCheckBox", "SignAssembly", false); Get("signAssembly").CheckedChanged += new EventHandler(UpdateEnabledStates); @@ -103,7 +104,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels public override bool StorePanelContents() { if (IsDirty && Get("signAssembly").Checked) { - helper.SetProperty("AssemblyOriginatorKeyMode", "File"); + helper.SetProperty("AssemblyOriginatorKeyMode", "File", signAssemblyBinding.Location); } return base.StorePanelContents(); } diff --git a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs index 596c1b39a6..f0ac4fc654 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs @@ -126,7 +126,7 @@ namespace ICSharpCode.SharpDevelop.Gui SetWordWrap(); myPanel.ResumeLayout(false); - SetText(messageCategories[selectedCategory]); + SetText(messageCategories[selectedCategory], messageCategories[selectedCategory].Text); } void SetWordWrap() @@ -165,14 +165,15 @@ namespace ICSharpCode.SharpDevelop.Gui } void ClearText(MessageViewCategory category) { - textEditorControl.Text = ""; - textEditorControl.Refresh(); - SelectCategory(category.Category); + if (messageCategories[SelectedCategoryIndex] == category) { + textEditorControl.Text = ""; + textEditorControl.Refresh(); + } } void CategoryTextSet(object sender, TextEventArgs e) { - WorkbenchSingleton.SafeThreadAsyncCall(this, "SetText", (MessageViewCategory)sender); + WorkbenchSingleton.SafeThreadAsyncCall(this, "SetText", (MessageViewCategory)sender, e.Text); } void CategoryTextAppended(object sender, TextEventArgs e) @@ -183,7 +184,7 @@ namespace ICSharpCode.SharpDevelop.Gui void AppendText(MessageViewCategory category, string text) { if (messageCategories[SelectedCategoryIndex] != category) { - SetText(category); + SelectCategory(category.Category); return; } if (text != null) { @@ -196,20 +197,21 @@ namespace ICSharpCode.SharpDevelop.Gui } } - void SetText(MessageViewCategory category) + void SetText(MessageViewCategory category, string text) { - string text = StringParser.Parse(category.Text); + if (messageCategories[SelectedCategoryIndex] != category) { + SelectCategory(category.Category); + return; + } if (text == null) { text = String.Empty; + } else { + text = StringParser.Parse(text); } textEditorControl.Text = text; textEditorControl.Refresh(); -// textEditorControl.Select(text.Length , 0); -// textEditorControl.Select(); -// textEditorControl.ScrollToCaret(); } - public void SelectCategory(string categoryName) { for (int i = 0; i < messageCategories.Count; ++i) { diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs index f2d7f0bb76..af25fb9abe 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs @@ -31,6 +31,10 @@ namespace ICSharpCode.SharpDevelop.Project.Commands if (node != null) { using (NewProjectDialog npdlg = new NewProjectDialog(false)) { if (npdlg.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) { + if (npdlg.NewProjectLocation.Length == 0) { + MessageService.ShowError("No project has been created, there is nothing to add."); + return; + } AddExitingProjectToSolution.AddProject(solutionFolderNode, npdlg.NewProjectLocation); ProjectService.SaveSolution(); } diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 408efb1ad2..0b6927bd02 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -305,26 +305,31 @@ namespace ICSharpCode.SharpDevelop.Project public T GetProperty(string property, T defaultValue) { - return GetProperty(this.Configuration, this.Platform, property, defaultValue); + PropertyStorageLocation tmp; + return GetProperty(this.Configuration, this.Platform, property, defaultValue, out tmp); } - public T GetProperty(string configurationName, string platform, string property, T defaultValue) + public T GetProperty(string configurationName, string platform, string property, T defaultValue, out PropertyStorageLocation location) { string configurationKey = platform != null ? configurationName + "|" + platform : configurationName; PropertyGroup pg; if (userConfigurations.TryGetValue(configurationKey, out pg)) { if (pg.IsSet(property)) { + location = PropertyStorageLocation.UserSpecificConfiguration; return pg.Get(property, defaultValue); } } if (configurations.TryGetValue(configurationKey, out pg)) { if (pg.IsSet(property)) { + location = PropertyStorageLocation.SpecificConfiguration; return pg.Get(property, defaultValue); } } if (BaseConfiguration.IsSet(property)) { + location = PropertyStorageLocation.BaseConfiguration; return BaseConfiguration.Get(property, defaultValue); } + location = PropertyStorageLocation.Unchanged; return defaultValue; } diff --git a/src/Main/Base/Project/Src/Project/ConfigurationGuiHelper.cs b/src/Main/Base/Project/Src/Project/ConfigurationGuiHelper.cs index 66eab249a0..b1dad9c716 100644 --- a/src/Main/Base/Project/Src/Project/ConfigurationGuiHelper.cs +++ b/src/Main/Base/Project/Src/Project/ConfigurationGuiHelper.cs @@ -44,14 +44,40 @@ namespace ICSharpCode.SharpDevelop.Project } } + PropertyStorageLocation defaultLocation = PropertyStorageLocation.BaseConfiguration; + + public PropertyStorageLocation DefaultLocation { + get { + return defaultLocation; + } + set { + defaultLocation = value; + } + } + + PropertyStorageLocation location; + + public PropertyStorageLocation Location { + get { + return location; + } + set { + location = value; + } + } + public T Get(T defaultValue) { - return helper.GetProperty(property, defaultValue); + T result = helper.GetProperty(property, defaultValue, out location); + if (location == PropertyStorageLocation.Unchanged) { + location = defaultLocation; + } + return result; } public void Set(T value) { - helper.SetProperty(property, value); + helper.SetProperty(property, value, location); } public abstract void Load(); @@ -81,14 +107,14 @@ namespace ICSharpCode.SharpDevelop.Project } } - public T GetProperty(string property, T defaultValue) + public T GetProperty(string property, T defaultValue, out PropertyStorageLocation location) { - return project.GetProperty(configuration, platform, property, defaultValue); + return project.GetProperty(configuration, platform, property, defaultValue, out location); } - public void SetProperty(string property, T value) + public void SetProperty(string property, T value, PropertyStorageLocation location) { - project.SetProperty(configuration, platform, property, value, PropertyStorageLocation.Unchanged); + project.SetProperty(configuration, platform, property, value, location); } /// @@ -160,17 +186,19 @@ namespace ICSharpCode.SharpDevelop.Project } #region Bind bool to CheckBox - public void BindBoolean(string control, string property, bool defaultValue) + public ConfigurationGuiBinding BindBoolean(string control, string property, bool defaultValue) { - BindBoolean(controlDictionary[control], property, defaultValue); + return BindBoolean(controlDictionary[control], property, defaultValue); } - public void BindBoolean(Control control, string property, bool defaultValue) + public ConfigurationGuiBinding BindBoolean(Control control, string property, bool defaultValue) { CheckBox checkBox = control as CheckBox; if (checkBox != null) { - AddBinding(property, new CheckBoxBinding(checkBox, defaultValue)); + CheckBoxBinding binding = new CheckBoxBinding(checkBox, defaultValue); + AddBinding(property, binding); checkBox.CheckedChanged += ControlValueChanged; + return binding; } else { throw new ApplicationException("Cannot bind " + control.GetType().Name + " to bool property."); } @@ -207,19 +235,21 @@ namespace ICSharpCode.SharpDevelop.Project #endregion #region Bind string to TextBox or ComboBox - public void BindString(string control, string property) + public ConfigurationGuiBinding BindString(string control, string property) { - BindString(controlDictionary[control], property); + return BindString(controlDictionary[control], property); } - public void BindString(Control control, string property) + public ConfigurationGuiBinding BindString(Control control, string property) { if (control is TextBoxBase || control is ComboBox) { - AddBinding(property, new SimpleTextBinding(control)); + SimpleTextBinding binding = new SimpleTextBinding(control); + AddBinding(property, binding); control.TextChanged += ControlValueChanged; if (control is ComboBox) { control.KeyDown += ComboBoxKeyDown; } + return binding; } else { throw new ApplicationException("Cannot bind " + control.GetType().Name + " to string property."); } @@ -256,10 +286,12 @@ namespace ICSharpCode.SharpDevelop.Project #endregion #region Bind hex number to TextBox - public void BindHexadecimal(TextBoxBase textBox, string property, int defaultValue) + public ConfigurationGuiBinding BindHexadecimal(TextBoxBase textBox, string property, int defaultValue) { - AddBinding(property, new HexadecimalBinding(textBox, defaultValue)); + HexadecimalBinding binding = new HexadecimalBinding(textBox, defaultValue); + AddBinding(property, binding); textBox.TextChanged += ControlValueChanged; + return binding; } class HexadecimalBinding : ConfigurationGuiBinding @@ -307,15 +339,15 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Bind enum to ComboBox /// - public void BindEnum(string control, string property, params T[] values) where T : struct + public ConfigurationGuiBinding BindEnum(string control, string property, params T[] values) where T : struct { - BindEnum(controlDictionary[control], property, values); + return BindEnum(controlDictionary[control], property, values); } /// /// Bind enum to ComboBox /// - public void BindEnum(Control control, string property, params T[] values) where T : struct + public ConfigurationGuiBinding BindEnum(Control control, string property, params T[] values) where T : struct { Type type = typeof(T); if (values == null || values.Length == 0) { @@ -336,9 +368,11 @@ namespace ICSharpCode.SharpDevelop.Project string[] valueNames = new string[values.Length]; for (int i = 0; i < values.Length; i++) valueNames[i] = values[i].ToString(); - AddBinding(property, new ComboBoxBinding(comboBox, valueNames, valueNames[0])); + ComboBoxBinding binding = new ComboBoxBinding(comboBox, valueNames, valueNames[0]); + AddBinding(property, binding); comboBox.SelectedIndexChanged += ControlValueChanged; comboBox.KeyDown += ComboBoxKeyDown; + return binding; } else { throw new ApplicationException("Cannot bind " + control.GetType().Name + " to enum property."); } @@ -411,12 +445,14 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Bind enum to RadioButtons /// - public void BindRadioEnum(string property, params KeyValuePair[] values) where T : struct + public ConfigurationGuiBinding BindRadioEnum(string property, params KeyValuePair[] values) where T : struct { - AddBinding(property, new RadioEnumBinding(values)); + RadioEnumBinding binding = new RadioEnumBinding(values); + AddBinding(property, binding); foreach (KeyValuePair pair in values) { pair.Value.CheckedChanged += ControlValueChanged; } + return binding; } class RadioEnumBinding : ConfigurationGuiBinding where T : struct diff --git a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPadToolbarCommands.cs b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPadToolbarCommands.cs index 2fd137464d..51d64e4552 100644 --- a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPadToolbarCommands.cs +++ b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPadToolbarCommands.cs @@ -50,7 +50,11 @@ namespace ICSharpCode.SharpDevelop.Bookmarks { BookmarkNode node = BookmarkPad.Instance.CurrentNode; if (node != null) { - node.Bookmark.Document.BookmarkManager.RemoveMark(node.Bookmark); + if (node.Bookmark.Document != null) { + node.Bookmark.Document.BookmarkManager.RemoveMark(node.Bookmark); + } else { + ICSharpCode.SharpDevelop.Bookmarks.BookmarkManager.RemoveMark(node.Bookmark); + } WorkbenchSingleton.MainForm.Refresh(); } }