diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin index 00baa43cf2..474a81bb75 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin @@ -92,9 +92,15 @@ + + + + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj index db074cdfad..09c4c05459 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj @@ -76,6 +76,10 @@ Form + + BuildOptionsXaml.xaml + Code + @@ -111,6 +115,10 @@ ICSharpCode.Core False + + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} + ICSharpCode.Core.Presentation + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} ICSharpCode.Core.WinForms @@ -121,6 +129,13 @@ ICSharpCode.SharpDevelop.Dom False + + {8035765F-D51F-4A0C-A746-2FD100E19419} + ICSharpCode.SharpDevelop.Widgets + + + + \ No newline at end of file diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml.cs new file mode 100644 index 0000000000..06bcb12443 --- /dev/null +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptionsXaml.xaml.cs @@ -0,0 +1,173 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 05/02/2012 + * Time: 19:54 + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Windows.Controls; +using System.Windows.Input; + +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.SharpDevelop.Editor; +using ICSharpCode.SharpDevelop.Gui.OptionPanels; +using ICSharpCode.SharpDevelop.Project; +using ICSharpCode.SharpDevelop.Project.Converter; +using ICSharpCode.SharpDevelop.Widgets; +using StringPair = System.Collections.Generic.KeyValuePair; + + +namespace CSharpBinding.OptionPanels +{ + /// + /// Interaction logic for BuildOptionsXaml.xaml + /// + /// + + public partial class BuildOptionsXaml : ProjectOptionPanel + { +// private List fileAlignment; + + private ICommand updateProjectCommand; + private ICommand changeOutputPath; + private MSBuildBasedProject project; + + public BuildOptionsXaml() + { + InitializeComponent(); + + + /* + fileAlignment = new List(); + fileAlignment.Add( new StringPair("512", "512")); + fileAlignment.Add( new StringPair("1024", "1024")); + fileAlignment.Add(new StringPair("2048", "2048")); + fileAlignment.Add(new StringPair("4096", "4096")); + fileAlignment.Add(new StringPair("8192", "8192"));*/ + } + + private void Initialize() + { + this.UpdateProjectCommand = new RelayCommand(UpdateProjectExecute); + this.ChangeOutputPath = new RelayCommand(ChangeOutputPathExecute); + UpdateTargetFrameworkCombo(); + } + #region properties + + public ProjectProperty DefineConstants { + get {return GetProperty("DefineConstants", "", TextBoxEditMode.EditRawProperty); } + } + + public ProjectProperty Optimize { + get {return GetProperty("Optimize", "", TextBoxEditMode.EditRawProperty); } + } + + + public ProjectProperty AllowUnsafeBlocks { + get {return GetProperty("AllowUnsafeBlocks", "", TextBoxEditMode.EditRawProperty); } + } + + + public ProjectProperty CheckForOverflowUnderflow { + get {return GetProperty("CheckForOverflowUnderflow", "", TextBoxEditMode.EditRawProperty); } + } + + + public ProjectProperty NoStdLib { + get {return GetProperty("NoStdLib", "", TextBoxEditMode.EditRawProperty); } + } + + + public ProjectProperty OutputPath { + get {return GetProperty("OutputPath", "", TextBoxEditMode.EditRawProperty); } + } + + // Documentfile missing and only partial implemented + public ProjectProperty DocumentationFile { + get {return GetProperty("DocumentationFile", "", TextBoxEditMode.EditRawProperty);} + } + + + // + + public ProjectProperty DebugType { + get {return GetProperty("DebugType",ICSharpCode.SharpDevelop.Project.DebugSymbolType.Full ); } + } + + #endregion + + #region overrides + + protected override void Load(MSBuildBasedProject project, string configuration, string platform) + { + base.Load(project, configuration, platform); + this.project = project; + this.Initialize(); + } + + #endregion + + + #region Command Updateproject + + public ICommand UpdateProjectCommand { + get { return updateProjectCommand; } + set { updateProjectCommand = value; + base.RaisePropertyChanged(() =>this.UpdateProjectCommand); + } + } + + + private void UpdateProjectExecute () + { + UpgradeViewContent.Show(project.ParentSolution).Select(project as IUpgradableProject); + this.UpdateTargetFrameworkCombo(); + } + + private void UpdateTargetFrameworkCombo() + { + TargetFramework fx = ((IUpgradableProject)project).CurrentTargetFramework; + if (fx != null) { + targetFrameworkComboBox.Items.Add(fx.DisplayName); + targetFrameworkComboBox.SelectedIndex = 0; + } + } + + #endregion + + #region ChangeOutputPathCommand + + public ICommand ChangeOutputPath + { + get {return this.changeOutputPath;} + set {this.changeOutputPath = value; + base.RaisePropertyChanged(() => this.ChangeOutputPath); + } + } + private void ChangeOutputPathExecute() + { + OutputPath.Value = base.BrowseForFolder("${res:Dialog.Options.PrjOptions.Configuration.FolderBrowserDescription}", + base.BaseDirectory,outputPathTextBox.Text); + base.RaisePropertyChanged(()=> OutputPath); + } + + #endregion + + + //Property DebugType + //void DebugSymbolsLoaded(object sender, EventArgs e) + + #region FileAlignment + /* + public List> FileAlign { + get { return fileAlignment; } + set { fileAlignment = value; } + } + */ + #endregion + } +} \ No newline at end of file diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index eb74be99c5..72b5db3659 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -288,6 +288,7 @@ + AddServiceReferenceDialog.xaml diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs index 1f3c89f2c2..6ab1983e70 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs @@ -5,20 +5,25 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; +using System.Linq.Expressions; +using System.Reflection; using System.Windows; using System.Windows.Controls; +//using System.Windows.Forms; using System.Windows.Shapes; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; +using Microsoft.Win32; namespace ICSharpCode.SharpDevelop.Gui.OptionPanels { /// /// Base class for project option panels with configuration picker. /// - public class ProjectOptionPanel : UserControl, IOptionPanel, ICanBeDirty + public class ProjectOptionPanel : UserControl, IOptionPanel, ICanBeDirty,INotifyPropertyChanged { + static ProjectOptionPanel() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ProjectOptionPanel), new FrameworkPropertyMetadata(typeof(ProjectOptionPanel))); @@ -39,6 +44,8 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels StackPanel configStackPanel; Line headerline; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + protected virtual void Load(MSBuildBasedProject project, string configuration, string platform) { foreach (IProjectProperty p in projectProperties.Values) @@ -285,5 +292,115 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels } } #endregion + + #region INotifyPropertyChanged implementation + + protected void RaisePropertyChanged(Expression> propertyExpresssion) + { + var propertyName = ExtractPropertyName(propertyExpresssion); + //OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + var handler = this.PropertyChanged; + if (handler != null) + { + handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + /* + protected virtual void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e) + { + var handler = this.PropertyChanged; + if (handler != null) + { + handler(this, e); + } + } + */ + private static String ExtractPropertyName(Expression> propertyExpresssion) + { + if (propertyExpresssion == null) + { + throw new ArgumentNullException("propertyExpresssion"); + } + + var memberExpression = propertyExpresssion.Body as MemberExpression; + if (memberExpression == null) + { + throw new ArgumentException("The expression is not a member access expression.", "propertyExpresssion"); + } + + var property = memberExpression.Member as PropertyInfo; + if (property == null) + { + throw new ArgumentException("The member access expression does not access a property.", "propertyExpresssion"); + } + + var getMethod = property.GetGetMethod(true); + if (getMethod.IsStatic) + { + throw new ArgumentException("The referenced property is a static property.", "propertyExpresssion"); + } + + return memberExpression.Member.Name; + } + #endregion + + + #region OpenFileDialog + +// protected string OpenFile(string fileFilter) +// { +// var dialog = new OpenFileDialog(); +// +// //dialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ExecutableFiles}|*.exe"); +// var x = StringParser.Parse(fileFilter); +// dialog.Filter = StringParser.Parse(x); +// if (dialog.ShowDialog() ?? false) { +// return dialog.FileName; +// } +// return String.Empty; +// } +// + + protected string BrowseForFolder(string description,string startLocation,string relativeLocation) + { + +// var startLocation = BaseDirectory; +// if (textBoxEditMode == TextBoxEditMode.EditRawProperty) +// string text = StartWorkingDirectory.Value; +// text = MSBuildInternals.Unescape(text); +// +// if (startLocation != null) { +// string text = StartWorkingDirectory.Value; +// startLocation = FileUtility.GetAbsolutePath(startLocation, text); +// } + string startAt = startLocation; + if (!String.IsNullOrEmpty(relativeLocation)) { + startAt = FileUtility.GetAbsolutePath(startLocation,relativeLocation); + } + + + using (System.Windows.Forms.FolderBrowserDialog fdiag = FileService.CreateFolderBrowserDialog(description,startAt)) + { + if (fdiag.ShowDialog() == System.Windows.Forms.DialogResult.OK) { + string path = fdiag.SelectedPath; + if (BaseDirectory != null) { + path = FileUtility.GetRelativePath(BaseDirectory, path); + } + if (!path.EndsWith("\\") && !path.EndsWith("/")) + path += "\\"; + +// if (textBoxEditMode == TextBoxEditMode.EditEvaluatedProperty) { + //// panel.ControlDictionary[target].Text = path; +// } else { +// panel.ControlDictionary[target].Text = MSBuildInternals.Escape(path); + //// } + return path; + } + + } + return startLocation; + } + + #endregion } } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/SigningXaml.xaml.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/SigningXaml.xaml.cs new file mode 100644 index 0000000000..900f8691ab --- /dev/null +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/SigningXaml.xaml.cs @@ -0,0 +1,79 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 26.04.2012 + * Time: 19:56 + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; + +using ICSharpCode.SharpDevelop.Project; +using ICSharpCode.SharpDevelop.Widgets; + +namespace ICSharpCode.SharpDevelop.Gui.OptionPanels +{ + /// + /// Interaction logic for SigningXaml.xaml + /// + public partial class SigningXaml : ProjectOptionPanel + { +// private const string KeyFileExtensions = "*.snk;*.pfx;*.key"; + // private MSBuildBasedProject project; + + public SigningXaml() + { + InitializeComponent(); + + } + + private void Initialize() + { + Cmd = new RelayCommand(CheckExecute); + } + + + + public ProjectProperty SignAssembly { + get { return GetProperty("SignAssembly","", TextBoxEditMode.EditEvaluatedProperty); } + } + + + public ProjectProperty AssemblyOriginatorKeyFile { + get { return GetProperty("AssemblyOriginatorKeyFile","", TextBoxEditMode.EditEvaluatedProperty); } + } + + + #region overrides + + protected override void Load(MSBuildBasedProject project, string configuration, string platform) + { + base.Load(project, configuration, platform); + Console.WriteLine("sign {0}",SignAssembly.Value.ToString()); + //this.project = project; + Console.WriteLine("sign {0}",SignAssembly.Value.ToString()); + Initialize(); + string prop = GetProperty("SignAssembly", "", TextBoxEditMode.EditRawProperty).Value.ToString(); + } + #endregion + + public RelayCommand Cmd {get;set;} + + + private void CheckExecute(bool isChecked) + { + Console.WriteLine(" Checkbox ischecked {0}",isChecked); + IsDirty = true; + SignAssembly.Value = "False"; + } + + } +} \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/StringToBoolConverter.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/StringToBoolConverter.cs new file mode 100644 index 0000000000..2258609e4f --- /dev/null +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/StringToBoolConverter.cs @@ -0,0 +1,36 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 05.05.2012 + * Time: 19:29 + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Windows.Data; + +namespace ICSharpCode.SharpDevelop.Gui.OptionPanels +{ + /// + /// Description of StringToBoolConverter. + /// + public class StringToBoolConverter:IValueConverter + { + + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + + if ("True".Equals(value.ToString(),StringComparison.OrdinalIgnoreCase)) { + return true; + } + return false; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + if ("True".Equals(value.ToString(),StringComparison.OrdinalIgnoreCase)) { + return "True"; + } + return "False"; + } + } +}