git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@949177 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_7_BETA1
@@ -34,6 +34,7 @@ | |||
<changes> | |||
<release version="3.7-SNAPSHOT" date="2010-??-??"> | |||
<action dev="POI-DEVELOPERS" type="fix">48718 - Make the creation of multiple, un-modified fonts in a row in XSSF match the old HSSF behaviour</action> | |||
<action dev="POI-DEVELOPERS" type="fix">44916 - Allow access to the HSSFPatriarch from HSSFSheet once created</action> | |||
<action dev="POI-DEVELOPERS" type="add">48779 - Allow you to get straight from a CellStyle to a Color, irrespective of if the Color is indexed or inline-defined</action> | |||
<action dev="POI-DEVELOPERS" type="add">48924 - Allow access of the HWPF DateAndTime underlying date values</action> |
@@ -176,14 +176,29 @@ public class StylesTable extends POIXMLDocumentPart { | |||
return fonts.get(idx); | |||
} | |||
public int putFont(XSSFFont font) { | |||
int idx = fonts.indexOf(font); | |||
/** | |||
* Records the given font in the font table. | |||
* Will re-use an existing font index if this | |||
* font matches another, EXCEPT if forced | |||
* registration is requested. | |||
* This allows people to create several fonts | |||
* then customise them later. | |||
*/ | |||
public int putFont(XSSFFont font, boolean forceRegistration) { | |||
int idx = -1; | |||
if(!forceRegistration) { | |||
idx = fonts.indexOf(font); | |||
} | |||
if (idx != -1) { | |||
return idx; | |||
} | |||
fonts.add(font); | |||
return fonts.size() - 1; | |||
} | |||
public int putFont(XSSFFont font) { | |||
return putFont(font, false); | |||
} | |||
public XSSFCellStyle getStyleAt(int idx) { | |||
int styleXfId = 0; |
@@ -85,7 +85,7 @@ public class XSSFFont implements Font { | |||
setFontName(DEFAULT_FONT_NAME); | |||
setFontHeight((double)DEFAULT_FONT_SIZE); | |||
} | |||
/** | |||
* get the underlying CTFont font | |||
*/ | |||
@@ -516,10 +516,11 @@ public class XSSFFont implements Font { | |||
/** | |||
* Register ourselfs in the style table | |||
* Perform a registration of ourselves | |||
* to the style table | |||
*/ | |||
public long putFont(StylesTable styles) { | |||
short idx = (short)styles.putFont(this); | |||
public long registerTo(StylesTable styles) { | |||
short idx = (short)styles.putFont(this, true); | |||
this._index = idx; | |||
return idx; | |||
} |
@@ -453,7 +453,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X | |||
*/ | |||
public XSSFFont createFont() { | |||
XSSFFont font = new XSSFFont(); | |||
font.putFont(stylesSource); | |||
font.registerTo(stylesSource); | |||
return font; | |||
} | |||
@@ -20,14 +20,17 @@ package org.apache.poi.xssf.usermodel; | |||
import java.util.List; | |||
import org.apache.poi.POIXMLDocumentPart; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
import org.apache.poi.openxml4j.opc.OPCPackage; | |||
import org.apache.poi.openxml4j.opc.PackagePart; | |||
import org.apache.poi.openxml4j.opc.PackagingURIHelper; | |||
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues; | |||
import org.apache.poi.ss.usermodel.Cell; | |||
import org.apache.poi.ss.usermodel.Font; | |||
import org.apache.poi.ss.usermodel.Name; | |||
import org.apache.poi.ss.usermodel.Row; | |||
import org.apache.poi.ss.usermodel.Sheet; | |||
import org.apache.poi.ss.usermodel.Workbook; | |||
import org.apache.poi.xssf.XSSFITestDataProvider; | |||
import org.apache.poi.xssf.XSSFTestDataSamples; | |||
import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill; | |||
@@ -259,4 +262,39 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { | |||
assertEquals(null, cs.getFillBackgroundXSSFColor().getARGBHex()); | |||
assertEquals(null, cs.getFillBackgroundColorColor().getARGBHex()); | |||
} | |||
/** | |||
* With HSSF, if you create a font, don't change it, and | |||
* create a 2nd, you really do get two fonts that you | |||
* can alter as and when you want. | |||
* With XSSF, that wasn't the case, but this verfies | |||
* that it now is again | |||
*/ | |||
public void test48718() throws Exception { | |||
// Verify the HSSF behaviour | |||
// Then ensure the same for XSSF | |||
Workbook[] wbs = new Workbook[] { | |||
new HSSFWorkbook(), | |||
new XSSFWorkbook() | |||
}; | |||
int[] initialFonts = new int[] { 4, 1 }; | |||
for(int i=0; i<wbs.length; i++) { | |||
Workbook wb = wbs[i]; | |||
int startingFonts = initialFonts[i]; | |||
assertEquals(startingFonts, wb.getNumberOfFonts()); | |||
// Get a font, and slightly change it | |||
Font a = wb.createFont(); | |||
assertEquals(startingFonts+1, wb.getNumberOfFonts()); | |||
a.setFontHeightInPoints((short)23); | |||
assertEquals(startingFonts+1, wb.getNumberOfFonts()); | |||
// Get two more, unchanged | |||
Font b = wb.createFont(); | |||
assertEquals(startingFonts+2, wb.getNumberOfFonts()); | |||
Font c = wb.createFont(); | |||
assertEquals(startingFonts+3, wb.getNumberOfFonts()); | |||
} | |||
} | |||
} |