Exemple #1
0
        protected override List <string> LoadFontFiles()
        {
            List <string> list = new List <string>();

            foreach (ZipEntry entry in this.fontEntries)
            {
                byte[] buffer = ZippedTheme.ReadZipEntry(this.ZipFile, entry);
                string path   = Path.Combine(Path.GetTempPath(), entry.Name);
                using (FileStream fileStream = System.IO.File.Create(path))
                    fileStream.Write(buffer, 0, buffer.Length);
                list.Add(path);
            }
            return(list);
        }
Exemple #2
0
        public MediaCenterFXTheme(string file)
            : base(file, FileMode.Open)
        {
            FontsThemeItem fonts = new FontsThemeItem();

            fonts.BeginInit();
            ColorsThemeItem colorsThemeItem = new ColorsThemeItem();

            colorsThemeItem.BeginInit();
            StartMenuThemeItem startMenuThemeItem = new StartMenuThemeItem();

            startMenuThemeItem.BeginInit();
            this.ThemeItems.Add((IThemeItem)startMenuThemeItem);
            AnimationsItem animationsItem = new AnimationsItem();

            animationsItem.BeginInit();
            this.ThemeItems.Add((IThemeItem)animationsItem);
            foreach (ZipEntry entry in this.ZipFile)
            {
                if (entry.IsFile)
                {
                    ResourceThemeItem resourceThemeItem = (ResourceThemeItem)null;
                    string            str = entry.Name.ToUpper();
                    switch (Path.GetExtension(str))
                    {
                    case ".PNG":
                        if (str == "CUSTOM.THEMESHOT.PNG")
                        {
                            this.MainScreenshot = (BitmapSource)BitmapDecoder.Create(this.ZipFile.GetInputStream(entry), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames[0];
                            break;
                        }
                        else
                        {
                            resourceThemeItem = (ResourceThemeItem) new ImageResourceThemeItem("ehres.dll", str, (Func <ResourceThemeItem, byte[]>)(themeItem => ZippedTheme.ReadZipEntry(this.ZipFile, this.zipEntries[(IThemeItem)themeItem])));
                            break;
                        }

                    case ".TTF":
                        this.fontEntries.Add(entry);
                        break;
                    }
                    if (resourceThemeItem != null)
                    {
                        this.zipEntries[(IThemeItem)resourceThemeItem] = entry;
                        this.ThemeItems.Add((IThemeItem)resourceThemeItem);
                    }
                }
            }
            ZipEntry entry1 = this.ZipFile.GetEntry("Theme.xml");

            if (entry1 == null)
            {
                throw new InvalidDataException("Could not find Theme.xml.");
            }
            XDocument xdocument = XDocument.Load((XmlReader) new XmlTextReader(this.ZipFile.GetInputStream(entry1)));

            if (xdocument.Root != null)
            {
                foreach (XElement xelement in xdocument.Root.Elements())
                {
                    switch (xelement.Name.LocalName)
                    {
                    case "Biography":
                        this.Name     = MediaCenterUtil.AttributeValue(xelement, (XName)"Name");
                        this.Author   = MediaCenterUtil.AttributeValue(xelement, (XName)"Author");
                        this.Version  = new Version(MediaCenterUtil.AttributeValue(xelement, (XName)"Version"));
                        this.Comments = MediaCenterUtil.AttributeValue(xelement, (XName)"Comments");
                        continue;

                    case "Sounds":
                        using (IEnumerator <XAttribute> enumerator = xelement.Attributes().GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                XAttribute             current           = enumerator.Current;
                                string                 localName         = current.Name.LocalName;
                                ZipEntry               entry2            = this.ZipFile.GetEntry(current.Value);
                                SoundResourceThemeItem resourceThemeItem = new SoundResourceThemeItem("ehres.dll", localName, (Func <ResourceThemeItem, byte[]>)(themeItem => ZippedTheme.ReadZipEntry(this.ZipFile, this.zipEntries[(IThemeItem)themeItem])));
                                this.zipEntries[(IThemeItem)resourceThemeItem] = entry2;
                                this.ThemeItems.Add((IThemeItem)resourceThemeItem);
                            }
                            continue;
                        }

                    case "MainFonts":
                        using (IEnumerator <XAttribute> enumerator = xelement.Attributes().GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                XAttribute current   = enumerator.Current;
                                FontClass  fontClass = new FontClass()
                                {
                                    Name = current.Name.LocalName
                                };
                                fontClass.FontFace = FontUtilities.GetFontFaceInfo(current.Value, (MediaCenterTheme)this);
                                if (fontClass.FontFace != null)
                                {
                                    fonts.FontClasses.Add(fontClass);
                                }
                            }
                            continue;
                        }

                    case "FontsOverrides":
                        MediaCenterFXTheme.AddFontOverride(fonts, xelement, "FontDialogC", "DialogCSize", "DialogContent");
                        MediaCenterFXTheme.AddFontOverride(fonts, xelement, "FontButton", "SizeButton", "ButtonText");
                        MediaCenterFXTheme.AddFontOverride(fonts, xelement, "FontDialogT", "DialogTSize", "DialogTitle");
                        MediaCenterFXTheme.AddFontOverride(fonts, xelement, "FontThumbnail", "ThumbnailSize", "ThumbnailButtonText");
                        MediaCenterFXTheme.AddFontOverride(fonts, xelement, "FontVolume", "VolumeSize", "VolumeText");
                        MediaCenterFXTheme.AddFontOverride(fonts, xelement, "FontBackground", "SizeBackground", "BackgroundTitleText");
                        continue;

                    case "MainColors":
                        using (IEnumerator <XAttribute> enumerator = xelement.Attributes().GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                XAttribute current = enumerator.Current;
                                Color      color;
                                if (this.TryParseColor(current.Value, out color))
                                {
                                    colorsThemeItem.DefaultColors.Add(new ColorItem()
                                    {
                                        Color = color,
                                        Name  = current.Name.LocalName
                                    });
                                }
                                else
                                {
                                    Trace.TraceWarning("Could not parse color value for {0} \"{1}\" in theme file {2}.", (object)current.Name, (object)current.Value, (object)file);
                                }
                            }
                            continue;
                        }

                    case "StartMenu":
                        startMenuThemeItem.StripTitleFont = this.GetFontOverride(MediaCenterUtil.AttributeValue(xelement, (XName)"FontFace"), MediaCenterUtil.AttributeValue(xelement, (XName)"FontSize"));
                        Color color1;
                        if (this.TryParseColor(MediaCenterUtil.AttributeValue(xelement, (XName)"FocusColor"), out color1))
                        {
                            startMenuThemeItem.FocusedStripTitleColor = new ColorReference()
                            {
                                Color = new Color?(color1)
                            }
                        }
                        ;
                        Color color2;
                        if (this.TryParseColor(MediaCenterUtil.AttributeValue(xelement, (XName)"NoFocusColor"), out color2))
                        {
                            startMenuThemeItem.NonFocusedStripTitleColor = new ColorReference()
                            {
                                Color = new Color?(color2)
                            };
                            continue;
                        }
                        else
                        {
                            continue;
                        }

                    case "QuickLink":
                        startMenuThemeItem.FocusedQuickLinkFont    = this.GetFontOverride(MediaCenterUtil.AttributeValue(xelement, (XName)"SelectedFontFace"), MediaCenterUtil.AttributeValue(xelement, (XName)"SelectedFontSize"));
                        startMenuThemeItem.NonFocusedQuickLinkFont = this.GetFontOverride(MediaCenterUtil.AttributeValue(xelement, (XName)"NonSelectedFontFace"), MediaCenterUtil.AttributeValue(xelement, (XName)"NonSelectedFontSize"));
                        if (startMenuThemeItem.FocusedQuickLinkFont.Size == 0)
                        {
                            startMenuThemeItem.FocusedQuickLinkFont.Size = startMenuThemeItem.NonFocusedQuickLinkFont.Size;
                        }
                        if (startMenuThemeItem.NonFocusedQuickLinkFont.Size == 0)
                        {
                            startMenuThemeItem.NonFocusedQuickLinkFont.Size = startMenuThemeItem.FocusedQuickLinkFont.Size;
                        }
                        Color color3;
                        if (this.TryParseColor(MediaCenterUtil.AttributeValue(xelement, (XName)"SelectedColor"), out color3))
                        {
                            startMenuThemeItem.FocusedQuickLinkColor = new ColorReference()
                            {
                                Color = new Color?(color3)
                            }
                        }
                        ;
                        Color color4;
                        if (this.TryParseColor(MediaCenterUtil.AttributeValue(xelement, (XName)"NonSelectedColor"), out color4))
                        {
                            startMenuThemeItem.NonFocusedQuickLinkColor = new ColorReference()
                            {
                                Color = new Color?(color4)
                            };
                            continue;
                        }
                        else
                        {
                            continue;
                        }

                    case "StartText":
                        startMenuThemeItem.StartMenuText     = MediaCenterUtil.AttributeValue(xelement, (XName)"String");
                        startMenuThemeItem.StartMenuTextFont = this.GetFontOverride(MediaCenterUtil.AttributeValue(xelement, (XName)"FontFace"), MediaCenterUtil.AttributeValue(xelement, (XName)"FontSize"));
                        Color color5;
                        if (this.TryParseColor(MediaCenterUtil.AttributeValue(xelement, (XName)"Color"), out color5))
                        {
                            startMenuThemeItem.StartMenuTextColor = new ColorReference()
                            {
                                Color = new Color?(color5)
                            };
                            continue;
                        }
                        else
                        {
                            continue;
                        }

                    case "MainBackgroundAnimation":
                        string str = MediaCenterUtil.AttributeValue(xelement, (XName)"BackgroundAnimationDisabled");
                        animationsItem.IsBackgroundAnimationDisabled = str != null && bool.Parse(str);
                        continue;

                    default:
                        continue;
                    }
                }
            }
            this.ID = this.Name;
            fonts.EndInit();
            colorsThemeItem.EndInit();
            startMenuThemeItem.EndInit();
            animationsItem.EndInit();
            this.FontsItem  = fonts;
            this.ColorsItem = colorsThemeItem;
        }
Exemple #3
0
        public VmcStudioTheme(string file)
            : base(file, FileMode.Open)
        {
            ZipEntry entry1 = this.ZipFile.GetEntry("Theme.xml");

            if (entry1 == null)
            {
                Trace.TraceError("Could not find Theme.xml in theme " + file);
                throw new Exception("Could not find theme entry in theme file.");
            }
            else
            {
                this.themeInfo = (VmcStudioTheme.ThemeInfo) new XmlSerializer(typeof(VmcStudioTheme.ThemeInfo)).Deserialize(this.ZipFile.GetInputStream(entry1));
                this.themeInfo.BeginInit();
                if (this.themeInfo.Fonts == null)
                {
                    this.themeInfo.Fonts = new FontsThemeItem();
                }
                this.themeInfo.Fonts.ClearDirty();
                this.FontsItem = this.themeInfo.Fonts;
                if (this.themeInfo.Colors == null)
                {
                    this.themeInfo.Colors = new ColorsThemeItem();
                }
                this.themeInfo.Colors.ClearDirty();
                this.ColorsItem = this.themeInfo.Colors;
                this.Name       = this.themeInfo.Name;
                this.Author     = this.themeInfo.Author;
                this.Version    = new Version(this.themeInfo.Version);
                this.Comments   = this.themeInfo.Comments;
                this.ThemeType  = this.themeInfo.ThemeType;
                this.ID         = this.themeInfo.ID;
                foreach (ZipEntry entry2 in this.ZipFile)
                {
                    IThemeItem index    = (IThemeItem)null;
                    string[]   strArray = entry2.Name.Split(new char[2]
                    {
                        '\\',
                        '/'
                    });
                    if (strArray[0] == "Resources")
                    {
                        string dllName      = strArray[1] + ".dll";
                        string str          = strArray[2];
                        string resourceName = strArray[3];
                        switch (str)
                        {
                        case "Images":
                            index = (IThemeItem) new ImageResourceThemeItem(dllName, resourceName, (Func <ResourceThemeItem, byte[]>)(themeItem => ZippedTheme.ReadZipEntry(this.ZipFile, this.themeItemEntries[(IThemeItem)themeItem])));
                            break;

                        case "Sounds":
                            index = (IThemeItem) new SoundResourceThemeItem(dllName, resourceName, (Func <ResourceThemeItem, byte[]>)(themeItem => ZippedTheme.ReadZipEntry(this.ZipFile, this.themeItemEntries[(IThemeItem)themeItem])));
                            break;
                        }
                    }
                    else if (strArray[0] == "Fonts")
                    {
                        this.fontEntries.Add(entry2);
                    }
                    else if (entry2.Name == "Screenshot.png")
                    {
                        this.MainScreenshot = (BitmapSource)BitmapDecoder.Create(this.ZipFile.GetInputStream(entry2), BitmapCreateOptions.None, BitmapCacheOption.None).Frames[0];
                    }
                    else if (strArray[0] == "Screenshots")
                    {
                        this.Screenshots.Add((BitmapSource)BitmapDecoder.Create(this.ZipFile.GetInputStream(entry2), BitmapCreateOptions.None, BitmapCacheOption.None).Frames[0]);
                    }
                    if (index != null)
                    {
                        this.themeItemEntries[index] = entry2;
                        this.ThemeItems.Add(index);
                    }
                }
                this.themeInfo.EndInit();
            }
        }
Exemple #4
0
        protected override void SaveInternal()
        {
            this.themeInfo.ID        = this.ID;
            this.themeInfo.Name      = this.Name;
            this.themeInfo.Author    = this.Author;
            this.themeInfo.Version   = ((object)(this.Version ?? new Version(0, 0))).ToString();
            this.themeInfo.Comments  = this.Comments;
            this.themeInfo.ThemeType = this.ThemeType;
            foreach (IThemeItem themeItem in (Collection <IThemeItem>) this.ThemeItems)
            {
                if (!themeItem.IsLoaded)
                {
                    themeItem.Load();
                }
            }
            this.ZipFile.BeginUpdate();
            foreach (ZipEntry entry in new List <ZipEntry>(Enumerable.OfType <ZipEntry>((IEnumerable)this.ZipFile)))
            {
                this.ZipFile.Delete(entry);
            }
            this.themeItemEntries.Clear();
            this.themeInfo.Fonts  = this.FontsItem;
            this.themeInfo.Colors = this.ColorsItem;
            MemoryStream memoryStream = new MemoryStream();

            new XmlSerializer(typeof(VmcStudioTheme.ThemeInfo)).Serialize((Stream)memoryStream, (object)this.themeInfo);
            this.ZipFile.Add((IStaticDataSource) new ZippedTheme.StreamDataSource((Stream)memoryStream), "Theme.xml");
            if (this.MainScreenshot != null)
            {
                VmcStudioTheme.AddImageResource(this.MainScreenshot, this.ZipFile, "Screenshot.png");
            }
            for (int index = 0; index < this.Screenshots.Count; ++index)
            {
                VmcStudioTheme.AddImageResource(this.Screenshots[index], this.ZipFile, string.Format("Screenshots\\{0}.png", (object)index));
            }
            foreach (ResourceThemeItem resourceThemeItem in Enumerable.OfType <ResourceThemeItem>((IEnumerable)this.ThemeItems))
            {
                string entryName = (string)null;
                if (resourceThemeItem is ImageResourceThemeItem)
                {
                    entryName = VmcStudioTheme.GetResourceZipPath(resourceThemeItem, "Images");
                }
                else if (resourceThemeItem is SoundResourceThemeItem)
                {
                    entryName = VmcStudioTheme.GetResourceZipPath(resourceThemeItem, "Sounds");
                }
                if (entryName == null)
                {
                    throw new Exception("Unknown theme item type - " + (object)resourceThemeItem.GetType());
                }
                this.ZipFile.Add(ZippedTheme.GetResourceThemeItemData(resourceThemeItem), entryName);
            }
            foreach (string fontName in Enumerable.Distinct <string>(Enumerable.Concat <string>(Enumerable.Select <FontClass, string>((IEnumerable <FontClass>) this.themeInfo.Fonts.FontClasses, (Func <FontClass, string>)(fontClass => fontClass.FontFace.FontFamily)), Enumerable.Select <FontOverride, string>(Enumerable.Where <FontOverride>((IEnumerable <FontOverride>) this.themeInfo.Fonts.FontOverrides, (Func <FontOverride, bool>)(fontOverride => fontOverride.FontFace != null)), (Func <FontOverride, string>)(fontOverride => fontOverride.FontFace.FontFamily)))))
            {
                FontFamily fontFamily = this.GetFontFamily(fontName);
                if (fontFamily != null)
                {
                    string file = FontUtil.GetFile(fontFamily);
                    if (file != null)
                    {
                        this.ZipFile.Add(file, "Fonts\\" + Path.GetFileName(file));
                    }
                }
            }
            this.ZipFile.CommitUpdate();
            this.ResetZipFile();
            foreach (IThemeItem themeItem in Enumerable.Where <IThemeItem>((IEnumerable <IThemeItem>) this.ThemeItems, (Func <IThemeItem, bool>)(t => t.IsDirty)))
            {
                themeItem.ClearDirty();
            }
            this.FontsItem.ClearDirty();
            this.ColorsItem.ClearDirty();
            this.IsDirty = false;
        }