public static void RegisterElementTypeDefaultStyleBuilder(string themeName, string elementTypeName, StyleBuilder builder) { EnsureThemeRegistered(ControlDefaultThemeName); TripleNameKey key = new TripleNameKey("", themeName, elementTypeName); registeredBuildersDefaultByElementType[key] = builder; }
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; }
/// <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 bool Equals(TripleNameKey key) { if (string.Compare(this.Name1, key.Name1, true) == 0) { if (string.Compare(this.Name2, key.Name2, true) == 0) { return(string.Compare(this.Name3, key.Name3, true) == 0); } } return(false); }
/// <summary> /// Clears all stylesheets registered previously with the themeName specified. /// </summary> /// <param name="themeName"></param> public static void ClearTheme(string themeName) { lock (syncRoot) { ArrayList toDelete = new ArrayList(); foreach (DictionaryEntry entry in registeredBuildersByElementTypeControlType) { TripleNameKey key = (TripleNameKey)entry.Key; if (string.Compare(key.Name3, themeName, true) == 0) { toDelete.Add(key); } } foreach (object key in toDelete) { registeredBuildersByElementTypeControlType.Remove(key); } toDelete.Clear(); foreach (DictionaryEntry entry in registeredBuildersByElementNameControlType) { TripleNameKey key = (TripleNameKey)entry.Key; if (string.Compare(key.Name3, themeName, true) == 0) { toDelete.Add(key); } } foreach (object key in toDelete) { registeredBuildersByElementNameControlType.Remove(key); } toDelete.Clear(); foreach (DictionaryEntry entry in registeredBuildersByElementTypeControlID) { TripleNameKey key = (TripleNameKey)entry.Key; if (string.Compare(key.Name3, themeName, true) == 0) { toDelete.Add(key); } } foreach (object key in toDelete) { registeredBuildersByElementTypeControlID.Remove(key); } toDelete.Clear(); foreach (DictionaryEntry entry in registeredBuildersDefaultByElementType) { TripleNameKey key = (TripleNameKey)entry.Key; if (string.Compare(key.Name3, themeName, true) == 0) { toDelete.Add(key); } } foreach (object key in toDelete) { registeredBuildersDefaultByElementType.Remove(key); } toDelete.Clear(); foreach (DictionaryEntry entry in registeredBuildersName) { string key = (string)entry.Key; if (string.Compare(key, themeName, true) == 0) { toDelete.Add(key); } } foreach (object key in toDelete) { registeredBuildersName.Remove(key); } } RaiseThemeChanged(themeName); }
public static StyleBuilder GetRegisteredControlStyleBuilder(string controlTypeName, string elementTypeName, string themeName) { TripleNameKey key = new TripleNameKey(controlTypeName, elementTypeName, themeName); return(registeredBuildersByElementTypeControlType[key] as StyleBuilder); }
/// <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); }