Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / Host / Serialization / ResourcePropertyMemberCodeDomSerializer.cs / 2 / ResourcePropertyMemberCodeDomSerializer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.CodeDom; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System.Globalization; using System.Resources; using System.Windows.Forms; using System.Windows.Forms.Design; ////// This serializer replaces the property serializer for properties when we're /// in localization mode. /// internal class ResourcePropertyMemberCodeDomSerializer : MemberCodeDomSerializer { private CodeDomLocalizationModel _model; private MemberCodeDomSerializer _serializer; private CodeDomLocalizationProvider.LanguageExtenders _extender; private CultureInfo localizationLanguage = null; internal ResourcePropertyMemberCodeDomSerializer(MemberCodeDomSerializer serializer, CodeDomLocalizationProvider.LanguageExtenders extender, CodeDomLocalizationModel model) { Debug.Assert(extender != null, "Extender should have been created by now."); _serializer = serializer; _extender = extender; _model = model; } ////// This method actually performs the serialization. When the member is serialized /// the necessary statements will be added to the statements collection. /// public override void Serialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor, CodeStatementCollection statements) { // We push the localization model to indicate that our serializer is in control. Our // serialization provider looks for this and decides what type of resource serializer // to give us. manager.Context.Push(_model); try { _serializer.Serialize(manager, value, descriptor, statements); } finally { manager.Context.Pop(); } } private CultureInfo GetLocalizationLanguage(IDesignerSerializationManager manager) { if (localizationLanguage == null) { // Check to see if our base component's localizable prop is true RootContext rootCxt = manager.Context[typeof(RootContext)] as RootContext; if (rootCxt != null) { object comp = rootCxt.Value; PropertyDescriptor prop = TypeDescriptor.GetProperties(comp)["LoadLanguage"]; if (prop != null && prop.PropertyType == typeof(CultureInfo)) { localizationLanguage = (CultureInfo)prop.GetValue(comp); } } } return localizationLanguage; } private void OnSerializationComplete(object sender, EventArgs e) { // we do the cleanup here and clear out the cache of the localizedlanguage localizationLanguage = null; //unhook the event IDesignerSerializationManager manager = sender as IDesignerSerializationManager; Debug.Assert(manager != null, "manager should not be null!"); if(manager != null) { manager.SerializationComplete -= new EventHandler(OnSerializationComplete); } } ////// This method returns true if the given member descriptor should be serialized, /// or false if there is no need to serialize the member. /// public override bool ShouldSerialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor) { bool shouldSerialize = _serializer.ShouldSerialize(manager, value, descriptor); if (!shouldSerialize && !descriptor.Attributes.Contains(DesignOnlyAttribute.Yes)) { switch (_model) { case CodeDomLocalizationModel.PropertyReflection : if(!shouldSerialize) { // hook up the event the first time to clear out our cache at the end of the serialization if(localizationLanguage == null) { manager.SerializationComplete += new EventHandler(OnSerializationComplete); } if(GetLocalizationLanguage(manager) != CultureInfo.InvariantCulture) { shouldSerialize = true; } } break; case CodeDomLocalizationModel.PropertyAssignment : // If this property contains its default value, we still want to serialize it if we are in // localization mode if we are writing to the default culture, but only if the object // is not inherited. InheritanceAttribute inheritance = (InheritanceAttribute)manager.Context[typeof(InheritanceAttribute)]; if (inheritance == null) { inheritance = (InheritanceAttribute)TypeDescriptor.GetAttributes(value)[typeof(InheritanceAttribute)]; if (inheritance == null) { inheritance = InheritanceAttribute.NotInherited; } } if (inheritance.InheritanceLevel != InheritanceLevel.InheritedReadOnly) { shouldSerialize = true; } break; default : break; } } return shouldSerialize; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SerializerWriterEventHandlers.cs
- WebPartExportVerb.cs
- Logging.cs
- TrackingCondition.cs
- ProcessHostFactoryHelper.cs
- WebPartConnectVerb.cs
- RuleConditionDialog.Designer.cs
- SmtpLoginAuthenticationModule.cs
- SizeChangedInfo.cs
- HandlerBase.cs
- DataGridRowClipboardEventArgs.cs
- MethodExpr.cs
- StylusEditingBehavior.cs
- GeneratedView.cs
- PointAnimationClockResource.cs
- RelatedView.cs
- BitHelper.cs
- COM2ExtendedBrowsingHandler.cs
- ItemsChangedEventArgs.cs
- _NegoStream.cs
- RefExpr.cs
- SchemaAttDef.cs
- ProxyHelper.cs
- LogicalTreeHelper.cs
- RoleGroup.cs
- GeometryValueSerializer.cs
- XhtmlBasicValidatorAdapter.cs
- EmptyStringExpandableObjectConverter.cs
- DataControlLinkButton.cs
- WebEventTraceProvider.cs
- InputLanguageSource.cs
- HandlerWithFactory.cs
- OleDbError.cs
- FederatedMessageSecurityOverHttp.cs
- Command.cs
- DataColumnPropertyDescriptor.cs
- XmlSchemaDocumentation.cs
- ClientSettings.cs
- ContainsRowNumberChecker.cs
- Line.cs
- ImageSourceValueSerializer.cs
- UrlPath.cs
- embossbitmapeffect.cs
- AdornedElementPlaceholder.cs
- SelectionChangedEventArgs.cs
- SqlUdtInfo.cs
- _FtpControlStream.cs
- HwndStylusInputProvider.cs
- StylusPointPropertyInfo.cs
- FileDataSourceCache.cs
- ImageUrlEditor.cs
- ZipIOModeEnforcingStream.cs
- ByteStreamGeometryContext.cs
- ArrayHelper.cs
- DbConnectionPoolOptions.cs
- MultitargetingHelpers.cs
- HttpWriter.cs
- UnicastIPAddressInformationCollection.cs
- cookieexception.cs
- SocketPermission.cs
- XPathChildIterator.cs
- ListSortDescriptionCollection.cs
- WebPartDisplayModeCollection.cs
- DiscoveryClientChannelBase.cs
- ProxyWebPartConnectionCollection.cs
- EventSetter.cs
- RelationshipConstraintValidator.cs
- WebPartTransformer.cs
- EventsTab.cs
- NameObjectCollectionBase.cs
- DataGridViewComboBoxCell.cs
- DispatchChannelSink.cs
- SiteMapDataSourceView.cs
- COAUTHIDENTITY.cs
- UriParserTemplates.cs
- ResXResourceWriter.cs
- WorkflowServiceHostFactory.cs
- XamlPoint3DCollectionSerializer.cs
- WebBrowserContainer.cs
- wgx_render.cs
- DataGrid.cs
- NamedObjectList.cs
- HttpCachePolicy.cs
- TraceContextRecord.cs
- XmlNavigatorFilter.cs
- VirtualPathUtility.cs
- PersonalizationEntry.cs
- CodeDirectiveCollection.cs
- XmlArrayAttribute.cs
- EntityContainer.cs
- WebResourceAttribute.cs
- RequestReplyCorrelator.cs
- HyperlinkAutomationPeer.cs
- ModelProperty.cs
- TextParentUndoUnit.cs
- DataObjectAttribute.cs
- ResourcesBuildProvider.cs
- CodeAccessSecurityEngine.cs
- WSSecurityOneDotOneSendSecurityHeader.cs
- _SslStream.cs