Browse Source

Fixed bug where some TreeNode properties were not set when loading a form into the python forms designer.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4525 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 16 years ago
parent
commit
583bfa2611
  1. 28
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs
  2. 37
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTreeViewTestFixture.cs
  3. 7
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs

28
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs

@ -110,7 +110,7 @@ namespace ICSharpCode.PythonBinding @@ -110,7 +110,7 @@ namespace ICSharpCode.PythonBinding
MemberExpression rhsMemberExpression = node.Right as MemberExpression;
if (rhsMemberExpression != null) {
object propertyValue = GetPropertyValueFromAssignmentRhs(rhsMemberExpression);
SetPropertyValue(fieldExpression.MemberName, propertyValue);
SetPropertyValue(fieldExpression, propertyValue);
} else {
walkingAssignment = true;
BinaryExpression binaryExpression = node.Right as BinaryExpression;
@ -136,12 +136,8 @@ namespace ICSharpCode.PythonBinding @@ -136,12 +136,8 @@ namespace ICSharpCode.PythonBinding
if (!FoundInitializeComponentMethod) {
return false;
}
if (fieldExpression.IsSelfReference) {
SetPropertyValue(fieldExpression.MemberName, node.Value);
} else {
SetPropertyValue(componentCreator.GetInstance(fieldExpression.VariableName), fieldExpression.MemberName, node.Value);
}
SetPropertyValue(fieldExpression, node.Value);
return false;
}
@ -165,7 +161,7 @@ namespace ICSharpCode.PythonBinding @@ -165,7 +161,7 @@ namespace ICSharpCode.PythonBinding
return false;
}
SetPropertyValue(fieldExpression.MemberName, node.Name.ToString());
SetPropertyValue(fieldExpression, node.Name.ToString());
return false;
}
@ -213,6 +209,18 @@ namespace ICSharpCode.PythonBinding @@ -213,6 +209,18 @@ namespace ICSharpCode.PythonBinding
return name == "initializecomponent" || name == "initializecomponents";
}
/// <summary>
/// Checks the field expression to see if it references an class instance variable (e.g. self._treeView1)
/// or a variable that is local to the InitializeComponent method (e.g. treeNode1.BackColor)
/// </summary>
bool SetPropertyValue(PythonControlFieldExpression fieldExpression, object propertyValue)
{
if (fieldExpression.IsSelfReference) {
return SetPropertyValue(fieldExpression.MemberName, propertyValue);
}
return SetPropertyValue(componentCreator.GetInstance(fieldExpression.VariableName), fieldExpression.MemberName, propertyValue);
}
/// <summary>
/// Sets the value of a property on the current control.
/// </summary>
@ -325,13 +333,13 @@ namespace ICSharpCode.PythonBinding @@ -325,13 +333,13 @@ namespace ICSharpCode.PythonBinding
string name = GetInstanceName(fieldExpression);
object instance = CreateInstance(name, node);
if (instance != null) {
if (!SetPropertyValue(fieldExpression.MemberName, instance)) {
if (!SetPropertyValue(fieldExpression, instance)) {
AddComponent(fieldExpression.MemberName, instance);
}
} else {
object obj = deserializer.Deserialize(node);
if (obj != null) {
SetPropertyValue(component, fieldExpression.MemberName, obj);
SetPropertyValue(fieldExpression, obj);
} else if (IsResource(memberExpression)) {
SetPropertyValue(fieldExpression.MemberName, GetResource(node));
} else {

37
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTreeViewTestFixture.cs

@ -33,7 +33,11 @@ namespace PythonBinding.Tests.Designer @@ -33,7 +33,11 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" # treeView1\r\n" +
" # \r\n" +
" treeNode1.BackColor = System.Drawing.Color.Yellow\r\n" +
" treeNode1.Checked = True\r\n" +
" treeNode1.ForeColor = System.Drawing.Color.FromArgb(0, 64, 64)\r\n" +
" treeNode1.Name = \"RootNode0\"\r\n" +
" treeNode1.NodeFont = System.Drawing.Font(\"Times New Roman\", 8.25, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 1)\r\n" +
" treeNode1.Text = \"RootNode0.Text\"\r\n" +
" treeNode1.Nodes.AddRange(System.Array[System.Windows.Forms.TreeNode](\r\n" +
" [treeNode2]))\r\n" +
@ -64,6 +68,10 @@ namespace PythonBinding.Tests.Designer @@ -64,6 +68,10 @@ namespace PythonBinding.Tests.Designer
get { return Form.Controls[0] as TreeView; }
}
public TreeNode RootTreeNode {
get { return TreeView.Nodes[0]; }
}
[Test]
public void OneRootNode()
{
@ -73,13 +81,38 @@ namespace PythonBinding.Tests.Designer @@ -73,13 +81,38 @@ namespace PythonBinding.Tests.Designer
[Test]
public void RootNodeHasOneChildNode()
{
Assert.AreEqual(1, TreeView.Nodes[0].Nodes.Count);
Assert.AreEqual(1, RootTreeNode.Nodes.Count);
}
[Test]
public void ChildNodeHasOneChildNode()
{
Assert.AreEqual(1, TreeView.Nodes[0].Nodes[0].Nodes.Count);
Assert.AreEqual(1, RootTreeNode.Nodes[0].Nodes.Count);
}
[Test]
public void RootTreeNodeBackColor()
{
Assert.AreEqual(Color.Yellow, RootTreeNode.BackColor);
}
[Test]
public void RootTreeNodeForeColor()
{
Assert.AreEqual(Color.FromArgb(0, 64, 64), RootTreeNode.ForeColor);
}
[Test]
public void RootTreeNodeFontProperty()
{
Font font = new Font("Times New Roman", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 1);
Assert.AreEqual(font, RootTreeNode.NodeFont);
}
[Test]
public void RootTreeNodeCheckedProperty()
{
Assert.IsTrue(RootTreeNode.Checked);
}
}
}

7
src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs

@ -24,8 +24,6 @@ namespace PythonBinding.Tests.Parsing @@ -24,8 +24,6 @@ namespace PythonBinding.Tests.Parsing
public class ParseMethodsWithNoClassTestFixture
{
ICompilationUnit compilationUnit;
FoldingRegion fooFoldingRegion;
FoldingRegion barFoldingRegion;
FoldMarker fooMethodMarker;
FoldMarker barMethodMarker;
IClass globalClass;
@ -44,11 +42,6 @@ namespace PythonBinding.Tests.Parsing @@ -44,11 +42,6 @@ namespace PythonBinding.Tests.Parsing
DefaultProjectContent projectContent = new DefaultProjectContent();
PythonParser parser = new PythonParser();
compilationUnit = parser.Parse(projectContent, @"C:\test.py", python);
if (compilationUnit.FoldingRegions.Count > 1) {
fooFoldingRegion = compilationUnit.FoldingRegions[0];
barFoldingRegion = compilationUnit.FoldingRegions[1];
}
if (compilationUnit.Classes.Count > 0) {
globalClass = compilationUnit.Classes[0];

Loading…
Cancel
Save