aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java74
1 files changed, 47 insertions, 27 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
index 3bd00f4a2f..0e8f906339 100644
--- a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
+++ b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
@@ -23,20 +23,22 @@ import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.xmlbeans.XmlException;
-import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTColorScheme;
import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
/**
* Class that represents theme of XLSX document. The theme includes specific
* colors and fonts.
- *
- * @author Petr Udalau(Petr.Udalau at exigenservices.com) - theme colors
*/
public class ThemesTable extends POIXMLDocumentPart {
private ThemeDocument theme;
+ /**
+ * Construct a ThemesTable.
+ * @param part A PackagePart.
+ * @param rel A PackageRelationship.
+ */
public ThemesTable(PackagePart part, PackageRelationship rel) throws IOException {
super(part, rel);
@@ -47,38 +49,56 @@ public class ThemesTable extends POIXMLDocumentPart {
}
}
+ /**
+ * Construct a ThemesTable from an existing ThemeDocument.
+ * @param theme A ThemeDocument.
+ */
public ThemesTable(ThemeDocument theme) {
this.theme = theme;
}
+ /**
+ * Convert a theme "index" into a color.
+ * @param idx A theme "index"
+ * @return The mapped XSSFColor, or null if not mapped.
+ */
public XSSFColor getThemeColor(int idx) {
+ // Theme color references are NOT positional indices into the color scheme,
+ // i.e. these keys are NOT the same as the order in which theme colors appear
+ // in theme1.xml. They are keys to a mapped color.
CTColorScheme colorScheme = theme.getTheme().getThemeElements().getClrScheme();
- CTColor ctColor = null;
- int cnt = 0;
- for (XmlObject obj : colorScheme.selectPath("./*")) {
- if (obj instanceof org.openxmlformats.schemas.drawingml.x2006.main.CTColor) {
- if (cnt == idx) {
- ctColor = (org.openxmlformats.schemas.drawingml.x2006.main.CTColor) obj;
-
- byte[] rgb = null;
- if (ctColor.getSrgbClr() != null) {
- // Colour is a regular one
- rgb = ctColor.getSrgbClr().getVal();
- } else if (ctColor.getSysClr() != null) {
- // Colour is a tint of white or black
- rgb = ctColor.getSysClr().getLastClr();
- }
+ CTColor ctColor;
+ switch (idx) {
+ case 0: ctColor = colorScheme.getLt1(); break;
+ case 1: ctColor = colorScheme.getDk1(); break;
+ case 2: ctColor = colorScheme.getLt2(); break;
+ case 3: ctColor = colorScheme.getDk2(); break;
+ case 4: ctColor = colorScheme.getAccent1(); break;
+ case 5: ctColor = colorScheme.getAccent2(); break;
+ case 6: ctColor = colorScheme.getAccent3(); break;
+ case 7: ctColor = colorScheme.getAccent4(); break;
+ case 8: ctColor = colorScheme.getAccent5(); break;
+ case 9: ctColor = colorScheme.getAccent6(); break;
+ case 10: ctColor = colorScheme.getHlink(); break;
+ case 11: ctColor = colorScheme.getFolHlink(); break;
+ default: return null;
+ }
- return new XSSFColor(rgb);
- }
- cnt++;
- }
+ byte[] rgb = null;
+ if (ctColor.isSetSrgbClr()) {
+ // Color is a regular one
+ rgb = ctColor.getSrgbClr().getVal();
+ } else if (ctColor.isSetSysClr()) {
+ // Color is a tint of white or black
+ rgb = ctColor.getSysClr().getLastClr();
+ } else {
+ return null;
}
- return null;
+ return new XSSFColor(rgb);
}
/**
- * If the colour is based on a theme, then inherit
+ * If the colour is based on a theme, then inherit
* information (currently just colours) from it as
* required.
*/
@@ -91,13 +111,13 @@ public class ThemesTable extends POIXMLDocumentPart {
// No theme set, nothing to do
return;
}
-
+
// Get the theme colour
XSSFColor themeColor = getThemeColor(color.getTheme());
// Set the raw colour, not the adjusted one
// Do a raw set, no adjusting at the XSSFColor layer either
color.getCTColor().setRgb(themeColor.getCTColor().getRgb());
-
+
// All done
}
}