Browse Source

Event handlers added for child controls when loading a form into the python forms designer.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3939 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 16 years ago
parent
commit
00fde32e00
  1. 4
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs
  2. 10
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormWalker.cs
  3. 79
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadControlEventHandlerTestFixture.cs
  4. 23
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadEventHandlerTestFixture.cs
  5. 19
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormTestFixtureBase.cs
  6. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
  7. 9
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockPropertyDescriptor.cs

4
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs

@ -22,11 +22,13 @@ namespace ICSharpCode.PythonBinding @@ -22,11 +22,13 @@ namespace ICSharpCode.PythonBinding
{
string memberName = String.Empty;
string fullMemberName = String.Empty;
string variableName = String.Empty;
PythonControlFieldExpression(string memberName, string fullMemberName)
{
this.memberName = memberName;
this.fullMemberName = fullMemberName;
this.variableName = GetVariableNameFromSelfReference(fullMemberName);
}
/// <summary>
@ -47,7 +49,7 @@ namespace ICSharpCode.PythonBinding @@ -47,7 +49,7 @@ namespace ICSharpCode.PythonBinding
/// From a member expression of the form: self._textBox1.Name this property will return "textBox1".
/// </summary>
public string VariableName {
get { return GetVariableNameFromSelfReference(fullMemberName); }
get { return variableName; }
}
/// <summary>

10
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormWalker.cs

@ -154,13 +154,19 @@ namespace ICSharpCode.PythonBinding @@ -154,13 +154,19 @@ namespace ICSharpCode.PythonBinding
{
MemberExpression eventExpression = node.Left as MemberExpression;
string eventName = eventExpression.Name.ToString();
PythonControlFieldExpression field = PythonControlFieldExpression.Create(eventExpression);
MemberExpression eventHandlerExpression = node.Right as MemberExpression;
string eventHandlerName = eventHandlerExpression.Name.ToString();
EventDescriptor eventDescriptor = TypeDescriptor.GetEvents(form).Find(eventName, false);
Control control = form;
if (field.VariableName.Length > 0) {
control = GetControl(field.VariableName);
}
EventDescriptor eventDescriptor = TypeDescriptor.GetEvents(control).Find(eventName, false);
PropertyDescriptor propertyDescriptor = componentCreator.GetEventProperty(eventDescriptor);
propertyDescriptor.SetValue(form, eventHandlerName);
propertyDescriptor.SetValue(control, eventHandlerName);
return false;
}

79
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadControlEventHandlerTestFixture.cs

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
[TestFixture]
public class LoadControlEventHandlerTestFixture : LoadFormTestFixtureBase
{
public override string PythonCode {
get {
return "class TestForm(System.Windows.Forms.Form):\r\n" +
" def InitializeComponent(self):\r\n" +
" self._button2 = System.Windows.Forms.Button()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # button2\r\n" +
" # \r\n" +
" self._button2.Location = System.Drawing.Point(75, 39)\r\n" +
" self._button2.Name = \"button2\"\r\n" +
" self._button2.Size = System.Drawing.Size(75, 23)\r\n" +
" self._button2.TabIndex = 1\r\n" +
" self._button2.Text = \"button2\"\r\n" +
" self._button2.KeyDown += self.Button2KeyDown\r\n" +
" # \r\n" +
" # TestForm\r\n" +
" # \r\n" +
" self.Name = \"TestForm\"\r\n" +
" self.Controls.Add(self._button2)\r\n" +
" self.ResumeLayout(False)\r\n";
}
}
[TestFixtureSetUp]
public new void SetUpFixture()
{
base.SetEventPropertyDescriptor(new MockPropertyDescriptor("abc", "Button2KeyDown", true));
base.SetUpFixture();
}
public Button GetButton()
{
return Form.Controls[0] as Button;
}
public EventDescriptor GetButtonKeyDownEventDescriptor()
{
Button button = GetButton();
return TypeDescriptor.GetEvents(button).Find("KeyDown", true);
}
public MockPropertyDescriptor GetButtonKeyDownEventPropertyDescriptor()
{
EventDescriptor eventDescriptor = GetButtonKeyDownEventDescriptor();
return base.GetEventProperty(eventDescriptor) as MockPropertyDescriptor;
}
[Test]
public void PropertyDescriptorSetValueComponentIsForm()
{
Assert.AreEqual(GetButton(), GetButtonKeyDownEventPropertyDescriptor().GetSetValueComponent());
}
}
}

23
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadEventHandlerTestFixture.cs

@ -36,17 +36,34 @@ namespace PythonBinding.Tests.Designer @@ -36,17 +36,34 @@ namespace PythonBinding.Tests.Designer
}
}
[TestFixtureSetUp]
public new void SetUpFixture()
{
base.SetEventPropertyDescriptor(new MockPropertyDescriptor("abc", "TestFormLoad", true));
base.SetUpFixture();
}
public EventDescriptor GetLoadEventDescriptor()
{
return TypeDescriptor.GetEvents(Form).Find("Load", true);
}
public MockPropertyDescriptor GetLoadEventPropertyDescriptor()
{
EventDescriptor loadEventDescriptor = GetLoadEventDescriptor();
return base.GetEventProperty(loadEventDescriptor) as MockPropertyDescriptor;
}
[Test]
public void EventPropertyDescriptorValueSetToEventHandlerMethodName()
{
EventDescriptor loadEventDescriptor = GetLoadEventDescriptor();
PropertyDescriptor property = base.GetEventProperty(loadEventDescriptor);
Assert.AreEqual("TestFormLoad", property.GetValue(Form) as String);
Assert.AreEqual("TestFormLoad", GetLoadEventPropertyDescriptor().GetValue(Form) as String);
}
[Test]
public void PropertyDescriptorSetValueComponentIsForm()
{
Assert.AreEqual(Form, GetLoadEventPropertyDescriptor().GetSetValueComponent());
}
}
}

19
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormTestFixtureBase.cs

@ -30,7 +30,9 @@ namespace PythonBinding.Tests.Designer @@ -30,7 +30,9 @@ namespace PythonBinding.Tests.Designer
List <CreatedInstance> createdInstances = new List<CreatedInstance>();
List <AddedComponent> addedComponents = new List<AddedComponent>();
List<string> typeNames = new List<string>();
PropertyDescriptor propertyDescriptor;
EventDescriptor eventDescriptor;
Form form;
public LoadFormTestFixtureBase()
@ -105,7 +107,20 @@ namespace PythonBinding.Tests.Designer @@ -105,7 +107,20 @@ namespace PythonBinding.Tests.Designer
public PropertyDescriptor GetEventProperty(EventDescriptor e)
{
return new MockPropertyDescriptor("abc", "TestFormLoad", true);
this.eventDescriptor = e;
return propertyDescriptor;
}
public EventDescriptor EventDescriptorPassedToGetEventProperty {
get { return eventDescriptor; }
}
/// <summary>
/// Sets the property descriptor to return from the GetEventProperty method.
/// </summary>
public void SetEventPropertyDescriptor(PropertyDescriptor propertyDescriptor)
{
this.propertyDescriptor = propertyDescriptor;
}
protected Form Form {

1
src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj

@ -174,6 +174,7 @@ @@ -174,6 +174,7 @@
<Compile Include="Designer\LoadAccessibleRoleTestFixture.cs" />
<Compile Include="Designer\LoadAnchorStylesFormTestFixture.cs" />
<Compile Include="Designer\LoadColorFromArgbTestFixture.cs" />
<Compile Include="Designer\LoadControlEventHandlerTestFixture.cs" />
<Compile Include="Designer\LoadCursorTestFixture.cs" />
<Compile Include="Designer\LoadEventHandlerTestFixture.cs" />
<Compile Include="Designer\LoadFontTestFixture.cs" />

9
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockPropertyDescriptor.cs

@ -15,6 +15,7 @@ namespace PythonBinding.Tests.Utils @@ -15,6 +15,7 @@ namespace PythonBinding.Tests.Utils
{
object propertyValue;
bool shouldSerializeValue;
object setValueComponent;
public MockPropertyDescriptor(string name, object value, bool shouldSerializeValue)
: base(name, null)
@ -51,7 +52,13 @@ namespace PythonBinding.Tests.Utils @@ -51,7 +52,13 @@ namespace PythonBinding.Tests.Utils
public override void SetValue(object component, object value)
{
this.propertyValue = value;
setValueComponent = component;
propertyValue = value;
}
public object GetSetValueComponent()
{
return setValueComponent;
}
public override bool ShouldSerializeValue(object component)

Loading…
Cancel
Save