private void Initialize(TextureAtlas textureAtlas)
        {
            image = new BitmapImage(new Uri(imagePath));

            List<String> animationNames = (from subTexture in textureAtlas.SubTextures select subTexture.Name.Substring(0, subTexture.Name.Length - 4)).ToList();
            HashSet<String> uniqueAnimationNames = new HashSet<String>(animationNames);
            foreach (String animationName in uniqueAnimationNames)
            {
                animations.Add
                (
                    new AnimationViewModel
                    (
                        animationName,
                        (from subTexture in textureAtlas.SubTextures where (subTexture.Name.Substring(0, subTexture.Name.Length - 4) == animationName) select subTexture).ToList(),
                        image
                    )
                );
            }
        }
        public void LoadFile()
        {
            FileInfo info = new FileInfo(filePath);
            TextureAtlas textureAtlas = null;
            String atlasPath = String.Empty;
            if (info.Extension.ToLower().Contains("xml"))
                atlasPath = filePath;
            else
            {
                atlasPath = filePath.Replace(info.Extension, ".xml");
                //We're loading an image.  Look for the corresponding atlas in the same directory.
                if (!File.Exists(atlasPath))
                {
                    //Prompt for the atlas creation
                    CreateAtlasPromptViewModel vm = new CreateAtlasPromptViewModel(info.Name);
                    bool? rtn = windowManager.ShowDialog(vm);
                    if (rtn == true)
                    {
                        //Create an empty atlas file with the same name as the image in the same directory
                        textureAtlas = new TextureAtlas();
                        textureAtlas.ImagePath = info.Name; //Relative

                        try
                        {
                            using (FileStream stream = new FileStream(atlasPath, FileMode.OpenOrCreate))
                            {
                                XmlSerializer serializer = new XmlSerializer(typeof(TextureAtlas));
                                serializer.Serialize(stream, textureAtlas);
                            }
                        }
                        catch (Exception ex)
                        {
                            String debugMe = String.Empty;
                            return;
                        }
                    }
                    else
                        return;
                }
            }

            //Try to deserialize the atlas path
            //Check for the image path
            //Load image
            using (FileStream stream = new FileStream(atlasPath, FileMode.Open))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(TextureAtlas));
                textureAtlas = serializer.Deserialize(stream) as TextureAtlas;
            }

            String imagePath = textureAtlas.ImagePath;
            if(!Path.IsPathRooted(imagePath))
                imagePath = String.Format(@"{0}/{1}", info.Directory, imagePath);

            TextureAtlasViewModel textureAtlasViewModel = new TextureAtlasViewModel(textureAtlas, imagePath);
            FilePath = String.Empty;
            this.eventAggregator.Publish(new Events.AtlasLoadedEvent() { Atlas = textureAtlasViewModel });
        }
 public TextureAtlasViewModel(TextureAtlas textureAtlas, String imagePath)
 {
     this.ImagePath = imagePath;
     Initialize(textureAtlas);
 }
 public TextureAtlasViewModel(TextureAtlas textureAtlas)
 {
     this.ImagePath = textureAtlas.ImagePath;
     Initialize(textureAtlas);
 }