Ejemplo n.º 1
0
        static BackgroundTemplate ReadFromXMLDocument(XmlDocument xmlDoc)
        {
            BackgroundTemplate newTemplate = new BackgroundTemplate();

            XmlNode rootNode = xmlDoc.GetElementsByTagName("BackgroundTemplate")[0];

            newTemplate.CanvasWidth  = int.Parse(rootNode.Attributes["CanvasWidth"].Value);
            newTemplate.CanvasHeight = int.Parse(rootNode.Attributes["CanvasHeight"].Value);

            List <Rect> frameRects = new List <Rect>();

            XmlNodeList frameNodes = xmlDoc.GetElementsByTagName("Frame");

            foreach (XmlNode frameNode in frameNodes)
            {
                Rect newRect = new Rect();

                newRect.X      = int.Parse(frameNode.Attributes["X"].Value);
                newRect.Y      = int.Parse(frameNode.Attributes["Y"].Value);
                newRect.Width  = int.Parse(frameNode.Attributes["Width"].Value);
                newRect.Height = int.Parse(frameNode.Attributes["Height"].Value);

                frameRects.Add(newRect);
            }

            newTemplate.FrameRects = frameRects;
            newTemplate.NumFrames  = frameRects.Count;

            return(newTemplate);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Загружает предустановленные элементы, изображения-фоны и шаблоны фона раскадровки из файлов, описанных в переданном конфигурационном файле в XML-формате (см. ПЗ)
        /// </summary>
        /// <param name="fileStream">Поток, содержащий доступный для чтения файл в XML-формате (см. ПЗ)</param>
        /// <param name="xmlFilePath">Путь к XML-файлу, по которому открыт поток из параметра fileStream (для поддержки относительных путей)</param>
        /// <returns>Библиотека, содержащая загруженные предустановленные элементы, фоны и шаблоны фона раскадровки</returns>
        public static PresetLibrary LoadFromXML(FileStream fileStream, string xmlFilePath)
        {
            string xmlFolderPath = Path.GetDirectoryName(xmlFilePath);

            PresetLibrary newLibrary = new PresetLibrary();

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(fileStream);

            XmlNodeList itemNodes = xmlDoc.GetElementsByTagName("Item");

            newLibrary.Items = BitMapImagesFromNodes(itemNodes, xmlFolderPath);

            XmlNodeList backgroundNodes = xmlDoc.GetElementsByTagName("Background");

            newLibrary.Backgrounds = BitMapImagesFromNodes(backgroundNodes, xmlFolderPath);

            XmlNodeList templateNodes = xmlDoc.GetElementsByTagName("Template");

            List <BackgroundTemplate> templates = new List <BackgroundTemplate>();

            foreach (XmlNode templateNode in templateNodes)
            {
                string filePath = Path.Combine(xmlFolderPath, templateNode.Attributes["Src"].Value);

                if (filePath != null)
                {
                    try {
                        BackgroundTemplate newTemplate;

                        using (FileStream templateFileStream = new FileStream(filePath, FileMode.Open)) {
                            newTemplate = BackgroundTemplate.ReadFromXML(templateFileStream);
                        }

                        templates.Add(newTemplate);
                    }
                    catch (Exception) { }
                }
            }

            newLibrary.Tempates = templates;

            return(newLibrary);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Обрабатывает нажатие пользователем кнопки "Создать", записывает выбранный пользователем шаблон в поле <see cref="SelectedTemplate"/>. В случае успешного завершения данной операции окно закрыватеся
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="eventArgs"></param>
 private void CreateButton_Click(object sender, RoutedEventArgs eventArgs)
 {
     if (Radio1.IsChecked.Value)
     {
         SelectedTemplate = PresetTemplates.ElementAt(TemplatesComboBox.SelectedIndex);
     }
     else if (Radio2.IsChecked.Value)
     {
         try {
             using (FileStream fs = new FileStream(FilePath.Text, FileMode.Open)) {
                 SelectedTemplate = BackgroundTemplate.ReadFromXML(fs);
             }
         }
         catch (Exception ex) {
             MessageBox.Show(this, $"При попытке открытия файла произошла ошибка.\r\n\r\n{ex.Message}");
         }
     }
 }
Ejemplo n.º 4
0
 public BackgroundManager(BackgroundTemplate backgroundTempalte)
 {
     CurrentTempalte = backgroundTempalte;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Загружает документ-раскадровку из потока, в котором она доступна для чтения в XML-формате (см. ПЗ)
        /// </summary>
        /// <param name="fileStream">Поток, из которого предполагается загрузить документ-раскадровку в XML-формате</param>
        /// <returns>Документ-раскадровка, загруженная из переданного потока</returns>
        public static StoryboardDocument LoadFromXML(FileStream fileStream)
        {
            StoryboardDocument newDocument = new StoryboardDocument();

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(fileStream);

            XmlNode templateNode = xmlDoc.GetElementsByTagName("BackgroundTemplate")[0];

            newDocument.Template = BackgroundTemplate.ReadFromXML(templateNode.OuterXml);

            List <ImageSource> frameBackgrounds = new List <ImageSource>();

            foreach (XmlNode backgroundNode in xmlDoc.GetElementsByTagName("StoryboardBackground"))
            {
                XmlAttribute contentAttr = backgroundNode.Attributes["Content"];

                if (contentAttr == null)
                {
                    frameBackgrounds.Add(null);
                }
                else
                {
                    frameBackgrounds.Add(Base64StringToImageSource(contentAttr.Value));
                }
            }

            newDocument.FrameBackgrounds = frameBackgrounds;

            List <ItemTuple> storyboardItems = new List <ItemTuple>();

            foreach (XmlNode itemNode in xmlDoc.GetElementsByTagName("StoryboardItem"))
            {
                Rect itemRect = new Rect();

                itemRect.X      = double.Parse(itemNode.Attributes["X"].Value);
                itemRect.Y      = double.Parse(itemNode.Attributes["Y"].Value);
                itemRect.Width  = double.Parse(itemNode.Attributes["Width"].Value);
                itemRect.Height = double.Parse(itemNode.Attributes["Height"].Value);

                BitmapImage itemImageSource;

                XmlAttribute contentAttr = itemNode.Attributes["Content"];

                if (contentAttr == null)
                {
                    itemImageSource = null;
                }
                else
                {
                    itemImageSource = Base64StringToImageSource(contentAttr.Value);
                }

                RotateTransform itemTransform = new RotateTransform();

                XmlAttribute angleAttr = itemNode.Attributes["Angle"];

                if (angleAttr != null)
                {
                    itemTransform.Angle = double.Parse(angleAttr.Value);
                }

                storyboardItems.Add(new ItemTuple(itemRect, itemTransform, itemImageSource));
            }

            newDocument.StoryboardItems = storyboardItems;

            return(newDocument);
        }