+2007-12-18 Ivan N. Zlatev <contact@i-nz.net>
+
+ * ControlCodeDomSerializer.cs: Add. Handles Resume/Suspend
+ layout serialization.
+ * ControlCollectionCodeDomSerializer.cs: Add.
+ * DesignerSerializationManager.cs: DesignerSerializerAttribute
+ should have higher precedence than the serializer providers.
+
2007-11-01 Ivan N. Zlatev <contact@i-nz.net>
* CodeDomSerializerBase.cs:
DefaultSerializationProviderAttribute providerAttribute = attributes[typeof (DefaultSerializationProviderAttribute)]
as DefaultSerializationProviderAttribute;
if (providerAttribute != null && this.GetType (providerAttribute.ProviderTypeName) == serializerType) {
-
object provider = Activator.CreateInstance (this.GetType (providerAttribute.ProviderTypeName),
BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.NonPublic,
null, null, null);
-
((IDesignerSerializationManager)this).AddSerializationProvider ((IDesignerSerializationProvider) provider);
}
}
-
- // try 2: from provider
+
+ // try 2: DesignerSerializerAttribute
+ //
+ if (serializer == null && componentType != null) {
+ AttributeCollection attributes = TypeDescriptor.GetAttributes (componentType);
+ DesignerSerializerAttribute serializerAttribute = attributes[typeof (DesignerSerializerAttribute)] as DesignerSerializerAttribute;
+ if (serializerAttribute != null &&
+ this.GetType (serializerAttribute.SerializerBaseTypeName) == serializerType) {
+ serializer = Activator.CreateInstance (this.GetType (serializerAttribute.SerializerTypeName),
+ BindingFlags.CreateInstance | BindingFlags.Instance |
+ BindingFlags.Public | BindingFlags.NonPublic,
+ null, null, null);
+ }
+
+ if (serializer != null)
+ _serializersCache[componentType] = serializer;
+ }
+
+ // try 3: from provider
//
if (serializer == null) {
foreach (IDesignerSerializationProvider provider in _serializationProviders) {
}
}
- if (componentType != null) {
- // try 3: Activator
- //
- if (serializer == null) {
- AttributeCollection attributes = TypeDescriptor.GetAttributes (componentType);
- DesignerSerializerAttribute serializerAttribute = attributes[typeof (DesignerSerializerAttribute)] as DesignerSerializerAttribute;
- if (serializerAttribute != null && this.GetType (serializerAttribute.SerializerTypeName) == serializerType) {
- serializer = Activator.CreateInstance (this.GetType (serializerAttribute.SerializerTypeName),
- BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.NonPublic,
- null, null, null);
- }
- }
-
- if (serializer != null)
- _serializersCache[componentType] = serializer;
- }
-
return serializer;
}
-
+
private void VerifyInSession ()
{
if (_session == null)
System.Windows.Forms.Design/ComponentDocumentDesigner.cs
System.Windows.Forms.Design/ComponentTray.cs
System.Windows.Forms.Design/ControlBindingsConverter.cs
+System.Windows.Forms.Design/ControlCodeDomSerializer.cs
+System.Windows.Forms.Design/ControlCollectionCodeDomSerializer.cs
System.Windows.Forms.Design/ControlDataObject.cs
System.Windows.Forms.Design/ControlDesigner.cs
System.Windows.Forms.Design/DataMemberFieldConverter.cs
--- /dev/null
+//
+// System.Windows.Forms.Design.ControlCodeDomSerializaer
+//
+// Authors:
+// Ivan N. Zlatev (contact i-nZ.net)
+//
+// (C) 2007 Ivan N. Zlatev
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.Reflection;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+using System.ComponentModel.Design.Serialization;
+using System.CodeDom;
+using System.Windows.Forms;
+
+namespace System.Windows.Forms.Design
+{
+ internal class ControlCodeDomSerializer : ComponentCodeDomSerializer
+ {
+
+ public ControlCodeDomSerializer ()
+ {
+ }
+
+ public override object Serialize (IDesignerSerializationManager manager, object value)
+ {
+ if (value == null)
+ throw new ArgumentNullException ("value");
+ if (manager == null)
+ throw new ArgumentNullException ("manager");
+
+ if (!(value is Control))
+ throw new InvalidOperationException ("value is not a Control");
+
+ object serialized = base.Serialize (manager, value);
+ CodeStatementCollection statements = serialized as CodeStatementCollection;
+ if (statements != null) {
+ ICollection childControls = TypeDescriptor.GetProperties (value)["Controls"].GetValue (value) as ICollection;
+ // If the serialized object is not a statements collection then we don't do anything,
+ // because this means that the object is not under context (serialized to experssion)
+ //
+ if (childControls.Count > 0) {
+ CodeExpression componentRef = base.GetExpression (manager, value);
+ statements.Insert (0, new CodeExpressionStatement (
+ new CodeMethodInvokeExpression (componentRef, "SuspendLayout")));
+ statements.Add (new CodeMethodInvokeExpression (componentRef, "ResumeLayout",
+ new CodeExpression[] {
+ new CodePrimitiveExpression (false) }));
+ serialized = statements;
+ }
+ }
+ return serialized;
+ }
+ }
+}
+#endif
--- /dev/null
+//
+// System.Windows.Forms.Design.ControlCollectionCodeDomSerializaer
+//
+// Authors:
+// Ivan N. Zlatev (contact i-nZ.net)
+//
+// (C) 2007 Ivan N. Zlatev
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.Reflection;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+using System.ComponentModel.Design.Serialization;
+using System.CodeDom;
+using System.Windows.Forms;
+
+namespace System.Windows.Forms.Design
+{
+ internal class ControlCollectionCodeDomSerializaer : CollectionCodeDomSerializer
+ {
+
+ public ControlCollectionCodeDomSerializaer ()
+ {
+ }
+ }
+}
+#endif