11using NanoXLSX.Registry;
12using NanoXLSX.Registry.Attributes;
14using NanoXLSX.Utils.Xml;
21 [NanoXlsxPlugIn(PlugInUUID = PlugInUUID.ThemeWriter)]
22 internal class ThemeWriter : IPluginWriter
25 private IColorWriter colorWriter;
31 public Workbook Workbook {
get;
set; }
36 public XmlElement XmlElement {
get;
private set; }
43 internal ThemeWriter()
53 public void Init(IBaseWriter baseWriter)
55 this.Workbook = baseWriter.Workbook;
56 this.colorWriter = PlugInLoader.GetPlugIn<IColorWriter>(PlugInUUID.ColorWriter,
new ColorWriter());
64 Theme workbookTheme = Workbook.WorkbookTheme;
65 XmlElement = XmlElement.CreateElement(
"theme",
"a");
66 XmlElement.AddNameSpaceAttribute(
"a",
"xmlns",
"http://schemas.openxmlformats.org/drawingml/2006/main");
67 XmlElement.AddAttribute(
"name", XmlUtils.SanitizeXmlValue(workbookTheme.Name));
68 XmlElement themeElements = XmlElement.AddChildElement(
"themeElements",
"a");
69 themeElements.AddChildElement(GetColorSchemeElement(workbookTheme.Colors));
71 WriterPlugInHandler.HandleInlineQueuePlugins(ref themeElements, Workbook, PlugInUUID.ThemeInlineWriter);
79 private static XmlElement GetColorSchemeElement(ColorScheme scheme)
81 XmlElement colorScheme = XmlElement.CreateElementWithAttribute(
"clrScheme",
"name", XmlUtils.SanitizeXmlValue(scheme.Name),
"a");
82 colorScheme.AddChildElement(GetColor(
"dk1", scheme.Dark1,
"a"));
83 colorScheme.AddChildElement(GetColor(
"lt1", scheme.Light1,
"a"));
84 colorScheme.AddChildElement(GetColor(
"dk2", scheme.Dark2,
"a"));
85 colorScheme.AddChildElement(GetColor(
"lt2", scheme.Light2,
"a"));
86 colorScheme.AddChildElement(GetColor(
"accent1", scheme.Accent1,
"a"));
87 colorScheme.AddChildElement(GetColor(
"accent2", scheme.Accent2,
"a"));
88 colorScheme.AddChildElement(GetColor(
"accent3", scheme.Accent3,
"a"));
89 colorScheme.AddChildElement(GetColor(
"accent4", scheme.Accent4,
"a"));
90 colorScheme.AddChildElement(GetColor(
"accent5", scheme.Accent5,
"a"));
91 colorScheme.AddChildElement(GetColor(
"accent6", scheme.Accent6,
"a"));
92 colorScheme.AddChildElement(GetColor(
"hlink", scheme.Hyperlink,
"a"));
93 colorScheme.AddChildElement(GetColor(
"folHlink", scheme.FollowedHyperlink,
"a"));
104 private static XmlElement GetColor(
string name, IColor color,
string prefix)
106 XmlElement colorElement = XmlElement.CreateElement(name, prefix);
107 if (color is SystemColor)
109 SystemColor sysColor = color as SystemColor;
110 XmlElement sysColorElement = colorElement.AddChildElementWithAttribute(
"sysClr",
"val", sysColor.StringValue,
"a");
111 if (!
string.IsNullOrEmpty(sysColor.LastColor))
113 sysColorElement.AddAttribute(
"lastClr", sysColor.LastColor);
116 else if (color is SrgbColor)
118 colorElement.AddChildElementWithAttribute(
"srgbClr",
"val", color.StringValue,
"a");