/// <summary> /// Removes an instance of the <see cref="StyleBuilder"/> class /// from the dictionaries with registered style builders. /// </summary> /// <param name="builder">The instance to remove.</param> public static void UnregisterStyleSheetBuilder(StyleBuilder builder) { foreach (DictionaryEntry entry in registeredBuildersDefaultByElementType) { if (object.ReferenceEquals(builder, entry.Value)) { registeredBuildersDefaultByElementType.Remove(entry.Key); return; } } foreach (DictionaryEntry entry in registeredBuildersByElementTypeControlType) { if (object.ReferenceEquals(builder, entry.Value)) { registeredBuildersByElementTypeControlType.Remove(entry.Key); return; } } foreach (DictionaryEntry entry in registeredBuildersName) { if (object.ReferenceEquals(builder, entry.Value)) { registeredBuildersName.Remove(entry.Key); return; } } }
public static void RegisterStyleBuilderByControlName(string controlName, string elementTypeName, StyleBuilder builder, string themeName) { EnsureThemeRegistered(themeName); TripleNameKey key = new TripleNameKey("__ID" + controlName, elementTypeName, themeName); registeredBuildersByElementTypeControlID[key] = builder; }
public static void RegisterElementTypeDefaultStyleBuilder(string themeName, string elementTypeName, StyleBuilder builder) { EnsureThemeRegistered(ControlDefaultThemeName); TripleNameKey key = new TripleNameKey("", themeName, elementTypeName); registeredBuildersDefaultByElementType[key] = builder; }
public static void RegisterGlobalStyleBuilder(string themeName, StyleBuilder builder) { EnsureThemeRegistered(themeName); registeredBuildersName[themeName] = builder; RaiseThemeChanged(themeName); }
/// <summary> /// Registers a StyleBuilder for specific type of controls and specific type of elements under the name given. /// </summary> /// <param name="controlTypeName"></param> /// <param name="elementTypeName"></param> /// <param name="builder"></param> /// <param name="themeName"></param> public static void RegisterControlStyleBuilder(string controlTypeName, string elementTypeName, StyleBuilder builder, string themeName) { EnsureThemeRegistered(themeName); TripleNameKey key = new TripleNameKey(controlTypeName, elementTypeName, themeName); registeredBuildersByElementTypeControlType[key] = builder; RaiseThemeChanged(themeName, controlTypeName); }
public StyleBuilderRegistration( BuilderRegistrationType registrationType, string elementType, string controlType, string elementName, string controlName, StyleBuilder builder) { this.builder = builder; this.stylesheetRelations = new List <RadStylesheetRelation>(1); RadStylesheetRelation relation = new RadStylesheetRelation(); this.stylesheetRelations.Add(relation); relation.RegistrationType = registrationType; relation.ElementName = elementName; relation.ControlName = controlName; relation.ControlType = controlType; relation.ElementType = elementType; }
private static void AddBuilderToList(ArrayList res, StyleBuilder builder, BuilderRegistrationType regType, string elementType, string controlType, string elementName, string controlName) { bool found = false; foreach (StyleBuilderRegistration reg in res) { if (reg.Builder == builder) { RadStylesheetRelation relation = new RadStylesheetRelation( regType, elementType, controlType, elementName, controlName); reg.StylesheetRelations.Add(relation); found = true; } } if (!found) { StyleBuilderRegistration registration = new StyleBuilderRegistration( regType, elementType, controlType, elementName, controlName, builder); res.Add(registration); } }
/// <summary> /// Retrieves the style builder registration. /// </summary> /// <returns></returns> public StyleBuilderRegistration GetRegistration() { Type actualBuilderType = typeof(DefaultStyleBuilder); if (this.BuilderType != null) { actualBuilderType = this.BuilderType; } StyleBuilder builder = (StyleBuilder)Activator.CreateInstance(actualBuilderType); builder.BuilderData = this.BuilderData; StyleBuilderRegistration reg = new StyleBuilderRegistration( builder ); foreach (RadStylesheetRelation relation in this.StylesheetRelations) { string actualElementType = relation.ElementType; if (relation.RegistrationType == BuilderRegistrationType.ElementTypeControlType && relation.ElementType == null) { actualElementType = typeof(RootRadElement).FullName; } reg.AddStylesheetRelation(relation.RegistrationType, actualElementType, relation.ControlType, relation.ElementName, relation.ControlName); } return(reg); }
/// <summary> /// Gets all StyleSheets registered under a theme name. /// </summary> /// <param name="themeName"></param> /// <returns></returns> public static StyleBuilderRegistration[] GetStyleSheetBuilders(string themeName) { if (string.IsNullOrEmpty(themeName)) { themeName = ControlDefaultThemeName; } ArrayList res = new ArrayList(); foreach (DictionaryEntry entry in registeredBuildersDefaultByElementType) { TripleNameKey key = (TripleNameKey)entry.Key; if (string.Compare(key.Name2, themeName, true) == 0) { StyleBuilder builder = (StyleBuilder)entry.Value; BuilderRegistrationType regType = BuilderRegistrationType.ElementTypeDefault; string elementType = key.Name3; string controlType = null; string elementName = null; string controlName = null; AddBuilderToList(res, builder, regType, elementType, controlType, elementName, controlName); } } foreach (DictionaryEntry entry in registeredBuildersByElementTypeControlType) { TripleNameKey key = (TripleNameKey)entry.Key; if (string.Compare(key.Name3, themeName, true) == 0) { StyleBuilder builder = (StyleBuilder)entry.Value; BuilderRegistrationType regType = BuilderRegistrationType.ElementTypeControlType; string elementType = key.Name2; string controlType = key.Name1; string elementName = null; string controlName = null; AddBuilderToList(res, builder, regType, elementType, controlType, elementName, controlName); } } foreach (DictionaryEntry entry in registeredBuildersName) { string key = (string)entry.Key; if (string.Compare(key, themeName, true) == 0) { StyleBuilder builder = (StyleBuilder)entry.Value; BuilderRegistrationType regType = BuilderRegistrationType.ElementTypeGlobal; string elementType = null; string controlType = null; string elementName = null; string controlName = null; AddBuilderToList(res, builder, regType, elementType, controlType, elementName, controlName); } } StyleBuilderRegistration[] resArray = new StyleBuilderRegistration[res.Count]; res.CopyTo(resArray, 0); return(resArray); }
private static StyleBuilder LookUpStyleBuilder(string controlID, string controlType, string elementName, string elementTypeFullName, bool rootElementHasStyle, StyleSheet rootElementStyle, string themeName) { //priority of resolution //Find builder by ElementName + ControlID //Find builder by ElementName + ControlType.Name //Find builder by ElementType + ControlID //Find builder by ElementType + ControlType.Name //Find Element default builder TripleNameKey key = new TripleNameKey(elementName + "", themeName + "", elementTypeFullName); StyleBuilder res = registeredBuildersByElementNameControlID[key] as StyleBuilder; int resolution = 0; if (res == null) { key = new TripleNameKey(controlID + "", themeName + "", elementTypeFullName); res = registeredBuildersByElementTypeControlID[key] as StyleBuilder; resolution = 1; } if (res == null) { TripleNameKey key1 = new TripleNameKey(controlType, elementTypeFullName, themeName + ""); res = registeredBuildersByElementTypeControlID[key1] as StyleBuilder; resolution = 2; } if (res == null) { TripleNameKey key1 = new TripleNameKey(controlType, elementTypeFullName, themeName + ""); res = registeredBuildersByElementTypeControlType[key1] as StyleBuilder; resolution = 3; } if (res == null) { TripleNameKey key1 = new TripleNameKey("", themeName + "", elementTypeFullName); res = registeredBuildersDefaultByElementType[key1] as StyleBuilder; resolution = 4; } if (res == null && themeName != null) { res = registeredBuildersName[themeName] as StyleBuilder; resolution = 5; } if (resolution == 4) { //Fix for "same stylresheet on element only and its control" propblem if (rootElementHasStyle && res is DefaultStyleBuilder && rootElementStyle == ((DefaultStyleBuilder)res).Style) { return(null); } } ResolveStyleBuilderEventHandler eh = ResolveStyleBuilder; if (eh != null) { ResolveStyleBuilderEventArgs args = new ResolveStyleBuilderEventArgs(themeName, res); eh(null, args); res = args.Builder; } return(res); }
private static StyleBuilder GetStyleSheetBuilder(IComponentTreeHandler /*RadControl*/ control, string elementTypeFullName, string elementName, string proposedThemeName, bool rootElementHasStyle, StyleSheet rootElementStyle) { string controlType = typeof(RadControl).FullName; string controlThemeName = null; string controlID = string.Empty; if (control != null) { controlThemeName = control.ThemeName; Control controlHandler = control as Control; if (controlHandler != null) { controlID = controlHandler.Name; } controlType = control.ThemeClassName; } StyleBuilder res = null; //ThemeName Look up priority: //1. applicationThemeName //2. proposedThemeName //3. controlThemeName //4. ControlDefault //5. * theme if (applicationThemeName != null) { res = LookUpStyleBuilder(controlID, controlType, elementName, elementTypeFullName, rootElementHasStyle, rootElementStyle, applicationThemeName); } bool lookUpOnlyAsteriskTheme = false; //true means - theme name specified correctly, but no stylesheet found if (res == null && !string.IsNullOrEmpty(proposedThemeName)) { lookUpOnlyAsteriskTheme = true; res = LookUpStyleBuilder(controlID, controlType, elementName, elementTypeFullName, rootElementHasStyle, rootElementStyle, proposedThemeName); } if (!lookUpOnlyAsteriskTheme && res == null && !string.IsNullOrEmpty(controlThemeName)) { lookUpOnlyAsteriskTheme = true; res = LookUpStyleBuilder(controlID, controlType, elementName, elementTypeFullName, rootElementHasStyle, rootElementStyle, controlThemeName); } if (!lookUpOnlyAsteriskTheme && res == null) { res = LookUpStyleBuilder(controlID, controlType, elementName, elementTypeFullName, rootElementHasStyle, rootElementStyle, ControlDefaultThemeName); } //Now if no stylesheet found, look if "*" registered if (res == null) { res = LookUpStyleBuilder(controlID, controlType, elementName, elementTypeFullName, rootElementHasStyle, rootElementStyle, asteriskThemeName); } return(res); }
public StyleBuilderRegistration( StyleBuilder builder) { this.builder = builder; }
public ResolveStyleBuilderEventArgs(string themeName, StyleBuilder builder) { this.builder = builder; this.themeName = themeName; }