Browse Source

Fix Init vs. Load in project option panel user controls

pull/31/head
Daniel Grunwald 13 years ago
parent
commit
6b73af01c7
  1. 26
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs
  2. 26
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs
  3. 1
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml
  4. 28
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs
  5. 19
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildOutput.xaml.cs
  6. 21
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ErrorsAndWarnings.xaml.cs
  7. 36
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs
  8. 9
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/TreatErrorsAndWarnings.xaml
  9. 55
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/TreatErrorsAndWarnings.xaml.cs

26
src/AddIns/BackendBindings/CSharpBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs

@ -67,30 +67,12 @@ namespace CSharpBinding.OptionPanels @@ -67,30 +67,12 @@ namespace CSharpBinding.OptionPanels
protected override void Initialize()
{
base.Initialize();
buildOutput.SetProjectOptions(this);
this.buildAdvanced.SetProjectOptions(this);
this.errorsAndWarnings.SetProjectOptions(this);
this.treatErrorsAndWarnings.SetProjectOptions(this);
buildOutput.Initialize(this);
this.buildAdvanced.Initialize(this);
this.errorsAndWarnings.Initialize(this);
this.treatErrorsAndWarnings.Initialize(this);
}
protected override void Load(MSBuildBasedProject project, string configuration, string platform)
{
base.Load(project, configuration, platform);
IsDirty = false;
}
protected override bool Save(MSBuildBasedProject project, string configuration, string platform)
{
if (buildAdvanced.SaveProjectOptions()) {
treatErrorsAndWarnings.SaveProjectOptions();
return base.Save(project, configuration, platform);
}
return false;
}
#endregion
}

26
src/AddIns/BackendBindings/VBNetBinding/Project/Src/OptionPanels/BuildOptions.xaml.cs

@ -125,29 +125,11 @@ namespace ICSharpCode.VBNetBinding.OptionPanels @@ -125,29 +125,11 @@ namespace ICSharpCode.VBNetBinding.OptionPanels
protected override void Initialize()
{
base.Initialize();
buildOutput.SetProjectOptions(this);
this.buildAdvanced.SetProjectOptions(this);
this.errorsAndWarnings.SetProjectOptions(this);
this.treatErrorsAndWarnings.SetProjectOptions(this);
buildOutput.Initialize(this);
this.buildAdvanced.Initialize(this);
this.errorsAndWarnings.Initialize(this);
this.treatErrorsAndWarnings.Initialize(this);
}
protected override void Load(MSBuildBasedProject project, string configuration, string platform)
{
base.Load(project, configuration, platform);
IsDirty = false;
}
protected override bool Save(MSBuildBasedProject project, string configuration, string platform)
{
if (this.buildAdvanced.SaveProjectOptions()) {
treatErrorsAndWarnings.SaveProjectOptions();
return base.Save(project, configuration, platform);
}
return false;
}
#endregion
}
}

1
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml

@ -39,7 +39,6 @@ @@ -39,7 +39,6 @@
<Binding Path="BaseAddress.Location" />
</MultiBinding>
</optionpanels:StorageLocationPicker.Location>
</optionpanels:StorageLocationPicker>
<!--x:Name="registerCOMInteropCheckBox"-->

28
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
/// <summary>
/// Interaction logic for BuildAdvenced.xaml
/// </summary>
public partial class BuildAdvanced : UserControl,IProjectUserControl, INotifyPropertyChanged
public partial class BuildAdvanced : UserControl, INotifyPropertyChanged, ProjectOptionPanel.ILoadSaveCallback
{
private string dllBaseAddress;
@ -68,23 +68,25 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -68,23 +68,25 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#region IProjectUserControl
public void SetProjectOptions (ProjectOptionPanel projectOptions)
public void Initialize (ProjectOptionPanel projectOptions)
{
if (projectOptions == null) {
throw new ArgumentNullException("projectOptions");
}
this.projectOptions = projectOptions;
projectOptions.RegisterLoadSaveCallback(this);
}
public void Load(MSBuildBasedProject project, string configuration, string platform)
{
int val;
if (!int.TryParse(BaseAddress.Value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out val)) {
val = 0x400000;
}
DllBaseAddress = "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo);
projectOptions.IsDirty = true;
DllBaseAddress = "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo);
}
public bool SaveProjectOptions()
public bool Save(MSBuildBasedProject project, string configuration, string platform)
{
NumberStyles style = NumberStyles.Integer;
string dllBaseAddressWithoutHexPrefix = dllBaseAddress;
@ -105,11 +107,10 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -105,11 +107,10 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#endregion
#region Properies
public ProjectOptionPanel.ProjectProperty<bool> RegisterForComInterop {
get {return projectOptions.GetProperty("RegisterForComInterop", false, PropertyStorageLocations.PlatformSpecific ); }
get {return projectOptions.GetProperty("RegisterForComInterop", false, PropertyStorageLocations.PlatformSpecific ); }
}
@ -123,6 +124,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -123,6 +124,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
TextBoxEditMode.EditEvaluatedProperty, PropertyStorageLocations.PlatformSpecific ); }
}
/// <summary>
/// null means false when targeting .NET 4.0, but true if targeting .NET 4.5
/// </summary>
public ProjectOptionPanel.ProjectProperty<bool?> Prefer32Bit {
get {return projectOptions.GetProperty<bool?>("Prefer32Bit", null, PropertyStorageLocations.PlatformSpecific ); }
}
public ProjectOptionPanel.ProjectProperty<string> FileAlignment {
get {return projectOptions.GetProperty("FileAlignment","4096",
TextBoxEditMode.EditEvaluatedProperty, PropertyStorageLocations.PlatformSpecific ); }
@ -146,7 +154,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -146,7 +154,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#endregion
public List<KeyItemPair> SerializationInfo {get;set;}
public List<KeyItemPair> TargetCPU {get;set;}

19
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildOutput.xaml.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
/// <summary>
/// Interaction logic for BuildOutput.xaml
/// </summary>
public partial class BuildOutput : UserControl,IProjectUserControl, INotifyPropertyChanged
public partial class BuildOutput : UserControl, INotifyPropertyChanged, ProjectOptionPanel.ILoadSaveCallback
{
private ProjectOptionPanel projectOptions;
private System.Windows.Input.ICommand updateProjectCommand;
@ -62,24 +62,28 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -62,24 +62,28 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#region IProjectUserControl
public void SetProjectOptions(ProjectOptionPanel projectOptions)
public void Initialize(ProjectOptionPanel projectOptions)
{
if (projectOptions == null) {
throw new ArgumentNullException("projectOptions");
}
this.projectOptions = projectOptions;
projectOptions.RegisterLoadSaveCallback(this);
}
public void Load(MSBuildBasedProject project, string configuration, string platform)
{
UpdateTargetFrameworkCombo();
if (DocumentationFile.Value.Length > 0) {
documentFileIsChecked = true;
}
XmlDocHelper();
}
public bool SaveProjectOptions()
public bool Save(MSBuildBasedProject project, string configuration, string platform)
{
throw new NotImplementedException();
return true;
}
#endregion
@ -99,12 +103,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -99,12 +103,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
private void XmlDocHelper()
{
if (DocumentFileIsChecked) {
this.xmlDocumentationTextBox.Text = MSBuildInternals.Escape(
this.DocumentationFile.Value = MSBuildInternals.Escape(
Path.ChangeExtension(ICSharpCode.Core.FileUtility.GetRelativePath(projectOptions.Project.Directory,projectOptions.
Project.OutputAssemblyFullPath),
".xml"));
} else {
this.xmlDocumentationTextBox.Text = string.Empty;
this.DocumentationFile.Value = string.Empty;
}
}
@ -132,6 +136,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -132,6 +136,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
TargetFramework fx = ((IUpgradableProject)projectOptions.Project).CurrentTargetFramework;
if (fx != null) {
targetFrameworkComboBox.Items.Clear();
targetFrameworkComboBox.Items.Add(fx.DisplayName);
targetFrameworkComboBox.SelectedIndex = 0;
}

21
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ErrorsAndWarnings.xaml.cs

@ -20,19 +20,7 @@ using ICSharpCode.SharpDevelop.Project; @@ -20,19 +20,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
/// <summary>
/// Interaction logic for ErrorsAndWarnings.xaml
/// </summary>
///
public interface IProjectUserControl
{
void SetProjectOptions (ProjectOptionPanel projectOptions);
bool SaveProjectOptions();
}
public partial class ErrorsAndWarnings : UserControl, INotifyPropertyChanged,IProjectUserControl
public partial class ErrorsAndWarnings : UserControl, INotifyPropertyChanged
{
private List<KeyItemPair> warnLevel;
private ProjectOptionPanel projectOptions;
@ -53,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -53,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#region IProjectUserControl
public void SetProjectOptions (ProjectOptionPanel projectOptions)
public void Initialize (ProjectOptionPanel projectOptions)
{
if (projectOptions == null) {
throw new ArgumentNullException("projectOptions");
@ -61,11 +49,6 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -61,11 +49,6 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
this.projectOptions = projectOptions;
}
public bool SaveProjectOptions()
{
return true;
}
#endregion
public ProjectOptionPanel.ProjectProperty<string> WarningLevel {

36
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs

@ -55,18 +55,33 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -55,18 +55,33 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
bool isLoaded;
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
List<ILoadSaveCallback> loadSaveCallbacks = new List<ILoadSaveCallback>();
public void RegisterLoadSaveCallback(ILoadSaveCallback callback)
{
if (callback == null)
throw new ArgumentNullException("callback");
loadSaveCallbacks.Add(callback);
}
protected virtual void Load(MSBuildBasedProject project, string configuration, string platform)
{
foreach (IProjectProperty p in projectProperties.Values)
// First load project properties; then invoke other callbacks
// so that the callbacks can use the new values in the properties
foreach (ILoadSaveCallback p in projectProperties.Values.Concat(loadSaveCallbacks))
p.Load(project, configuration, platform);
this.IsDirty = false;
}
protected virtual bool Save(MSBuildBasedProject project, string configuration, string platform)
{
foreach (IProjectProperty p in projectProperties.Values)
p.Save(project, configuration, platform);
// First invoke callbacks; then save project properties.
// So that the callbacks can store values via the properties
foreach (ILoadSaveCallback p in loadSaveCallbacks.Concat(projectProperties.Values)) {
if (!p.Save(project, configuration, platform))
return false;
}
this.IsDirty = false;
return true;
}
@ -195,13 +210,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -195,13 +210,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
public event EventHandler IsDirtyChanged;
#region Manage MSBuild properties
Dictionary<string, IProjectProperty> projectProperties = new Dictionary<string, IProjectProperty>();
Dictionary<string, ILoadSaveCallback> projectProperties = new Dictionary<string, ILoadSaveCallback>();
public ProjectProperty<string> GetProperty(string propertyName, string defaultValue,
TextBoxEditMode textBoxEditMode = TextBoxEditMode.EditEvaluatedProperty,
PropertyStorageLocations defaultLocation = PropertyStorageLocations.Base)
{
IProjectProperty existingProperty;
ILoadSaveCallback existingProperty;
if (projectProperties.TryGetValue(propertyName, out existingProperty))
return (ProjectProperty<string>)existingProperty;
@ -216,7 +231,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -216,7 +231,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
public ProjectProperty<T> GetProperty<T>(string propertyName, T defaultValue,
PropertyStorageLocations defaultLocation = PropertyStorageLocations.Base)
{
IProjectProperty existingProperty;
ILoadSaveCallback existingProperty;
if (projectProperties.TryGetValue(propertyName, out existingProperty))
return (ProjectProperty<T>)existingProperty;
@ -227,13 +242,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -227,13 +242,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
return newProperty;
}
interface IProjectProperty
public interface ILoadSaveCallback
{
void Load(MSBuildBasedProject project, string configuration, string platform);
void Save(MSBuildBasedProject project, string configuration, string platform);
bool Save(MSBuildBasedProject project, string configuration, string platform);
}
public class ProjectProperty<T> : IProjectProperty, INotifyPropertyChanged
public class ProjectProperty<T> : ILoadSaveCallback, INotifyPropertyChanged
{
readonly ProjectOptionPanel parentPanel;
readonly string propertyName;
@ -315,10 +330,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -315,10 +330,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
}
}
public void Save(MSBuildBasedProject project, string configuration, string platform)
public bool Save(MSBuildBasedProject project, string configuration, string platform)
{
string newValue = GenericConverter.ToString(val);
project.SetProperty(configuration, platform, propertyName, newValue, location, treatPropertyValueAsLiteral);
return true;
}
}
#endregion

9
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/TreatErrorsAndWarnings.xaml

@ -20,10 +20,12 @@ @@ -20,10 +20,12 @@
</optionpanels:StorageLocationPicker>
<RadioButton x:Name="noneRadioButton" Grid.Column="1" VerticalAlignment="Center" Margin="3,0,3,0"
Content="{core:Localize Dialog.ProjectOptions.Build.TreatWarningsAsErrors.None}"></RadioButton>
Content="{core:Localize Dialog.ProjectOptions.Build.TreatWarningsAsErrors.None}"
Checked="ErrorButton_Checked"/>
<RadioButton x:Name="specificWarningsRadioButton" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" Margin="3,0,3,0"
Content="{core:Localize Dialog.ProjectOptions.Build.TreatWarningsAsErrors.Specific}"></RadioButton>
Content="{core:Localize Dialog.ProjectOptions.Build.TreatWarningsAsErrors.Specific}"
Checked="ErrorButton_Checked"/>
<TextBox x:Name="specificWarningsTextBox" Grid.Row="1" Grid.Column="2" VerticalAlignment="Center"
Margin="3,0,3,0"
@ -33,6 +35,7 @@ @@ -33,6 +35,7 @@
<RadioButton x:Name="allRadioButton" Grid.Row="2" Grid.Column="1"
Margin="3,0,3,0"
VerticalAlignment="Center"
Content="{core:Localize Dialog.ProjectOptions.Build.TreatWarningsAsErrors.All}"></RadioButton>
Content="{core:Localize Dialog.ProjectOptions.Build.TreatWarningsAsErrors.All}"
Checked="ErrorButton_Checked"/>
</Grid>
</UserControl>

55
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/TreatErrorsAndWarnings.xaml.cs

@ -23,9 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -23,9 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
/// <summary>
/// Interaction logic for ErrorsAndWarnings.xaml
/// </summary>
public partial class TreatErrorsAndWarnings : UserControl,IProjectUserControl
public partial class TreatErrorsAndWarnings : UserControl, ProjectOptionPanel.ILoadSaveCallback
{
private ProjectOptionPanel projectOptions;
@ -35,33 +33,37 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -35,33 +33,37 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
this.DataContext = this;
}
#region properties
public ProjectOptionPanel.ProjectProperty<bool> TreatWarningsAsErrors {
get {return projectOptions.GetProperty("TreatWarningsAsErrors", false); }
}
public ProjectOptionPanel.ProjectProperty<string> WarningsAsErrors {
get {return projectOptions.GetProperty("WarningsAsErrors","",TextBoxEditMode.EditRawProperty ); }
}
#endregion
#region IProjectuserControl
public void SetProjectOptions (ProjectOptionPanel projectOptions)
public void Initialize (ProjectOptionPanel projectOptions)
{
if (projectOptions == null) {
throw new ArgumentNullException("projectOptions");
}
this.projectOptions = projectOptions;
SetTreatWarningAsErrorRadioButtons();
projectOptions.RegisterLoadSaveCallback(this);
}
public bool SaveProjectOptions()
public void Load(MSBuildBasedProject project, string configuration, string platform)
{
if (this.TreatWarningsAsErrors.Value) {
this.allRadioButton.IsChecked = true;
} else {
if (WarningsAsErrors.Value.Length > 0) {
this.specificWarningsRadioButton.IsChecked = true;
} else {
this.noneRadioButton.IsChecked = true;
}
}
}
public bool Save(MSBuildBasedProject project, string configuration, string platform)
{
if ((bool)this.noneRadioButton.IsChecked){
this.specificWarningsTextBox.Text = string.Empty;
@ -72,32 +74,9 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -72,32 +74,9 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
} else {
this.TreatWarningsAsErrors.Value = false;
}
this.noneRadioButton.Checked -= ErrorButton_Checked;
this.allRadioButton.Checked -= ErrorButton_Checked;
this.specificWarningsRadioButton.Checked -= ErrorButton_Checked;
return true;
}
#endregion
private void SetTreatWarningAsErrorRadioButtons()
{
if (this.TreatWarningsAsErrors.Value) {
this.allRadioButton.IsChecked = true;
} else {
if (WarningsAsErrors.Value.Length > 0) {
this.specificWarningsRadioButton.IsChecked = true;
} else {
this.noneRadioButton.IsChecked = true;
}
}
this.noneRadioButton.Checked += ErrorButton_Checked;
this.allRadioButton.Checked += ErrorButton_Checked;
this.specificWarningsRadioButton.Checked += ErrorButton_Checked;
}
void ErrorButton_Checked(object sender, System.Windows.RoutedEventArgs e)
{
projectOptions.IsDirty = true;

Loading…
Cancel
Save