Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Compilation / PageThemeCodeDomTreeGenerator.cs / 1 / PageThemeCodeDomTreeGenerator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Specialized; using System.Reflection; using System.ComponentModel; using System.CodeDom; using System.CodeDom.Compiler; using System.Globalization; using System.IO; using System.Web.UI; using System.Web.Util; using Debug=System.Web.Util.Debug; namespace System.Web.Compilation { internal class PageThemeCodeDomTreeGenerator : BaseTemplateCodeDomTreeGenerator { private Hashtable _controlSkinTypeNameCollection = new Hashtable(); private ArrayList _controlSkinBuilderEntryList = new ArrayList(); private int _controlCount = 0; private CodeTypeReference _controlSkinDelegateType = new CodeTypeReference(typeof(ControlSkinDelegate)); private CodeTypeReference _controlSkinType = new CodeTypeReference(typeof(ControlSkin)); private PageThemeParser _themeParser; private const string _controlSkinsVarName = "__controlSkins"; private const string _controlSkinsPropertyName = "ControlSkins"; private const string _linkedStyleSheetsVarName = "__linkedStyleSheets"; private const string _linkedStyleSheetsPropertyName = "LinkedStyleSheets"; internal PageThemeCodeDomTreeGenerator(PageThemeParser parser) : base(parser) { _themeParser = parser; } private void AddMemberOverride(string name, Type type, CodeExpression expr) { CodeMemberProperty member = new CodeMemberProperty(); member.Name = name; member.Attributes = MemberAttributes.Override | MemberAttributes.Family; member.Type = new CodeTypeReference(type.FullName); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(expr); member.GetStatements.Add(returnStmt); _sourceDataClass.Members.Add(member); } private void BuildControlSkins(CodeStatementCollection statements) { foreach (ControlSkinBuilderEntry entry in _controlSkinBuilderEntryList) { string skinID = entry.SkinID; ControlBuilder builder = entry.Builder; statements.Add(BuildControlSkinAssignmentStatement(builder, skinID)); } } private CodeStatement BuildControlSkinAssignmentStatement( ControlBuilder builder, string skinID) { Type controlType = builder.ControlType; string keyVarName = GetMethodNameForBuilder(buildMethodPrefix, builder) + "_skinKey"; // e.g. // private static object __BuildControl__control3_skinKey = PageTheme.CreateSkinKey(typeof({controlType}), {skinID}); CodeMemberField field = new CodeMemberField(typeof(object), keyVarName); field.Attributes = MemberAttributes.Static | MemberAttributes.Private; CodeMethodInvokeExpression cmie = new CodeMethodInvokeExpression(); cmie.Method = new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(typeof(PageTheme)), "CreateSkinKey"); cmie.Parameters.Add(new CodeTypeOfExpression(controlType)); cmie.Parameters.Add(new CodePrimitiveExpression(skinID)); field.InitExpression = cmie; _sourceDataClass.Members.Add(field); // e.g. this.__namedControlSkins[keyVarName] = // new System.Web.UI.ControlSkin(typeof(System.Web.UI.WebControls.Label), // new System.Web.UI.ControlSkinDelegate(this.__BuildControl__control3)); CodeFieldReferenceExpression varExpr = new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), _controlSkinsVarName); CodeIndexerExpression indexerExpr = new CodeIndexerExpression( varExpr, new CodeExpression[] { new CodeVariableReferenceExpression(keyVarName) } ); CodeDelegateCreateExpression del = new CodeDelegateCreateExpression( _controlSkinDelegateType, new CodeThisReferenceExpression(), GetMethodNameForBuilder(buildMethodPrefix, builder)); CodeObjectCreateExpression valueExpr = new CodeObjectCreateExpression(_controlSkinType); valueExpr.Parameters.Add(new CodeTypeOfExpression(controlType)); valueExpr.Parameters.Add(del); return new CodeAssignStatement(indexerExpr, valueExpr); } private void BuildControlSkinMember() { // e.g. // private System.Collections.Specialized.HybridDictionary __cssFileList = // new System.Collections.Specialized.HybridDictionary(2); int initialSize = _controlSkinBuilderEntryList.Count; CodeMemberField field = new CodeMemberField(typeof(HybridDictionary).FullName, _controlSkinsVarName); CodeObjectCreateExpression expr = new CodeObjectCreateExpression(typeof(HybridDictionary)); expr.Parameters.Add(new CodePrimitiveExpression(initialSize)); field.InitExpression = expr; _sourceDataClass.Members.Add(field); } private void BuildControlSkinProperty() { // e.g. // protected override System.Collections.IDictionary ControlSkins { // get { return this.__controlSkins; } // } CodeFieldReferenceExpression accessExpr = new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), _controlSkinsVarName); AddMemberOverride(_controlSkinsPropertyName, typeof(IDictionary), accessExpr); } private void BuildLinkedStyleSheetMember() { // e.g. // private System.String[] __linkedStyleSheets = new String[] { // "linkedStyleSheet1 vdirs", // "linkedStyleSheet2 vdirs", // } CodeMemberField field = new CodeMemberField(typeof(String[]), _linkedStyleSheetsVarName); if (_themeParser.CssFileList != null && _themeParser.CssFileList.Count > 0) { CodeExpression[] cssFiles = new CodeExpression[_themeParser.CssFileList.Count]; int i = 0; foreach(String cssFile in _themeParser.CssFileList) { cssFiles[i++] = new CodePrimitiveExpression(cssFile); } CodeArrayCreateExpression initExpr = new CodeArrayCreateExpression(typeof(String), cssFiles); field.InitExpression = initExpr; } else { field.InitExpression = new CodePrimitiveExpression(null); } _sourceDataClass.Members.Add(field); } private void BuildLinkedStyleSheetProperty() { // e.g. // protected override String[] LinkedStyleSheets { // get { return this.__linkedStyleSheets; } // } CodeFieldReferenceExpression accessExpr = new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), _linkedStyleSheetsVarName); AddMemberOverride(_linkedStyleSheetsPropertyName, typeof(String[]), accessExpr); } protected override void BuildInitStatements(CodeStatementCollection trueStatements, CodeStatementCollection topLevelStatements) { base.BuildInitStatements(trueStatements, topLevelStatements); BuildControlSkins(topLevelStatements); } protected override void BuildMiscClassMembers() { base.BuildMiscClassMembers(); AddMemberOverride(templateSourceDirectoryName, typeof(String), new CodePrimitiveExpression(_themeParser.VirtualDirPath.VirtualPathString)); BuildSourceDataTreeFromBuilder(_themeParser.RootBuilder, false /*fInTemplate*/, false /*topLevelControlInTemplate*/, null /*pse*/); BuildControlSkinMember(); BuildControlSkinProperty(); BuildLinkedStyleSheetMember(); BuildLinkedStyleSheetProperty(); } protected override void BuildSourceDataTreeFromBuilder(ControlBuilder builder, bool fInTemplate, bool topLevelControlInTemplate, PropertyEntry pse) { // Don't do anything for code blocks if (builder is CodeBlockBuilder) return; // Is the current builder for a template? bool fTemplate = (builder is TemplateBuilder); // Is the current builder the root builder? bool fRootBuilder = (builder == _themeParser.RootBuilder); // Is this a control theme? bool fControlSkin = !fInTemplate && !fTemplate && topLevelControlInTemplate; // Ignore the ID attribute, always auto generate ID. _controlCount++; builder.ID = "__control" + _controlCount.ToString(NumberFormatInfo.InvariantInfo); builder.IsGeneratedID = true; // Check for the SkinID property. if (fControlSkin && !(builder is DataBoundLiteralControlBuilder)) { Type ctrlType = builder.ControlType; Debug.Assert(typeof(Control).IsAssignableFrom(ctrlType)); Debug.Assert(ThemeableAttribute.IsTypeThemeable(ctrlType)); string skinID = builder.SkinID; object skinKey = PageTheme.CreateSkinKey(builder.ControlType, skinID); if (_controlSkinTypeNameCollection.Contains(skinKey)) { if (String.IsNullOrEmpty(skinID)) { throw new HttpParseException(SR.GetString(SR.Page_theme_default_theme_already_defined, builder.ControlType.FullName), null, builder.VirtualPath, null, builder.Line); } else { throw new HttpParseException(SR.GetString(SR.Page_theme_skinID_already_defined, skinID), null, builder.VirtualPath, null, builder.Line); } } _controlSkinTypeNameCollection.Add(skinKey, true); _controlSkinBuilderEntryList.Add(new ControlSkinBuilderEntry(builder, skinID)); } // Process the children // only root builders and template builders are processed. if (builder.SubBuilders != null) { foreach (object child in builder.SubBuilders) { if (child is ControlBuilder) { bool isTopLevelCtrlInTemplate = fTemplate && typeof(Control).IsAssignableFrom(((ControlBuilder)child).ControlType); BuildSourceDataTreeFromBuilder((ControlBuilder)child, fInTemplate, isTopLevelCtrlInTemplate, null); } } } foreach (TemplatePropertyEntry entry in builder.TemplatePropertyEntries) { BuildSourceDataTreeFromBuilder(((TemplatePropertyEntry)entry).Builder, true, false /*topLevelControlInTemplate*/, entry); } foreach (ComplexPropertyEntry entry in builder.ComplexPropertyEntries) { if (!(entry.Builder is StringPropertyBuilder)) { BuildSourceDataTreeFromBuilder(((ComplexPropertyEntry)entry).Builder, fInTemplate, false /*topLevelControlInTemplate*/, entry); } } // Build a Build method for the control // fControlSkin indicates whether the method is a theme build method. if (!fRootBuilder) { BuildBuildMethod(builder, fTemplate, fInTemplate, topLevelControlInTemplate, pse, fControlSkin); } // Build a Render method for the control, unless it has no code if (!fControlSkin && builder.HasAspCode) { BuildRenderMethod(builder, fTemplate); } // Build a method to extract values from the template BuildExtractMethod(builder); // Build a property binding method for the control BuildPropertyBindingMethod(builder, fControlSkin); } internal override CodeExpression BuildStringPropertyExpression(PropertyEntry pse) { // Make the UrlProperty based on virtualDirPath for control themes. if (pse.PropertyInfo != null) { UrlPropertyAttribute urlAttrib = Attribute.GetCustomAttribute(pse.PropertyInfo, typeof(UrlPropertyAttribute)) as UrlPropertyAttribute; if (urlAttrib != null) { if (pse is SimplePropertyEntry) { SimplePropertyEntry spse = (SimplePropertyEntry)pse; string strValue = (string)spse.Value; if (UrlPath.IsRelativeUrl(strValue) && !UrlPath.IsAppRelativePath(strValue)) { spse.Value = UrlPath.MakeVirtualPathAppRelative(UrlPath.Combine(_themeParser.VirtualDirPath.VirtualPathString, strValue)); } } else { Debug.Assert(pse is ComplexPropertyEntry); ComplexPropertyEntry cpe = (ComplexPropertyEntry)pse; StringPropertyBuilder builder = (StringPropertyBuilder)cpe.Builder; string strValue = (string)builder.BuildObject(); if (UrlPath.IsRelativeUrl(strValue) && !UrlPath.IsAppRelativePath(strValue)) { cpe.Builder = new StringPropertyBuilder(UrlPath.MakeVirtualPathAppRelative(UrlPath.Combine(_themeParser.VirtualDirPath.VirtualPathString, strValue))); } } } } return base.BuildStringPropertyExpression(pse); } protected override CodeAssignStatement BuildTemplatePropertyStatement(CodeExpression ctrlRefExpr) { // e.g. __ctrl.AppRelativeTemplateSourceDirectory = this.AppRelativeTemplateSourceDirectory; CodeAssignStatement assign = new CodeAssignStatement(); assign.Left = new CodePropertyReferenceExpression(ctrlRefExpr, templateSourceDirectoryName); assign.Right = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), templateSourceDirectoryName); return assign; } protected override string GetGeneratedClassName() { string className = _themeParser.VirtualDirPath.FileName; className = System.Web.UI.Util.MakeValidTypeNameFromString(className); return className; } protected override bool UseResourceLiteralString(string s) { // never use resource literal string, page theme does not support the required methods. return false; } // Don't build the Profile property in Theme classes protected override bool NeedProfileProperty { get { return false; } } private class ControlSkinBuilderEntry { private ControlBuilder _builder; private string _id; public ControlSkinBuilderEntry (ControlBuilder builder, string skinID) { _builder = builder; _id = skinID; } public ControlBuilder Builder { get { return _builder; } } public String SkinID { get { return _id == null? String.Empty : _id; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Specialized; using System.Reflection; using System.ComponentModel; using System.CodeDom; using System.CodeDom.Compiler; using System.Globalization; using System.IO; using System.Web.UI; using System.Web.Util; using Debug=System.Web.Util.Debug; namespace System.Web.Compilation { internal class PageThemeCodeDomTreeGenerator : BaseTemplateCodeDomTreeGenerator { private Hashtable _controlSkinTypeNameCollection = new Hashtable(); private ArrayList _controlSkinBuilderEntryList = new ArrayList(); private int _controlCount = 0; private CodeTypeReference _controlSkinDelegateType = new CodeTypeReference(typeof(ControlSkinDelegate)); private CodeTypeReference _controlSkinType = new CodeTypeReference(typeof(ControlSkin)); private PageThemeParser _themeParser; private const string _controlSkinsVarName = "__controlSkins"; private const string _controlSkinsPropertyName = "ControlSkins"; private const string _linkedStyleSheetsVarName = "__linkedStyleSheets"; private const string _linkedStyleSheetsPropertyName = "LinkedStyleSheets"; internal PageThemeCodeDomTreeGenerator(PageThemeParser parser) : base(parser) { _themeParser = parser; } private void AddMemberOverride(string name, Type type, CodeExpression expr) { CodeMemberProperty member = new CodeMemberProperty(); member.Name = name; member.Attributes = MemberAttributes.Override | MemberAttributes.Family; member.Type = new CodeTypeReference(type.FullName); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(expr); member.GetStatements.Add(returnStmt); _sourceDataClass.Members.Add(member); } private void BuildControlSkins(CodeStatementCollection statements) { foreach (ControlSkinBuilderEntry entry in _controlSkinBuilderEntryList) { string skinID = entry.SkinID; ControlBuilder builder = entry.Builder; statements.Add(BuildControlSkinAssignmentStatement(builder, skinID)); } } private CodeStatement BuildControlSkinAssignmentStatement( ControlBuilder builder, string skinID) { Type controlType = builder.ControlType; string keyVarName = GetMethodNameForBuilder(buildMethodPrefix, builder) + "_skinKey"; // e.g. // private static object __BuildControl__control3_skinKey = PageTheme.CreateSkinKey(typeof({controlType}), {skinID}); CodeMemberField field = new CodeMemberField(typeof(object), keyVarName); field.Attributes = MemberAttributes.Static | MemberAttributes.Private; CodeMethodInvokeExpression cmie = new CodeMethodInvokeExpression(); cmie.Method = new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(typeof(PageTheme)), "CreateSkinKey"); cmie.Parameters.Add(new CodeTypeOfExpression(controlType)); cmie.Parameters.Add(new CodePrimitiveExpression(skinID)); field.InitExpression = cmie; _sourceDataClass.Members.Add(field); // e.g. this.__namedControlSkins[keyVarName] = // new System.Web.UI.ControlSkin(typeof(System.Web.UI.WebControls.Label), // new System.Web.UI.ControlSkinDelegate(this.__BuildControl__control3)); CodeFieldReferenceExpression varExpr = new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), _controlSkinsVarName); CodeIndexerExpression indexerExpr = new CodeIndexerExpression( varExpr, new CodeExpression[] { new CodeVariableReferenceExpression(keyVarName) } ); CodeDelegateCreateExpression del = new CodeDelegateCreateExpression( _controlSkinDelegateType, new CodeThisReferenceExpression(), GetMethodNameForBuilder(buildMethodPrefix, builder)); CodeObjectCreateExpression valueExpr = new CodeObjectCreateExpression(_controlSkinType); valueExpr.Parameters.Add(new CodeTypeOfExpression(controlType)); valueExpr.Parameters.Add(del); return new CodeAssignStatement(indexerExpr, valueExpr); } private void BuildControlSkinMember() { // e.g. // private System.Collections.Specialized.HybridDictionary __cssFileList = // new System.Collections.Specialized.HybridDictionary(2); int initialSize = _controlSkinBuilderEntryList.Count; CodeMemberField field = new CodeMemberField(typeof(HybridDictionary).FullName, _controlSkinsVarName); CodeObjectCreateExpression expr = new CodeObjectCreateExpression(typeof(HybridDictionary)); expr.Parameters.Add(new CodePrimitiveExpression(initialSize)); field.InitExpression = expr; _sourceDataClass.Members.Add(field); } private void BuildControlSkinProperty() { // e.g. // protected override System.Collections.IDictionary ControlSkins { // get { return this.__controlSkins; } // } CodeFieldReferenceExpression accessExpr = new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), _controlSkinsVarName); AddMemberOverride(_controlSkinsPropertyName, typeof(IDictionary), accessExpr); } private void BuildLinkedStyleSheetMember() { // e.g. // private System.String[] __linkedStyleSheets = new String[] { // "linkedStyleSheet1 vdirs", // "linkedStyleSheet2 vdirs", // } CodeMemberField field = new CodeMemberField(typeof(String[]), _linkedStyleSheetsVarName); if (_themeParser.CssFileList != null && _themeParser.CssFileList.Count > 0) { CodeExpression[] cssFiles = new CodeExpression[_themeParser.CssFileList.Count]; int i = 0; foreach(String cssFile in _themeParser.CssFileList) { cssFiles[i++] = new CodePrimitiveExpression(cssFile); } CodeArrayCreateExpression initExpr = new CodeArrayCreateExpression(typeof(String), cssFiles); field.InitExpression = initExpr; } else { field.InitExpression = new CodePrimitiveExpression(null); } _sourceDataClass.Members.Add(field); } private void BuildLinkedStyleSheetProperty() { // e.g. // protected override String[] LinkedStyleSheets { // get { return this.__linkedStyleSheets; } // } CodeFieldReferenceExpression accessExpr = new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), _linkedStyleSheetsVarName); AddMemberOverride(_linkedStyleSheetsPropertyName, typeof(String[]), accessExpr); } protected override void BuildInitStatements(CodeStatementCollection trueStatements, CodeStatementCollection topLevelStatements) { base.BuildInitStatements(trueStatements, topLevelStatements); BuildControlSkins(topLevelStatements); } protected override void BuildMiscClassMembers() { base.BuildMiscClassMembers(); AddMemberOverride(templateSourceDirectoryName, typeof(String), new CodePrimitiveExpression(_themeParser.VirtualDirPath.VirtualPathString)); BuildSourceDataTreeFromBuilder(_themeParser.RootBuilder, false /*fInTemplate*/, false /*topLevelControlInTemplate*/, null /*pse*/); BuildControlSkinMember(); BuildControlSkinProperty(); BuildLinkedStyleSheetMember(); BuildLinkedStyleSheetProperty(); } protected override void BuildSourceDataTreeFromBuilder(ControlBuilder builder, bool fInTemplate, bool topLevelControlInTemplate, PropertyEntry pse) { // Don't do anything for code blocks if (builder is CodeBlockBuilder) return; // Is the current builder for a template? bool fTemplate = (builder is TemplateBuilder); // Is the current builder the root builder? bool fRootBuilder = (builder == _themeParser.RootBuilder); // Is this a control theme? bool fControlSkin = !fInTemplate && !fTemplate && topLevelControlInTemplate; // Ignore the ID attribute, always auto generate ID. _controlCount++; builder.ID = "__control" + _controlCount.ToString(NumberFormatInfo.InvariantInfo); builder.IsGeneratedID = true; // Check for the SkinID property. if (fControlSkin && !(builder is DataBoundLiteralControlBuilder)) { Type ctrlType = builder.ControlType; Debug.Assert(typeof(Control).IsAssignableFrom(ctrlType)); Debug.Assert(ThemeableAttribute.IsTypeThemeable(ctrlType)); string skinID = builder.SkinID; object skinKey = PageTheme.CreateSkinKey(builder.ControlType, skinID); if (_controlSkinTypeNameCollection.Contains(skinKey)) { if (String.IsNullOrEmpty(skinID)) { throw new HttpParseException(SR.GetString(SR.Page_theme_default_theme_already_defined, builder.ControlType.FullName), null, builder.VirtualPath, null, builder.Line); } else { throw new HttpParseException(SR.GetString(SR.Page_theme_skinID_already_defined, skinID), null, builder.VirtualPath, null, builder.Line); } } _controlSkinTypeNameCollection.Add(skinKey, true); _controlSkinBuilderEntryList.Add(new ControlSkinBuilderEntry(builder, skinID)); } // Process the children // only root builders and template builders are processed. if (builder.SubBuilders != null) { foreach (object child in builder.SubBuilders) { if (child is ControlBuilder) { bool isTopLevelCtrlInTemplate = fTemplate && typeof(Control).IsAssignableFrom(((ControlBuilder)child).ControlType); BuildSourceDataTreeFromBuilder((ControlBuilder)child, fInTemplate, isTopLevelCtrlInTemplate, null); } } } foreach (TemplatePropertyEntry entry in builder.TemplatePropertyEntries) { BuildSourceDataTreeFromBuilder(((TemplatePropertyEntry)entry).Builder, true, false /*topLevelControlInTemplate*/, entry); } foreach (ComplexPropertyEntry entry in builder.ComplexPropertyEntries) { if (!(entry.Builder is StringPropertyBuilder)) { BuildSourceDataTreeFromBuilder(((ComplexPropertyEntry)entry).Builder, fInTemplate, false /*topLevelControlInTemplate*/, entry); } } // Build a Build method for the control // fControlSkin indicates whether the method is a theme build method. if (!fRootBuilder) { BuildBuildMethod(builder, fTemplate, fInTemplate, topLevelControlInTemplate, pse, fControlSkin); } // Build a Render method for the control, unless it has no code if (!fControlSkin && builder.HasAspCode) { BuildRenderMethod(builder, fTemplate); } // Build a method to extract values from the template BuildExtractMethod(builder); // Build a property binding method for the control BuildPropertyBindingMethod(builder, fControlSkin); } internal override CodeExpression BuildStringPropertyExpression(PropertyEntry pse) { // Make the UrlProperty based on virtualDirPath for control themes. if (pse.PropertyInfo != null) { UrlPropertyAttribute urlAttrib = Attribute.GetCustomAttribute(pse.PropertyInfo, typeof(UrlPropertyAttribute)) as UrlPropertyAttribute; if (urlAttrib != null) { if (pse is SimplePropertyEntry) { SimplePropertyEntry spse = (SimplePropertyEntry)pse; string strValue = (string)spse.Value; if (UrlPath.IsRelativeUrl(strValue) && !UrlPath.IsAppRelativePath(strValue)) { spse.Value = UrlPath.MakeVirtualPathAppRelative(UrlPath.Combine(_themeParser.VirtualDirPath.VirtualPathString, strValue)); } } else { Debug.Assert(pse is ComplexPropertyEntry); ComplexPropertyEntry cpe = (ComplexPropertyEntry)pse; StringPropertyBuilder builder = (StringPropertyBuilder)cpe.Builder; string strValue = (string)builder.BuildObject(); if (UrlPath.IsRelativeUrl(strValue) && !UrlPath.IsAppRelativePath(strValue)) { cpe.Builder = new StringPropertyBuilder(UrlPath.MakeVirtualPathAppRelative(UrlPath.Combine(_themeParser.VirtualDirPath.VirtualPathString, strValue))); } } } } return base.BuildStringPropertyExpression(pse); } protected override CodeAssignStatement BuildTemplatePropertyStatement(CodeExpression ctrlRefExpr) { // e.g. __ctrl.AppRelativeTemplateSourceDirectory = this.AppRelativeTemplateSourceDirectory; CodeAssignStatement assign = new CodeAssignStatement(); assign.Left = new CodePropertyReferenceExpression(ctrlRefExpr, templateSourceDirectoryName); assign.Right = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), templateSourceDirectoryName); return assign; } protected override string GetGeneratedClassName() { string className = _themeParser.VirtualDirPath.FileName; className = System.Web.UI.Util.MakeValidTypeNameFromString(className); return className; } protected override bool UseResourceLiteralString(string s) { // never use resource literal string, page theme does not support the required methods. return false; } // Don't build the Profile property in Theme classes protected override bool NeedProfileProperty { get { return false; } } private class ControlSkinBuilderEntry { private ControlBuilder _builder; private string _id; public ControlSkinBuilderEntry (ControlBuilder builder, string skinID) { _builder = builder; _id = skinID; } public ControlBuilder Builder { get { return _builder; } } public String SkinID { get { return _id == null? String.Empty : _id; } } } } } // 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
- Variant.cs
- XmlSerializationWriter.cs
- RequestCacheEntry.cs
- RectangleGeometry.cs
- DependencyObjectType.cs
- PasswordDeriveBytes.cs
- PersonalizationStateInfoCollection.cs
- Brush.cs
- Compress.cs
- CodeAttributeDeclaration.cs
- SqlDataSourceConfigureFilterForm.cs
- SqlBulkCopy.cs
- RowToFieldTransformer.cs
- ButtonColumn.cs
- ActivityTrace.cs
- ModuleConfigurationInfo.cs
- Pen.cs
- DataBindingHandlerAttribute.cs
- GrammarBuilderDictation.cs
- APCustomTypeDescriptor.cs
- OleDbParameter.cs
- XmlSchemaAttributeGroupRef.cs
- IDictionary.cs
- TaskHelper.cs
- Mapping.cs
- NamedObject.cs
- NativeRightsManagementAPIsStructures.cs
- SchemaNotation.cs
- SqlUserDefinedAggregateAttribute.cs
- ClientRolePrincipal.cs
- EventManager.cs
- Console.cs
- SystemEvents.cs
- FramingChannels.cs
- TrustManagerPromptUI.cs
- Operand.cs
- ImportContext.cs
- TimeStampChecker.cs
- AsyncStreamReader.cs
- SchemaElementDecl.cs
- AccessDataSource.cs
- ConditionalAttribute.cs
- HashAlgorithm.cs
- SplitContainerDesigner.cs
- StatusStrip.cs
- XmlObjectSerializerReadContext.cs
- ServiceChannelManager.cs
- CompositeTypefaceMetrics.cs
- CmsUtils.cs
- DataServiceClientException.cs
- TraceListener.cs
- StackOverflowException.cs
- SHA384.cs
- RegistrationProxy.cs
- DataServiceContext.cs
- ErrorEventArgs.cs
- CultureMapper.cs
- ManagementObject.cs
- PointIndependentAnimationStorage.cs
- Predicate.cs
- PagesChangedEventArgs.cs
- TargetControlTypeCache.cs
- ProfileBuildProvider.cs
- AppearanceEditorPart.cs
- BitStream.cs
- UIElement3D.cs
- Converter.cs
- AssemblyCollection.cs
- input.cs
- DataErrorValidationRule.cs
- TraceLog.cs
- HelpInfo.cs
- TextDocumentView.cs
- XmlSchemaCompilationSettings.cs
- TextTreeFixupNode.cs
- PointAnimationUsingKeyFrames.cs
- OleDbFactory.cs
- HttpClientCertificate.cs
- ImmComposition.cs
- Propagator.ExtentPlaceholderCreator.cs
- HtmlElementEventArgs.cs
- RemotingAttributes.cs
- ReadOnlyDictionary.cs
- FileDataSourceCache.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- DataTableClearEvent.cs
- PageParserFilter.cs
- AppModelKnownContentFactory.cs
- TabRenderer.cs
- RegexInterpreter.cs
- SQLChars.cs
- SystemIcmpV6Statistics.cs
- CurrentTimeZone.cs
- StrongTypingException.cs
- Transform3DCollection.cs
- ManagementExtension.cs
- XPathBinder.cs
- Variant.cs
- LiteralTextParser.cs
- NetworkStream.cs