From d350c9cbde3c0a7f268c15d3c127de90c93a4dc2 Mon Sep 17 00:00:00 2001 From: PeterForstmeier Date: Sun, 9 Sep 2012 19:33:13 +0200 Subject: [PATCH] C# BuildOptions --- .../Src/OptionPanels/BuildOptions.xaml | 17 ++-- .../Src/OptionPanels/BuildOptions.xaml.cs | 89 ++++++++++++++++--- .../Src/OptionPanels/BuildOptionsXaml.xaml | 11 ++- .../ProjectOptions/HexValidator.cs | 21 +++++ 4 files changed, 117 insertions(+), 21 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml index 4cd68e0855..aff83f339b 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml @@ -224,18 +224,25 @@ - - - + + + + + + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs index d703e144fe..587814e446 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs @@ -7,6 +7,8 @@ */ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; using System.IO; using Gui.Dialogs.OptionPanels.ProjectOptions; @@ -70,7 +72,7 @@ namespace CSharpBinding.OptionPanels this.warnLevel.Add(new KeyItemPair("2","2")); this.warnLevel.Add(new KeyItemPair("3","3")); this.warnLevel.Add(new KeyItemPair("4","4")); - this.WarnLevel = warnLevel; + this.WarnLevel = warnLevel; } private void Initialize() @@ -85,6 +87,7 @@ namespace CSharpBinding.OptionPanels this.BaseIntermediateOutputPathCommand = new RelayCommand(BaseIntermediateOutputPathExecute); this.IntermediateOutputPathCommand = new RelayCommand(IntermediateOutputPathExecute); SetTreatWarningAsErrorRadioButtons(); + IsDirty = false; } #region properties @@ -146,7 +149,7 @@ namespace CSharpBinding.OptionPanels } public ProjectProperty BaseAddress { - get {return GetProperty("BaseAddress","0x400000", + get {return GetProperty("BaseAddress","1000", TextBoxEditMode.EditEvaluatedProperty,PropertyStorageLocations.PlatformSpecific ); } } @@ -198,6 +201,16 @@ namespace CSharpBinding.OptionPanels { SaveTreatWarningAsErrorRadioButtons(); + NumberStyles style = NumberStyles.Integer; + if (dllBaseAdress.StartsWith("0x")) { + dllBaseAdress = dllBaseAdress.Substring(2); + style = NumberStyles.HexNumber; + } + int val; + if (int.TryParse(dllBaseAdress, style, NumberFormatInfo.InvariantInfo, out val)) { + BaseAddress.Value = val.ToString(NumberFormatInfo.InvariantInfo); + } + return base.Save(project, configuration, platform); } #endregion @@ -268,8 +281,8 @@ namespace CSharpBinding.OptionPanels private void ChangeOutputPathExecute() { OutputPath.Value = OptionsHelper.BrowseForFolder("${res:Dialog.Options.PrjOptions.Configuration.FolderBrowserDescription}", - base.BaseDirectory,base.BaseDirectory, - outputPathTextBox.Text,TextBoxEditMode.EditRawProperty); + base.BaseDirectory,base.BaseDirectory, + outputPathTextBox.Text,TextBoxEditMode.EditRawProperty); base.RaisePropertyChanged(()=> OutputPath); } @@ -285,7 +298,7 @@ namespace CSharpBinding.OptionPanels } #endregion - + #region TargetCPU @@ -306,6 +319,54 @@ namespace CSharpBinding.OptionPanels } } + #endregion + + #region DLL BaseAdress + + private string dllBaseAdress; + + public string DllBaseAdress { + get { + int val; + if (!int.TryParse(BaseAddress.Value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out val)) { + val = 1000; + } + return "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo); + } + + set { + dllBaseAdress = value; + + if (CheckBaseAdress(value)) { + IsDirty = true; + base.RaisePropertyChanged(() => DllBaseAdress); + } else { + MessageService.ShowMessage("${res:Dialog.ProjectOptions.PleaseEnterValidNumber}"); + } + } + } + + + private bool CheckBaseAdress(string toCheck) + { + NumberStyles style = NumberStyles.Integer; + if (toCheck.StartsWith("0x")) { + toCheck = toCheck.Substring(2); + style = NumberStyles.HexNumber; + } + if (!String.IsNullOrEmpty(toCheck)) { + int val; + if (int.TryParse(toCheck, style, NumberFormatInfo.InvariantInfo, out val)) { + return true; + } else { + MessageService.ShowMessage("${res:Dialog.ProjectOptions.PleaseEnterValidNumber}"); + return false; + } + } + return false; + } + + #endregion #region BaseIntermediateOutputPath @@ -315,13 +376,13 @@ namespace CSharpBinding.OptionPanels set {this.baseIntermediateOutputPathCommand = value; base.RaisePropertyChanged(() => BaseIntermediateOutputPathCommand);} } - + private void BaseIntermediateOutputPathExecute () { BaseIntermediateOutputPath.Value = OptionsHelper.BrowseForFolder("${res:Dialog.Options.PrjOptions.Configuration.FolderBrowserDescription}", - base.BaseDirectory,base.BaseDirectory, - this.baseIntermediateOutputPathTextBox.Text,TextBoxEditMode.EditRawProperty); + base.BaseDirectory,base.BaseDirectory, + this.baseIntermediateOutputPathTextBox.Text,TextBoxEditMode.EditRawProperty); base.RaisePropertyChanged(()=> BaseIntermediateOutputPath); } @@ -339,8 +400,8 @@ namespace CSharpBinding.OptionPanels private void IntermediateOutputPathExecute () { IntermediateOutputPath.Value = OptionsHelper.BrowseForFolder("${res:Dialog.Options.PrjOptions.Configuration.FolderBrowserDescription}", - base.BaseDirectory,base.BaseDirectory, - this.intermediateOutputPathTextBox.Text,TextBoxEditMode.EditRawProperty); + base.BaseDirectory,base.BaseDirectory, + this.intermediateOutputPathTextBox.Text,TextBoxEditMode.EditRawProperty); base.RaisePropertyChanged(()=> IntermediateOutputPath); } @@ -375,10 +436,10 @@ namespace CSharpBinding.OptionPanels this.specificWarningsRadioButton.Checked += ErrorButton_Checked; } - - - private void SaveTreatWarningAsErrorRadioButtons() + + + private void SaveTreatWarningAsErrorRadioButtons() { if ((bool)this.noneRadioButton.IsChecked){ @@ -403,4 +464,6 @@ namespace CSharpBinding.OptionPanels #endregion } + + } \ No newline at end of file diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml index 8e04d698ae..d0b2e3024a 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml @@ -241,15 +241,20 @@ Content="{core:Localize Dialog.ProjectOptions.Build.DLLBaseAddress}"> - + + + + diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/HexValidator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/HexValidator.cs index 6a7410e3f4..d5b798a36f 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/HexValidator.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/HexValidator.cs @@ -6,6 +6,7 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using System.Diagnostics; using System.Globalization; using System.Windows.Controls; @@ -29,4 +30,24 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels return result; } } + + public class BaseAdressValidator :ValidationRule + { + public override ValidationResult Validate(object value, CultureInfo cultureInfo) + { + Trace.WriteLine("-------------"); + ValidationResult result = new ValidationResult(true, null); + string dllBaseAdress = value.ToString().Trim(); + NumberStyles style = NumberStyles.Integer; + if (dllBaseAdress.StartsWith("0x")) { + dllBaseAdress = dllBaseAdress.Substring(2); + style = NumberStyles.HexNumber; + } + int val; + if (!int.TryParse(dllBaseAdress, style, NumberFormatInfo.InvariantInfo, out val)) { + result = new ValidationResult(false, "No valid Hex Digit"); + } + return result; + } + } }