public static WorkflowTheme Load(IDesignerSerializationManager serializationManager, string themeFilePath) { if (serializationManager == null) { throw new ArgumentNullException("serializationManager"); } WorkflowTheme theme = null; if ((themeFilePath != null) && File.Exists(themeFilePath)) { XmlReader reader = XmlReader.Create(themeFilePath); ThemeSerializationProvider provider = new ThemeSerializationProvider(); try { serializationManager.AddSerializationProvider(provider); WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer(); theme = serializer.Deserialize(serializationManager, reader) as WorkflowTheme; } finally { serializationManager.RemoveSerializationProvider(provider); reader.Close(); } if (theme != null) { theme.filePath = themeFilePath; } } return(theme); }
public void Save(string themeFilePath) { if ((themeFilePath == null) || (themeFilePath.Length == 0)) { throw new ArgumentException(DR.GetString("ThemePathNotValid", new object[0]), "themeFilePath"); } DesignerSerializationManager manager = new DesignerSerializationManager(); using (manager.CreateSession()) { WorkflowMarkupSerializationManager serializationManager = new WorkflowMarkupSerializationManager(manager); XmlWriter writer = null; ThemeSerializationProvider provider = new ThemeSerializationProvider(); try { string directoryName = Path.GetDirectoryName(themeFilePath); if ((directoryName.Length > 0) && !Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } writer = Helpers.CreateXmlWriter(themeFilePath); serializationManager.AddSerializationProvider(provider); new WorkflowMarkupSerializer().Serialize(serializationManager, writer, this); } finally { serializationManager.RemoveSerializationProvider(provider); if (writer != null) { writer.Close(); } } this.filePath = themeFilePath; } }
public WorkflowTheme Clone() { WorkflowTheme theme = null; DesignerSerializationManager serializationManager = new DesignerSerializationManager(); using (serializationManager.CreateSession()) { ThemeSerializationProvider provider = new ThemeSerializationProvider(); StringWriter output = new StringWriter(new StringBuilder(), CultureInfo.InvariantCulture); StringReader input = null; try { ((IDesignerSerializationManager)serializationManager).AddSerializationProvider(provider); WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer(); using (XmlWriter writer2 = Helpers.CreateXmlWriter(output)) { serializer.Serialize(serializationManager, writer2, this); } input = new StringReader(output.ToString()); using (XmlReader reader2 = XmlReader.Create(input)) { theme = serializer.Deserialize(serializationManager, reader2) as WorkflowTheme; } } finally { ((IDesignerSerializationManager)serializationManager).RemoveSerializationProvider(provider); input.Close(); output.Close(); } } if (theme != null) { theme.filePath = this.filePath; foreach (DesignerTheme theme2 in theme.DesignerThemes) { theme2.Initialize(); } } return(theme); }
internal DesignerTheme GetTheme(System.Type designerType) { bool readOnly = this.ReadOnly; DesignerTheme item = this.designerThemes.Contains(designerType.FullName) ? this.designerThemes[designerType.FullName] : null; try { this.ReadOnly = false; if ((item == null) || ((item.DesignerType != null) && !designerType.Equals(item.DesignerType))) { bool flag2 = item != null; ActivityDesignerThemeAttribute attribute = TypeDescriptor.GetAttributes(designerType)[typeof(ActivityDesignerThemeAttribute)] as ActivityDesignerThemeAttribute; if (attribute == null) { throw new InvalidOperationException(DR.GetString("Error_ThemeAttributeMissing", new object[] { designerType.FullName })); } if (attribute.DesignerThemeType == null) { throw new InvalidOperationException(DR.GetString("Error_ThemeTypeMissing", new object[] { designerType.FullName })); } if (attribute.Xml.Length > 0) { Stream manifestResourceStream = designerType.Assembly.GetManifestResourceStream(designerType, attribute.Xml); if (manifestResourceStream == null) { manifestResourceStream = designerType.Assembly.GetManifestResourceStream("System.Workflow.ComponentModel.Design.ActivityDesignerThemes." + attribute.Xml); } XmlReader reader = (manifestResourceStream != null) ? XmlReader.Create(manifestResourceStream) : null; if (reader == null) { reader = XmlReader.Create(new StringReader(attribute.Xml)); } if (reader != null) { DesignerSerializationManager serializationManager = new DesignerSerializationManager(); using (serializationManager.CreateSession()) { ThemeSerializationProvider provider = new ThemeSerializationProvider(); try { ((IDesignerSerializationManager)serializationManager).AddSerializationProvider(provider); ((IDesignerSerializationManager)serializationManager).Context.Push(this); WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer(); item = serializer.Deserialize(serializationManager, reader) as DesignerTheme; if ((item != null) && !attribute.DesignerThemeType.IsAssignableFrom(item.GetType())) { ((IDesignerSerializationManager)serializationManager).ReportError(new WorkflowMarkupSerializationException(DR.GetString("ThemeTypesMismatch", new object[] { attribute.DesignerThemeType.FullName, item.GetType().FullName }))); item = null; } if (serializationManager.Errors.Count > 0) { string str = string.Empty; foreach (object obj2 in serializationManager.Errors) { str = str + obj2.ToString() + @"\n"; } } } finally { ((IDesignerSerializationManager)serializationManager).RemoveSerializationProvider(provider); reader.Close(); } } } } if (item == null) { try { item = Activator.CreateInstance(attribute.DesignerThemeType, new object[] { this }) as DesignerTheme; } catch { item = new ActivityDesignerTheme(this); } } item.DesignerType = designerType; item.ApplyTo = designerType.FullName; item.Initialize(); if (flag2) { this.designerThemes.Remove(designerType.FullName); } this.designerThemes.Add(item); } if (item.DesignerType == null) { item.DesignerType = designerType; } } finally { this.ReadOnly = readOnly; } return(item); }