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); }
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; }
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(); } }
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; }