diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonForm.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonForm.cs index 3db282ccd5..f76ccab512 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonForm.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonForm.cs @@ -119,7 +119,7 @@ namespace ICSharpCode.PythonBinding { List properties = new List(); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(obj, notDesignOnlyFilter).Sort()) { - if (property.SerializationVisibility == DesignerSerializationVisibility.Visible) { + if (property.SerializationVisibility != DesignerSerializationVisibility.Hidden) { if (property.ShouldSerializeValue(obj)) { properties.Add(property); } @@ -167,21 +167,11 @@ namespace ICSharpCode.PythonBinding string propertyOwnerName = GetPropertyOwnerName(control, addControlNameToProperty); AppendProperties(propertyOwnerName, control); - - foreach (Control childControl in control.Controls) { - if (IsSitedComponent(childControl)) { - AppendIndentedLine(GetPropertyName(propertyOwnerName, "Controls") + ".Add(self._" + childControl.Name + ")"); - } - } - AppendEventHandlers(propertyOwnerName, control); MenuStrip menuStrip = control as MenuStrip; - ComboBox comboBox = control as ComboBox; if (menuStrip != null) { - AppendMenuStripItems(menuStrip); - } else if (comboBox != null) { - AppendSystemArray(comboBox.Name, "Items.AddRange", typeof(Object).FullName, comboBox.Items); + AppendToolStripItems(menuStrip.Items); } if (addChildControlProperties) { @@ -200,11 +190,34 @@ namespace ICSharpCode.PythonBinding } string propertyName = GetPropertyName(propertyOwnerName, propertyDescriptor.Name); - Control control = propertyValue as Control; - if (control != null) { - AppendIndentedLine(propertyName + " = self._" + control.Name); + if (propertyDescriptor.SerializationVisibility == DesignerSerializationVisibility.Visible) { + Control control = propertyValue as Control; + if (control != null) { + AppendIndentedLine(propertyName + " = self._" + control.Name); + } else { + AppendIndentedLine(propertyName + " = " + PythonPropertyValueAssignment.ToString(propertyValue)); + } } else { - AppendIndentedLine(propertyName + " = " + PythonPropertyValueAssignment.ToString(propertyValue)); + // Content. + if (propertyDescriptor.Name == "Controls") { + Control parentControl = obj as Control; + foreach (Control childControl in parentControl.Controls) { + if (IsSitedComponent(childControl)) { + AppendIndentedLine(GetPropertyName(propertyOwnerName, "Controls") + ".Add(self._" + childControl.Name + ")"); + } + } + } else { + MenuStrip menuStrip = obj as MenuStrip; + ComboBox comboBox = obj as ComboBox; + ToolStripMenuItem menuItem = obj as ToolStripMenuItem; + if (menuStrip != null && propertyDescriptor.Name == "Items") { + AppendMenuStripItems(menuStrip); + } else if (comboBox != null && propertyDescriptor.Name == "Items") { + AppendSystemArray(comboBox.Name, "Items.AddRange", typeof(Object).FullName, comboBox.Items); + } else if (menuItem != null && propertyDescriptor.Name == "DropDownItems") { + AppendToolStripMenuItemDropDownItems(menuItem.Name, GetSitedToolStripItems(menuItem.DropDownItems)); + } + } } } @@ -400,7 +413,6 @@ namespace ICSharpCode.PythonBinding { List items = GetSitedToolStripItems(menuStrip.Items); AppendMenuStripItemsAddRange(menuStrip.Name, items); - AppendToolStripItems(items); } void AppendSystemArray(string componentName, string methodName, string typeName, IList components) @@ -448,7 +460,9 @@ namespace ICSharpCode.PythonBinding void AppendToolStripItems(IList items) { foreach (ToolStripItem item in items) { - AppendToolStripItem(item); + if (IsSitedComponent(item)) { + AppendToolStripItem(item); + } } } @@ -460,7 +474,6 @@ namespace ICSharpCode.PythonBinding ToolStripMenuItem menuItem = item as ToolStripMenuItem; if (menuItem != null) { List sitedItems = GetSitedToolStripItems(menuItem.DropDownItems); - AppendToolStripMenuItemDropDownItems(menuItem.Name, sitedItems); AppendToolStripItems(sitedItems); } } diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs index f42c48dc62..091d7bf5cf 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs @@ -70,8 +70,8 @@ namespace PythonBinding.Tests.Designer " # \r\n" + " self.AcceptButton = self._button1\r\n" + " self.ClientSize = System.Drawing.Size(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + " self.Controls.Add(self._button1)\r\n" + + " self.Name = \"MainForm\"\r\n" + " self.ResumeLayout(False)\r\n" + " self.PerformLayout()\r\n"; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs index 2a4a260af5..b6aa21e15a 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs @@ -61,20 +61,20 @@ namespace PythonBinding.Tests.Designer " # \r\n" + " # comboBox1\r\n" + " # \r\n" + - " self._comboBox1.Location = System.Drawing.Point(0, 0)\r\n" + - " self._comboBox1.Name = \"comboBox1\"\r\n" + - " self._comboBox1.Size = System.Drawing.Size(121, 21)\r\n" + - " self._comboBox1.TabIndex = 0\r\n" + " self._comboBox1.Items.AddRange(System.Array[System.Object](\r\n" + " [\"aaa\",\r\n" + " \"bbb\",\r\n" + " \"ccc\"]))\r\n" + + " self._comboBox1.Location = System.Drawing.Point(0, 0)\r\n" + + " self._comboBox1.Name = \"comboBox1\"\r\n" + + " self._comboBox1.Size = System.Drawing.Size(121, 21)\r\n" + + " self._comboBox1.TabIndex = 0\r\n" + " # \r\n" + " # MainForm\r\n" + " # \r\n" + " self.ClientSize = System.Drawing.Size(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + " self.Controls.Add(self._comboBox1)\r\n" + + " self.Name = \"MainForm\"\r\n" + " self.ResumeLayout(False)\r\n" + " self.PerformLayout()\r\n"; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs index 02cc4191d0..77ede12f7f 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs @@ -71,8 +71,8 @@ namespace PythonBinding.Tests.Designer " # MainForm\r\n" + " # \r\n" + " self.ClientSize = System.Drawing.Size(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + " self.Controls.Add(self._menuStrip1)\r\n" + + " self.Name = \"MainForm\"\r\n" + " self.ResumeLayout(False)\r\n" + " self.PerformLayout()\r\n"; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs index 018f5cb545..1cb30fc785 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs @@ -94,23 +94,23 @@ namespace PythonBinding.Tests.Designer " # \r\n" + " # menuStrip1\r\n" + " # \r\n" + + " self._menuStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + + " [self._fileToolStripMenuItem,\r\n" + + " self._editToolStripMenuItem]))\r\n" + " self._menuStrip1.Location = System.Drawing.Point(0, 0)\r\n" + " self._menuStrip1.Name = \"menuStrip1\"\r\n" + " self._menuStrip1.Size = System.Drawing.Size(200, 24)\r\n" + " self._menuStrip1.TabIndex = 0\r\n" + " self._menuStrip1.Text = \"menuStrip1\"\r\n" + - " self._menuStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + - " [self._fileToolStripMenuItem,\r\n" + - " self._editToolStripMenuItem]))\r\n" + " # \r\n" + " # fileToolStripMenuItem\r\n" + " # \r\n" + - " self._fileToolStripMenuItem.Name = \"fileToolStripMenuItem\"\r\n" + - " self._fileToolStripMenuItem.Size = " + SizeToString(fileMenuItemSize) + "\r\n" + - " self._fileToolStripMenuItem.Text = \"&File\"\r\n" + " self._fileToolStripMenuItem.DropDownItems.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + " [self._openToolStripMenuItem,\r\n" + " self._exitToolStripMenuItem]))\r\n" + + " self._fileToolStripMenuItem.Name = \"fileToolStripMenuItem\"\r\n" + + " self._fileToolStripMenuItem.Size = " + SizeToString(fileMenuItemSize) + "\r\n" + + " self._fileToolStripMenuItem.Text = \"&File\"\r\n" + " # \r\n" + " # openToolStripMenuItem\r\n" + " # \r\n" + @@ -133,8 +133,8 @@ namespace PythonBinding.Tests.Designer " # MainForm\r\n" + " # \r\n" + " self.ClientSize = System.Drawing.Size(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + " self.Controls.Add(self._menuStrip1)\r\n" + + " self.Name = \"MainForm\"\r\n" + " self._menuStrip1.ResumeLayout(False)\r\n" + " self._menuStrip1.PerformLayout()\r\n" + " self.ResumeLayout(False)\r\n" + diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs index 93cfd0797d..2de6de764d 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs @@ -74,19 +74,19 @@ namespace PythonBinding.Tests.Designer " # \r\n" + " # panel1\r\n" + " # \r\n" + + " self._panel1.Controls.Add(self._panel2)\r\n" + " self._panel1.Location = System.Drawing.Point(0, 0)\r\n" + " self._panel1.Name = \"panel1\"\r\n" + " self._panel1.Size = System.Drawing.Size(200, 220)\r\n" + " self._panel1.TabIndex = 0\r\n" + - " self._panel1.Controls.Add(self._panel2)\r\n" + " # \r\n" + " # panel2\r\n" + " # \r\n" + + " self._panel2.Controls.Add(self._textBox1)\r\n" + " self._panel2.Location = System.Drawing.Point(10, 15)\r\n" + " self._panel2.Name = \"panel2\"\r\n" + " self._panel2.Size = System.Drawing.Size(100, 120)\r\n" + " self._panel2.TabIndex = 0\r\n" + - " self._panel2.Controls.Add(self._textBox1)\r\n" + " # \r\n" + " # textBox1\r\n" + " # \r\n" + @@ -98,8 +98,8 @@ namespace PythonBinding.Tests.Designer " # MainForm\r\n" + " # \r\n" + " self.ClientSize = System.Drawing.Size(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + " 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" + diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs index 4aa2687e40..98c193d483 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs @@ -70,11 +70,11 @@ namespace PythonBinding.Tests.Designer " # \r\n" + " # panel1\r\n" + " # \r\n" + + " self._panel1.Controls.Add(self._textBox1)\r\n" + " self._panel1.Location = System.Drawing.Point(10, 15)\r\n" + " self._panel1.Name = \"panel1\"\r\n" + " self._panel1.Size = System.Drawing.Size(100, 120)\r\n" + " self._panel1.TabIndex = 0\r\n" + - " self._panel1.Controls.Add(self._textBox1)\r\n" + " self._panel1.Click += self.Panel1Click\r\n" + " # \r\n" + " # textBox1\r\n" + @@ -87,8 +87,8 @@ namespace PythonBinding.Tests.Designer " # MainForm\r\n" + " # \r\n" + " self.ClientSize = System.Drawing.Size(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + " self.Controls.Add(self._panel1)\r\n" + + " self.Name = \"MainForm\"\r\n" + " self._panel1.ResumeLayout(False)\r\n" + " self._panel1.PerformLayout()\r\n" + " self.ResumeLayout(False)\r\n" + diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs index ed34de6a13..e560077cab 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs @@ -63,8 +63,8 @@ namespace PythonBinding.Tests.Designer " # MainForm\r\n" + " # \r\n" + " self.ClientSize = System.Drawing.Size(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + " self.Controls.Add(self._textBox1)\r\n" + + " self.Name = \"MainForm\"\r\n" + " self.ResumeLayout(False)\r\n" + " self.PerformLayout()\r\n"; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs index d8fc80be74..8865dab522 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs @@ -104,6 +104,15 @@ namespace PythonBinding.Tests.Designer Assert.AreEqual(strings, unsortedStrings); } + /// + /// Tests that the Controls property is returned in the GetSerializableProperties method. + /// + [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) {