mirror of https://github.com/apache/poi.git
Fix bug #50846 - XSSFCellBorder needs a theme table too, but as it gets created early switch it to the same model as XSSFFont for getting it later
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1082946 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
70f869b105
commit
dd1af3acd9
|
@ -34,6 +34,7 @@
|
|||
|
||||
<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>
|
||||
|
|
|
@ -98,9 +98,15 @@ public class StylesTable extends POIXMLDocumentPart {
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -144,7 +150,7 @@ public class StylesTable extends POIXMLDocumentPart {
|
|||
CTBorders ctborders = styleSheet.getBorders();
|
||||
if(ctborders != null) {
|
||||
for (CTBorder border : ctborders.getBorderArray()) {
|
||||
borders.add(new XSSFCellBorder(border, theme));
|
||||
borders.add(new XSSFCellBorder(border));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -251,6 +257,7 @@ public class StylesTable extends POIXMLDocumentPart {
|
|||
return idx;
|
||||
}
|
||||
borders.add(border);
|
||||
border.setThemesTable(theme);
|
||||
return borders.size() - 1;
|
||||
}
|
||||
|
||||
|
@ -437,7 +444,7 @@ public class StylesTable extends POIXMLDocumentPart {
|
|||
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);
|
||||
|
|
|
@ -38,17 +38,32 @@ public class XSSFCellBorder {
|
|||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -742,12 +742,26 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
|
|||
* 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);
|
||||
|
||||
// Check the one that isn't
|
||||
// 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();
|
||||
|
||||
assertEquals(0, colorS.getTheme());
|
||||
assertEquals("FFFF0000", colorS.getARGBHex());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -59,11 +59,11 @@ public class TestXSSFCellStyle extends TestCase {
|
|||
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();
|
||||
|
|
|
@ -40,7 +40,7 @@ public class TestXSSFBorder extends TestCase {
|
|||
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());
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue