Browse Source

implement CodeDomLocalizationModel detection in FormsDesigner

pull/45/merge
Siegfried Pammer 12 years ago
parent
commit
709285d091
  1. 53
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs
  2. 4
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml
  3. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml.cs

53
src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
@ -152,5 +153,57 @@ namespace CSharpBinding.FormsDesigner @@ -152,5 +153,57 @@ namespace CSharpBinding.FormsDesigner
MessageService.ShowException(ex);
}
}
protected override CodeDomLocalizationModel GetCurrentLocalizationModelFromDesignedFile()
{
SD.Log.Debug("CSharpDesignerLoader.GetCurrentLocalizationModelFromDesignedFile()");
var primaryParseInfo = context.GetPrimaryFileParseInformation();
var compilation = context.GetCompilation();
// Find designer class
ITypeDefinition designerClass = FormsDesignerSecondaryDisplayBinding.GetDesignableClass(primaryParseInfo.UnresolvedFile, compilation, out primaryPart);
IMethod initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(designerClass);
if (initializeComponents == null) {
throw new FormsDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded.");
}
CSharpFullParseInformation designerParseInfo;
var initializeComponentsDeclaration = initializeComponents.GetDeclaration(out designerParseInfo);
FindLocalizationModelVisitor visitor = new FindLocalizationModelVisitor();
initializeComponentsDeclaration.AcceptVisitor(visitor);
if (visitor.Model != CodeDomLocalizationModel.None) {
return visitor.Model;
}
return CodeDomLocalizationModel.None;
}
sealed class FindLocalizationModelVisitor : DepthFirstAstVisitor
{
CodeDomLocalizationModel model = CodeDomLocalizationModel.None;
public CodeDomLocalizationModel Model {
get { return this.model; }
}
public override void VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression)
{
if (this.model != CodeDomLocalizationModel.PropertyReflection) {
IdentifierExpression iex = memberReferenceExpression.Target as IdentifierExpression;
if (iex != null && iex.Identifier == "resources") {
if (memberReferenceExpression.MemberName == "ApplyResources") {
this.model = CodeDomLocalizationModel.PropertyReflection;
} else if (memberReferenceExpression.MemberName == "GetString") {
this.model = CodeDomLocalizationModel.PropertyAssignment;
}
}
}
base.VisitMemberReferenceExpression(memberReferenceExpression);
}
}
}
}

4
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml

@ -9,14 +9,14 @@ @@ -9,14 +9,14 @@
<GroupBox Header="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.DefaultLocalizationModel}">
<widgets:StackPanelWithSpacing SpaceBetweenItems="15">
<RadioButton Margin="5,5,0,5" x:Name="reflectionRadioButton"
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.DefaultLocalizationModel}"></RadioButton>
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.ReflectionRadioButton}"></RadioButton>
<RadioButton Margin="5,5,0,5" x:Name="assignmentRadioButton"
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.AssignmentRadioButton}"></RadioButton>
</widgets:StackPanelWithSpacing>
</GroupBox>
<CheckBox Margin="5,15,0,0" x:Name="keepModelCheckBox"
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.KeepModelCheckBox }"></CheckBox>
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.KeepModelCheckBox}"></CheckBox>
</StackPanel>
</gui:OptionPanel>

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.FormsDesigner.Gui.OptionPanels @@ -22,7 +22,7 @@ namespace ICSharpCode.FormsDesigner.Gui.OptionPanels
public const string KeepLocalizationModelPropertyName = "FormsDesigner.DesignerOptions.KeepLocalizationModel";
const CodeDomLocalizationModel DefaultLocalizationModelDefaultValue = CodeDomLocalizationModel.PropertyReflection;
const bool KeepLocalizationModelDefaultValue = false;
const bool KeepLocalizationModelDefaultValue = true;
public LocalizationModelOptionsPanel()
{

Loading…
Cancel
Save