<changes>
<release version="3.8-beta2" date="2011-??-??">
+ <action dev="poi-developers" type="fix">50846 - More XSSFColor theme improvements, this time for Cell Borders</action>
<action dev="poi-developers" type="fix">50939 - ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not</action>
<action dev="poi-developers" type="add">HMEF - New component which supports TNEF (Transport Neutral Encoding Format), aka winmail.dat</action>
<action dev="poi-developers" type="fix">50313 - support for getting HWPFDocument fields</action>
public void setTheme(ThemesTable theme) {
this.theme = theme;
+
+ // Pass the themes table along to things which need to
+ // know about it, but have already been created by now
for(XSSFFont font : fonts) {
font.setThemesTable(theme);
}
+ for(XSSFCellBorder border : borders) {
+ border.setThemesTable(theme);
+ }
}
/**
CTBorders ctborders = styleSheet.getBorders();
if(ctborders != null) {
for (CTBorder border : ctborders.getBorderArray()) {
- borders.add(new XSSFCellBorder(border, theme));
+ borders.add(new XSSFCellBorder(border));
}
}
return idx;
}
borders.add(border);
+ border.setThemesTable(theme);
return borders.size() - 1;
}
fills.add(new XSSFCellFill(ctFill[1]));
CTBorder ctBorder = createDefaultBorder();
- borders.add(new XSSFCellBorder(ctBorder, theme));
+ borders.add(new XSSFCellBorder(ctBorder));
CTXf styleXf = createDefaultXf();
styleXfs.add(styleXf);
* Creates a Cell Border from the supplied XML definition
*/
public XSSFCellBorder(CTBorder border, ThemesTable theme) {
- this.border = border;
+ this(border);
this._theme = theme;
}
+ /**
+ * Creates a Cell Border from the supplied XML definition
+ */
+ public XSSFCellBorder(CTBorder border) {
+ this.border = border;
+ }
+
/**
* Creates a new, empty Cell Border.
* You need to attach this to the Styles Table
*/
- public XSSFCellBorder(ThemesTable theme) {
+ public XSSFCellBorder() {
border = CTBorder.Factory.newInstance();
- this._theme = theme;
}
+ /**
+ * Records the Themes Table that is associated with
+ * the current font, used when looking up theme
+ * based colours and properties.
+ */
+ public void setThemesTable(ThemesTable themes) {
+ this._theme = themes;
+ }
+
/**
* The enumeration value indicating the side being used for a cell border.
*/
* should still be able to get colours
*/
public void test50846() throws Exception {
- // TODO Get file and test
- //Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50846.xlsx");
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50846-border_colours.xlsx");
- // Check the style that is theme based
+ XSSFSheet sheet = wb.getSheetAt(0);
+ XSSFRow row = sheet.getRow(0);
+
+ // Border from a theme, brown
+ XSSFCell cellT = row.getCell(0);
+ XSSFCellStyle styleT = cellT.getCellStyle();
+ XSSFColor colorT = styleT.getBottomBorderXSSFColor();
+
+ assertEquals(5, colorT.getTheme());
+ assertEquals("FFC0504D", colorT.getARGBHex());
+
+ // Border from a style direct, red
+ XSSFCell cellS = row.getCell(1);
+ XSSFCellStyle styleS = cellS.getCellStyle();
+ XSSFColor colorS = styleS.getBottomBorderXSSFColor();
- // Check the one that isn't
+ assertEquals(0, colorS.getTheme());
+ assertEquals("FFFF0000", colorS.getARGBHex());
}
/**
ctStylesheet = stylesTable.getCTStylesheet();
ctBorderA = CTBorder.Factory.newInstance();
- XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA, null);
+ XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA);
long borderId = stylesTable.putBorder(borderA);
assertEquals(1, borderId);
- XSSFCellBorder borderB = new XSSFCellBorder(null);
+ XSSFCellBorder borderB = new XSSFCellBorder();
assertEquals(1, stylesTable.putBorder(borderB));
ctFill = CTFill.Factory.newInstance();
right.setStyle(STBorderStyle.NONE);
bottom.setStyle(STBorderStyle.THIN);
- XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border, null);
+ XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border);
assertEquals("DASH_DOT", cellBorderStyle.getBorderStyle(BorderSide.TOP).toString());
assertEquals("NONE", cellBorderStyle.getBorderStyle(BorderSide.RIGHT).toString());