Browse Source

Merge 3.0 to trunk.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4743 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
50f63c242a
  1. BIN
      data/resources/StringResources.de.resources
  2. BIN
      data/resources/StringResources.es-mx.resources
  3. BIN
      data/resources/StringResources.es.resources
  4. BIN
      data/resources/StringResources.nl.resources
  5. 2
      data/resources/image/BitmapResources/BitmapResources.res
  6. BIN
      data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Keyword.png
  7. BIN
      data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Operator.png
  8. 2
      src/AddIns/BackendBindings/Python/PythonBinding.sln
  9. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
  10. 19
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IArrayItem.cs
  11. 69
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs
  12. 376
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDomSerializer.cs
  13. 53
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs
  14. 30
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonContextMenuComponent.cs
  15. 119
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControl.cs
  16. 64
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs
  17. 954
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerComponent.cs
  18. 57
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerComponentFactory.cs
  19. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs
  20. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoader.cs
  21. 169
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerRootComponent.cs
  22. 42
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerTreeNode.cs
  23. 42
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImageListComponent.cs
  24. 144
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonListViewComponent.cs
  25. 75
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTableLayoutPanelComponent.cs
  26. 109
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTreeViewComponent.cs
  27. 65
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/AppendNullPropertyValueTestFixture.cs
  28. 78
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/CallBeginInitOnLoadTestFixture.cs
  29. 61
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/CreateDesignerComponentTests.cs
  30. 92
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeMethodParametersTestFixture.cs
  31. 27
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/EnabledSetUsingPropertyDescriptorTestFixture.cs
  32. 95
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/FindAddRangeMethodTests.cs
  33. 70
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs
  34. 29
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAccessibleRoleFormTestFixture.cs
  35. 77
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAddRangeForNonComponentTestFixture.cs
  36. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAutoScaleModeFormTestFixture.cs
  37. 27
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAutoScrollFormTestFixture.cs
  38. 27
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateBackgroundWorkerTestFixture.cs
  39. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateButtonFlatAppearanceTestFixture.cs
  40. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs
  41. 35
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateContextMenuStripTestFixture.cs
  42. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateCursorFormTestFixture.cs
  43. 37
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateCustomCollectionItemsTestFixture.cs
  44. 17
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateDataSetTestFixture.cs
  45. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateDoubleBufferedFormTestFixture.cs
  46. 24
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateEventHandlerFormTestFixture.cs
  47. 17
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateEventLogTestFixture.cs
  48. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormColorTestFixture.cs
  49. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormLocationTestFixture.cs
  50. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormPaddingTestFixture.cs
  51. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormResourcesTestFixture.cs
  52. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateImageListResourcesTestFixture.cs
  53. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateImeModeFormTestFixture.cs
  54. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedFormTestFixture.cs
  55. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedProtectedPanelFormTestFixture.cs
  56. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedToolTipTestFixture.cs
  57. 43
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewGroupsTestFixture.cs
  58. 158
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewItemTestFixture.cs
  59. 76
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewSubItemsTestFixture.cs
  60. 87
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewWithImageListTestFixture.cs
  61. 65
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateLocalImageResourceTestFixture.cs
  62. 10
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs
  63. 12
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs
  64. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMinSizeFormTestFixture.cs
  65. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMonthCalendarTestFixture.cs
  66. 16
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs
  67. 21
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs
  68. 17
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateRichTextBoxTestFixture.cs
  69. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateRightToLeftFormTestFixture.cs
  70. 41
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateSimpleFormTestFixture.cs
  71. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTableLayoutPanelTestFixture.cs
  72. 108
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs
  73. 25
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTimerTestFixture.cs
  74. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateToolTipFormTestFixture.cs
  75. 79
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTreeViewTestFixture.cs
  76. 17
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratedControlOrderingTestFixture.cs
  77. 11
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratorMergeFindsInitializeComponentsTestFixture.cs
  78. 46
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GetSerializableContentPropertiesTestFixture.cs
  79. 87
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs
  80. 86
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IsSitedComponentTests.cs
  81. 64
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadLocalVariablePropertyAssignmentTestFixture.cs
  82. 15
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/MergeFormTestFixture.cs
  83. 9
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/NoNewLineAfterInitializeComponentTestFixture.cs
  84. 12
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/ProjectRootNamespacePassedToMergeTestFixture.cs
  85. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonDesignerLoaderTestFixture.cs
  86. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/RemoveMainMenuStripFromFormTestFixture.cs
  87. 9
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/TextEditorIndentPassedToGeneratorTestFixture.cs
  88. 63
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/UnknownTypeTestFixture.cs
  89. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassWithCtorTestFixture.cs
  90. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassWithMethodTestFixture.cs
  91. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs
  92. 11
      src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
  93. 123
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Strings.resx
  94. 4
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonDesignerLoader.cs
  95. 19
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockDesignerGenerator.cs
  96. 6
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockMethod.cs
  97. 26
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/NullPropertyUserControl.cs
  98. 48
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/SupportInitCustomControl.cs
  99. 6
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/XmlDesignerNameCreationService.cs
  100. 8
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
data/resources/StringResources.de.resources

Binary file not shown.

BIN
data/resources/StringResources.es-mx.resources

Binary file not shown.

BIN
data/resources/StringResources.es.resources

Binary file not shown.

BIN
data/resources/StringResources.nl.resources

Binary file not shown.

2
data/resources/image/BitmapResources/BitmapResources.res

@ -267,6 +267,7 @@ Icons.16x16.SharpQuery.Remove = SharpQueryIcons\Icons.16x16.Sh @@ -267,6 +267,7 @@ Icons.16x16.SharpQuery.Remove = SharpQueryIcons\Icons.16x16.Sh
Icons.16x16.NameSpace = ClassBrowserIcons\Icons.16x16.NameSpace.png
Icons.16x16.Literal = ClassBrowserIcons\Icons.16x16.Literal.png
Icons.16x16.Reference = ClassBrowserIcons\Icons.16x16.Reference.png
Icons.16x16.Keyword = ClassBrowserIcons\Icons.16x16.Keyword.png
Icons.16x16.Class = ClassBrowserIcons\Icons.16x16.Class.png
@ -275,6 +276,7 @@ Icons.16x16.Enum = ClassBrowserIcons\Icons.16x1 @@ -275,6 +276,7 @@ Icons.16x16.Enum = ClassBrowserIcons\Icons.16x1
Icons.16x16.Interface = ClassBrowserIcons\Icons.16x16.Interface.png
Icons.16x16.Delegate = ClassBrowserIcons\Icons.16x16.Delegate.png
Icons.16x16.Method = ClassBrowserIcons\Icons.16x16.Method.png
Icons.16x16.Operator = ClassBrowserIcons\Icons.16x16.Operator.png
Icons.16x16.Property = ClassBrowserIcons\Icons.16x16.Property.png
Icons.16x16.Indexer = ClassBrowserIcons\Icons.16x16.Indexer.png
Icons.16x16.Field = ClassBrowserIcons\Icons.16x16.Field.png

BIN
data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Keyword.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Operator.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

2
src/AddIns/BackendBindings/Python/PythonBinding.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
# SharpDevelop 3.1.0.4070
# SharpDevelop 3.1.0.4603
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}"

15
src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj

@ -70,7 +70,6 @@ @@ -70,7 +70,6 @@
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\AddInOptions.cs" />
<Compile Include="Src\CompilingOptionsPanel.cs" />
<Compile Include="Src\IArrayItem.cs" />
<Compile Include="Src\IComponentCreator.cs" />
<Compile Include="Src\IMemberProvider.cs" />
<Compile Include="Src\IPadDescriptor.cs" />
@ -81,30 +80,24 @@ @@ -81,30 +80,24 @@
<Compile Include="Src\PythonCodeCompletionBinding.cs" />
<Compile Include="Src\PythonCodeDeserializer.cs" />
<Compile Include="Src\PythonCodeBuilder.cs" />
<Compile Include="Src\PythonCodeDomSerializer.cs" />
<Compile Include="Src\PythonCompilerError.cs" />
<Compile Include="Src\PythonCompilerSink.cs" />
<Compile Include="Src\PythonConsole.cs" />
<Compile Include="Src\PythonConsoleCompletionDataProvider.cs" />
<Compile Include="Src\PythonConsoleHost.cs" />
<Compile Include="Src\PythonConsolePad.cs" />
<Compile Include="Src\PythonContextMenuComponent.cs" />
<Compile Include="Src\PythonControlFieldExpression.cs" />
<Compile Include="Src\PythonDesignerComponent.cs" />
<Compile Include="Src\PythonDesignerComponentFactory.cs" />
<Compile Include="Src\PythonControlFieldExpression.cs">
</Compile>
<Compile Include="Src\PythonDesignerGenerator.cs" />
<Compile Include="Src\PythonDesignerLoader.cs" />
<Compile Include="Src\PythonDesignerLoaderProvider.cs" />
<Compile Include="Src\PythonDesignerRootComponent.cs" />
<Compile Include="Src\PythonDesignerTreeNode.cs" />
<Compile Include="Src\PythonExpressionFinder.cs" />
<Compile Include="Src\PythonControl.cs" />
<Compile Include="Src\PythonFormsDesignerDisplayBinding.cs" />
<Compile Include="Src\PythonComponentWalker.cs" />
<Compile Include="Src\PythonComponentWalkerException.cs" />
<Compile Include="Src\PythonImageListComponent.cs" />
<Compile Include="Src\PythonProjectBinding.cs" />
<Compile Include="Src\PythonLanguageProperties.cs" />
<Compile Include="Src\PythonListViewComponent.cs" />
<Compile Include="Src\PythonOptionsPanel.cs" />
<Compile Include="Src\PythonOutputStream.cs" />
<Compile Include="Src\PythonOutputWindowPadDescriptor.cs" />
@ -113,8 +106,6 @@ @@ -113,8 +106,6 @@
<Compile Include="Src\PythonProject.cs" />
<Compile Include="Src\PythonPropertyValueAssignment.cs" />
<Compile Include="Src\PythonResolver.cs" />
<Compile Include="Src\PythonTableLayoutPanelComponent.cs" />
<Compile Include="Src\PythonTreeViewComponent.cs" />
<Compile Include="Src\RunDebugPythonCommand.cs" />
<Compile Include="Src\RunPythonCommand.cs" />
<Compile Include="Src\StandardPythonModules.cs" />

19
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IArrayItem.cs

@ -1,19 +0,0 @@ @@ -1,19 +0,0 @@
// <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;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Represents a named item in an array.
/// </summary>
public interface IArrayItem
{
string Name { get; }
}
}

69
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs

@ -10,6 +10,7 @@ using System.Collections.Generic; @@ -10,6 +10,7 @@ using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Drawing;
using System.Reflection;
using IronPython.Compiler;
using IronPython.Compiler.Ast;
namespace ICSharpCode.PythonBinding
@ -33,19 +34,7 @@ namespace ICSharpCode.PythonBinding @@ -33,19 +34,7 @@ namespace ICSharpCode.PythonBinding
{
List<object> args = new List<object>();
foreach (Arg a in expression.Args) {
ConstantExpression constantExpression = a.Expression as ConstantExpression;
MemberExpression memberExpression = a.Expression as MemberExpression;
CallExpression callExpression = a.Expression as CallExpression;
NameExpression nameExpression = a.Expression as NameExpression;
if (constantExpression != null) {
args.Add(constantExpression.Value);
} else if (memberExpression != null) {
args.Add(Deserialize(memberExpression));
} else if (callExpression != null) {
args.Add(Deserialize(callExpression));
} else if (nameExpression != null) {
args.Add(Deserialize(nameExpression));
}
args.Add(Deserialize(a.Expression));
}
return args;
}
@ -62,15 +51,18 @@ namespace ICSharpCode.PythonBinding @@ -62,15 +51,18 @@ namespace ICSharpCode.PythonBinding
throw new ArgumentNullException("node");
}
MemberExpression memberExpression = node as MemberExpression;
CallExpression callExpression = node as CallExpression;
BinaryExpression binaryExpression = node as BinaryExpression;
if (callExpression != null) {
return Deserialize(callExpression);
} else if (binaryExpression != null) {
return Deserialize(binaryExpression);
} else if (memberExpression != null) {
return Deserialize(memberExpression);
if (node is CallExpression) {
return Deserialize((CallExpression)node);
} else if (node is BinaryExpression) {
return Deserialize((BinaryExpression)node);
} else if (node is MemberExpression) {
return Deserialize((MemberExpression)node);
} else if (node is UnaryExpression) {
return Deserialize((UnaryExpression)node);
} else if (node is ConstantExpression) {
return Deserialize((ConstantExpression)node);
} else if (node is NameExpression) {
return Deserialize((NameExpression)node);
}
return null;
}
@ -137,10 +129,16 @@ namespace ICSharpCode.PythonBinding @@ -137,10 +129,16 @@ namespace ICSharpCode.PythonBinding
/// </summary>
object Deserialize(NameExpression nameExpression)
{
if ("self" == nameExpression.Name.ToString().ToLowerInvariant()) {
string name = nameExpression.Name.ToString();
if ("self" == name.ToLowerInvariant()) {
return componentCreator.RootComponent;
} else {
bool result;
if (Boolean.TryParse(name, out result)) {
return result;
}
}
return null;
return componentCreator.GetInstance(name);
}
Type GetType(PythonControlFieldExpression field)
@ -207,5 +205,28 @@ namespace ICSharpCode.PythonBinding @@ -207,5 +205,28 @@ namespace ICSharpCode.PythonBinding
}
return null;
}
object Deserialize(UnaryExpression expression)
{
object rhs = Deserialize(expression.Expression);
switch (expression.Op) {
case PythonOperator.Negate:
return Negate(rhs);
}
return rhs;
}
object Negate(object value)
{
if (value is int) {
return -1 * (int)value;
}
return value;
}
object Deserialize(ConstantExpression expression)
{
return expression.Value;
}
}
}

376
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDomSerializer.cs

@ -0,0 +1,376 @@ @@ -0,0 +1,376 @@
// <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.CodeDom;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Used to generate Python code after the form has been changed in the designer.
/// </summary>
public class PythonCodeDomSerializer
{
PythonCodeBuilder codeBuilder;
string indentString = String.Empty;
string rootResourceName = String.Empty;
IDesignerSerializationManager serializationManager;
public PythonCodeDomSerializer()
: this("\t")
{
}
public PythonCodeDomSerializer(string indentString)
{
this.indentString = indentString;
}
// public string GenerateInitializeComponentMethod(IDesignerHost host, IDesignerSerializationManager serializationManager)
// {
// return GenerateInitializeComponentMethod(host, serializationManager, String.Empty);
// }
//
// public string GenerateInitializeComponentMethod(IDesignerHost host, IDesignerSerializationManager serializationManager, string rootNamespace)
// {
// CodeMemberMethod method = FindInitializeComponentMethod(host, serializationManager);
//
// codeBuilder = new PythonCodeBuilder();
// codeBuilder.IndentString = indentString;
// codeBuilder.AppendIndentedLine("def " + method.Name + "(self):");
// codeBuilder.IncreaseIndent();
//
// GetResourceRootName(rootNamespace, host.RootComponent);
// AppendStatements(method.Statements);
//
// return codeBuilder.ToString();
// }
public string GenerateInitializeComponentMethodBody(IDesignerHost host, IDesignerSerializationManager serializationManager)
{
return GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty);
}
public string GenerateInitializeComponentMethodBody(IDesignerHost host, IDesignerSerializationManager serializationManager, string rootNamespace)
{
return GenerateInitializeComponentMethodBody(host, serializationManager, rootResourceName, 0);
}
public string GenerateInitializeComponentMethodBody(IDesignerHost host, IDesignerSerializationManager serializationManager, string rootNamespace, int initialIndent)
{
codeBuilder = new PythonCodeBuilder(initialIndent);
codeBuilder.IndentString = indentString;
CodeMemberMethod method = FindInitializeComponentMethod(host, serializationManager);
GetResourceRootName(rootNamespace, host.RootComponent);
AppendStatements(method.Statements);
return codeBuilder.ToString();
}
CodeMemberMethod FindInitializeComponentMethod(IDesignerHost host, IDesignerSerializationManager serializationManager)
{
this.serializationManager = serializationManager;
object rootComponent = host.RootComponent;
TypeCodeDomSerializer serializer = serializationManager.GetSerializer(rootComponent.GetType(), typeof(TypeCodeDomSerializer)) as TypeCodeDomSerializer;
CodeTypeDeclaration typeDec = serializer.Serialize(serializationManager, rootComponent, host.Container.Components) as CodeTypeDeclaration;
foreach (CodeTypeMember member in typeDec.Members) {
CodeMemberMethod method = member as CodeMemberMethod;
if (method != null) {
if (method.Name == "InitializeComponent") {
return method;
}
}
}
return null;
}
void AppendStatements(CodeStatementCollection statements)
{
foreach (CodeStatement statement in statements) {
AppendStatement(statement);
}
}
void AppendStatement(CodeStatement statement)
{
if (statement is CodeExpressionStatement) {
AppendExpressionStatement((CodeExpressionStatement)statement);
} else if (statement is CodeCommentStatement) {
AppendCommentStatement((CodeCommentStatement)statement);
} else if (statement is CodeAssignStatement) {
AppendAssignStatement((CodeAssignStatement)statement);
} else if (statement is CodeVariableDeclarationStatement) {
AppendVariableDeclarationStatement((CodeVariableDeclarationStatement)statement);
} else if (statement is CodeAttachEventStatement) {
AppendAttachEventStatement((CodeAttachEventStatement)statement);
} else {
Console.WriteLine("AppendStatement: " + statement.GetType().Name);
}
}
void AppendExpressionStatement(CodeExpressionStatement statement)
{
codeBuilder.AppendIndented(String.Empty);
AppendExpression(statement.Expression);
codeBuilder.AppendLine();
}
void AppendCommentStatement(CodeCommentStatement statement)
{
codeBuilder.AppendIndented(String.Empty);
codeBuilder.Append("# ");
codeBuilder.Append(statement.Comment.Text);
codeBuilder.AppendLine();
}
void AppendExpression(CodeExpression expression)
{
if (expression is CodeMethodInvokeExpression) {
AppendMethodInvokeExpression((CodeMethodInvokeExpression)expression);
} else if (expression is CodePropertyReferenceExpression) {
AppendPropertyReferenceExpression((CodePropertyReferenceExpression)expression);
} else if (expression is CodeObjectCreateExpression) {
AppendObjectCreateExpression((CodeObjectCreateExpression)expression);
} else if (expression is CodePrimitiveExpression) {
AppendPrimitiveExpression((CodePrimitiveExpression)expression);
} else if (expression is CodeFieldReferenceExpression) {
AppendFieldReferenceExpression((CodeFieldReferenceExpression)expression);
} else if (expression is CodeThisReferenceExpression) {
AppendThisReferenceExpression();
} else if (expression is CodeTypeReferenceExpression) {
AppendTypeReferenceExpression((CodeTypeReferenceExpression)expression);
} else if (expression is CodeArrayCreateExpression) {
AppendArrayCreateExpression((CodeArrayCreateExpression)expression);
} else if (expression is CodeVariableReferenceExpression) {
AppendVariableReferenceExpression((CodeVariableReferenceExpression)expression);
} else if (expression is CodeDelegateCreateExpression) {
AppendDelegateCreateExpression((CodeDelegateCreateExpression)expression);
} else if (expression is CodeCastExpression) {
AppendCastExpression((CodeCastExpression)expression);
} else {
Console.WriteLine("AppendExpression: " + expression.GetType().Name);
}
}
/// <summary>
/// Appends a method call (e.g. "self.SuspendLayout()");
/// </summary>
void AppendMethodInvokeExpression(CodeMethodInvokeExpression expression)
{
AppendMethodReferenceExpression(expression.Method);
AppendParameters(expression.Parameters);
}
void AppendMethodReferenceExpression(CodeMethodReferenceExpression expression)
{
AppendExpression(expression.TargetObject);
codeBuilder.Append(".");
codeBuilder.Append(expression.MethodName);
}
void AppendParameters(CodeExpressionCollection parameters)
{
codeBuilder.Append("(");
bool firstParameter = true;
foreach (CodeExpression expression in parameters) {
if (firstParameter) {
firstParameter = false;
} else {
codeBuilder.Append(", ");
}
AppendExpression(expression);
}
codeBuilder.Append(")");
}
void AppendAssignStatement(CodeAssignStatement statement)
{
codeBuilder.AppendIndented(String.Empty);
AppendExpression(statement.Left);
codeBuilder.Append(" = ");
AppendExpression(statement.Right);
codeBuilder.AppendLine();
}
void AppendPropertyReferenceExpression(CodePropertyReferenceExpression expression)
{
AppendExpression(expression.TargetObject);
codeBuilder.Append(".");
codeBuilder.Append(expression.PropertyName);
}
void AppendObjectCreateExpression(CodeObjectCreateExpression expression)
{
AppendTypeReference(expression.CreateType);
AppendParameters(expression.Parameters);
}
/// <summary>
/// Appends a constant (e.g. string or int).
/// </summary>
void AppendPrimitiveExpression(CodePrimitiveExpression expression)
{
codeBuilder.Append(PythonPropertyValueAssignment.ToString(expression.Value));
}
void AppendFieldReferenceExpression(CodeFieldReferenceExpression expression)
{
AppendExpression(expression.TargetObject);
codeBuilder.Append(".");
if (expression.FieldName != null) {
if (expression.TargetObject is CodeThisReferenceExpression) {
if (!IsInherited(expression.FieldName)) {
codeBuilder.Append("_");
}
}
codeBuilder.Append(expression.FieldName);
}
}
void AppendThisReferenceExpression()
{
codeBuilder.Append("self");
}
void AppendTypeReferenceExpression(CodeTypeReferenceExpression expression)
{
AppendTypeReference(expression.Type);
}
void AppendTypeReference(CodeTypeReference typeRef)
{
codeBuilder.Append(typeRef.BaseType);
}
/// <summary>
/// Creates an array expression:
///
/// (System.Array[System.Object](\r\n" +
/// ["aaa",
/// "bbb",
/// "ccc\"]))
/// </summary>
void AppendArrayCreateExpression(CodeArrayCreateExpression expression)
{
codeBuilder.Append("System.Array[");
AppendTypeReference(expression.CreateType);
codeBuilder.Append("]");
AppendInitializers(expression.Initializers);
}
/// <summary>
/// Appends initializers for an array.
/// </summary>
void AppendInitializers(CodeExpressionCollection initalizers)
{
codeBuilder.Append("(");
codeBuilder.AppendLine();
codeBuilder.IncreaseIndent();
codeBuilder.AppendIndented("[");
bool firstInitializer = true;
foreach (CodeExpression expression in initalizers) {
if (firstInitializer) {
firstInitializer = false;
} else {
codeBuilder.Append(",");
codeBuilder.AppendLine();
codeBuilder.AppendIndented(String.Empty);
}
AppendExpression(expression);
}
codeBuilder.Append("])");
codeBuilder.DecreaseIndent();
}
/// <summary>
/// Appends a local variable declaration.
/// </summary>
void AppendVariableDeclarationStatement(CodeVariableDeclarationStatement statement)
{
if (statement.Name == "resources") {
codeBuilder.AppendIndented("resources = System.Resources.ResourceManager(\"");
codeBuilder.Append(rootResourceName);
codeBuilder.Append("\", System.Reflection.Assembly.GetEntryAssembly())");
codeBuilder.AppendLine();
} else {
codeBuilder.AppendIndented(statement.Name);
codeBuilder.Append(" = ");
AppendExpression(statement.InitExpression);
codeBuilder.AppendLine();
}
}
void AppendVariableReferenceExpression(CodeVariableReferenceExpression expression)
{
codeBuilder.Append(expression.VariableName);
}
void AppendAttachEventStatement(CodeAttachEventStatement statement)
{
codeBuilder.AppendIndented(String.Empty);
AppendExpression(statement.Event.TargetObject);
codeBuilder.Append(".");
codeBuilder.Append(statement.Event.EventName);
codeBuilder.Append(" += ");
AppendExpression(statement.Listener);
codeBuilder.AppendLine();
}
void AppendDelegateCreateExpression(CodeDelegateCreateExpression expression)
{
AppendExpression(expression.TargetObject);
codeBuilder.Append(".");
codeBuilder.Append(expression.MethodName);
}
void GetResourceRootName(string rootNamespace, IComponent component)
{
rootResourceName = component.Site.Name;
if (!String.IsNullOrEmpty(rootNamespace)) {
rootResourceName = rootNamespace + "." + rootResourceName;
}
}
void AppendCastExpression(CodeCastExpression expression)
{
AppendExpression(expression.Expression);
}
bool IsInherited(string componentName)
{
return IsInherited(serializationManager.GetInstance(componentName));
}
static bool IsInherited(object component)
{
InheritanceAttribute attribute = GetInheritanceAttribute(component);
if (attribute != null) {
return attribute.InheritanceLevel != InheritanceLevel.NotInherited;
}
return false;
}
static InheritanceAttribute GetInheritanceAttribute(object component)
{
if (component != null) {
AttributeCollection attributes = TypeDescriptor.GetAttributes(component);
return attributes[typeof(InheritanceAttribute)] as InheritanceAttribute;
}
return null;
}
}
}

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

@ -16,6 +16,7 @@ using System.Reflection; @@ -16,6 +16,7 @@ using System.Reflection;
using System.Resources;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.Core;
using IronPython.Compiler.Ast;
namespace ICSharpCode.PythonBinding
@ -111,7 +112,10 @@ namespace ICSharpCode.PythonBinding @@ -111,7 +112,10 @@ namespace ICSharpCode.PythonBinding
} else if (lhsNameExpression != null) {
CallExpression callExpression = node.Right as CallExpression;
if (callExpression != null) {
CreateInstance(lhsNameExpression.Name.ToString(), callExpression);
object instance = CreateInstance(lhsNameExpression.Name.ToString(), callExpression);
if (instance == null) {
ThrowCouldNotFindTypeException(callExpression.Target as MemberExpression);
}
}
}
}
@ -148,7 +152,7 @@ namespace ICSharpCode.PythonBinding @@ -148,7 +152,7 @@ namespace ICSharpCode.PythonBinding
return false;
}
fieldExpression.SetPropertyValue(componentCreator, node.Name.ToString());
fieldExpression.SetPropertyValue(componentCreator, node);
return false;
}
@ -275,7 +279,7 @@ namespace ICSharpCode.PythonBinding @@ -275,7 +279,7 @@ namespace ICSharpCode.PythonBinding
} else if (IsResource(memberExpression)) {
fieldExpression.SetPropertyValue(componentCreator, GetResource(node));
} else {
throw new PythonComponentWalkerException(String.Format("Could not find type '{0}'.", PythonControlFieldExpression.GetMemberName(memberExpression)));
ThrowCouldNotFindTypeException(memberExpression);
}
}
} else if (node.Target is IndexExpression) {
@ -292,11 +296,6 @@ namespace ICSharpCode.PythonBinding @@ -292,11 +296,6 @@ namespace ICSharpCode.PythonBinding
/// </summary>
void WalkMethodCall(CallExpression node)
{
if (node.Args.Length == 0) {
// Ignore method calls with no parameters.
return;
}
// Try to get the object being called. Try the form first then
// look for other controls.
object member = PythonControlFieldExpression.GetMember(component, node);
@ -308,10 +307,40 @@ namespace ICSharpCode.PythonBinding @@ -308,10 +307,40 @@ namespace ICSharpCode.PythonBinding
// Execute the method on the object.
if (member != null) {
object[] args = deserializer.GetArguments(node).ToArray();
member.GetType().InvokeMember(field.MethodName, BindingFlags.InvokeMethod, Type.DefaultBinder, member, args);
InvokeMethod(member, field.MethodName, args);
}
}
void InvokeMethod(object obj, string name, object[] args)
{
Type type = obj.GetType();
try {
type.InvokeMember(name, BindingFlags.InvokeMethod, Type.DefaultBinder, obj, args);
} catch (MissingMethodException ex) {
// Look for an explicitly implemented interface.
MethodInfo method = FindInterfaceMethod(type, name);
if (method != null) {
method.Invoke(obj, args);
} else {
throw ex;
}
}
}
/// <summary>
/// Looks for an explicitly implemented interface.
/// </summary>
MethodInfo FindInterfaceMethod(Type type, string name)
{
string nameMatch = "." + name;
foreach (MethodInfo method in type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)) {
if (method.Name.EndsWith(nameMatch)) {
return method;
}
}
return null;
}
/// <summary>
/// Creates a new instance with the specified name.
/// </summary>
@ -368,5 +397,11 @@ namespace ICSharpCode.PythonBinding @@ -368,5 +397,11 @@ namespace ICSharpCode.PythonBinding
object array = deserializer.Deserialize(callExpression);
fieldExpression.SetPropertyValue(componentCreator, array);
}
void ThrowCouldNotFindTypeException(MemberExpression memberExpression)
{
string typeName = PythonControlFieldExpression.GetMemberName(memberExpression);
throw new PythonComponentWalkerException(String.Format(StringParser.Parse("${res:ICSharpCode.PythonBinding.UnknownTypeName}"), typeName));
}
}
}

30
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonContextMenuComponent.cs

@ -1,30 +0,0 @@ @@ -1,30 +0,0 @@
// <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.ComponentModel;
namespace ICSharpCode.PythonBinding
{
public class PythonContextMenuComponent : PythonDesignerComponent
{
public PythonContextMenuComponent(PythonDesignerComponent parent, IComponent component)
: base(parent, component)
{
}
/// <summary>
/// Always ignore the OwnerItem property. This is set if the context menu is open and displayed in
/// the designer when the user switches to the source tab. This method works around the problem by
/// ignoring the OwnerItem property when generating the form designer code.
/// </summary>
protected override bool IgnoreProperty(PropertyDescriptor property)
{
return property.Name == "OwnerItem";
}
}
}

119
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControl.cs

@ -1,119 +0,0 @@ @@ -1,119 +0,0 @@
// <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.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using ICSharpCode.TextEditor.Document;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Represents a form or user control in the designer. Used to generate
/// Python code after the form has been changed in the designer.
/// </summary>
public class PythonControl
{
PythonCodeBuilder codeBuilder;
string indentString = String.Empty;
IResourceService resourceService;
public PythonControl()
: this("\t")
{
}
public PythonControl(string indentString)
: this(indentString, null)
{
this.indentString = indentString;
}
public PythonControl(string indentString, IResourceService resourceService)
{
this.indentString = indentString;
this.resourceService = resourceService;
}
/// <summary>
/// Generates python code for the InitializeComponent method based on the controls added to the form.
/// </summary>
public string GenerateInitializeComponentMethod(Control control)
{
return GenerateInitializeComponentMethod(control, String.Empty);
}
/// <summary>
/// Generates python code for the InitializeComponent method based on the controls added to the form.
/// </summary>
public string GenerateInitializeComponentMethod(Control control, string rootNamespace)
{
PythonCodeBuilder methodCodeBuilder = new PythonCodeBuilder();
methodCodeBuilder.IndentString = indentString;
methodCodeBuilder.AppendIndentedLine("def InitializeComponent(self):");
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
codeBuilder.IncreaseIndent();
PythonDesignerRootComponent rootComponent = GenerateInitializeComponentMethodBodyInternal(control, rootNamespace);
rootComponent.GenerateResources(resourceService);
methodCodeBuilder.Append(codeBuilder.ToString());
return methodCodeBuilder.ToString();
}
/// <summary>
/// Generates the InitializeComponent method body.
/// </summary>
public string GenerateInitializeComponentMethodBody(Control control, int initialIndent)
{
return GenerateInitializeComponentMethodBody(control, String.Empty, initialIndent);
}
/// <summary>
/// Generates the InitializeComponent method body.
/// </summary>
public string GenerateInitializeComponentMethodBody(Control control, string rootNamespace, int initialIndent)
{
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
for (int i = 0; i < initialIndent; ++i) {
codeBuilder.IncreaseIndent();
}
PythonDesignerRootComponent rootComponent = GenerateInitializeComponentMethodBodyInternal(control, rootNamespace);
rootComponent.GenerateResources(resourceService);
return codeBuilder.ToString();
}
PythonDesignerRootComponent GenerateInitializeComponentMethodBodyInternal(Control control, string rootNamespace)
{
PythonDesignerRootComponent rootDesignerComponent = PythonDesignerComponentFactory.CreateDesignerRootComponent(control, rootNamespace);
rootDesignerComponent.AppendCreateContainerComponents(codeBuilder);
rootDesignerComponent.AppendSupportInitializeComponentsBeginInit(codeBuilder);
rootDesignerComponent.AppendChildComponentsSuspendLayout(codeBuilder);
rootDesignerComponent.AppendSuspendLayout(codeBuilder);
rootDesignerComponent.AppendComponent(codeBuilder);
rootDesignerComponent.AppendChildComponentsResumeLayout(codeBuilder);
rootDesignerComponent.AppendSupportInitializeComponentsEndInit(codeBuilder);
rootDesignerComponent.AppendResumeLayout(codeBuilder);
return rootDesignerComponent;
}
}
}

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

@ -261,6 +261,30 @@ namespace ICSharpCode.PythonBinding @@ -261,6 +261,30 @@ namespace ICSharpCode.PythonBinding
return currentComponent;
}
/// <summary>
/// Sets the property value that is referenced by this field expression.
/// </summary>
/// <remarks>
/// This method checks that the name expression matches a created instance before
/// converting the name expression as a string and setting the property value.
/// </remarks>
public bool SetPropertyValue(IComponentCreator componentCreator, NameExpression nameExpression)
{
object component = GetComponent(componentCreator);
PropertyDescriptor property = GetProperty(component, memberName);
if (property != null) {
string name = nameExpression.Name.ToString();
if (property.PropertyType != typeof(bool)) {
object instance = componentCreator.GetInstance(name);
if (instance != null) {
return SetPropertyValue(component, memberName, instance);
}
}
return SetPropertyValue(component, memberName, name);
}
return false;
}
/// <summary>
/// Sets the property value that is referenced by this field expression.
/// </summary>
@ -270,13 +294,7 @@ namespace ICSharpCode.PythonBinding @@ -270,13 +294,7 @@ namespace ICSharpCode.PythonBinding
/// </remarks>
public bool SetPropertyValue(IComponentCreator componentCreator, object propertyValue)
{
object component = null;
if (IsSelfReference) {
component = GetObject(componentCreator);
component = GetObjectForMemberName(component);
} else {
component = componentCreator.GetInstance(variableName);
}
object component = GetComponent(componentCreator);
return SetPropertyValue(component, memberName, propertyValue);
}
@ -311,6 +329,9 @@ namespace ICSharpCode.PythonBinding @@ -311,6 +329,9 @@ namespace ICSharpCode.PythonBinding
obj = componentCreator.GetInstance(variableName);
if (obj == null) {
obj = GetInheritedObject(memberName, componentCreator.RootComponent);
if ((obj == null) && !IsSelfReference) {
obj = componentCreator.GetInstance(fullMemberName);
}
}
}
@ -334,7 +355,10 @@ namespace ICSharpCode.PythonBinding @@ -334,7 +355,10 @@ namespace ICSharpCode.PythonBinding
public static object GetMember(object obj, CallExpression expression)
{
string[] memberNames = GetMemberNames(expression.Target as MemberExpression);
return GetMember(obj, memberNames, 1, memberNames.Length - 2);
if (ContainsSelfReference(memberNames)) {
return GetMember(obj, memberNames, 1, memberNames.Length - 2);
}
return null;
}
/// <summary>
@ -343,7 +367,7 @@ namespace ICSharpCode.PythonBinding @@ -343,7 +367,7 @@ namespace ICSharpCode.PythonBinding
/// <param name="startIndex">The point at which to start looking in the memberNames.</param>
/// <param name="endIndex">The last memberNames item to look at.</param>
static object GetMember(object obj, string[] memberNames, int startIndex, int endIndex)
{
{
for (int i = startIndex; i <= endIndex; ++i) {
Type type = obj.GetType();
string name = memberNames[i];
@ -437,7 +461,7 @@ namespace ICSharpCode.PythonBinding @@ -437,7 +461,7 @@ namespace ICSharpCode.PythonBinding
/// </summary>
static bool SetPropertyValue(object component, string name, object propertyValue)
{
PropertyDescriptor property = TypeDescriptor.GetProperties(component).Find(name, true);
PropertyDescriptor property = GetProperty(component, name);
if (property != null) {
propertyValue = ConvertPropertyValue(property, propertyValue);
property.SetValue(component, propertyValue);
@ -445,5 +469,25 @@ namespace ICSharpCode.PythonBinding @@ -445,5 +469,25 @@ namespace ICSharpCode.PythonBinding
}
return false;
}
/// <summary>
/// Gets the component that this field refers to.
/// </summary>
object GetComponent(IComponentCreator componentCreator)
{
object component = null;
if (IsSelfReference) {
component = GetObject(componentCreator);
component = GetObjectForMemberName(component);
} else {
component = componentCreator.GetInstance(variableName);
}
return component;
}
static PropertyDescriptor GetProperty(object component, string name)
{
return TypeDescriptor.GetProperties(component).Find(name, true);
}
}
}

954
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerComponent.cs

@ -1,954 +0,0 @@ @@ -1,954 +0,0 @@
// <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;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Globalization;
using System.Drawing;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Represents an IComponent in the designer.
/// </summary>
public class PythonDesignerComponent
{
delegate void AppendCollectionContent(PythonCodeBuilder codeBuilder, object item, int count);
IComponent component;
static readonly Attribute[] notDesignOnlyFilter = new Attribute[] { DesignOnlyAttribute.No };
static readonly DesignerSerializationVisibility[] notHiddenDesignerVisibility = new DesignerSerializationVisibility[] { DesignerSerializationVisibility.Content, DesignerSerializationVisibility.Visible };
static readonly DesignerSerializationVisibility[] contentDesignerVisibility = new DesignerSerializationVisibility[] { DesignerSerializationVisibility.Content };
IEventBindingService eventBindingService;
PythonDesignerComponent parent;
Dictionary<string, object> resources = new Dictionary<string, object>();
List<PythonDesignerComponent> designerContainerComponents;
protected static readonly string[] suspendLayoutMethods = new string[] {"SuspendLayout()"};
protected static readonly string[] resumeLayoutMethods = new string[] {"ResumeLayout(False)", "PerformLayout()"};
/// <summary>
/// Used so the EventBindingService.GetEventProperty method can be called to get the property descriptor
/// for an event.
/// </summary>
class PythonEventBindingService : EventBindingService
{
public PythonEventBindingService()
: base(new ServiceContainer())
{
}
protected override string CreateUniqueMethodName(IComponent component, EventDescriptor e)
{
return String.Empty;
}
protected override ICollection GetCompatibleMethods(EventDescriptor e)
{
return new ArrayList();
}
protected override bool ShowCode()
{
return false;
}
protected override bool ShowCode(int lineNumber)
{
return false;
}
protected override bool ShowCode(IComponent component, EventDescriptor e, string methodName)
{
return false;
}
}
public PythonDesignerComponent(IComponent component)
: this(null, component)
{
}
public PythonDesignerComponent(PythonDesignerComponent parent, IComponent component)
: this(parent, component, new PythonEventBindingService())
{
}
PythonDesignerComponent(PythonDesignerComponent parent, IComponent component, IEventBindingService eventBindingService)
{
this.parent = parent;
this.component = component;
this.eventBindingService = eventBindingService;
}
/// <summary>
/// Gets a list of properties that should be serialized for the specified form.
/// </summary>
public static PropertyDescriptorCollection GetSerializableProperties(object obj)
{
return GetSerializableProperties(obj, notHiddenDesignerVisibility);
}
/// <summary>
/// Gets a list of properties that should have their content serialized for the specified form.
/// </summary>
public static PropertyDescriptorCollection GetSerializableContentProperties(object obj)
{
return GetSerializableProperties(obj, contentDesignerVisibility);
}
/// <summary>
/// Gets the serializable properties with the specified designer serialization visibility.
/// </summary>
public static PropertyDescriptorCollection GetSerializableProperties(object obj, DesignerSerializationVisibility[] visibility)
{
List<DesignerSerializationVisibility> requiredVisibility = new List<DesignerSerializationVisibility>(visibility);
List<PropertyDescriptor> properties = new List<PropertyDescriptor>();
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(obj, notDesignOnlyFilter).Sort()) {
if (requiredVisibility.Contains(property.SerializationVisibility)) {
if (property.ShouldSerializeValue(obj)) {
properties.Add(property);
}
}
}
return new PropertyDescriptorCollection(properties.ToArray());
}
/// <summary>
/// Checks whether the method is marked with the DesignerSerializationVisibility.Hidden attribute.
/// </summary>
public static bool IsHiddenFromDesignerSerializer(MethodInfo methodInfo)
{
foreach (DesignerSerializationVisibilityAttribute attribute in methodInfo.GetCustomAttributes(typeof(DesignerSerializationVisibilityAttribute), true)) {
if (attribute.Visibility == DesignerSerializationVisibility.Hidden) {
return true;
}
}
return false;
}
/// <summary>
/// Returns true if the component has the DesignTimeVisible attribute set to false.
/// </summary>
public static bool IsHiddenFromDesigner(IComponent component)
{
foreach (DesignTimeVisibleAttribute attribute in component.GetType().GetCustomAttributes(typeof(DesignTimeVisibleAttribute), true)) {
return !attribute.Visible;
}
return false;
}
/// <summary>
/// Gets the AddRange method on the object that is not hidden from the designer.
/// </summary>
public static MethodInfo GetAddRangeSerializationMethod(object obj)
{
foreach (MethodInfo methodInfo in obj.GetType().GetMethods()) {
if (methodInfo.Name == "AddRange") {
ParameterInfo[] parameters = methodInfo.GetParameters();
if (parameters.Length == 1) {
if (parameters[0].ParameterType.IsArray) {
if (!IsHiddenFromDesignerSerializer(methodInfo)) {
return methodInfo;
}
}
}
}
}
return null;
}
/// <summary>
/// Gets the component type.
/// </summary>
public Type GetComponentType()
{
return component.GetType();
}
/// <summary>
/// Gets the Add serialization method that is not hidden from the designer.
/// </summary>
public static MethodInfo GetAddSerializationMethod(object obj)
{
foreach (MethodInfo methodInfo in obj.GetType().GetMethods()) {
if (methodInfo.Name == "Add") {
return methodInfo;
}
}
return null;
}
/// <summary>
/// Gets the type used in the array for the first parameter to the method.
/// </summary>
public static Type GetArrayParameterType(MethodInfo methodInfo)
{
if (methodInfo != null) {
ParameterInfo[] parameters = methodInfo.GetParameters();
if (parameters.Length > 0) {
Type arrayType = parameters[0].ParameterType;
return arrayType.GetElementType();
}
}
return null;
}
/// <summary>
/// Appends code that creates an instance of the component.
/// </summary>
public virtual void AppendCreateInstance(PythonCodeBuilder codeBuilder)
{
string parameters = String.Empty;
if (HasIContainerConstructor()) {
codeBuilder.InsertCreateComponentsContainer();
parameters = "self._components";
}
AppendComponentCreation(codeBuilder, component, parameters);
}
/// <summary>
/// Appends the code to create the child components.
/// </summary>
public void AppendCreateChildComponents(PythonCodeBuilder codeBuilder)
{
AppendCreateChildComponents(codeBuilder, GetChildComponents());
}
/// <summary>
/// Adds all the components that have been added to the design surface container.
/// </summary>
public void AppendCreateContainerComponents(PythonCodeBuilder codeBuilder)
{
AppendCreateChildComponents(codeBuilder, GetContainerComponents());
}
/// <summary>
/// Gets all the components added to the design surface container excluding the
/// root component.
/// </summary>
public PythonDesignerComponent[] GetContainerComponents()
{
if (designerContainerComponents == null) {
designerContainerComponents = new List<PythonDesignerComponent>();
ComponentCollection components = Component.Site.Container.Components;
for (int i = 1; i < components.Count; ++i) {
PythonDesignerComponent designerComponent = PythonDesignerComponentFactory.CreateDesignerComponent(this, components[i]);
if (!designerComponent.IsInheritedReadOnly) {
designerContainerComponents.Add(designerComponent);
}
}
}
return designerContainerComponents.ToArray();
}
/// <summary>
/// Appends the component's properties.
/// </summary>
public virtual void AppendComponent(PythonCodeBuilder codeBuilder)
{
AppendComponentProperties(codeBuilder);
}
/// <summary>
/// Determines whether the object is an IComponent and has a non-null ISite.
/// </summary>
public static bool IsSitedComponent(object obj)
{
IComponent component = obj as IComponent;
if (component != null) {
return component.Site != null;
}
return false;
}
/// <summary>
/// Determines whether this designer component is sited.
/// </summary>
public bool IsSited {
get { return IsSitedComponent(component); }
}
/// <summary>
/// Returns true if the component has an InheritanceAttribute set to InheritanceLevel.Inherited or
/// InheritanceLevel.InheritedReadOnly
/// </summary>
public static bool IsInheritedComponent(object component)
{
if (component != null) {
InheritanceAttribute attribute = GetInheritanceAttribute(component);
return attribute.InheritanceLevel != InheritanceLevel.NotInherited;
}
return false;
}
/// <summary>
/// Returns true if the component has an InheritanceAttribute set to InheritanceLevel.Inherited or
/// InheritanceLevel.InheritedReadOnly
/// </summary>
public bool IsInherited {
get { return IsInheritedComponent(component); }
}
/// <summary>
/// Returns true if the component has an InheritanceAttribute set to InheritanceLevel.InheritedReadOnly
/// </summary>
public bool IsInheritedReadOnly {
get {
InheritanceAttribute attribute = GetInheritanceAttribute(component);
if (attribute != null) {
return attribute.InheritanceLevel == InheritanceLevel.InheritedReadOnly;
}
return false;
}
}
public static InheritanceAttribute GetInheritanceAttribute(object component)
{
if (component != null) {
AttributeCollection attributes = TypeDescriptor.GetAttributes(component);
return attributes[typeof(InheritanceAttribute)] as InheritanceAttribute;
}
return null;
}
/// <summary>
/// Gets the child objects that need to be stored in the generated designer code on the specified object.
/// </summary>
/// <remarks>
/// For a MenuStrip the child components include the MenuStrip.Items.
/// For a Control the child components include the Control.Controls.
/// </remarks>
public virtual PythonDesignerComponent[] GetChildComponents()
{
List<PythonDesignerComponent> components = new List<PythonDesignerComponent>();
foreach (PropertyDescriptor property in GetSerializableContentProperties(component)) {
ICollection collection = property.GetValue(component) as ICollection;
if (collection != null) {
foreach (object childObject in collection) {
IComponent childComponent = childObject as IComponent;
if (childComponent != null) {
PythonDesignerComponent designerComponent = PythonDesignerComponentFactory.CreateDesignerComponent(this, childComponent);
if (designerComponent.IsSited) {
components.Add(designerComponent);
}
}
}
}
}
return components.ToArray();
}
/// <summary>
/// Appends SuspendLayout method call if the component has any sited child components.
/// </summary>
public virtual void AppendSuspendLayout(PythonCodeBuilder codeBuilder)
{
if (HasSitedChildComponents()) {
AppendMethodCalls(codeBuilder, suspendLayoutMethods);
}
}
/// <summary>
/// Appends the ResumeLayout and PerformLayout method calls if the component has any sited
/// child components.
/// </summary>
public virtual void AppendResumeLayout(PythonCodeBuilder codeBuilder)
{
if (HasSitedChildComponents()) {
AppendMethodCalls(codeBuilder, resumeLayoutMethods);
}
}
public void AppendChildComponentsSuspendLayout(PythonCodeBuilder codeBuilder)
{
AppendChildComponentsMethodCalls(codeBuilder, suspendLayoutMethods);
}
public void AppendChildComponentsResumeLayout(PythonCodeBuilder codeBuilder)
{
AppendChildComponentsMethodCalls(codeBuilder, resumeLayoutMethods);
}
/// <summary>
/// Appends the code to create the specified object.
/// </summary>
public void AppendCreateInstance(PythonCodeBuilder codeBuilder, object obj, int count, object[] parameters)
{
if (obj is String) {
// Do nothing.
} else {
codeBuilder.AppendIndented(GetVariableName(obj, count) + " = " + obj.GetType().FullName);
codeBuilder.Append("(");
for (int i = 0; i < parameters.Length; ++i) {
if (i > 0) {
codeBuilder.Append(", ");
}
object currentParameter = parameters[i];
Array array = currentParameter as Array;
if (array != null) {
AppendSystemArray(codeBuilder, array.GetValue(0).GetType().FullName, currentParameter as ICollection);
codeBuilder.DecreaseIndent();
} else {
codeBuilder.Append(PythonPropertyValueAssignment.ToString(currentParameter));
}
}
codeBuilder.Append(")");
codeBuilder.AppendLine();
}
}
/// <summary>
/// Appends the code to create the specified IComponent
/// </summary>
public void AppendComponentCreation(PythonCodeBuilder codeBuilder, IComponent component)
{
AppendComponentCreation(codeBuilder, component, String.Empty);
}
/// <summary>
/// Appends the code to create the specified IComponent
/// </summary>
public void AppendComponentCreation(PythonCodeBuilder codeBuilder, IComponent component, string parameters)
{
if (ShouldAppendCollectionContent) {
AppendForEachCollectionContent(codeBuilder, component, AppendCollectionContentCreation);
}
codeBuilder.AppendIndentedLine("self._" + component.Site.Name + " = " + component.GetType().FullName + "(" + parameters + ")");
}
/// <summary>
/// Generates the code for the component's properties.
/// </summary>
public void AppendComponentProperties(PythonCodeBuilder codeBuilder)
{
AppendComponentProperties(codeBuilder, true, true);
}
/// <summary>
/// Generates python code for an object's properties when the object is not an IComponent.
/// </summary>
public void AppendObjectProperties(PythonCodeBuilder codeBuilder, object obj, int count)
{
AppendProperties(codeBuilder, PythonDesignerComponent.GetVariableName(obj, count), obj);
}
/// <summary>
/// Appends the comment lines containing the component name before the component has its properties set.
/// </summary>
///
public void AppendComment(PythonCodeBuilder codeBuilder)
{
codeBuilder.AppendIndentedLine("# ");
codeBuilder.AppendIndentedLine("# " + component.Site.Name);
codeBuilder.AppendIndentedLine("# ");
}
public bool HasSitedChildComponents()
{
return HasSitedComponents(GetChildComponents());
}
/// <summary>
/// Appends the method calls for this component.
/// </summary>
public void AppendMethodCalls(PythonCodeBuilder codeBuilder, string[] methods)
{
foreach (string method in methods) {
codeBuilder.AppendIndentedLine(GetPropertyOwnerName() + "." + method);
}
}
/// <summary>
/// Looks for any collections that have objects that should be created as local variables
/// in the InitializeComponent method.
/// </summary>
public void AppendCollectionContentCreation(PythonCodeBuilder codeBuilder, object item, int count)
{
AppendCreateInstance(codeBuilder, item, count, new object[0]);
}
/// <summary>
/// Looks for any collections that have objects that will have been added as local variables
/// and appends their property values.
/// </summary>
public void AppendCollectionContentProperties(PythonCodeBuilder codeBuilder, object item, int count)
{
AppendProperties(codeBuilder, GetVariableName(item, count), item);
}
/// <summary>
/// Gets the variable name for the specified type.
/// </summary>
/// <remarks>
/// The variable name is simply the type name with the first character in lower case followed by the
/// count.
/// </remarks>
public static string GetVariableName(object obj, int count)
{
string typeName = obj.GetType().Name;
return typeName[0].ToString().ToLowerInvariant() + typeName.Substring(1) + count;
}
/// <summary>
/// Appends an array as a parameter and its associated method call.
/// </summary>
public virtual void AppendMethodCallWithArrayParameter(PythonCodeBuilder codeBuilder, string propertyOwnerName, object propertyOwner, PropertyDescriptor propertyDescriptor)
{
AppendMethodCallWithArrayParameter(codeBuilder, propertyOwnerName, propertyOwner, propertyDescriptor, false);
}
/// <summary>
/// Appends an array as a parameter and its associated method call.
/// </summary>
/// <remarks>
/// Looks for the AddRange method first. If that does not exist or is hidden from the designer the
/// Add method is looked for.
/// </remarks>
public static void AppendMethodCallWithArrayParameter(PythonCodeBuilder codeBuilder, string propertyOwnerName, object propertyOwner, PropertyDescriptor propertyDescriptor, bool reverse)
{
ICollection collectionProperty = propertyDescriptor.GetValue(propertyOwner) as ICollection;
if (collectionProperty != null) {
MethodInfo addRangeMethod = GetAddRangeSerializationMethod(collectionProperty);
if (addRangeMethod != null) {
Type arrayElementType = GetArrayParameterType(addRangeMethod);
AppendSystemArray(codeBuilder, propertyOwnerName, propertyDescriptor.Name + "." + addRangeMethod.Name, arrayElementType.FullName, GetSitedComponentsAndNonComponents(collectionProperty));
} else {
MethodInfo addMethod = GetAddSerializationMethod(collectionProperty);
ParameterInfo[] parameters = addMethod.GetParameters();
if (reverse) {
collectionProperty = ReverseCollection(collectionProperty);
}
foreach (object item in collectionProperty) {
IComponent collectionComponent = item as IComponent;
if (PythonDesignerComponent.IsSitedComponent(collectionComponent) && !PythonDesignerComponent.IsInheritedComponent(collectionComponent)) {
codeBuilder.AppendIndentedLine(propertyOwnerName + "." + propertyDescriptor.Name + "." + addMethod.Name + "(self._" + collectionComponent.Site.Name + ")");
}
}
}
}
}
/// <summary>
/// Appends a property.
/// </summary>
public void AppendProperty(PythonCodeBuilder codeBuilder, string propertyOwnerName, object obj, PropertyDescriptor propertyDescriptor)
{
object propertyValue = propertyDescriptor.GetValue(obj);
ExtenderProvidedPropertyAttribute extender = GetExtenderAttribute(propertyDescriptor);
if (extender != null) {
AppendExtenderProperty(codeBuilder, propertyOwnerName, extender, propertyDescriptor, propertyValue);
} else if (propertyDescriptor.SerializationVisibility == DesignerSerializationVisibility.Visible) {
string propertyName = propertyOwnerName + "." + propertyDescriptor.Name;
IComponent component = propertyValue as IComponent;
if (component != null) {
string componentRef = GetComponentReference(component);
if (componentRef != null) {
codeBuilder.AppendIndentedLine(propertyName + " = " + componentRef);
}
} else if (IsResourcePropertyValue(propertyValue)) {
AppendResourceProperty(codeBuilder, propertyName, propertyValue);
} else if (IsArray(propertyValue)) {
codeBuilder.AppendIndented(propertyName + " = ");
AppendSystemArray(codeBuilder, GetArrayType(propertyValue).FullName, propertyValue as ICollection, false);
codeBuilder.AppendLine();
} else {
codeBuilder.AppendIndentedLine(propertyName + " = " + PythonPropertyValueAssignment.ToString(propertyValue));
}
} else {
// DesignerSerializationVisibility.Content
AppendPropertyContents(codeBuilder, propertyOwnerName, obj, propertyDescriptor);
}
}
/// <summary>
/// Appends an extender provider property.
/// </summary>
public void AppendExtenderProperty(PythonCodeBuilder codeBuilder, string propertyOwnerName, ExtenderProvidedPropertyAttribute extender, PropertyDescriptor propertyDescriptor, object propertyValue)
{
PythonDesignerComponent designerComponent = PythonDesignerComponentFactory.CreateDesignerComponent(extender.Provider as IComponent);
codeBuilder.AppendIndented(designerComponent.GetPropertyOwnerName());
codeBuilder.Append(".Set" + propertyDescriptor.Name);
codeBuilder.Append("(");
codeBuilder.Append(propertyOwnerName);
codeBuilder.Append(", ");
codeBuilder.Append(PythonPropertyValueAssignment.ToString(propertyValue));
codeBuilder.Append(")");
codeBuilder.AppendLine();
}
/// <summary>
/// Appends a property whose value is a resource.
/// </summary>
public void AppendResourceProperty(PythonCodeBuilder codeBuilder, string propertyName, object propertyValue)
{
string resourceName = propertyName.Replace("self._", String.Empty);
resourceName = resourceName.Replace("self.", "$this.");
codeBuilder.AppendIndented(propertyName);
codeBuilder.Append(" = resources.GetObject(\"");
codeBuilder.Append(resourceName);
codeBuilder.Append("\")");
codeBuilder.AppendLine();
resources.Add(resourceName, propertyValue);
}
/// <summary>
/// Returns true if the property value will be obtained from a resource.
/// </summary>
public static bool IsResourcePropertyValue(object propertyValue)
{
return (propertyValue is Image) || (propertyValue is Icon) || (propertyValue is ImageListStreamer);
}
/// <summary>
/// Appends the properties of the object to the code builder.
/// </summary>
public void AppendProperties(PythonCodeBuilder codeBuilder, string propertyOwnerName, object obj)
{
foreach (PropertyDescriptor property in GetSerializableProperties(obj)) {
if (!IgnoreProperty(property)) {
AppendProperty(codeBuilder, propertyOwnerName, obj, property);
}
}
}
/// <summary>
/// Appends the properties of the component.
/// </summary>
public void AppendProperties(PythonCodeBuilder codeBuilder)
{
if (ShouldAppendCollectionContent) {
AppendForEachCollectionContent(codeBuilder, component, AppendCollectionContentProperties);
}
AppendProperties(codeBuilder, GetPropertyOwnerName(), component);
}
/// <summary>
/// Generates python code for the component.
/// </summary>
public void AppendComponentProperties(PythonCodeBuilder codeBuilder, bool addComponentNameToProperty, bool addComment)
{
PythonCodeBuilder propertiesBuilder = new PythonCodeBuilder(codeBuilder.Indent);
propertiesBuilder.IndentString = codeBuilder.IndentString;
AppendProperties(propertiesBuilder);
AppendEventHandlers(propertiesBuilder, eventBindingService);
// Add comment if we have added some properties or event handlers.
if (addComment && propertiesBuilder.Length > 0) {
AppendComment(codeBuilder);
}
codeBuilder.Append(propertiesBuilder.ToString());
}
/// <summary>
/// Generates code that wires an event to an event handler.
/// </summary>
/// <remarks>
/// Note that the EventDescriptorCollection.Sort method does not work if the
/// enumerator is called first. Sorting will only occur if an item is retrieved after calling
/// Sort or CopyTo is called. The PropertyDescriptorCollection class does not behave
/// in the same way.</remarks>
public void AppendEventHandlers(PythonCodeBuilder codeBuilder, IEventBindingService eventBindingService)
{
EventDescriptorCollection events = TypeDescriptor.GetEvents(component, notDesignOnlyFilter).Sort();
if (events.Count > 0) {
EventDescriptor dummyEventDescriptor = events[0];
}
foreach (EventDescriptor eventDescriptor in events) {
AppendEventHandler(codeBuilder, component, eventDescriptor, eventBindingService);
}
}
void AppendEventHandler(PythonCodeBuilder codeBuilder, object component, EventDescriptor eventDescriptor, IEventBindingService eventBindingService)
{
PropertyDescriptor propertyDescriptor = eventBindingService.GetEventProperty(eventDescriptor);
if (propertyDescriptor.ShouldSerializeValue(component)) {
string methodName = (string)propertyDescriptor.GetValue(component);
codeBuilder.AppendIndentedLine(GetPropertyOwnerName() + "." + eventDescriptor.Name + " += self." + methodName);
}
}
/// <summary>
/// Gets the owner of any properties generated (e.g. "self._textBox1").
/// For an inherited component the actual component name is used without any underscore prefix.
/// </summary>
public virtual string GetPropertyOwnerName()
{
string componentName = component.Site.Name;
if (IsInherited) {
return "self." + componentName;
}
return "self._" + componentName;
}
/// <summary>
/// Determines whether the component has a constructor that takes a single IContainer parameter.
/// </summary>
public bool HasIContainerConstructor()
{
foreach (ConstructorInfo constructor in GetComponentType().GetConstructors()) {
ParameterInfo[] parameters = constructor.GetParameters();
if (parameters.Length == 1) {
ParameterInfo parameter = parameters[0];
if (parameter.ParameterType.IsAssignableFrom(typeof(IContainer))) {
return true;
}
}
}
return false;
}
/// <summary>
/// Writes resources for this component to the resource writer.
/// </summary>
public void GenerateResources(IResourceWriter writer)
{
foreach (KeyValuePair<string, object> entry in resources) {
writer.AddResource(entry.Key, entry.Value);
}
}
/// <summary>
/// Returns true if this component has any properties that are resources.
/// </summary>
public bool HasResources {
get { return resources.Count > 0; }
}
/// <summary>
/// Gets the parent of this component.
/// </summary>
public PythonDesignerComponent Parent {
get { return parent; }
}
public static void AppendSystemArray(PythonCodeBuilder codeBuilder, string propertyName, string methodName, string typeName, ICollection components)
{
if (components.Count > 0) {
codeBuilder.AppendIndented(propertyName + "." + methodName + "(");
AppendSystemArray(codeBuilder, typeName, components);
codeBuilder.Append(")");
codeBuilder.AppendLine();
}
}
public static void AppendSystemArray(PythonCodeBuilder codeBuilder, string typeName, ICollection components)
{
AppendSystemArray(codeBuilder, typeName, components, true);
}
/// <summary>
/// Appends an array.
/// </summary>
/// <param name="localVariables">Indicates that the array is for an AddRange method that
/// requires the code to reference local variables.</param>
public static void AppendSystemArray(PythonCodeBuilder codeBuilder, string typeName, ICollection components, bool localVariables)
{
if (components.Count > 0) {
codeBuilder.Append("System.Array[" + typeName + "](");
codeBuilder.AppendLine();
codeBuilder.IncreaseIndent();
int i = 0;
foreach (object component in components) {
if (i == 0) {
codeBuilder.AppendIndented("[");
} else {
codeBuilder.Append(",");
codeBuilder.AppendLine();
codeBuilder.AppendIndented(String.Empty);
}
if (component is IComponent) {
codeBuilder.Append("self._" + ((IComponent)component).Site.Name);
} else if (component is String) {
codeBuilder.Append(PythonPropertyValueAssignment.ToString(component));
} else if (component is IArrayItem) {
codeBuilder.Append(((IArrayItem)component).Name);
} else if (localVariables) {
codeBuilder.Append(GetVariableName(component, i + 1));
} else {
codeBuilder.Append(PythonPropertyValueAssignment.ToString(component));
}
++i;
}
codeBuilder.Append("])");
}
codeBuilder.DecreaseIndent();
}
protected IComponent Component {
get { return component; }
}
/// <summary>
/// Return true to prevent the property from being added to the generated code.
/// </summary>
protected virtual bool IgnoreProperty(PropertyDescriptor property)
{
return false;
}
protected virtual bool ShouldAppendCollectionContent {
get { return true; }
}
static bool HasSitedComponents(PythonDesignerComponent[] components)
{
foreach (PythonDesignerComponent component in components) {
if (component.IsSited && !component.IsInherited) {
return true;
}
}
return false;
}
void AppendCreateChildComponents(PythonCodeBuilder codeBuilder, PythonDesignerComponent[] childComponents)
{
foreach (PythonDesignerComponent designerComponent in childComponents) {
if (designerComponent.IsSited && !designerComponent.IsInherited) {
designerComponent.AppendCreateInstance(codeBuilder);
}
}
}
/// <summary>
/// Returns the sited components in the collection. If an object in the collection is not
/// an IComponent then this is added to the collection.
/// </summary>
static ICollection GetSitedComponentsAndNonComponents(ICollection components)
{
List<object> sitedComponents = new List<object>();
foreach (object obj in components) {
IComponent component = obj as IComponent;
if (component == null || IsSitedComponent(component)) {
sitedComponents.Add(obj);
}
}
return sitedComponents.ToArray();
}
void AppendChildComponentsMethodCalls(PythonCodeBuilder codeBuilder, string[] methods)
{
foreach (PythonDesignerComponent designerComponent in GetChildComponents()) {
if (typeof(Control).IsAssignableFrom(designerComponent.GetComponentType())) {
if (designerComponent.HasSitedChildComponents()) {
designerComponent.AppendMethodCalls(codeBuilder, methods);
}
}
designerComponent.AppendChildComponentsMethodCalls(codeBuilder, methods);
}
}
bool IsRootComponent(IComponent component)
{
if (parent == null) {
return this.component == component;
}
return parent.IsRootComponent(component);
}
string GetComponentReference(IComponent component)
{
if (IsRootComponent(component)) {
return "self";
} else {
foreach (PythonDesignerComponent designerComponent in GetContainerComponents()) {
string name = component.Site.Name;
if ((designerComponent.component == component) && (!String.IsNullOrEmpty(name))) {
return "self._" + name;
}
}
}
return null;
}
static ExtenderProvidedPropertyAttribute GetExtenderAttribute(PropertyDescriptor property)
{
foreach (Attribute attribute in property.Attributes) {
ExtenderProvidedPropertyAttribute extenderAttribute = attribute as ExtenderProvidedPropertyAttribute;
if (extenderAttribute != null) {
return extenderAttribute;
}
}
return null;
}
static ICollection ReverseCollection(ICollection collection)
{
List<object> reversedCollection = new List<object>();
foreach (object item in collection) {
reversedCollection.Add(item);
}
reversedCollection.Reverse();
return reversedCollection;
}
/// <summary>
/// Appends a property that needs its contents serialized.
/// </summary>
void AppendPropertyContents(PythonCodeBuilder codeBuilder, string propertyOwnerName, object propertyOwner, PropertyDescriptor propertyDescriptor)
{
object propertyValue = propertyDescriptor.GetValue(propertyOwner);
if (propertyValue is ICollection) {
AppendMethodCallWithArrayParameter(codeBuilder, propertyOwnerName, propertyOwner, propertyDescriptor);
} else {
propertyOwnerName += "." + propertyDescriptor.Name;
AppendProperties(codeBuilder, propertyOwnerName, propertyValue);
}
}
static Type GetArrayType(object obj)
{
Type type = obj.GetType();
return obj.GetType().GetElementType();
}
static bool IsArray(object obj)
{
if (obj != null) {
return obj.GetType().IsArray;
}
return false;
}
/// <summary>
/// Calls the AppendCollectionContent method for every item in all collections that need their content
/// serialized.
/// </summary>
void AppendForEachCollectionContent(PythonCodeBuilder codeBuilder, object component, AppendCollectionContent appendCollectionContent)
{
foreach (PropertyDescriptor propertyDescriptor in GetSerializableContentProperties(component)) {
object propertyValue = propertyDescriptor.GetValue(component);
ICollection collection = propertyValue as ICollection;
if (collection != null) {
int count = 1;
foreach (object item in collection) {
if (item is IComponent) {
// Ignore.
} else {
appendCollectionContent(codeBuilder, item, count);
}
++count;
}
} else {
// Try child collections.
AppendForEachCollectionContent(codeBuilder, propertyValue, appendCollectionContent);
}
}
}
}
}

57
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerComponentFactory.cs

@ -1,57 +0,0 @@ @@ -1,57 +0,0 @@
// <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.ComponentModel;
using System.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
public class PythonDesignerComponentFactory
{
PythonDesignerComponentFactory()
{
}
/// <summary>
/// Creates a PythonDesignerComponent class for the specified component.
/// </summary>
public static PythonDesignerComponent CreateDesignerComponent(IComponent component)
{
return CreateDesignerComponent(null, component);
}
/// <summary>
/// Creates a PythonDesignerComponent class for the specified component.
/// </summary>
public static PythonDesignerComponent CreateDesignerComponent(PythonDesignerComponent parent, IComponent component)
{
if (component is ListView) {
return new PythonListViewComponent(parent, component);
} else if (component is ContextMenuStrip) {
return new PythonContextMenuComponent(parent, component);
} else if (component is ImageList) {
return new PythonImageListComponent(parent, component);
} else if (component is TreeView) {
return new PythonTreeViewComponent(parent, component);
} else if (component is TableLayoutPanel) {
return new PythonTableLayoutPanelComponent(parent, component);
}
return new PythonDesignerComponent(parent, component);
}
public static PythonDesignerRootComponent CreateDesignerRootComponent(IComponent component)
{
return CreateDesignerRootComponent(component, String.Empty);
}
public static PythonDesignerRootComponent CreateDesignerRootComponent(IComponent component, string rootNamespace)
{
return new PythonDesignerRootComponent(component, rootNamespace);
}
}
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs

@ -12,6 +12,7 @@ using System.Collections; @@ -12,6 +12,7 @@ using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Text;
using System.Windows.Forms;
@ -29,7 +30,7 @@ namespace ICSharpCode.PythonBinding @@ -29,7 +30,7 @@ namespace ICSharpCode.PythonBinding
/// Updates the python form or user control's InitializeComponent method with any
/// changes to the designed form or user control.
/// </summary>
void MergeRootComponentChanges(IComponent component, IResourceService resourceService);
void MergeRootComponentChanges(IDesignerHost host, IDesignerSerializationManager serializationManager);
}
/// <summary>
@ -75,25 +76,25 @@ namespace ICSharpCode.PythonBinding @@ -75,25 +76,25 @@ namespace ICSharpCode.PythonBinding
/// <summary>
/// Updates the InitializeComponent method's body with the generated code.
/// </summary>
public void MergeRootComponentChanges(IComponent component, IResourceService resourceService)
public void MergeRootComponentChanges(IDesignerHost host, IDesignerSerializationManager serializationManager)
{
ParseInformation parseInfo = ParseFile();
Merge(component, ViewContent.DesignerCodeFileDocument, parseInfo.CompilationUnit, textEditorProperties, resourceService);
Merge(host, ViewContent.DesignerCodeFileDocument, parseInfo.CompilationUnit, textEditorProperties, serializationManager);
}
/// <summary>
/// Merges the generated code into the specified document.
/// </summary>
/// <param name="component">The root component in the designer host.</param>
/// <param name="component">The designer host.</param>
/// <param name="document">The document that the generated code will be merged into.</param>
/// <param name="parseInfo">The current compilation unit for the <paramref name="document"/>.</param>
public static void Merge(IComponent component, IDocument document, ICompilationUnit compilationUnit, ICSharpCode.TextEditor.Document.ITextEditorProperties textEditorProperties, IResourceService resourceService)
public static void Merge(IDesignerHost host, IDocument document, ICompilationUnit compilationUnit, ICSharpCode.TextEditor.Document.ITextEditorProperties textEditorProperties, IDesignerSerializationManager serializationManager)
{
// Get the document's initialize components method.
IMethod method = GetInitializeComponents(compilationUnit);
// Generate the python source code.
PythonControl pythonControl = new PythonControl(NRefactoryToPythonConverter.GetIndentString(textEditorProperties), resourceService);
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(NRefactoryToPythonConverter.GetIndentString(textEditorProperties));
int indent = method.Region.BeginColumn;
if (textEditorProperties.ConvertTabsToSpaces) {
indent = (indent / textEditorProperties.IndentationSize);
@ -102,7 +103,7 @@ namespace ICSharpCode.PythonBinding @@ -102,7 +103,7 @@ namespace ICSharpCode.PythonBinding
}
}
string rootNamespace = GetProjectRootNamespace(compilationUnit);
string methodBody = pythonControl.GenerateInitializeComponentMethodBody(component as Control, rootNamespace, indent);
string methodBody = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, rootNamespace, indent);
// Merge the code.
DomRegion methodRegion = GetBodyRegionInDocument(method);

2
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoader.cs

@ -149,7 +149,7 @@ namespace ICSharpCode.PythonBinding @@ -149,7 +149,7 @@ namespace ICSharpCode.PythonBinding
/// </summary>
protected override void PerformFlush(IDesignerSerializationManager serializationManager)
{
generator.MergeRootComponentChanges(LoaderHost.RootComponent, LoaderHost.GetService(typeof(IResourceService)) as IResourceService);
generator.MergeRootComponentChanges(LoaderHost, serializationManager);
}
protected override void PerformLoad(IDesignerSerializationManager serializationManager)

169
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerRootComponent.cs

@ -1,169 +0,0 @@ @@ -1,169 +0,0 @@
// <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.Globalization;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Represents a root component in the designer.
/// </summary>
public class PythonDesignerRootComponent : PythonDesignerComponent
{
string rootNamespace = String.Empty;
public PythonDesignerRootComponent(IComponent component)
: this(component, String.Empty)
{
}
public PythonDesignerRootComponent(IComponent component, string rootNamespace)
: base(null, component)
{
this.rootNamespace = rootNamespace;
}
public override string GetPropertyOwnerName()
{
return "self";
}
public override void AppendSuspendLayout(PythonCodeBuilder codeBuilder)
{
AppendMethodCalls(codeBuilder, suspendLayoutMethods);
}
public override void AppendResumeLayout(PythonCodeBuilder codeBuilder)
{
AppendMethodCalls(codeBuilder, resumeLayoutMethods);
}
public override void AppendComponent(PythonCodeBuilder codeBuilder)
{
// Add the child components first.
foreach (PythonDesignerComponent component in GetContainerComponents()) {
component.AppendComponent(codeBuilder);
}
// Add root component
AppendComponentProperties(codeBuilder, false, true);
if (HasAddedResources()) {
InsertCreateResourceManagerLine(codeBuilder);
}
}
/// <summary>
/// Adds BeginInit method call for any components that implement the
/// System.ComponentModel.ISupportInitialize interface.
/// </summary>
public void AppendSupportInitializeComponentsBeginInit(PythonCodeBuilder codeBuilder)
{
AppendSupportInitializeMethodCalls(codeBuilder, new string[] {"BeginInit()"});
}
/// <summary>
/// Adds EndInit method call for any that implement the
/// System.ComponentModel.ISupportInitialize interface.
/// </summary>
public void AppendSupportInitializeComponentsEndInit(PythonCodeBuilder codeBuilder)
{
AppendSupportInitializeMethodCalls(codeBuilder, new string[] {"EndInit()"});
}
public void AppendSupportInitializeMethodCalls(PythonCodeBuilder codeBuilder, string[] methods)
{
foreach (PythonDesignerComponent component in GetContainerComponents()) {
if (typeof(ISupportInitialize).IsAssignableFrom(component.GetComponentType())) {
component.AppendMethodCalls(codeBuilder, methods);
}
}
}
/// <summary>
/// Reverses the ordering when adding items to the Controls collection.
/// </summary>
public override void AppendMethodCallWithArrayParameter(PythonCodeBuilder codeBuilder, string propertyOwnerName, object propertyOwner, PropertyDescriptor propertyDescriptor)
{
bool reverse = propertyDescriptor.Name == "Controls";
AppendMethodCallWithArrayParameter(codeBuilder, propertyOwnerName, propertyOwner, propertyDescriptor, reverse);
}
/// <summary>
/// Writes resources to file.
/// </summary>
public void GenerateResources(IResourceService resourceService)
{
if (resourceService == null) {
return;
}
using (IResourceWriter writer = resourceService.GetResourceWriter(CultureInfo.InvariantCulture)) {
foreach (PythonDesignerComponent component in GetContainerComponents()) {
component.GenerateResources(writer);
}
GenerateResources(writer);
}
}
public string GetResourceRootName()
{
string componentName = Component.Site.Name;
if (!String.IsNullOrEmpty(rootNamespace)) {
return rootNamespace + "." + componentName;
}
return componentName;
}
void InsertCreateResourceManagerLine(PythonCodeBuilder codeBuilder)
{
StringBuilder line = new StringBuilder();
line.Append("resources = System.Resources.ResourceManager(\"");
line.Append(GetRootComponentRootResourceName());
line.Append("\", System.Reflection.Assembly.GetEntryAssembly())");
codeBuilder.InsertIndentedLine(line.ToString());
}
string GetRootComponentRootResourceName()
{
PythonDesignerComponent component = this;
while (component != null) {
if (component.Parent == null) {
PythonDesignerRootComponent rootComponent = component as PythonDesignerRootComponent;
return rootComponent.GetResourceRootName();
}
component = component.Parent;
}
return String.Empty;
}
/// <summary>
/// Returns true if a resource has been added to any of the form components.
/// </summary>
bool HasAddedResources()
{
if (HasResources) {
return true;
}
foreach (PythonDesignerComponent component in GetContainerComponents()) {
if (component.HasResources) {
return true;
}
}
return false;
}
}
}

42
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerTreeNode.cs

@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
// <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.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
public class PythonDesignerTreeNode : IArrayItem
{
TreeNode node;
int num;
List<PythonDesignerTreeNode> childNodes = new List<PythonDesignerTreeNode>();
public PythonDesignerTreeNode(TreeNode node, int num)
{
this.node = node;
this.num = num;
}
public TreeNode TreeNode {
get { return node; }
}
public int Number {
get { return num; }
}
public string Name {
get { return "treeNode" + num.ToString(); }
}
public List<PythonDesignerTreeNode> ChildNodes {
get { return childNodes; }
}
}
}

42
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImageListComponent.cs

@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
// <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.ComponentModel;
using System.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
public class PythonImageListComponent : PythonDesignerComponent
{
public PythonImageListComponent(IComponent component) : this(null, component)
{
}
public PythonImageListComponent(PythonDesignerComponent parent, IComponent component)
: base(parent, component)
{
}
public override void AppendComponent(PythonCodeBuilder codeBuilder)
{
base.AppendComponent(codeBuilder);
// Add image list keys.
ImageList imageList = (ImageList)Component;
for (int i = 0; i < imageList.Images.Keys.Count; ++i) {
codeBuilder.AppendIndented(GetPropertyOwnerName());
codeBuilder.Append(".Images.SetKeyName(");
codeBuilder.Append(i.ToString());
codeBuilder.Append(", \"");
codeBuilder.Append(imageList.Images.Keys[i]);
codeBuilder.Append("\")");
codeBuilder.AppendLine();
}
}
}
}

144
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonListViewComponent.cs

@ -1,144 +0,0 @@ @@ -1,144 +0,0 @@
// <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.ComponentModel;
using System.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Used to generate code for a ListView component currently being designed.
/// </summary>
public class PythonListViewComponent : PythonDesignerComponent
{
public PythonListViewComponent(IComponent component) : this(null, component)
{
}
public PythonListViewComponent(PythonDesignerComponent parent, IComponent component)
: base(parent, component)
{
}
/// <summary>
/// Appends code that creates an instance of the list view.
/// </summary>
public override void AppendCreateInstance(PythonCodeBuilder codeBuilder)
{
// Append list view item creation first.
int count = 1;
foreach (ListViewItem item in GetListViewItems(Component)) {
AppendCreateInstance(codeBuilder, item, count, GetConstructorParameters(item));
++count;
}
// Append list view group creation.
count = 1;
foreach (ListViewGroup group in GetListViewGroups(Component)) {
AppendCreateInstance(codeBuilder, group, count, new object[0]);
++count;
}
// Append list view creation.
base.AppendCreateInstance(codeBuilder);
}
/// <summary>
/// Appends the component's properties.
/// </summary>
public override void AppendComponent(PythonCodeBuilder codeBuilder)
{
AppendComment(codeBuilder);
AppendListViewItemProperties(codeBuilder);
AppendListViewGroupProperties(codeBuilder);
AppendComponentProperties(codeBuilder, true, false);
}
protected override bool ShouldAppendCollectionContent {
get { return false; }
}
/// <summary>
/// Gets the parameters to the ListViewItem constructor.
/// </summary>
/// <remarks>
/// The constructors that are used:
/// ListViewItem()
/// ListViewItem(string text)
/// ListViewItem(string[] subItems)
/// ListViewItem(string text, int imageIndex)
/// ListViewItem(string text, string imageKey)
/// </remarks>
object[] GetConstructorParameters(ListViewItem item)
{
if (item.SubItems.Count > 1) {
string[] subItems = new string[item.SubItems.Count];
for (int i = 0; i < item.SubItems.Count; ++i) {
subItems[i] = item.SubItems[i].Text;
}
return new object[] {subItems};
}
if (item.ImageIndex != -1) {
return GetConstructorParameters(item.Text, item.ImageIndex);
}
if (!String.IsNullOrEmpty(item.ImageKey)) {
return GetConstructorParameters(item.Text, item.ImageKey);
}
if (String.IsNullOrEmpty(item.Text)) {
return new object[0];
}
return new object[] {item.Text};
}
/// <summary>
/// Creates an object array:
/// [0] = text.
/// [1] = obj.
/// </summary>
object[] GetConstructorParameters(string text, object obj)
{
if (String.IsNullOrEmpty(text)) {
text = String.Empty;
}
return new object[] {text, obj};
}
static ListView.ListViewItemCollection GetListViewItems(IComponent component)
{
ListView listView = (ListView)component;
return listView.Items;
}
static ListViewGroupCollection GetListViewGroups(IComponent component)
{
ListView listView = (ListView)component;
return listView.Groups;
}
void AppendListViewItemProperties(PythonCodeBuilder codeBuilder)
{
int count = 1;
foreach (ListViewItem item in GetListViewItems(Component)) {
AppendObjectProperties(codeBuilder, item, count);
++count;
}
}
void AppendListViewGroupProperties(PythonCodeBuilder codeBuilder)
{
int count = 1;
foreach (ListViewGroup item in GetListViewGroups(Component)) {
AppendObjectProperties(codeBuilder, item, count);
++count;
}
}
}
}

75
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTableLayoutPanelComponent.cs

@ -1,75 +0,0 @@ @@ -1,75 +0,0 @@
// <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;
using System.ComponentModel;
using System.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
public class PythonTableLayoutPanelComponent : PythonDesignerComponent
{
public PythonTableLayoutPanelComponent(PythonDesignerComponent parent, IComponent component)
: base(parent, component)
{
}
public override void AppendMethodCallWithArrayParameter(PythonCodeBuilder codeBuilder, string propertyOwnerName, object propertyOwner, PropertyDescriptor propertyDescriptor)
{
if (IsStylesProperty(propertyDescriptor.Name)) {
ICollection collection = propertyDescriptor.GetValue(propertyOwner) as ICollection;
if (collection != null) {
AppendStylesCollection(codeBuilder, collection, propertyOwnerName);
}
} else {
base.AppendMethodCallWithArrayParameter(codeBuilder, propertyOwnerName, propertyOwner, propertyDescriptor);
}
}
protected override bool ShouldAppendCollectionContent {
get { return false; }
}
bool IsStylesProperty(string name)
{
return "ColumnStyles".Equals(name, StringComparison.InvariantCultureIgnoreCase) || "RowStyles".Equals(name, StringComparison.InvariantCultureIgnoreCase);
}
void AppendStylesCollection(PythonCodeBuilder codeBuilder, ICollection collection, string propertyOwnerName)
{
string newPropertyOwnerName = propertyOwnerName;
SizeType sizeType = SizeType.Absolute;
float width = 0;
foreach (object item in collection) {
ColumnStyle columnStyle = item as ColumnStyle;
RowStyle rowStyle = item as RowStyle;
if (columnStyle != null) {
sizeType = columnStyle.SizeType;
width = columnStyle.Width;
newPropertyOwnerName = propertyOwnerName + ".ColumnStyles";
}
if (rowStyle != null) {
sizeType = rowStyle.SizeType;
width = rowStyle.Height;
newPropertyOwnerName = propertyOwnerName + ".RowStyles";
}
AppendStyle(codeBuilder, newPropertyOwnerName, item.GetType(), sizeType, width);
}
}
void AppendStyle(PythonCodeBuilder codeBuilder, string propertyOwnerName, Type type, SizeType sizeType, float value)
{
codeBuilder.AppendIndented(propertyOwnerName + ".Add(");
codeBuilder.Append(type.FullName + "(");
codeBuilder.Append(typeof(SizeType).FullName + "." + sizeType + ", ");
codeBuilder.Append(value + ")");
codeBuilder.Append(")");
codeBuilder.AppendLine();
}
}
}

109
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTreeViewComponent.cs

@ -1,109 +0,0 @@ @@ -1,109 +0,0 @@
// <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.Windows.Forms;
namespace ICSharpCode.PythonBinding
{
/// <summary>
/// Used to generate code for a TreeView component currently being designed.
/// </summary>
public class PythonTreeViewComponent : PythonDesignerComponent
{
List<PythonDesignerTreeNode> rootTreeNodes;
int treeNodeCount = 1;
public PythonTreeViewComponent(IComponent component) : this(null, component)
{
}
public PythonTreeViewComponent(PythonDesignerComponent parent, IComponent component)
: base(parent, component)
{
}
/// <summary>
/// Appends code that creates an instance of the tree view.
/// </summary>
public override void AppendCreateInstance(PythonCodeBuilder codeBuilder)
{
// Append tree node creation first.
AppendCreateInstance(codeBuilder, GetRootTreeNodes(Component));
// Append tree view creation.
base.AppendCreateInstance(codeBuilder);
}
/// <summary>
/// Appends the component's properties.
/// </summary>
public override void AppendComponent(PythonCodeBuilder codeBuilder)
{
AppendComment(codeBuilder);
AppendTreeNodeProperties(codeBuilder, GetRootTreeNodes(Component));
AppendComponentProperties(codeBuilder, true, false);
}
protected override bool ShouldAppendCollectionContent {
get { return false; }
}
void AppendCreateInstance(PythonCodeBuilder codeBuilder, List<PythonDesignerTreeNode> nodes)
{
object[] parameters = new object[0];
foreach (PythonDesignerTreeNode node in nodes) {
AppendCreateInstance(codeBuilder, node.TreeNode, node.Number, parameters);
AppendCreateInstance(codeBuilder, node.ChildNodes);
}
}
List<PythonDesignerTreeNode> GetRootTreeNodes(IComponent component)
{
if (rootTreeNodes == null) {
rootTreeNodes = new List<PythonDesignerTreeNode>();
TreeView treeView = (TreeView)component;
AddTreeNodes(rootTreeNodes, treeView.Nodes);
}
return rootTreeNodes;
}
void AddTreeNodes(List<PythonDesignerTreeNode> designerNodes, TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes) {
PythonDesignerTreeNode designerNode = new PythonDesignerTreeNode(node, treeNodeCount);
designerNodes.Add(designerNode);
++treeNodeCount;
// Add child nodes.
AddTreeNodes(designerNode.ChildNodes, node.Nodes);
}
}
void AppendTreeNodeProperties(PythonCodeBuilder codeBuilder, List<PythonDesignerTreeNode> nodes)
{
foreach (PythonDesignerTreeNode node in nodes) {
AppendObjectProperties(codeBuilder, node.TreeNode, node.Number);
// Append child nodes to parent tree node.
if (node.ChildNodes.Count > 0) {
codeBuilder.AppendIndented(node.Name);
codeBuilder.Append(".Nodes.AddRange(");
AppendSystemArray(codeBuilder, typeof(TreeNode).FullName, node.ChildNodes);
codeBuilder.Append(")");
codeBuilder.AppendLine();
}
// Append child node properties.
AppendTreeNodeProperties(codeBuilder, node.ChildNodes);
}
}
}
}

65
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/AppendNullPropertyValueTestFixture.cs

@ -7,37 +7,72 @@ @@ -7,37 +7,72 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Tests that a null property value does not cause a NullReferenceException in the
/// PythonControl's AppendProperty method.
/// Tests that a null property value does not cause a NullReferenceException.
/// </summary>
[TestFixture]
public class AppendNullPropertyValueTestFixture
{
string fooBar;
string generatedPythonCode;
public string FooBar {
get { return fooBar; }
set { fooBar = value; }
[TestFixtureSetUp]
public void SetUpFixture()
{
using (DesignSurface designSurface = new DesignSurface(typeof(UserControl))) {
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
IEventBindingService eventBindingService = new MockEventBindingService(host);
UserControl userControl = (UserControl)host.RootComponent;
userControl.ClientSize = new Size(200, 300);
NullPropertyUserControl control = (NullPropertyUserControl)host.CreateComponent(typeof(NullPropertyUserControl), "userControl1");
control.Location = new Point(0, 0);
control.Size = new Size(10, 10);
userControl.Controls.Add(control);
PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(userControl);
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(userControl, "MainControl");
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "self._myObject.FooBar = None\r\n";
PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(this).Find("FooBar", false);
string expectedCode = "self._userControl1 = PythonBinding.Tests.Utils.NullPropertyUserControl()\r\n" +
"self.SuspendLayout()\r\n" +
"# \r\n" +
"# userControl1\r\n" +
"# \r\n" +
"self._userControl1.FooBar = None\r\n" +
"self._userControl1.Location = System.Drawing.Point(0, 0)\r\n" +
"self._userControl1.Name = \"userControl1\"\r\n" +
"self._userControl1.Size = System.Drawing.Size(10, 10)\r\n" +
"self._userControl1.TabIndex = 0\r\n" +
"# \r\n" +
"# MainControl\r\n" +
"# \r\n" +
"self.Controls.Add(self._userControl1)\r\n" +
"self.Name = \"MainControl\"\r\n" +
"self.Size = System.Drawing.Size(200, 300)\r\n" +
"self.ResumeLayout(False)\r\n";
PythonDesignerComponent designerComponent = new PythonDesignerComponent(null);
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
designerComponent.AppendProperty(codeBuilder, "self._myObject", this, propertyDescriptor);
string generatedCode = codeBuilder.ToString();
Assert.AreEqual(expectedCode, generatedCode, generatedCode);
}
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

78
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/CallBeginInitOnLoadTestFixture.cs

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
// <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.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Tests that the control's BeginInit and EndInit methods are called.
/// </summary>
[TestFixture]
public class CallBeginInitOnLoadTestFixture : LoadFormTestFixtureBase
{
public override string PythonCode {
get {
ComponentCreator.AddType("PythonBinding.Tests.Utils.SupportInitCustomControl", typeof(SupportInitCustomControl));
return "class TestForm(System.Windows.Forms.Form):\r\n" +
" def InitializeComponent(self):\r\n" +
" self._control = PythonBinding.Tests.Utils.SupportInitCustomControl()\r\n" +
" self._control.BeginInit()\r\n" +
" localVariable = PythonBinding.Tests.Utils.SupportInitCustomControl()\r\n" +
" localVariable.BeginInit()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # TestForm\r\n" +
" # \r\n" +
" self.AccessibleRole = System.Windows.Forms.AccessibleRole.None\r\n" +
" self.Controls.Add(self._control)\r\n" +
" self.Name = \"TestForm\"\r\n" +
" self._control.EndInit()\r\n" +
" localVariable.EndInit()\r\n" +
" self.ResumeLayout(False)\r\n";
}
}
public SupportInitCustomControl Control {
get { return Form.Controls[0] as SupportInitCustomControl; }
}
public SupportInitCustomControl LocalControl {
get { return base.ComponentCreator.GetInstance("localVariable") as SupportInitCustomControl; }
}
[Test]
public void BeginInitCalled()
{
Assert.IsTrue(Control.IsBeginInitCalled);
}
[Test]
public void EndInitCalled()
{
Assert.IsTrue(Control.IsEndInitCalled);
}
[Test]
public void BeginInitCalledOnLocalVariable()
{
Assert.IsTrue(LocalControl.IsBeginInitCalled);
}
[Test]
public void EndInitCalledOnLocalVariable()
{
Assert.IsTrue(LocalControl.IsEndInitCalled);
}
}
}

61
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/CreateDesignerComponentTests.cs

@ -1,61 +0,0 @@ @@ -1,61 +0,0 @@
// <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.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Tests the PythonControl's CreateDesignerComponent method.
/// </summary>
[TestFixture]
public class CreateDesignerComponentTests
{
[Test]
public void ListViewComponent()
{
using (ListView listView = new ListView()) {
Assert.IsInstanceOf(typeof(PythonListViewComponent), PythonDesignerComponentFactory.CreateDesignerComponent(listView));
}
}
[Test]
public void TextBoxComponent()
{
using (TextBox textBox = new TextBox()) {
Assert.IsInstanceOf(typeof(PythonDesignerComponent), PythonDesignerComponentFactory.CreateDesignerComponent(textBox));
}
}
[Test]
public void CreateRootDesigner()
{
using (TextBox textBox = new TextBox()) {
Assert.IsInstanceOf(typeof(PythonDesignerRootComponent), PythonDesignerComponentFactory.CreateDesignerRootComponent(textBox));
}
}
[Test]
public void ImageListComponent()
{
using (ImageList imageList = new ImageList()) {
Assert.IsInstanceOf(typeof(PythonImageListComponent), PythonDesignerComponentFactory.CreateDesignerComponent(imageList));
}
}
[Test]
public void TreeViewComponent()
{
using (TreeView treeView = new TreeView()) {
Assert.IsInstanceOf(typeof(PythonTreeViewComponent), PythonDesignerComponentFactory.CreateDesignerComponent(treeView));
}
}
}
}

92
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeMethodParametersTestFixture.cs

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
// <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.Windows.Forms;
using ICSharpCode.PythonBinding;
using IronPython.Compiler.Ast;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
[TestFixture]
public class DeserializeCallParametersTestFixture
{
PythonCodeDeserializer deserializer;
MockComponentCreator componentCreator;
[SetUp]
public void Init()
{
componentCreator = new MockComponentCreator();
MockDesignerLoaderHost mockDesignerLoaderHost = new MockDesignerLoaderHost();
deserializer = new PythonCodeDeserializer(componentCreator);
}
[Test]
public void NegativeIntegerParameter()
{
List<object> expectedArgs = new List<object>();
expectedArgs.Add(-1);
string code = "TestClass(-1)";
CallExpression callExpression = PythonParserHelper.GetCallExpression(code);
List<object> args = deserializer.GetArguments(callExpression);
Assert.AreEqual(expectedArgs, args);
}
[Test]
public void EnumParameter()
{
List<object> expectedArgs = new List<object>();
expectedArgs.Add(AnchorStyles.Top);
string code = "TestClass(System.Windows.Forms.AnchorStyles.Top)";
CallExpression callExpression = PythonParserHelper.GetCallExpression(code);
List<object> args = deserializer.GetArguments(callExpression);
Assert.AreEqual(expectedArgs, args);
}
[Test]
public void BooleanParameter()
{
List<object> expectedArgs = new List<object>();
expectedArgs.Add(true);
string code = "TestClass(True)";
CallExpression callExpression = PythonParserHelper.GetCallExpression(code);
List<object> args = deserializer.GetArguments(callExpression);
Assert.AreEqual(expectedArgs, args);
}
[Test]
public void LocalVariableInstance()
{
string s = "abc";
CreatedInstance instance = new CreatedInstance(typeof(string), new object[0], "localVariable", false);
instance.Object = s;
componentCreator.CreatedInstances.Add(instance);
List<object> expectedArgs = new List<object>();
expectedArgs.Add(s);
string code = "TestClass(localVariable)";
CallExpression callExpression = PythonParserHelper.GetCallExpression(code);
List<object> args = deserializer.GetArguments(callExpression);
Assert.AreEqual(expectedArgs, args);
}
}
}

27
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/EnabledSetUsingPropertyDescriptorTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -43,25 +44,25 @@ namespace PythonBinding.Tests.Designer @@ -43,25 +44,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor enabledPropertyDescriptor = descriptors.Find("Enabled", false);
enabledPropertyDescriptor.SetValue(form, false);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Enabled = False\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
string expectedCode = "self.SuspendLayout()\r\n" +
"# \r\n" +
"# MainForm\r\n" +
"# \r\n" +
"self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
"self.Enabled = False\r\n" +
"self.Name = \"MainForm\"\r\n" +
"self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

95
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/FindAddRangeMethodTests.cs

@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
// <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.Reflection;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Tests that the AddRange or Add method that takes an array of items can be determined.
/// </summary>
[TestFixture]
public class FindAddRangeMethodTests
{
[Test]
public void MenuStripItemsAddRangeMethod()
{
using (MenuStrip menuStrip = new MenuStrip()) {
MethodInfo expectedMethodInfo = FindMethod(menuStrip.Items, "AddRange", typeof(ToolStripItem[]));
Assert.IsNotNull(expectedMethodInfo);
Assert.AreSame(expectedMethodInfo, PythonDesignerComponent.GetAddRangeSerializationMethod(menuStrip.Items));
}
}
[Test]
public void GetArrayParameterType()
{
using (MenuStrip menuStrip = new MenuStrip()) {
MethodInfo methodInfo = FindMethod(menuStrip.Items, "AddRange", typeof(ToolStripItem[]));
Assert.AreEqual(typeof(ToolStripItem), PythonDesignerComponent.GetArrayParameterType(methodInfo));
}
}
[Test]
public void GetArrayParameterTypeFromMethodWithNoParameters()
{
MethodInfo methodInfo = typeof(String).GetMethod("Clone");
Assert.IsNull(PythonDesignerComponent.GetArrayParameterType(methodInfo));
}
[Test]
public void GetArrayParameterTypeWithNullMethodInfo()
{
Assert.IsNull(PythonDesignerComponent.GetArrayParameterType(null));
}
/// <summary>
/// Form.Controls.AddRange() method should not be returned since it is marked with
/// DesignerSerializationVisibility.Hidden.
/// </summary>
[Test]
public void FormControlsAddRangeMethodNotFound()
{
using (Form form = new Form()) {
Assert.IsNull(PythonDesignerComponent.GetAddRangeSerializationMethod(form.Controls));
}
}
[Test]
public void FormControlsAddMethod()
{
using (Form form = new Form()) {
MethodInfo expectedMethodInfo = FindMethod(form.Controls, "Add", typeof(Control));
Assert.IsNotNull(expectedMethodInfo);
Assert.AreSame(expectedMethodInfo, PythonDesignerComponent.GetAddSerializationMethod(form.Controls));
}
}
static MethodInfo FindMethod(object obj, string methodName, Type parameterType)
{
foreach (MethodInfo methodInfo in obj.GetType().GetMethods()) {
if (methodInfo.Name == methodName) {
ParameterInfo[] parameters = methodInfo.GetParameters();
if (parameters.Length == 1) {
ParameterInfo param = parameters[0];
if (param.ParameterType == parameterType) {
return methodInfo;
}
}
}
}
return null;
}
}
}

70
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs

@ -22,8 +22,6 @@ namespace PythonBinding.Tests.Designer @@ -22,8 +22,6 @@ namespace PythonBinding.Tests.Designer
public class GenerateAcceptButtonFormTestFixture
{
string generatedPythonCode;
PythonDesignerComponent[] formChildComponents;
PythonDesignerComponent[] buttonChildComponents;
[TestFixtureSetUp]
public void SetUpFixture()
@ -48,57 +46,37 @@ namespace PythonBinding.Tests.Designer @@ -48,57 +46,37 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
formChildComponents = PythonDesignerComponentFactory.CreateDesignerComponent(form).GetChildComponents();
buttonChildComponents = PythonDesignerComponentFactory.CreateDesignerComponent(button).GetChildComponents();
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._button1 = System.Windows.Forms.Button()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # button1\r\n" +
" # \r\n" +
" self._button1.Location = System.Drawing.Point(0, 0)\r\n" +
" self._button1.Name = \"button1\"\r\n" +
" self._button1.Size = System.Drawing.Size(10, 10)\r\n" +
" self._button1.TabIndex = 0\r\n" +
" self._button1.Text = \"button1\"\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.AcceptButton = self._button1\r\n" +
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._button1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
string expectedCode = "self._button1 = System.Windows.Forms.Button()\r\n" +
"self.SuspendLayout()\r\n" +
"# \r\n" +
"# button1\r\n" +
"# \r\n" +
"self._button1.Location = System.Drawing.Point(0, 0)\r\n" +
"self._button1.Name = \"button1\"\r\n" +
"self._button1.Size = System.Drawing.Size(10, 10)\r\n" +
"self._button1.TabIndex = 0\r\n" +
"self._button1.Text = \"button1\"\r\n" +
"# \r\n" +
"# MainForm\r\n" +
"# \r\n" +
"self.AcceptButton = self._button1\r\n" +
"self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
"self.Controls.Add(self._button1)\r\n" +
"self.Name = \"MainForm\"\r\n" +
"self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}
[Test]
public void FormHasOneChildComponent()
{
Assert.AreEqual(1, formChildComponents.Length);
}
[Test]
public void FormChildComponentIsButton()
{
Assert.AreEqual(typeof(Button), formChildComponents[0].GetComponentType());
}
[Test]
public void ButtonHasNoChildComponents()
{
Assert.AreEqual(0, buttonChildComponents.Length);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

29
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAccessibleRoleFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -37,27 +38,27 @@ namespace PythonBinding.Tests.Designer @@ -37,27 +38,27 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.AccessibleRole = System.Windows.Forms.AccessibleRole.None\r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
string expectedCode = "self.SuspendLayout()\r\n" +
"# \r\n" +
"# MainForm\r\n" +
"# \r\n" +
"self.AccessibleRole = System.Windows.Forms.AccessibleRole.None\r\n" +
"self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
"self.Name = \"MainForm\"\r\n" +
"self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

77
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAddRangeForNonComponentTestFixture.cs

@ -1,77 +0,0 @@ @@ -1,77 +0,0 @@
// <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;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
class NonComponentToolbar
{
NonComponentToolbarToolsCollection tools = new NonComponentToolbarToolsCollection();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public NonComponentToolbarToolsCollection Tools {
get { return tools; }
}
}
class NonComponentToolbarToolsCollection : CollectionBase
{
public void Add(string s)
{
InnerList.Add(s);
}
public void AddRange(string[] strings)
{
InnerList.AddRange(strings);
}
}
/// <summary>
/// Tests that we can generate python code for a property which is not an IComponent and one of
/// its properties is a collection that needs its content generated as code.
///
/// class Toolbar : IDisposable
/// {
/// [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
/// public ToolsCollection Tools { get; }
/// }
///
/// class ToolsCollection : CollectionBase
/// {
/// }
/// </summary>
[TestFixture]
public class GenerateAddRangeForNonComponentTestFixture
{
[Test]
public void GenerateAddRangeCode()
{
NonComponentToolbar toolbar = new NonComponentToolbar();
toolbar.Tools.Add("One");
PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(toolbar).Find("Tools", true);
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
PythonDesignerComponent.AppendMethodCallWithArrayParameter(codeBuilder, "self.ReportViewer.Toolbar", toolbar, propertyDescriptor, false);
string expectedCode = "self.ReportViewer.Toolbar.Tools.AddRange(System.Array[System.String](\r\n" +
" [\"One\"]))\r\n";
Assert.AreEqual(expectedCode, codeBuilder.ToString(), codeBuilder.ToString());
}
}
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAutoScaleModeFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -51,17 +52,18 @@ namespace PythonBinding.Tests.Designer @@ -51,17 +52,18 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor autoScaleDimensionsDescriptor = descriptors.Find("AutoScaleDimensions", false);
autoScaleDimensionsDescriptor.SetValue(form, new SizeF(6F, 13F));
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
@ -69,8 +71,7 @@ namespace PythonBinding.Tests.Designer @@ -69,8 +71,7 @@ namespace PythonBinding.Tests.Designer
" self.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font\r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

27
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAutoScrollFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer @@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.AutoScroll = True\r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
string expectedCode = "self.SuspendLayout()\r\n" +
"# \r\n" +
"# MainForm\r\n" +
"# \r\n" +
"self.AutoScroll = True\r\n" +
"self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
"self.Name = \"MainForm\"\r\n" +
"self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

27
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateBackgroundWorkerTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -20,7 +21,6 @@ namespace PythonBinding.Tests.Designer @@ -20,7 +21,6 @@ namespace PythonBinding.Tests.Designer
public class GenerateBackgroundWorkerTestFixture
{
string generatedPythonCode;
bool hasIContainerConstructor;
[TestFixtureSetUp]
public void SetUpFixture()
@ -39,20 +39,18 @@ namespace PythonBinding.Tests.Designer @@ -39,20 +39,18 @@ namespace PythonBinding.Tests.Designer
propertyDescriptor = descriptors.Find("WorkerReportsProgress", false);
propertyDescriptor.SetValue(worker, true);
PythonDesignerComponent component = new PythonDesignerComponent(worker);
hasIContainerConstructor = component.HasIContainerConstructor();
string indentString = " ";
PythonControl pythonControl = new PythonControl(indentString);
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._backgroundWorker1 = System.ComponentModel.BackgroundWorker()\r\n" +
string expectedCode = " self._backgroundWorker1 = System.ComponentModel.BackgroundWorker()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # backgroundWorker1\r\n" +
@ -63,16 +61,9 @@ namespace PythonBinding.Tests.Designer @@ -63,16 +61,9 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode, generatedPythonCode);
}
[Test]
public void HasIContainerConstructor()
{
Assert.IsFalse(hasIContainerConstructor);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

13
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateButtonFlatAppearanceTestFixture.cs

@ -48,16 +48,18 @@ namespace PythonBinding.Tests.Designer @@ -48,16 +48,18 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._button1 = System.Windows.Forms.Button()\r\n" +
string expectedCode = " self._button1 = System.Windows.Forms.Button()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # button1\r\n" +
@ -76,8 +78,7 @@ namespace PythonBinding.Tests.Designer @@ -76,8 +78,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._button1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs

@ -47,16 +47,18 @@ namespace PythonBinding.Tests.Designer @@ -47,16 +47,18 @@ namespace PythonBinding.Tests.Designer
form.Controls.Add(comboBox);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._comboBox1 = System.Windows.Forms.ComboBox()\r\n" +
string expectedCode = " self._comboBox1 = System.Windows.Forms.ComboBox()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # comboBox1\r\n" +
@ -75,10 +77,9 @@ namespace PythonBinding.Tests.Designer @@ -75,10 +77,9 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._comboBox1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

35
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateContextMenuStripTestFixture.cs

@ -22,9 +22,7 @@ namespace PythonBinding.Tests.Designer @@ -22,9 +22,7 @@ namespace PythonBinding.Tests.Designer
public class GenerateContextMenuStripTestFixture
{
string generatedPythonCode;
string createContextMenuStripCode;
Size menuStripSize;
PythonDesignerComponent contextMenuDesignerComponent;
[TestFixtureSetUp]
public void SetUpFixture()
@ -53,22 +51,18 @@ namespace PythonBinding.Tests.Designer @@ -53,22 +51,18 @@ namespace PythonBinding.Tests.Designer
menuStrip.RightToLeft = RightToLeft.No;
menuStripSize = menuStrip.Size;
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
contextMenuDesignerComponent = PythonDesignerComponentFactory.CreateDesignerComponent(menuStrip);
contextMenuDesignerComponent.AppendCreateInstance(codeBuilder);
createContextMenuStripCode = codeBuilder.ToString();
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._components = System.ComponentModel.Container()\r\n" +
string expectedCode = " self._components = System.ComponentModel.Container()\r\n" +
" self._timer1 = System.Windows.Forms.Timer(self._components)\r\n" +
" self._contextMenuStrip1 = System.Windows.Forms.ContextMenuStrip(self._components)\r\n" +
" self.SuspendLayout()\r\n" +
@ -82,24 +76,9 @@ namespace PythonBinding.Tests.Designer @@ -82,24 +76,9 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
[Test]
public void CreateContextMenuStripCodeUsesIContainerConstructor()
{
string expectedCode = "self._components = System.ComponentModel.Container()\r\n" +
"self._contextMenuStrip1 = System.Windows.Forms.ContextMenuStrip(self._components)\r\n";
Assert.AreEqual(expectedCode, createContextMenuStripCode);
}
[Test]
public void ContextMenuDesignerComponentCreatedFromFactory()
{
Assert.IsInstanceOf(typeof(PythonContextMenuComponent), contextMenuDesignerComponent);
}
}
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateCursorFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer @@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Cursor = System.Windows.Forms.Cursors.Help\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

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

@ -45,22 +45,31 @@ namespace PythonBinding.Tests.Designer @@ -45,22 +45,31 @@ namespace PythonBinding.Tests.Designer
CustomUserControl userControl = (CustomUserControl)host.CreateComponent(typeof(CustomUserControl), "userControl1");
userControl.Location = new Point(0, 0);
userControl.ClientSize = new Size(200, 100);
userControl.FooItems.Add(new FooItem("aa"));
userControl.FooItems.Add(new FooItem("bb"));
userControl.ParentComponent.ParentBarItems.Add(new BarItem("cc"));
userControl.ParentComponent.ParentBarItems.Add(new BarItem("dd"));
form.Controls.Add(userControl);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host);
IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager;
using (designerSerializationManager.CreateSession()) {
FooItem fooItem = (FooItem)serializationManager.CreateInstance(typeof(FooItem), new object[] {"aa"}, "fooItem1", false);
userControl.FooItems.Add(fooItem);
fooItem = (FooItem)serializationManager.CreateInstance(typeof(FooItem), new object[] {"bb"}, "fooItem2", false);
userControl.FooItems.Add(fooItem);
BarItem barItem = (BarItem)serializationManager.CreateInstance(typeof(BarItem), new object[] {"cc"}, "barItem1", false);
userControl.ParentComponent.ParentBarItems.Add(barItem);
barItem = (BarItem)serializationManager.CreateInstance(typeof(BarItem), new object[] {"dd"}, "barItem2", false);
userControl.ParentComponent.ParentBarItems.Add(barItem);
form.Controls.Add(userControl);
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" fooItem1 = PythonBinding.Tests.Utils.FooItem()\r\n" +
string expectedCode = " fooItem1 = PythonBinding.Tests.Utils.FooItem()\r\n" +
" fooItem2 = PythonBinding.Tests.Utils.FooItem()\r\n" +
" barItem1 = PythonBinding.Tests.Utils.BarItem()\r\n" +
" barItem2 = PythonBinding.Tests.Utils.BarItem()\r\n" +
@ -71,13 +80,16 @@ namespace PythonBinding.Tests.Designer @@ -71,13 +80,16 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" fooItem1.Text = \"aa\"\r\n" +
" fooItem2.Text = \"bb\"\r\n" +
" barItem1.Text = \"cc\"\r\n" +
" barItem2.Text = \"dd\"\r\n" +
" self._userControl1.FooItems.AddRange(System.Array[PythonBinding.Tests.Utils.FooItem](\r\n" +
" [fooItem1,\r\n" +
" fooItem2]))\r\n" +
" self._userControl1.Location = System.Drawing.Point(0, 0)\r\n" +
" self._userControl1.Name = \"userControl1\"\r\n" +
" # \r\n" +
" # \r\n" +
" # \r\n" +
" barItem1.Text = \"cc\"\r\n" +
" barItem2.Text = \"dd\"\r\n" +
" self._userControl1.ParentComponent.ParentBarItems.AddRange(System.Array[PythonBinding.Tests.Utils.BarItem](\r\n" +
" [barItem1,\r\n" +
" barItem2]))\r\n" +
@ -89,8 +101,7 @@ namespace PythonBinding.Tests.Designer @@ -89,8 +101,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._userControl1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

17
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateDataSetTestFixture.cs

@ -45,19 +45,19 @@ namespace PythonBinding.Tests.Designer @@ -45,19 +45,19 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._dataGridView1 = System.Windows.Forms.DataGridView()\r\n" +
string expectedCode = " self._dataGridView1 = System.Windows.Forms.DataGridView()\r\n" +
" self._dataSet1 = System.Data.DataSet()\r\n" +
" self._dataGridView1.BeginInit()\r\n" +
" self._dataSet1.BeginInit()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # dataGridView1\r\n" +
@ -78,10 +78,7 @@ namespace PythonBinding.Tests.Designer @@ -78,10 +78,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._dataGridView1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._dataGridView1.EndInit()\r\n" +
" self._dataSet1.EndInit()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateDoubleBufferedFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -42,25 +43,25 @@ namespace PythonBinding.Tests.Designer @@ -42,25 +43,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.DoubleBuffered = True\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

24
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateEventHandlerFormTestFixture.cs

@ -11,6 +11,8 @@ using System.ComponentModel; @@ -11,6 +11,8 @@ using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Globalization;
using System.Reflection;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
@ -33,6 +35,8 @@ namespace PythonBinding.Tests.Designer @@ -33,6 +35,8 @@ namespace PythonBinding.Tests.Designer
using (DesignSurface designSurface = new DesignSurface(typeof(Form))) {
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
IEventBindingService eventBindingService = new MockEventBindingService(host);
host.AddService(typeof(IEventBindingService), eventBindingService);
Form form = (Form)host.RootComponent;
form.ClientSize = new Size(200, 300);
@ -46,22 +50,23 @@ namespace PythonBinding.Tests.Designer @@ -46,22 +50,23 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor loadEventProperty = eventBindingService.GetEventProperty(loadEvent);
loadEventProperty.SetValue(form, "MainFormLoad");
// Add a second event handler method to check that the events are sorted alphabetically
// before the InitializeComponent method is generated.
// Add a second event handler method.
EventDescriptor closedEvent = events.Find("FormClosed", false);
PropertyDescriptor closedEventProperty = eventBindingService.GetEventProperty(closedEvent);
closedEventProperty.SetValue(form, "MainFormClosed");
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
@ -69,10 +74,9 @@ namespace PythonBinding.Tests.Designer @@ -69,10 +74,9 @@ namespace PythonBinding.Tests.Designer
" self.Name = \"MainForm\"\r\n" +
" self.FormClosed += self.MainFormClosed\r\n" +
" self.Load += self.MainFormLoad\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

17
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateEventLogTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
@ -36,9 +37,11 @@ namespace PythonBinding.Tests.Designer @@ -36,9 +37,11 @@ namespace PythonBinding.Tests.Designer
EventLog eventLog = (EventLog)host.CreateComponent(typeof(EventLog), "eventLog1");
string indentString = " ";
PythonControl pythonControl = new PythonControl(indentString);
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
@ -47,9 +50,7 @@ namespace PythonBinding.Tests.Designer @@ -47,9 +50,7 @@ namespace PythonBinding.Tests.Designer
[IgnoreAttribute("Ignore test to fix the build - this test breaks for some reason on .NET 4.0")]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._eventLog1 = System.Diagnostics.EventLog()\r\n" +
" self._eventLog1.BeginInit()\r\n" +
string expectedCode = " self._eventLog1 = System.Diagnostics.EventLog()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # eventLog1\r\n" +
@ -60,9 +61,7 @@ namespace PythonBinding.Tests.Designer @@ -60,9 +61,7 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._eventLog1.EndInit()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormColorTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -39,17 +40,18 @@ namespace PythonBinding.Tests.Designer @@ -39,17 +40,18 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
@ -57,8 +59,7 @@ namespace PythonBinding.Tests.Designer @@ -57,8 +59,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.ForeColor = System.Drawing.Color.Red\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormLocationTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer @@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Location = System.Drawing.Point(10, 20)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormPaddingTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer @@ -37,25 +38,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.Padding = System.Windows.Forms.Padding(10, 20, 15, 18)\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormResourcesTestFixture.cs

@ -38,6 +38,8 @@ namespace PythonBinding.Tests.Designer @@ -38,6 +38,8 @@ namespace PythonBinding.Tests.Designer
using (DesignSurface designSurface = new DesignSurface(typeof(Form))) {
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
IEventBindingService eventBindingService = new MockEventBindingService(host);
host.AddService(typeof(IResourceService), componentCreator);
Form form = (Form)host.RootComponent;
form.ClientSize = new Size(200, 300);
@ -52,8 +54,11 @@ namespace PythonBinding.Tests.Designer @@ -52,8 +54,11 @@ namespace PythonBinding.Tests.Designer
icon = new Icon(typeof(GenerateFormResourceTestFixture), "App.ico");
form.Icon = icon;
PythonControl pythonControl = new PythonControl(" ", componentCreator);
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form, "RootNamespace");
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, "RootNamespace", 1);
}
}
}
@ -67,8 +72,7 @@ namespace PythonBinding.Tests.Designer @@ -67,8 +72,7 @@ namespace PythonBinding.Tests.Designer
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" resources = System.Resources.ResourceManager(\"RootNamespace.MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
string expectedCode = " resources = System.Resources.ResourceManager(\"RootNamespace.MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
@ -77,8 +81,7 @@ namespace PythonBinding.Tests.Designer @@ -77,8 +81,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Icon = resources.GetObject(\"$this.Icon\")\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateImageListResourcesTestFixture.cs

@ -37,6 +37,8 @@ namespace PythonBinding.Tests.Designer @@ -37,6 +37,8 @@ namespace PythonBinding.Tests.Designer
using (DesignSurface designSurface = new DesignSurface(typeof(Form))) {
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
IEventBindingService eventBindingService = new MockEventBindingService(host);
host.AddService(typeof(IResourceService), componentCreator);
Form form = (Form)host.RootComponent;
form.ClientSize = new Size(200, 300);
@ -51,8 +53,11 @@ namespace PythonBinding.Tests.Designer @@ -51,8 +53,11 @@ namespace PythonBinding.Tests.Designer
imageList.Images.Add("", icon);
imageList.Images.Add("", icon);
PythonControl pythonControl = new PythonControl(" ", componentCreator);
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form, "RootNamespace");
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, "RootNamespace", 1);
}
}
}
@ -65,9 +70,8 @@ namespace PythonBinding.Tests.Designer @@ -65,9 +70,8 @@ namespace PythonBinding.Tests.Designer
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
string expectedCode = " self._components = System.ComponentModel.Container()\r\n" +
" resources = System.Resources.ResourceManager(\"RootNamespace.MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
" self._components = System.ComponentModel.Container()\r\n" +
" self._imageList1 = System.Windows.Forms.ImageList(self._components)\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
@ -83,8 +87,7 @@ namespace PythonBinding.Tests.Designer @@ -83,8 +87,7 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateImeModeFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -36,25 +37,25 @@ namespace PythonBinding.Tests.Designer @@ -36,25 +37,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.ImeMode = System.Windows.Forms.ImeMode.Alpha\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -51,24 +52,24 @@ namespace PythonBinding.Tests.Designer @@ -51,24 +52,24 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedProtectedPanelFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -80,17 +81,18 @@ namespace PythonBinding.Tests.Designer @@ -80,17 +81,18 @@ namespace PythonBinding.Tests.Designer
ProtectedPanelDerivedForm derivedForm = (ProtectedPanelDerivedForm)form;
derivedForm.PanelLocation = new Point(10, 15);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # panel1\r\n" +
" # \r\n" +
@ -100,8 +102,7 @@ namespace PythonBinding.Tests.Designer @@ -100,8 +102,7 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedToolTipTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -51,25 +52,25 @@ namespace PythonBinding.Tests.Designer @@ -51,25 +52,25 @@ namespace PythonBinding.Tests.Designer
form.toolTip.SetToolTip(form, "test");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.toolTip.SetToolTip(self, \"test\")\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

43
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewGroupsTestFixture.cs

@ -47,32 +47,36 @@ namespace PythonBinding.Tests.Designer @@ -47,32 +47,36 @@ namespace PythonBinding.Tests.Designer
descriptor = descriptors.Find("View", false);
descriptor.SetValue(listView, View.Details);
form.Controls.Add(listView);
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host);
IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager;
using (designerSerializationManager.CreateSession()) {
// Add groups.
ListViewGroup group1 = new ListViewGroup();
group1.Header = "ListViewGroup";
group1.HeaderAlignment = HorizontalAlignment.Right;
group1.Name = "defaultGroup";
group1.Tag = "tag1";
listView.Groups.Add(group1);
ListViewGroup group2 = new ListViewGroup();
group2.Header = "ListViewGroup";
group2.HeaderAlignment = HorizontalAlignment.Center;
group2.Name = "listViewGroup2";
listView.Groups.Add(group2);
// Add groups.
ListViewGroup group1 = (ListViewGroup)serializationManager.CreateInstance(typeof(ListViewGroup), new object[0], "listViewGroup1", false);
group1.Header = "ListViewGroup";
group1.HeaderAlignment = HorizontalAlignment.Right;
group1.Name = "defaultGroup";
group1.Tag = "tag1";
listView.Groups.Add(group1);
ListViewGroup group2 = (ListViewGroup)serializationManager.CreateInstance(typeof(ListViewGroup), new object[0], "listViewGroup2", false);
group2.Header = "ListViewGroup";
group2.HeaderAlignment = HorizontalAlignment.Center;
group2.Name = "listViewGroup2";
listView.Groups.Add(group2);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, designerSerializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" listViewGroup1 = System.Windows.Forms.ListViewGroup()\r\n" +
" listViewGroup2 = System.Windows.Forms.ListViewGroup()\r\n" +
string expectedCode = " listViewGroup1 = System.Windows.Forms.ListViewGroup(\"ListViewGroup\", System.Windows.Forms.HorizontalAlignment.Right)\r\n" +
" listViewGroup2 = System.Windows.Forms.ListViewGroup(\"ListViewGroup\", System.Windows.Forms.HorizontalAlignment.Center)\r\n" +
" self._listView1 = System.Windows.Forms.ListView()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
@ -99,8 +103,7 @@ namespace PythonBinding.Tests.Designer @@ -99,8 +103,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._listView1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

158
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewItemTestFixture.cs

@ -22,12 +22,6 @@ namespace PythonBinding.Tests.Designer @@ -22,12 +22,6 @@ namespace PythonBinding.Tests.Designer
public class GenerateListViewItemsFormTestFixture
{
string generatedPythonCode;
string createListViewCode;
string createListViewChildComponentsCode;
string suspendLayoutCode;
string resumeLayoutCode;
string listViewPropertiesCode;
PythonDesignerComponent[] listViewChildComponents;
ColumnHeader columnHeader1;
ColumnHeader columnHeader2;
@ -70,74 +64,42 @@ namespace PythonBinding.Tests.Designer @@ -70,74 +64,42 @@ namespace PythonBinding.Tests.Designer
listView.Columns.Add(columnHeader2);
// Add list view items.
ListViewItem item = new ListViewItem("aaa");
item.ToolTipText = "tooltip";
listView.Items.Add(item);
ListViewItem item2 = new ListViewItem("bbb");
listView.Items.Add(item2);
ListViewItem item3 = new ListViewItem();
listView.Items.Add(item3);
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host);
IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager;
using (designerSerializationManager.CreateSession()) {
ListViewItem item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"aaa"}, "listViewItem1", false);
item.ToolTipText = "tooltip";
listView.Items.Add(item);
item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"bbb"}, "listViewItem2", false);
listView.Items.Add(item);
item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem3", false);
listView.Items.Add(item);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
// Get list view creation code.
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
PythonListViewComponent listViewComponent = new PythonListViewComponent(listView);
listViewComponent.AppendCreateInstance(codeBuilder);
createListViewCode = codeBuilder.ToString();
// Get list view child component's creation code.
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
listViewComponent.AppendCreateChildComponents(codeBuilder);
createListViewChildComponentsCode = codeBuilder.ToString();
// Get list view suspend layout code.
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
listViewComponent.AppendSuspendLayout(codeBuilder);
suspendLayoutCode = codeBuilder.ToString();
// Get generated list view property code.
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
codeBuilder.IncreaseIndent();
listViewComponent.AppendComponent(codeBuilder);
listViewPropertiesCode = codeBuilder.ToString();
// Get list view resume layout code.
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
listViewComponent.AppendResumeLayout(codeBuilder);
resumeLayoutCode = codeBuilder.ToString();
listViewChildComponents = listViewComponent.GetChildComponents();
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" listViewItem1 = System.Windows.Forms.ListViewItem(\"aaa\")\r\n" +
string expectedCode = " listViewItem1 = System.Windows.Forms.ListViewItem(\"aaa\")\r\n" +
" listViewItem2 = System.Windows.Forms.ListViewItem(\"bbb\")\r\n" +
" listViewItem3 = System.Windows.Forms.ListViewItem()\r\n" +
" listViewItem3 = System.Windows.Forms.ListViewItem(\"\")\r\n" +
" self._listView1 = System.Windows.Forms.ListView()\r\n" +
" self._columnHeader1 = System.Windows.Forms.ColumnHeader()\r\n" +
" self._columnHeader2 = System.Windows.Forms.ColumnHeader()\r\n" +
" self._listView1.SuspendLayout()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # listView1\r\n" +
" # \r\n" +
" listViewItem1.ToolTipText = \"tooltip\"\r\n" +
" self._listView1.Columns.AddRange(System.Array[System.Windows.Forms.ColumnHeader](\r\n" +
" [self._columnHeader1,\r\n" +
" self._columnHeader2]))\r\n" +
" listViewItem1.ToolTipText = \"tooltip\"\r\n" +
" self._listView1.Items.AddRange(System.Array[System.Windows.Forms.ListViewItem](\r\n" +
" [listViewItem1,\r\n" +
" listViewItem2,\r\n" +
@ -161,91 +123,9 @@ namespace PythonBinding.Tests.Designer @@ -161,91 +123,9 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._listView1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._listView1.ResumeLayout(False)\r\n" +
" self._listView1.PerformLayout()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
/// <summary>
/// Should include the column header and list view item creation.
/// </summary>
[Test]
public void ListViewCreationCode()
{
string expectedCode = "listViewItem1 = System.Windows.Forms.ListViewItem(\"aaa\")\r\n" +
"listViewItem2 = System.Windows.Forms.ListViewItem(\"bbb\")\r\n" +
"listViewItem3 = System.Windows.Forms.ListViewItem()\r\n" +
"self._listView1 = System.Windows.Forms.ListView()\r\n";
Assert.AreEqual(expectedCode, createListViewCode);
}
[Test]
public void TwoListViewChildComponents()
{
Assert.AreEqual(2, listViewChildComponents.Length);
}
[Test]
public void ListViewChildComponentAreColumnHeaders()
{
Assert.AreEqual(typeof(ColumnHeader), listViewChildComponents[0].GetComponentType());
Assert.AreEqual(typeof(ColumnHeader), listViewChildComponents[1].GetComponentType());
}
[Test]
public void SuspendLayoutGeneratedCode()
{
string expectedCode = "self._listView1.SuspendLayout()\r\n";
Assert.AreEqual(expectedCode, suspendLayoutCode);
}
[Test]
public void ResumeLayoutGeneratedCode()
{
string expectedCode = "self._listView1.ResumeLayout(False)\r\n" +
"self._listView1.PerformLayout()\r\n";
Assert.AreEqual(expectedCode, resumeLayoutCode);
}
[Test]
public void GeneratedListViewPropertiesCode()
{
string expectedCode = " # \r\n" +
" # listView1\r\n" +
" # \r\n" +
" listViewItem1.ToolTipText = \"tooltip\"\r\n" +
" self._listView1.Columns.AddRange(System.Array[System.Windows.Forms.ColumnHeader](\r\n" +
" [self._columnHeader1,\r\n" +
" self._columnHeader2]))\r\n" +
" self._listView1.Items.AddRange(System.Array[System.Windows.Forms.ListViewItem](\r\n" +
" [listViewItem1,\r\n" +
" listViewItem2,\r\n" +
" listViewItem3]))\r\n" +
" self._listView1.Location = System.Drawing.Point(0, 0)\r\n" +
" self._listView1.Name = \"listView1\"\r\n" +
" self._listView1.Size = System.Drawing.Size(204, 104)\r\n" +
" self._listView1.TabIndex = 0\r\n" +
" self._listView1.View = System.Windows.Forms.View.Details\r\n";
Assert.AreEqual(expectedCode, listViewPropertiesCode);
}
[Test]
public void ListViewChildComponentsCreated()
{
string expectedCode = "self._columnHeader1 = System.Windows.Forms.ColumnHeader()\r\n" +
"self._columnHeader2 = System.Windows.Forms.ColumnHeader()\r\n";
Assert.AreEqual(expectedCode, createListViewChildComponentsCode);
}
[Test]
public void ColumnHeaderIsHiddenFromDesigner()
{
Assert.IsTrue(PythonDesignerComponent.IsHiddenFromDesigner(columnHeader1));
}
}
}

76
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewSubItemsTestFixture.cs

@ -21,7 +21,7 @@ namespace PythonBinding.Tests.Designer @@ -21,7 +21,7 @@ namespace PythonBinding.Tests.Designer
[TestFixture]
public class GenerateListViewSubItemsTestFixture
{
string createListViewCode;
string generatedPythonCode;
ColumnHeader columnHeader1;
ColumnHeader columnHeader2;
@ -63,20 +63,20 @@ namespace PythonBinding.Tests.Designer @@ -63,20 +63,20 @@ namespace PythonBinding.Tests.Designer
descriptor.SetValue(columnHeader2, "columnHeader2");
listView.Columns.Add(columnHeader2);
// Add list view item with 3 sub items.
ListViewItem item = new ListViewItem("listItem1");
item.SubItems.Add("subItem1");
item.SubItems.Add("subItem2");
item.SubItems.Add("subItem3");
listView.Items.Add(item);
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host);
IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager;
using (designerSerializationManager.CreateSession()) {
// Add list view item with 3 sub items.
ListViewItem item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"listItem1"}, "listViewItem1", false);
item.SubItems.Add("subItem1");
item.SubItems.Add("subItem2");
item.SubItems.Add("subItem3");
listView.Items.Add(item);
// Get list view creation code.
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
PythonListViewComponent listViewComponent = new PythonListViewComponent(listView);
listViewComponent.AppendCreateInstance(codeBuilder);
createListViewCode = codeBuilder.ToString();
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, designerSerializationManager, String.Empty, 1);
}
}
}
@ -84,15 +84,47 @@ namespace PythonBinding.Tests.Designer @@ -84,15 +84,47 @@ namespace PythonBinding.Tests.Designer
/// Should include the column header and list view item creation.
/// </summary>
[Test]
public void ListViewCreationCode()
public void GeneratedCode()
{
string expectedCode = "listViewItem1 = System.Windows.Forms.ListViewItem(System.Array[System.String](\r\n" +
" [\"listItem1\",\r\n" +
" \"subItem1\",\r\n" +
" \"subItem2\",\r\n" +
" \"subItem3\"]))\r\n" +
"self._listView1 = System.Windows.Forms.ListView()\r\n";
Assert.AreEqual(expectedCode, createListViewCode, createListViewCode);
string expectedCode = " listViewItem1 = System.Windows.Forms.ListViewItem(System.Array[System.String](\r\n" +
" [\"listItem1\",\r\n" +
" \"subItem1\",\r\n" +
" \"subItem2\",\r\n" +
" \"subItem3\"]), -1)\r\n" +
" self._listView1 = System.Windows.Forms.ListView()\r\n" +
" self._columnHeader1 = System.Windows.Forms.ColumnHeader()\r\n" +
" self._columnHeader2 = System.Windows.Forms.ColumnHeader()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # listView1\r\n" +
" # \r\n" +
" self._listView1.Columns.AddRange(System.Array[System.Windows.Forms.ColumnHeader](\r\n" +
" [self._columnHeader1,\r\n" +
" self._columnHeader2]))\r\n" +
" self._listView1.Items.AddRange(System.Array[System.Windows.Forms.ListViewItem](\r\n" +
" [listViewItem1]))\r\n" +
" self._listView1.Location = System.Drawing.Point(0, 0)\r\n" +
" self._listView1.Name = \"listView1\"\r\n" +
" self._listView1.Size = System.Drawing.Size(204, 104)\r\n" +
" self._listView1.TabIndex = 0\r\n" +
" self._listView1.View = System.Windows.Forms.View.Details\r\n" +
" # \r\n" +
" # columnHeader1\r\n" +
" # \r\n" +
" self._columnHeader1.Text = \"columnHeader1\"\r\n" +
" # \r\n" +
" # columnHeader2\r\n" +
" # \r\n" +
" self._columnHeader2.Text = \"columnHeader2\"\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._listView1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

87
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewWithImageListTestFixture.cs

@ -21,9 +21,8 @@ namespace PythonBinding.Tests.Designer @@ -21,9 +21,8 @@ namespace PythonBinding.Tests.Designer
[TestFixture]
public class GenerateListViewWithImageListFormTestFixture
{
string createListViewCode;
string generatedPythonCode;
[TestFixtureSetUp]
public void SetUpFixture()
{
@ -56,29 +55,29 @@ namespace PythonBinding.Tests.Designer @@ -56,29 +55,29 @@ namespace PythonBinding.Tests.Designer
imageList.Images.Add("b.ico", icon);
imageList.Images.Add("c.ico", icon);
// Add list view items.
ListViewItem item = new ListViewItem("aaa");
item.ImageIndex = 1;
listView.Items.Add(item);
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host);
IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager;
using (designerSerializationManager.CreateSession()) {
// Add list view items.
ListViewItem item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"aaa"}, "listViewItem1", false);
item.ImageIndex = 1;
listView.Items.Add(item);
ListViewItem item2 = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"bbb"}, "listViewItem2", false);
item2.ImageKey = "App.ico";
listView.Items.Add(item2);
ListViewItem item3 = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem3", false);
item3.ImageIndex = 2;
listView.Items.Add(item3);
ListViewItem item4 = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem4", false);
item4.ImageKey = "b.ico";
listView.Items.Add(item4);
ListViewItem item2 = new ListViewItem("bbb");
item2.ImageKey = "App.ico";
listView.Items.Add(item2);
ListViewItem item3 = new ListViewItem();
item3.ImageIndex = 2;
listView.Items.Add(item3);
ListViewItem item4 = new ListViewItem();
item4.ImageKey = "b.ico";
listView.Items.Add(item4);
// Get list view creation code.
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = " ";
PythonListViewComponent listViewComponent = new PythonListViewComponent(listView);
listViewComponent.AppendCreateInstance(codeBuilder);
createListViewCode = codeBuilder.ToString();
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager);
}
}
}
@ -86,14 +85,46 @@ namespace PythonBinding.Tests.Designer @@ -86,14 +85,46 @@ namespace PythonBinding.Tests.Designer
/// Should include the column header and list view item creation.
/// </summary>
[Test]
public void ListViewCreationCode()
public void GenerateCode()
{
string expectedCode = "listViewItem1 = System.Windows.Forms.ListViewItem(\"aaa\", 1)\r\n" +
string expectedCode = "self._components = System.ComponentModel.Container()\r\n" +
"listViewItem1 = System.Windows.Forms.ListViewItem(\"aaa\", 1)\r\n" +
"listViewItem2 = System.Windows.Forms.ListViewItem(\"bbb\", \"App.ico\")\r\n" +
"listViewItem3 = System.Windows.Forms.ListViewItem(\"\", 2)\r\n" +
"listViewItem4 = System.Windows.Forms.ListViewItem(\"\", \"b.ico\")\r\n" +
"self._listView1 = System.Windows.Forms.ListView()\r\n";
Assert.AreEqual(expectedCode, createListViewCode, createListViewCode);
"resources = System.Resources.ResourceManager(\"MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
"self._listView1 = System.Windows.Forms.ListView()\r\n" +
"self._imageList1 = System.Windows.Forms.ImageList(self._components)\r\n" +
"self.SuspendLayout()\r\n" +
"# \r\n" +
"# listView1\r\n" +
"# \r\n" +
"self._listView1.Items.AddRange(System.Array[System.Windows.Forms.ListViewItem](\r\n" +
" [listViewItem1,\r\n" +
" listViewItem2,\r\n" +
" listViewItem3,\r\n" +
" listViewItem4]))\r\n" +
"self._listView1.Location = System.Drawing.Point(0, 0)\r\n" +
"self._listView1.Name = \"listView1\"\r\n" +
"self._listView1.Size = System.Drawing.Size(204, 104)\r\n" +
"self._listView1.TabIndex = 0\r\n" +
"self._listView1.View = System.Windows.Forms.View.Details\r\n" +
"# \r\n" +
"# imageList1\r\n" +
"# \r\n" +
"self._imageList1.ImageStream = resources.GetObject(\"imageList1.ImageStream\")\r\n" +
"self._imageList1.TransparentColor = System.Drawing.Color.Transparent\r\n" +
"self._imageList1.Images.SetKeyName(0, \"App.ico\")\r\n" +
"self._imageList1.Images.SetKeyName(1, \"b.ico\")\r\n" +
"self._imageList1.Images.SetKeyName(2, \"c.ico\")\r\n" +
"# \r\n" +
"# MainForm\r\n" +
"# \r\n" +
"self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
"self.Controls.Add(self._listView1)\r\n" +
"self.Name = \"MainForm\"\r\n" +
"self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

65
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateLocalImageResourceTestFixture.cs

@ -28,8 +28,6 @@ namespace PythonBinding.Tests.Designer @@ -28,8 +28,6 @@ namespace PythonBinding.Tests.Designer
MockResourceWriter resourceWriter2;
MockComponentCreator componentCreator2;
Bitmap bitmap;
string rootComponentNoNamespaceResourceRootName;
string rootComponentResourceRootName;
[TestFixtureSetUp]
public void SetUpFixture()
@ -45,6 +43,8 @@ namespace PythonBinding.Tests.Designer @@ -45,6 +43,8 @@ namespace PythonBinding.Tests.Designer
using (DesignSurface designSurface = new DesignSurface(typeof(Form))) {
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
IEventBindingService eventBindingService = new MockEventBindingService(host);
host.AddService(typeof(IResourceService), componentCreator);
Form form = (Form)host.RootComponent;
form.ClientSize = new Size(200, 300);
@ -63,29 +63,30 @@ namespace PythonBinding.Tests.Designer @@ -63,29 +63,30 @@ namespace PythonBinding.Tests.Designer
// Add bitmap to form.
form.BackgroundImage = new Bitmap(10, 10);
PythonControl pythonControl = new PythonControl(" ", componentCreator);
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form, "RootNamespace");
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
// Check that calling the GenerateInitializeComponentMethodBody also generates a resource file.
PythonControl pythonControl2 = new PythonControl(" ", componentCreator2);
pythonControl2.GenerateInitializeComponentMethodBody(form, 0);
PythonDesignerRootComponent rootComponentNoNamespace = new PythonDesignerRootComponent(form);
rootComponentNoNamespaceResourceRootName = rootComponentNoNamespace.GetResourceRootName();
host.RemoveService(typeof(IResourceService));
host.AddService(typeof(IResourceService), componentCreator2);
PythonDesignerRootComponent rootComponent = new PythonDesignerRootComponent(form, "MyNamespace");
rootComponentResourceRootName = rootComponent.GetResourceRootName();
serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" resources = System.Resources.ResourceManager(\"RootNamespace.MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
string expectedCode = " resources = System.Resources.ResourceManager(\"MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
" self._pictureBox1 = System.Windows.Forms.PictureBox()\r\n" +
" self._pictureBox1.BeginInit()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # pictureBox1\r\n" +
@ -103,9 +104,7 @@ namespace PythonBinding.Tests.Designer @@ -103,9 +104,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._pictureBox1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._pictureBox1.EndInit()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
@ -122,12 +121,6 @@ namespace PythonBinding.Tests.Designer @@ -122,12 +121,6 @@ namespace PythonBinding.Tests.Designer
Assert.AreEqual(CultureInfo.InvariantCulture, componentCreator.CultureInfoPassedToGetResourceWriter);
}
[Test]
public void ResourceWriterIsDisposed()
{
Assert.IsTrue(resourceWriter.IsDisposed);
}
[Test]
public void ResourceWriterRetrievedFromComponentCreator2()
{
@ -140,11 +133,11 @@ namespace PythonBinding.Tests.Designer @@ -140,11 +133,11 @@ namespace PythonBinding.Tests.Designer
Assert.AreEqual(CultureInfo.InvariantCulture, componentCreator2.CultureInfoPassedToGetResourceWriter);
}
[Test]
public void ResourceWriter2IsDisposed()
{
Assert.IsTrue(resourceWriter2.IsDisposed);
}
// [Test]
// public void ResourceWriter2IsDisposed()
// {
// Assert.IsTrue(resourceWriter2.IsDisposed);
// }
[Test]
public void BitmapAddedToResourceWriter()
@ -157,17 +150,5 @@ namespace PythonBinding.Tests.Designer @@ -157,17 +150,5 @@ namespace PythonBinding.Tests.Designer
{
Assert.IsNotNull(resourceWriter.GetResource("pictureBox1.Image"));
}
[Test]
public void GetResourceRootName()
{
Assert.AreEqual("MyNamespace.MainForm", rootComponentResourceRootName);
}
[Test]
public void GetResourceRootNameWhenNamespaceIsEmptyString()
{
Assert.AreEqual("MainForm", rootComponentNoNamespaceResourceRootName);
}
}
}

10
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs

@ -48,16 +48,18 @@ namespace PythonBinding.Tests.Designer @@ -48,16 +48,18 @@ namespace PythonBinding.Tests.Designer
menuStrip.Location = new Point(0, 0);
form.Controls.Add(menuStrip);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._menuStrip1 = System.Windows.Forms.MenuStrip()\r\n" +
string expectedCode = " self._menuStrip1 = System.Windows.Forms.MenuStrip()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # menuStrip1\r\n" +

12
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs

@ -75,18 +75,18 @@ namespace PythonBinding.Tests.Designer @@ -75,18 +75,18 @@ namespace PythonBinding.Tests.Designer
exitMenuItemSize = exitMenuItem.Size;
editMenuItemSize = editMenuItem.Size;
PythonDesignerRootComponent rootComponent = new PythonDesignerRootComponent(form);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._menuStrip1 = System.Windows.Forms.MenuStrip()\r\n" +
string expectedCode = " self._menuStrip1 = System.Windows.Forms.MenuStrip()\r\n" +
" self._fileToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" +
" self._openToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" +
" self._exitToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" +

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMinSizeFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -46,17 +47,18 @@ namespace PythonBinding.Tests.Designer @@ -46,17 +47,18 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
@ -65,8 +67,7 @@ namespace PythonBinding.Tests.Designer @@ -65,8 +67,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.MinimumSize = System.Drawing.Size(100, 200)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

13
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMonthCalendarTestFixture.cs

@ -45,16 +45,18 @@ namespace PythonBinding.Tests.Designer @@ -45,16 +45,18 @@ namespace PythonBinding.Tests.Designer
form.Controls.Add(calendar);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._monthCalendar1 = System.Windows.Forms.MonthCalendar()\r\n" +
string expectedCode = " self._monthCalendar1 = System.Windows.Forms.MonthCalendar()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # monthCalendar1\r\n" +
@ -71,8 +73,7 @@ namespace PythonBinding.Tests.Designer @@ -71,8 +73,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._monthCalendar1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

16
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -55,17 +56,18 @@ namespace PythonBinding.Tests.Designer @@ -55,17 +56,18 @@ namespace PythonBinding.Tests.Designer
panel1.Controls.Add(panel2);
form.Controls.Add(panel1);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._panel1 = System.Windows.Forms.Panel()\r\n" +
string expectedCode = " self._panel1 = System.Windows.Forms.Panel()\r\n" +
" self._panel2 = System.Windows.Forms.Panel()\r\n" +
" self._textBox1 = System.Windows.Forms.TextBox()\r\n" +
" self._panel1.SuspendLayout()\r\n" +
@ -101,11 +103,9 @@ namespace PythonBinding.Tests.Designer @@ -101,11 +103,9 @@ namespace PythonBinding.Tests.Designer
" self.Controls.Add(self._panel1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._panel1.ResumeLayout(False)\r\n" +
" self._panel1.PerformLayout()\r\n" +
" self._panel2.ResumeLayout(False)\r\n" +
" self._panel2.PerformLayout()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

21
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -17,7 +18,7 @@ using PythonBinding.Tests.Utils; @@ -17,7 +18,7 @@ using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
[TestFixture]
public class GeneratePanelFormTestFixture
public class GeneratePanelFormTestFixture
{
string generatedPythonCode;
@ -27,7 +28,9 @@ namespace PythonBinding.Tests.Designer @@ -27,7 +28,9 @@ namespace PythonBinding.Tests.Designer
using (DesignSurface designSurface = new DesignSurface(typeof(Form))) {
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));
IEventBindingService eventBindingService = new MockEventBindingService(host);
Form form = (Form)host.RootComponent;
host.AddService(typeof(IEventBindingService), eventBindingService);
Form form = (Form)host.RootComponent;
form.ClientSize = new Size(284, 264);
PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form);
@ -53,17 +56,18 @@ namespace PythonBinding.Tests.Designer @@ -53,17 +56,18 @@ namespace PythonBinding.Tests.Designer
form.Controls.Add(panel);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._panel1 = System.Windows.Forms.Panel()\r\n" +
string expectedCode = " self._panel1 = System.Windows.Forms.Panel()\r\n" +
" self._textBox1 = System.Windows.Forms.TextBox()\r\n" +
" self._panel1.SuspendLayout()\r\n" +
" self.SuspendLayout()\r\n" +
@ -91,8 +95,7 @@ namespace PythonBinding.Tests.Designer @@ -91,8 +95,7 @@ namespace PythonBinding.Tests.Designer
" self.Name = \"MainForm\"\r\n" +
" self._panel1.ResumeLayout(False)\r\n" +
" self._panel1.PerformLayout()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

17
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateRichTextBoxTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -46,17 +47,18 @@ namespace PythonBinding.Tests.Designer @@ -46,17 +47,18 @@ namespace PythonBinding.Tests.Designer
form.Controls.Add(textBox);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._richTextBox1 = System.Windows.Forms.RichTextBox()\r\n" +
string expectedCode = " self._richTextBox1 = System.Windows.Forms.RichTextBox()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # richTextBox1\r\n" +
@ -75,10 +77,9 @@ namespace PythonBinding.Tests.Designer @@ -75,10 +77,9 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Controls.Add(self._richTextBox1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateRightToLeftFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -36,25 +37,25 @@ namespace PythonBinding.Tests.Designer @@ -36,25 +37,25 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.RightToLeft = System.Windows.Forms.RightToLeft.Yes\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}

41
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateSimpleFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -20,8 +21,6 @@ namespace PythonBinding.Tests.Designer @@ -20,8 +21,6 @@ namespace PythonBinding.Tests.Designer
public class GenerateSimpleFormTestFixture
{
string generatedPythonCode;
string formPropertiesCode;
string propertyOwnerName;
[TestFixtureSetUp]
public void SetUpFixture()
@ -35,48 +34,26 @@ namespace PythonBinding.Tests.Designer @@ -35,48 +34,26 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
codeBuilder.IncreaseIndent();
PythonDesignerRootComponent designerRootComponent = new PythonDesignerRootComponent(form);
propertyOwnerName = designerRootComponent.GetPropertyOwnerName();
designerRootComponent.AppendComponentProperties(codeBuilder, true, false);
formPropertiesCode = codeBuilder.ToString();
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}
[Test]
public void FormPropertiesCode()
{
string expectedCode = " self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n";
Assert.AreEqual(expectedCode, formPropertiesCode);
}
[Test]
public void PropertyOwnerName()
{
Assert.AreEqual("self", propertyOwnerName);
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
}
}

13
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTableLayoutPanelTestFixture.cs

@ -50,16 +50,18 @@ namespace PythonBinding.Tests.Designer @@ -50,16 +50,18 @@ namespace PythonBinding.Tests.Designer
form.Controls.Add(tableLayoutPanel1);
PythonControl pythonControl = new PythonControl(" ");
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._tableLayoutPanel1 = System.Windows.Forms.TableLayoutPanel()\r\n" +
string expectedCode = " self._tableLayoutPanel1 = System.Windows.Forms.TableLayoutPanel()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # tableLayoutPanel1\r\n" +
@ -80,8 +82,7 @@ namespace PythonBinding.Tests.Designer @@ -80,8 +82,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._tableLayoutPanel1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

108
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -20,13 +21,6 @@ namespace PythonBinding.Tests.Designer @@ -20,13 +21,6 @@ namespace PythonBinding.Tests.Designer
public class GenerateTextBoxFormTestFixture
{
string generatedPythonCode;
string textBoxPropertyCode;
string textBoxSuspendLayoutCode;
string textBoxResumeLayoutCode;
string textBoxCreationCode;
string textBoxPropertyOwnerName;
string suspendLayoutCode;
string resumeLayoutCode;
[TestFixtureSetUp]
public void SetUpFixture()
@ -47,52 +41,18 @@ namespace PythonBinding.Tests.Designer @@ -47,52 +41,18 @@ namespace PythonBinding.Tests.Designer
form.Controls.Add(textBox);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
codeBuilder.IncreaseIndent();
PythonDesignerComponent designerComponent = new PythonDesignerComponent(textBox);
designerComponent.AppendComponent(codeBuilder);
textBoxPropertyCode = codeBuilder.ToString();
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
designerComponent.AppendCreateInstance(codeBuilder);
textBoxCreationCode = codeBuilder.ToString();
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
designerComponent.AppendSuspendLayout(codeBuilder);
textBoxSuspendLayoutCode = codeBuilder.ToString();
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
designerComponent.AppendResumeLayout(codeBuilder);
textBoxResumeLayoutCode = codeBuilder.ToString();
textBoxPropertyOwnerName = designerComponent.GetPropertyOwnerName();
PythonDesignerRootComponent designerRootComponent = new PythonDesignerRootComponent(form);
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
designerRootComponent.AppendSuspendLayout(codeBuilder);
suspendLayoutCode = codeBuilder.ToString();
codeBuilder = new PythonCodeBuilder();
codeBuilder.IndentString = indentString;
designerRootComponent.AppendResumeLayout(codeBuilder);
resumeLayoutCode = codeBuilder.ToString();
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._textBox1 = System.Windows.Forms.TextBox()\r\n" +
string expectedCode = " self._textBox1 = System.Windows.Forms.TextBox()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # textBox1\r\n" +
@ -111,58 +71,6 @@ namespace PythonBinding.Tests.Designer @@ -111,58 +71,6 @@ namespace PythonBinding.Tests.Designer
" self.PerformLayout()\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode);
}
[Test]
public void TextBoxGeneratedCode()
{
string expectedCode = " # \r\n" +
" # textBox1\r\n" +
" # \r\n" +
" self._textBox1.Location = System.Drawing.Point(10, 10)\r\n" +
" self._textBox1.Name = \"textBox1\"\r\n" +
" self._textBox1.Size = System.Drawing.Size(110, 20)\r\n" +
" self._textBox1.TabIndex = 1\r\n";
Assert.AreEqual(expectedCode, textBoxPropertyCode);
}
[Test]
public void SuspendLayoutCodeNotGenerated()
{
Assert.AreEqual(String.Empty, textBoxSuspendLayoutCode);
}
[Test]
public void ResumeLayoutCodeNotGenerated()
{
Assert.AreEqual(String.Empty, textBoxResumeLayoutCode);
}
[Test]
public void TextBoxCreationCode()
{
string expectedCode = "self._textBox1 = System.Windows.Forms.TextBox()\r\n";
Assert.AreEqual(expectedCode, textBoxCreationCode);
}
[Test]
public void TextBoxPropertyOwnerName()
{
Assert.AreEqual("self._textBox1", textBoxPropertyOwnerName);
}
[Test]
public void SuspendLayoutCode()
{
Assert.AreEqual("self.SuspendLayout()\r\n", suspendLayoutCode);
}
[Test]
public void ResumeLayoutCode()
{
string expectedCode = "self.ResumeLayout(False)\r\n" +
"self.PerformLayout()\r\n";
Assert.AreEqual(expectedCode, resumeLayoutCode);
}
}
}
}

25
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTimerTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -20,7 +21,6 @@ namespace PythonBinding.Tests.Designer @@ -20,7 +21,6 @@ namespace PythonBinding.Tests.Designer
public class GenerateTimerTestFixture
{
string generatedPythonCode;
bool hasIContainerConstructor;
[TestFixtureSetUp]
public void SetUpFixture()
@ -39,20 +39,18 @@ namespace PythonBinding.Tests.Designer @@ -39,20 +39,18 @@ namespace PythonBinding.Tests.Designer
namePropertyDescriptor = descriptors.Find("Interval", false);
namePropertyDescriptor.SetValue(timer, 1000);
PythonDesignerComponent component = new PythonDesignerComponent(timer);
hasIContainerConstructor = component.HasIContainerConstructor();
string indentString = " ";
PythonControl pythonControl = new PythonControl(indentString);
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._components = System.ComponentModel.Container()\r\n" +
string expectedCode = " self._components = System.ComponentModel.Container()\r\n" +
" self._timer1 = System.Windows.Forms.Timer(self._components)\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
@ -64,16 +62,9 @@ namespace PythonBinding.Tests.Designer @@ -64,16 +62,9 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}
[Test]
public void HasIContainerConstructor()
{
Assert.IsTrue(hasIContainerConstructor);
}
}
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateToolTipFormTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -37,17 +38,18 @@ namespace PythonBinding.Tests.Designer @@ -37,17 +38,18 @@ namespace PythonBinding.Tests.Designer
ToolTip toolTip = (ToolTip)host.CreateComponent(typeof(ToolTip), "toolTip1");
toolTip.SetToolTip(form, "test");
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._components = System.ComponentModel.Container()\r\n" +
string expectedCode = " self._components = System.ComponentModel.Container()\r\n" +
" self._toolTip1 = System.Windows.Forms.ToolTip(self._components)\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
@ -56,8 +58,7 @@ namespace PythonBinding.Tests.Designer @@ -56,8 +58,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._toolTip1.SetToolTip(self, \"test\")\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

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

@ -42,57 +42,59 @@ namespace PythonBinding.Tests.Designer @@ -42,57 +42,59 @@ namespace PythonBinding.Tests.Designer
treeView.Location = new Point(0, 0);
treeView.Size = new Size(100, 100);
// Add first root node.
TreeNode firstRootNode = new TreeNode();
firstRootNode.Name = "RootNode0";
firstRootNode.Text = "RootNode0.Text";
treeView.Nodes.Add(firstRootNode);
// Add first child node.
TreeNode firstChildNode = new TreeNode();
firstChildNode.Name = "ChildNode0";
firstChildNode.Text = "ChildNode0.Text";
firstRootNode.Nodes.Add(firstChildNode);
// Add second child node.
TreeNode secondChildNode = new TreeNode();
secondChildNode.Name = "ChildNode1";
secondChildNode.Text = "ChildNode1.Text";
firstChildNode.Nodes.Add(secondChildNode);
form.Controls.Add(treeView);
PythonControl pythonControl = new PythonControl(" ");
generatedPythonCode = pythonControl.GenerateInitializeComponentMethod(form);
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host);
IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager;
using (designerSerializationManager.CreateSession()) {
// Add first root node.
TreeNode firstRootNode = (TreeNode)serializationManager.CreateInstance(typeof(TreeNode), new object[0], "treeNode3", false);
firstRootNode.Name = "RootNode0";
firstRootNode.Text = "RootNode0.Text";
treeView.Nodes.Add(firstRootNode);
// Add first child node.
TreeNode firstChildNode = (TreeNode)serializationManager.CreateInstance(typeof(TreeNode), new object[0], "treeNode2", false);
firstChildNode.Name = "ChildNode0";
firstChildNode.Text = "ChildNode0.Text";
firstRootNode.Nodes.Add(firstChildNode);
// Add second child node.
TreeNode secondChildNode = (TreeNode)serializationManager.CreateInstance(typeof(TreeNode), new object[0], "treeNode1", false);
secondChildNode.Name = "ChildNode1";
secondChildNode.Text = "ChildNode1.Text";
firstChildNode.Nodes.Add(secondChildNode);
form.Controls.Add(treeView);
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, designerSerializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" treeNode1 = System.Windows.Forms.TreeNode()\r\n" +
" treeNode2 = System.Windows.Forms.TreeNode()\r\n" +
" treeNode3 = System.Windows.Forms.TreeNode()\r\n" +
string expectedCode = " treeNode1 = System.Windows.Forms.TreeNode(\"ChildNode1.Text\")\r\n" +
" treeNode2 = System.Windows.Forms.TreeNode(\"ChildNode0.Text\", System.Array[System.Windows.Forms.TreeNode](\r\n" +
" [treeNode1]))\r\n" +
" treeNode3 = System.Windows.Forms.TreeNode(\"RootNode0.Text\", System.Array[System.Windows.Forms.TreeNode](\r\n" +
" [treeNode2]))\r\n" +
" self._treeView1 = System.Windows.Forms.TreeView()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # treeView1\r\n" +
" # \r\n" +
" treeNode1.Name = \"RootNode0\"\r\n" +
" treeNode1.Text = \"RootNode0.Text\"\r\n" +
" treeNode1.Nodes.AddRange(System.Array[System.Windows.Forms.TreeNode](\r\n" +
" [treeNode2]))\r\n" +
" treeNode2.Name = \"ChildNode0\"\r\n" +
" treeNode2.Text = \"ChildNode0.Text\"\r\n" +
" treeNode2.Nodes.AddRange(System.Array[System.Windows.Forms.TreeNode](\r\n" +
" [treeNode3]))\r\n" +
" treeNode3.Name = \"ChildNode1\"\r\n" +
" treeNode3.Text = \"ChildNode1.Text\"\r\n" +
" self._treeView1.Location = System.Drawing.Point(0, 0)\r\n" +
" self._treeView1.Name = \"treeView1\"\r\n" +
" treeNode1.Name = \"ChildNode1\"\r\n" +
" treeNode1.Text = \"ChildNode1.Text\"\r\n" +
" treeNode2.Name = \"ChildNode0\"\r\n" +
" treeNode2.Text = \"ChildNode0.Text\"\r\n" +
" treeNode3.Name = \"RootNode0\"\r\n" +
" treeNode3.Text = \"RootNode0.Text\"\r\n" +
" self._treeView1.Nodes.AddRange(System.Array[System.Windows.Forms.TreeNode](\r\n" +
" [treeNode1]))\r\n" +
" [treeNode3]))\r\n" +
" self._treeView1.Size = System.Drawing.Size(100, 100)\r\n" +
" self._treeView1.TabIndex = 0\r\n" +
" # \r\n" +
@ -101,8 +103,7 @@ namespace PythonBinding.Tests.Designer @@ -101,8 +103,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._treeView1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

17
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratedControlOrderingTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
@ -53,17 +54,18 @@ namespace PythonBinding.Tests.Designer @@ -53,17 +54,18 @@ namespace PythonBinding.Tests.Designer
radioButton.UseCompatibleTextRendering = false;
form.Controls.Add(radioButton);
string indentString = " ";
PythonControl pythonForm = new PythonControl(indentString);
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self._button1 = System.Windows.Forms.Button()\r\n" +
string expectedCode = " self._button1 = System.Windows.Forms.Button()\r\n" +
" self._radioButton1 = System.Windows.Forms.RadioButton()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
@ -86,11 +88,10 @@ namespace PythonBinding.Tests.Designer @@ -86,11 +88,10 @@ namespace PythonBinding.Tests.Designer
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Controls.Add(self._radioButton1)\r\n" +
" self.Controls.Add(self._button1)\r\n" +
" self.Controls.Add(self._radioButton1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

11
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratorMergeFindsInitializeComponentsTestFixture.cs

@ -10,6 +10,7 @@ using System.CodeDom; @@ -10,6 +10,7 @@ using System.CodeDom;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
@ -59,8 +60,11 @@ namespace PythonBinding.Tests.Designer @@ -59,8 +60,11 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
generator.MergeRootComponentChanges(form, new MockResourceService());
generator.Detach();
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
generator.MergeRootComponentChanges(host, serializationManager);
generator.Detach();
}
}
}
@ -103,8 +107,7 @@ namespace PythonBinding.Tests.Designer @@ -103,8 +107,7 @@ namespace PythonBinding.Tests.Designer
"\t\t# \r\n" +
"\t\tself.ClientSize = System.Drawing.Size(499, 309)\r\n" +
"\t\tself.Name = \"MainForm\"\r\n" +
"\t\tself.ResumeLayout(False)\r\n" +
"\t\tself.PerformLayout()\r\n";
"\t\tself.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedText, viewContent.DesignerCodeFileContent);
}

46
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GetSerializableContentPropertiesTestFixture.cs

@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
// <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.ComponentModel;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Gets properties that are marked as DesignerSerializationVisibility.Content
/// </summary>
[TestFixture]
public class GetSerializableContentPropertiesTestFixture
{
PropertyDescriptorCollection properties;
[TestFixtureSetUp]
public void SetUpFixture()
{
using (Form form = new Form()) {
// Modify Form.Text so it is identified as needing serialization.
form.Text = "abc";
properties = PythonDesignerComponent.GetSerializableContentProperties(form);
}
}
[Test]
public void FormControlsPropertyReturned()
{
Assert.IsNotNull(properties.Find("Controls", false), "Property not found: Controls");
}
[Test]
public void FormTextPropertyIsNotReturned()
{
Assert.IsNull(properties.Find("Text", false), "Property should not be found: Text");
}
}
}

87
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs

@ -24,18 +24,15 @@ namespace PythonBinding.Tests.Designer @@ -24,18 +24,15 @@ namespace PythonBinding.Tests.Designer
[TestFixture]
public class IgnoreDesignTimePropertiesTestFixture
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
string generatedCode;
PropertyDescriptorCollection propertyDescriptors;
string generatedPythonCode;
/// <summary>
/// After a form is loaded onto a DesignSurface this checks that the PythonForm does not try to
@ -53,84 +50,18 @@ namespace PythonBinding.Tests.Designer @@ -53,84 +50,18 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
PythonControl pythonForm = new PythonControl(" ");
generatedCode = pythonForm.GenerateInitializeComponentMethod(form);
propertyDescriptors = PythonDesignerComponent.GetSerializableProperties(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void DesignTimePropertyIsIgnoredInGeneratedCode()
{
Assert.AreEqual(expectedCode, generatedCode);
}
[Test]
public void AtLeastOneSerializableProperty()
{
Assert.IsTrue(propertyDescriptors.Count > 0);
}
[Test]
public void NoLockedProperty()
{
Assert.IsFalse(ContainsProperty(propertyDescriptors, "Locked"), "Locked property is not expected.");
}
[Test]
public void NoTopLevelPropertyWhichHasDesignTimeVisibilityHidden()
{
Assert.IsFalse(ContainsProperty(propertyDescriptors, "TopLevel"), "TopLevel property is not expected.");
}
[Test]
public void NoTagPropertyWhichHasDefaultValue()
{
Assert.IsFalse(ContainsProperty(propertyDescriptors, "Tag"), "Tag property is not expected.");
}
[Test]
public void PropertiesAreSorted()
{
List<string> strings = new List<string>();
List<string> unsortedStrings = new List<string>();
foreach (PropertyDescriptor p in propertyDescriptors) {
strings.Add(p.Name);
unsortedStrings.Add(p.Name);
}
strings.Sort();
Assert.AreEqual(strings, unsortedStrings);
}
/// <summary>
/// Tests that the Controls property is returned in the GetSerializableProperties method.
/// </summary>
[Test]
public void ContainsDesignerSerializationContentProperties()
{
Assert.IsTrue(ContainsProperty(propertyDescriptors, "Controls"), "Controls property should be returned.");
}
static bool ContainsProperty(PropertyDescriptorCollection propertyDescriptors, string name)
{
foreach (PropertyDescriptor property in propertyDescriptors) {
if (property.Name == name) {
return true;
}
}
return false;
}
bool HasDesignOnlyAttribute(AttributeCollection attributes)
{
foreach (Attribute a in attributes) {
if (a is DesignOnlyAttribute) {
return true;
}
}
return false;
Assert.AreEqual(expectedCode, generatedPythonCode);
}
}
}

86
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IsSitedComponentTests.cs

@ -1,86 +0,0 @@ @@ -1,86 +0,0 @@
// <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.ComponentModel;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
[TestFixture]
public class IsSitedComponentTests : ISite
{
[Test]
public void NullComponent()
{
Assert.IsFalse(PythonDesignerComponent.IsSitedComponent(null));
}
[Test]
public void ComponentNotSited()
{
Assert.IsFalse(PythonDesignerComponent.IsSitedComponent(new Component()));
}
[Test]
public void SitedComponent()
{
Component component = new Component();
component.Site = this;
Assert.IsTrue(PythonDesignerComponent.IsSitedComponent(component));
}
[Test]
public void SitedDesignerComponent()
{
Component component = new Component();
component.Site = this;
PythonDesignerComponent designerComponent = new PythonDesignerComponent(component);
Assert.IsTrue(designerComponent.IsSited);
}
[Test]
public void NonComponent()
{
Assert.IsFalse(PythonDesignerComponent.IsSitedComponent(String.Empty));
}
public IComponent Component {
get {
throw new NotImplementedException();
}
}
public IContainer Container {
get {
throw new NotImplementedException();
}
}
public bool DesignMode {
get {
throw new NotImplementedException();
}
}
public string Name {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
public object GetService(Type serviceType)
{
throw new NotImplementedException();
}
}
}

64
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadLocalVariablePropertyAssignmentTestFixture.cs

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
// <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.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 LoadLocalVariablePropertyAssignmentTestFixture : LoadFormTestFixtureBase
{
public override string PythonCode {
get {
return "class MainForm(System.Windows.Forms.Form):\r\n" +
" def InitializeComponent(self):\r\n" +
" button1 = System.Windows.Forms.Button()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.AcceptButton = button1\r\n" +
" self.ClientSize = System.Drawing.Size(300, 400)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n";
}
}
[Test]
public void OneComponentCreated()
{
Assert.AreEqual(1, ComponentCreator.CreatedComponents.Count);
}
[Test]
public void TwoObjectsCreated()
{
Assert.AreEqual(2, ComponentCreator.CreatedInstances.Count);
}
[Test]
public void ButtonInstance()
{
CreatedInstance expectedInstance = new CreatedInstance(typeof(Button), new object[0], "button1", false);
Assert.AreEqual(expectedInstance, ComponentCreator.CreatedInstances[0]);
}
[Test]
public void AcceptButtonPropertyIsNotNull()
{
Assert.IsNotNull(Form.AcceptButton);
}
}
}

15
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/MergeFormTestFixture.cs

@ -10,6 +10,7 @@ using System; @@ -10,6 +10,7 @@ using System;
using System.CodeDom;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
@ -56,7 +57,10 @@ namespace PythonBinding.Tests.Designer @@ -56,7 +57,10 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(form, "MainForm");
PythonDesignerGenerator.Merge(form, new TextEditorDocument(document), compilationUnit, new MockTextEditorProperties(), resourceService);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonDesignerGenerator.Merge(host, new TextEditorDocument(document), compilationUnit, new MockTextEditorProperties(), serializationManager);
}
}
}
}
@ -67,12 +71,6 @@ namespace PythonBinding.Tests.Designer @@ -67,12 +71,6 @@ namespace PythonBinding.Tests.Designer
string expectedText = GetTextEditorCode().Replace(GetTextEditorInitializeComponentMethod(), GetGeneratedInitializeComponentMethod());
Assert.AreEqual(expectedText, document.TextContent);
}
[Test]
public void ResourceWriterDisposed()
{
Assert.IsTrue(resourceWriter.IsDisposed);
}
string GetGeneratedCode()
{
@ -94,8 +92,7 @@ namespace PythonBinding.Tests.Designer @@ -94,8 +92,7 @@ namespace PythonBinding.Tests.Designer
"\t\t# \r\n" +
"\t\tself.ClientSize = System.Drawing.Size(499, 309)\r\n" +
"\t\tself.Name = \"MainForm\"\r\n" +
"\t\tself.ResumeLayout(False)\r\n" +
"\t\tself.PerformLayout()\r\n";
"\t\tself.ResumeLayout(False)\r\n";
}
string GetTextEditorCode()

9
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/NoNewLineAfterInitializeComponentTestFixture.cs

@ -10,6 +10,7 @@ using System; @@ -10,6 +10,7 @@ using System;
using System.CodeDom;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
@ -49,7 +50,10 @@ namespace PythonBinding.Tests.Designer @@ -49,7 +50,10 @@ namespace PythonBinding.Tests.Designer
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false);
namePropertyDescriptor.SetValue(userControl, "userControl1");
PythonDesignerGenerator.Merge(userControl, new TextEditorDocument(document), compilationUnit, new MockTextEditorProperties(), null);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonDesignerGenerator.Merge(host, new TextEditorDocument(document), compilationUnit, new MockTextEditorProperties(), serializationManager);
}
}
}
}
@ -70,8 +74,7 @@ namespace PythonBinding.Tests.Designer @@ -70,8 +74,7 @@ namespace PythonBinding.Tests.Designer
"\t\t# \r\n" +
"\t\tself.Name = \"userControl1\"\r\n" +
"\t\tself.Size = System.Drawing.Size(489, 389)\r\n" +
"\t\tself.ResumeLayout(False)\r\n" +
"\t\tself.PerformLayout()\r\n";
"\t\tself.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, document.TextContent);
}

12
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/ProjectRootNamespacePassedToMergeTestFixture.cs

@ -10,6 +10,7 @@ using System; @@ -10,6 +10,7 @@ using System;
using System.CodeDom;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
@ -65,7 +66,11 @@ namespace PythonBinding.Tests.Designer @@ -65,7 +66,11 @@ namespace PythonBinding.Tests.Designer
MockTextEditorProperties properties = new MockTextEditorProperties();
properties.ConvertTabsToSpaces = true;
properties.IndentationSize = 4;
PythonDesignerGenerator.Merge(form, new TextEditorDocument(document), compilationUnit, properties, null);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonDesignerGenerator.Merge(host, new TextEditorDocument(document), compilationUnit, properties, serializationManager);
}
}
}
}
@ -82,7 +87,6 @@ namespace PythonBinding.Tests.Designer @@ -82,7 +87,6 @@ namespace PythonBinding.Tests.Designer
" def InitializeComponent(self):\r\n" +
" resources = System.Resources.ResourceManager(\"RootNamespace.MainForm\", System.Reflection.Assembly.GetEntryAssembly())\r\n" +
" self._pictureBox1 = System.Windows.Forms.PictureBox()\r\n" +
" self._pictureBox1.BeginInit()\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # pictureBox1\r\n" +
@ -99,9 +103,7 @@ namespace PythonBinding.Tests.Designer @@ -99,9 +103,7 @@ namespace PythonBinding.Tests.Designer
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Controls.Add(self._pictureBox1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self._pictureBox1.EndInit()\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, document.TextContent, document.TextContent);
}

13
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonDesignerLoaderTestFixture.cs

@ -40,6 +40,7 @@ namespace PythonBinding.Tests.Designer @@ -40,6 +40,7 @@ namespace PythonBinding.Tests.Designer
Form designedForm;
MockEventBindingService mockEventBindingService;
MockResourceService mockResourceService;
DesignerSerializationManager serializationManager;
[TestFixtureSetUp]
public void SetUpFixture()
@ -64,6 +65,8 @@ namespace PythonBinding.Tests.Designer @@ -64,6 +65,8 @@ namespace PythonBinding.Tests.Designer
mockEventBindingService = new MockEventBindingService();
mockDesignerLoaderHost.AddService(typeof(IEventBindingService), mockEventBindingService);
serializationManager = new DesignerSerializationManager(mockDesignerLoaderHost);
System.Console.WriteLine("Before BeginLoad");
loader.BeginLoad(mockDesignerLoaderHost);
System.Console.WriteLine("After BeginLoad");
@ -72,7 +75,7 @@ namespace PythonBinding.Tests.Designer @@ -72,7 +75,7 @@ namespace PythonBinding.Tests.Designer
designedForm = new Form();
designedForm.Name = "NewMainForm";
mockDesignerLoaderHost.RootComponent = designedForm;
loader.CallPerformFlush();
loader.CallPerformFlush(serializationManager);
}
[TestFixtureTearDown]
@ -127,9 +130,9 @@ namespace PythonBinding.Tests.Designer @@ -127,9 +130,9 @@ namespace PythonBinding.Tests.Designer
}
[Test]
public void PerformFlushUsesDesignedForm()
public void PerformFlushUsesDesignerHost()
{
Assert.AreEqual(designedForm, generator.MergeChangesRootComponent);
Assert.AreEqual(mockDesignerLoaderHost, generator.MergeChangesHost);
}
[Test]
@ -148,9 +151,9 @@ namespace PythonBinding.Tests.Designer @@ -148,9 +151,9 @@ namespace PythonBinding.Tests.Designer
}
[Test]
public void ResourceServicePassedToMergeRootComponentMethod()
public void SerializationManagerPassedToMergeRootComponentMethod()
{
Assert.IsTrue(Object.ReferenceEquals(mockResourceService, generator.MergeChangesResourceService));
Assert.IsTrue(Object.ReferenceEquals(serializationManager, generator.MergeChangesSerializationManager));
}
/// <summary>

13
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/RemoveMainMenuStripFromFormTestFixture.cs

@ -53,23 +53,24 @@ namespace PythonBinding.Tests.Designer @@ -53,23 +53,24 @@ namespace PythonBinding.Tests.Designer
form.Controls.Remove(menuStrip);
host.Container.Remove(menuStrip);
PythonControl pythonForm = new PythonControl(" ");
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form);
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
PythonCodeDomSerializer serializer = new PythonCodeDomSerializer(" ");
generatedPythonCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1);
}
}
}
[Test]
public void GeneratedCode()
{
string expectedCode = "def InitializeComponent(self):\r\n" +
" self.SuspendLayout()\r\n" +
string expectedCode = " self.SuspendLayout()\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, generatedPythonCode, generatedPythonCode);
}

9
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/TextEditorIndentPassedToGeneratorTestFixture.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.Windows.Forms;
@ -61,7 +62,10 @@ namespace PythonBinding.Tests.Designer @@ -61,7 +62,10 @@ namespace PythonBinding.Tests.Designer
DerivedPythonDesignerGenerator generator = new DerivedPythonDesignerGenerator(textEditorProperties);
generator.ParseInfoToReturnFromParseFileMethod = parseInfo;
generator.Attach(viewContent);
generator.MergeRootComponentChanges(form, new MockResourceService());
DesignerSerializationManager serializationManager = new DesignerSerializationManager(host);
using (serializationManager.CreateSession()) {
generator.MergeRootComponentChanges(host, serializationManager);
}
}
}
}
@ -80,8 +84,7 @@ namespace PythonBinding.Tests.Designer @@ -80,8 +84,7 @@ namespace PythonBinding.Tests.Designer
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.ResumeLayout(False)\r\n" +
" self.PerformLayout()\r\n";
" self.ResumeLayout(False)\r\n";
Assert.AreEqual(expectedCode, document.Text);
}

63
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/UnknownTypeTestFixture.cs

@ -9,8 +9,10 @@ using System; @@ -9,8 +9,10 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Resources;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.PythonBinding;
using IronPython.Compiler.Ast;
using Microsoft.Scripting;
@ -25,23 +27,56 @@ namespace PythonBinding.Tests.Designer @@ -25,23 +27,56 @@ namespace PythonBinding.Tests.Designer
/// </summary>
[TestFixture]
public class UnknownTypeTestFixture
{
string pythonCode = "from System.Windows.Forms import Form\r\n" +
"\r\n" +
"class MainForm(System.Windows.Forms.Form):\r\n" +
" def __init__(self):\r\n" +
" self.InitializeComponent()\r\n" +
"\r\n" +
" def InitializeComponent(self):\r\n" +
" self.ClientSize = Unknown.Type(10)\r\n";
{
[TestFixtureSetUp]
public void SetUpFixture()
{
ResourceManager rm = new ResourceManager("PythonBinding.Tests.Strings", GetType().Assembly);
ResourceService.RegisterNeutralStrings(rm);
}
[Test]
[ExpectedException(typeof(PythonComponentWalkerException))]
public void PythonFormWalkerExceptionThrown()
public void SelfAssignmentWithUnknownTypeRhs()
{
PythonComponentWalker walker = new PythonComponentWalker(new MockComponentCreator());
walker.CreateComponent(pythonCode);
Assert.Fail("Exception should have been thrown before this.");
string pythonCode = "from System.Windows.Forms import Form\r\n" +
"\r\n" +
"class MainForm(System.Windows.Forms.Form):\r\n" +
" def __init__(self):\r\n" +
" self.InitializeComponent()\r\n" +
"\r\n" +
" def InitializeComponent(self):\r\n" +
" self.ClientSize = Unknown.Type(10)\r\n";
try {
PythonComponentWalker walker = new PythonComponentWalker(new MockComponentCreator());
walker.CreateComponent(pythonCode);
Assert.Fail("Exception should have been thrown before this.");
} catch (PythonComponentWalkerException ex) {
string expectedMessage = String.Format(StringParser.Parse("${res:ICSharpCode.PythonBinding.UnknownTypeName}"), "Unknown.Type");
Assert.AreEqual(expectedMessage, ex.Message);
}
}
[Test]
public void LocalVariableAssignmentWithUnknownTypeRhs()
{
string pythonCode = "from System.Windows.Forms import Form\r\n" +
"\r\n" +
"class MainForm(System.Windows.Forms.Form):\r\n" +
" def __init__(self):\r\n" +
" self.InitializeComponent()\r\n" +
"\r\n" +
" def InitializeComponent(self):\r\n" +
" abc = Unknown.Type(10)\r\n";
try {
PythonComponentWalker walker = new PythonComponentWalker(new MockComponentCreator());
walker.CreateComponent(pythonCode);
Assert.Fail("Exception should have been thrown before this.");
} catch (PythonComponentWalkerException ex) {
string expectedMessage = String.Format(StringParser.Parse("${res:ICSharpCode.PythonBinding.UnknownTypeName}"), "Unknown.Type");
Assert.AreEqual(expectedMessage, ex.Message);
}
}
}
}

1
src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassWithCtorTestFixture.cs

@ -22,6 +22,7 @@ namespace PythonBinding.Tests.Parsing @@ -22,6 +22,7 @@ namespace PythonBinding.Tests.Parsing
/// was folded. This test fixture tests for that bug.
/// </summary>
[TestFixture]
[Ignore("Ignored because test depends on folding - reactivate when folding is reimplemented")]
public class ParseClassWithCtorTestFixture
{
ICompilationUnit compilationUnit;

1
src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassWithMethodTestFixture.cs

@ -17,6 +17,7 @@ using PythonBinding.Tests; @@ -17,6 +17,7 @@ using PythonBinding.Tests;
namespace PythonBinding.Tests.Parsing
{
[TestFixture]
[Ignore("Ignored because test depends on folding - reactivate when folding is reimplemented")]
public class ParseClassWithMethodTestFixture
{
ICompilationUnit compilationUnit;

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

@ -21,6 +21,7 @@ namespace PythonBinding.Tests.Parsing @@ -21,6 +21,7 @@ namespace PythonBinding.Tests.Parsing
/// Support folding when no classes are defined.
/// </summary>
[TestFixture]
[Ignore("Ignored because test depends on folding - reactivate when folding is reimplemented")]
public class ParseMethodsWithNoClassTestFixture
{
ICompilationUnit compilationUnit;

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

@ -172,26 +172,25 @@ @@ -172,26 +172,25 @@
<Compile Include="Converter\XmlDocCommentConversionTestFixture.cs" />
<Compile Include="DebugPythonCommandTestFixture.cs" />
<Compile Include="Designer\AppendNullPropertyValueTestFixture.cs" />
<Compile Include="Designer\CallBeginInitOnLoadTestFixture.cs" />
<Compile Include="Designer\ConvertCustomClassUsingTypeConverterTestFixture.cs" />
<Compile Include="Designer\CreateDesignerComponentTests.cs" />
<Compile Include="Designer\CursorTypeResolutionTestFixture.cs" />
<Compile Include="Designer\DeserializeAssignmentTestFixtureBase.cs" />
<Compile Include="Designer\DeserializeColorFromArgbTestFixture.cs" />
<Compile Include="Designer\DeserializeComponentAssignmentTestFixture.cs" />
<Compile Include="Designer\DeserializeDateTimeArrayTestFixture.cs" />
<Compile Include="Designer\DeserializeLocalVariableTestFixture.cs" />
<Compile Include="Designer\DeserializeMethodParametersTestFixture.cs" />
<Compile Include="Designer\DeserializerConstructorStringArrayTestFixture.cs" />
<Compile Include="Designer\DeserializeStringArrayTestFixture.cs" />
<Compile Include="Designer\DeserializeToolStripItemArrayTestFixture.cs" />
<Compile Include="Designer\EnabledSetUsingPropertyDescriptorTestFixture.cs" />
<Compile Include="Designer\EventHandlerAlreadyExistsTestFixture.cs" />
<Compile Include="Designer\EventHandlerExistsWithIncorrectParameterCountTestFixture.cs" />
<Compile Include="Designer\FindAddRangeMethodTests.cs" />
<Compile Include="Designer\FindInitializeComponentMethodTestFixture.cs" />
<Compile Include="Designer\FormBaseClassCreatedOnLoadTestFixture.cs" />
<Compile Include="Designer\GenerateAcceptButtonFormTestFixture.cs" />
<Compile Include="Designer\GenerateAccessibleRoleFormTestFixture.cs" />
<Compile Include="Designer\GenerateAddRangeForNonComponentTestFixture.cs" />
<Compile Include="Designer\GenerateAutoScaleModeFormTestFixture.cs" />
<Compile Include="Designer\GenerateAutoScrollFormTestFixture.cs" />
<Compile Include="Designer\GenerateBackgroundWorkerTestFixture.cs" />
@ -237,13 +236,11 @@ @@ -237,13 +236,11 @@
<Compile Include="Designer\GetComponentFromDesignerLoaderTestFixture.cs" />
<Compile Include="Designer\GetInstanceFromDesignerLoaderTestFixture.cs" />
<Compile Include="Designer\GetResourcesFromDesignerLoaderTestFixture.cs" />
<Compile Include="Designer\GetSerializableContentPropertiesTestFixture.cs" />
<Compile Include="Designer\IgnoreDesignTimePropertiesTestFixture.cs" />
<Compile Include="Designer\InsertEventHandlerTestFixtureBase.cs" />
<Compile Include="Designer\InsertNewEventHandlerTestFixture.cs" />
<Compile Include="Designer\InsertSecondEventHandlerTestFixture.cs" />
<Compile Include="Designer\IsFullyQualifiedBaseClassFormDesignableTestFixture.cs" />
<Compile Include="Designer\IsSitedComponentTests.cs" />
<Compile Include="Designer\LoadAcceptButtonFormTestFixture.cs" />
<Compile Include="Designer\LoadAccessibleRoleTestFixture.cs" />
<Compile Include="Designer\LoadAnchorStylesFormTestFixture.cs" />
@ -261,6 +258,7 @@ @@ -261,6 +258,7 @@
<Compile Include="Designer\LoadInheritedToolTipTestFixture.cs" />
<Compile Include="Designer\LoadListViewFormTestFixture.cs" />
<Compile Include="Designer\LoadLocalImageResourceTestFixture.cs" />
<Compile Include="Designer\LoadLocalVariablePropertyAssignmentTestFixture.cs" />
<Compile Include="Designer\LoadMenuStripFormTestFixture.cs" />
<Compile Include="Designer\LoadMonthCalendarTestFixture.cs" />
<Compile Include="Designer\LoadSimpleFormTestFixture.cs" />
@ -385,8 +383,11 @@ @@ -385,8 +383,11 @@
</EmbeddedResource>
<None Include="app.config" />
<Compile Include="Parsing\AddInvalidSourceSpanToErrorSinkTestFixture.cs" />
<Compile Include="Utils\NullPropertyUserControl.cs" />
<Compile Include="Utils\PythonParserHelper.cs" />
<Compile Include="Utils\SupportInitCustomControl.cs" />
<EmbeddedResource Include="Designer\App.ico" />
<EmbeddedResource Include="Strings.resx" />
<None Include="TODO.txt" />
</ItemGroup>
<ItemGroup>

123
src/AddIns/BackendBindings/Python/PythonBinding/Test/Strings.resx

@ -0,0 +1,123 @@ @@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ICSharpCode.PythonBinding.UnknownTypeName" xml:space="preserve">
<value>Could not find type '{0}'. Are you missing an assembly reference?</value>
</data>
</root>

4
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonDesignerLoader.cs

@ -28,9 +28,9 @@ namespace PythonBinding.Tests.Utils @@ -28,9 +28,9 @@ namespace PythonBinding.Tests.Utils
{
}
public void CallPerformFlush()
public void CallPerformFlush(IDesignerSerializationManager serializationManager)
{
base.PerformFlush(null);
base.PerformFlush(serializationManager);
}
protected override void OnEndLoad(bool successful, ICollection errors)

19
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockDesignerGenerator.cs

@ -12,6 +12,7 @@ using System.Collections; @@ -12,6 +12,7 @@ using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using System.Windows.Forms;
@ -27,8 +28,8 @@ namespace PythonBinding.Tests.Utils @@ -27,8 +28,8 @@ namespace PythonBinding.Tests.Utils
public class MockDesignerGenerator : IPythonDesignerGenerator
{
FormsDesignerViewContent viewContent;
IComponent mergeChangesRootComponent;
IResourceService mergeChangesResourceService;
IDesignerHost mergeChangesHost;
IDesignerSerializationManager mergeChangesSerializationManager;
public MockDesignerGenerator()
{
@ -62,18 +63,18 @@ namespace PythonBinding.Tests.Utils @@ -62,18 +63,18 @@ namespace PythonBinding.Tests.Utils
{
}
public void MergeRootComponentChanges(IComponent component, IResourceService resourceService)
public void MergeRootComponentChanges(IDesignerHost host, IDesignerSerializationManager serializationManager)
{
mergeChangesRootComponent = component;
mergeChangesResourceService = resourceService;
mergeChangesHost = host;
mergeChangesSerializationManager = serializationManager;
}
public IComponent MergeChangesRootComponent {
get { return mergeChangesRootComponent; }
public IDesignerHost MergeChangesHost {
get { return mergeChangesHost; }
}
public IResourceService MergeChangesResourceService {
get { return mergeChangesResourceService; }
public IDesignerSerializationManager MergeChangesSerializationManager {
get { return mergeChangesSerializationManager; }
}
public bool InsertComponentEvent(IComponent component, System.ComponentModel.EventDescriptor edesc, string eventMethodName, string body, out string file, out int position)

6
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockMethod.cs

@ -34,6 +34,12 @@ namespace PythonBinding.Tests.Utils @@ -34,6 +34,12 @@ namespace PythonBinding.Tests.Utils
}
}
public bool IsOperator {
get {
throw new NotImplementedException();
}
}
public IList<string> HandlesClauses {
get {
throw new NotImplementedException();

26
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/NullPropertyUserControl.cs

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
// <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.Windows.Forms;
namespace PythonBinding.Tests.Utils
{
public class NullPropertyUserControl : UserControl
{
string fooBar;
public string FooBar {
get { return fooBar; }
set { fooBar = value; }
}
public NullPropertyUserControl()
{
}
}
}

48
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/SupportInitCustomControl.cs

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
// <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.ComponentModel;
using System.Windows.Forms;
namespace PythonBinding.Tests.Utils
{
public class SupportInitCustomControl : UserControl, ISupportInitialize
{
bool beginInitCalled;
bool endInitCalled;
public SupportInitCustomControl()
{
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public bool IsBeginInitCalled {
get { return beginInitCalled; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public bool IsEndInitCalled {
get { return endInitCalled; }
}
/// <summary>
/// Deliberately making the interface explicit for the BeginInit method but not the EndInit method.
/// </summary>
void ISupportInitialize.BeginInit()
{
beginInitCalled = true;
}
public void EndInit()
{
endInitCalled = true;
}
}
}

6
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/XmlDesignerNameCreationService.cs

@ -36,8 +36,10 @@ namespace ICSharpCode.FormsDesigner @@ -36,8 +36,10 @@ namespace ICSharpCode.FormsDesigner
{
string name = Char.ToLower(dataType.Name[0]) + dataType.Name.Substring(1);
int number = 1;
while (container.Components[name + number.ToString()] != null) {
++number;
if (container != null) {
while (container.Components[name + number.ToString()] != null) {
++number;
}
}
return name + number.ToString();
}

8
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs generated

@ -49,18 +49,20 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -49,18 +49,20 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
this.pathList.ListCaption = "${res:Dialog.Options.IDEOptions.Debugging.Symbols.ListCaption}";
this.pathList.Location = new System.Drawing.Point(0, 0);
this.pathList.ManualOrder = true;
this.pathList.Margin = new System.Windows.Forms.Padding(2);
this.pathList.Name = "pathList";
this.pathList.Size = new System.Drawing.Size(349, 295);
this.pathList.Size = new System.Drawing.Size(233, 192);
this.pathList.TabIndex = 4;
this.pathList.TitleText = "${res:Global.Folder}:";
//
// DebuggingSymbolsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.pathList);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "DebuggingSymbolsPanel";
this.Size = new System.Drawing.Size(352, 298);
this.Size = new System.Drawing.Size(235, 194);
this.ResumeLayout(false);
}
private ICSharpCode.SharpDevelop.Gui.StringListEditor pathList;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save