Exemple #1
0
        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);
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }