Author: jheight Date: Mon Jul 24 05:18:48 2006 New Revision: 425023 URL: http://svn.apache.org/viewvc?rev=425023&view=rev Log: Bug 38486: Added handling of special 0x40 (64 dec) color.
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java jakarta/poi/trunk/src/java/org/apache/poi/hssf/util/HSSFColor.java Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java?rev=425023&r1=425022&r2=425023&view=diff ============================================================================== --- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java (original) +++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java Mon Jul 24 05:18:48 2006 @@ -18,6 +18,7 @@ package org.apache.poi.hssf.usermodel; import org.apache.poi.hssf.record.ExtendedFormatRecord; +import org.apache.poi.hssf.util.*; /** * High level representation of the style of a cell in a sheet of a workbook. @@ -798,6 +799,29 @@ { return format.getAdtlFillPattern(); } + + /** + * Checks if the background and foreground fills are set correctly when one + * or the other is set to the default color. + * <p>Works like the logic table below:</p> + * <p>BACKGROUND FOREGROUND</p> + * <p>NONE AUTOMATIC</p> + * <p>0x41 0x40</p> + * <p>NONE RED/ANYTHING</p> + * <p>0x40 0xSOMETHING</p> + */ + private void checkDefaultBackgroundFills() { + if (format.getFillForeground() == org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index) { + //JMH: Why +1, hell why not. I guess it made some sense to someone at the time. Doesnt + //to me now.... But experience has shown that when the fore is set to AUTOMATIC then the + //background needs to be incremented...... + if (format.getFillBackground() != (org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1)) + setFillBackgroundColor((short)(org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1)); + } else if (format.getFillBackground() == org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1) + //Now if the forground changes to a non-AUTOMATIC color the background resets itself!!! + if (format.getFillForeground() != org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index) + setFillBackgroundColor(org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index); + } /** * set the background fill color. @@ -805,7 +829,14 @@ * For example: * <pre> * cs.setFillPattern(HSSFCellStyle.FINE_DOTS ); - * cs.setFillBackgroundColor(new HSSFColor.RED().getIndex()); + * cs.setFillBackgroundColor(new HSSFColor.RED().getIndex()); + * </pre> + * optionally a Foreground and background fill can be applied: + * <i>Note: Ensure Foreground color is set prior to background</i> + * <pre> + * cs.setFillPattern(HSSFCellStyle.FINE_DOTS ); + * cs.setFillForegroundColor(new HSSFColor.BLUE().getIndex()); + * cs.setFillBackgroundColor(new HSSFColor.RED().getIndex()); * </pre> * or, for the special case of SOLID_FILL: * <pre> @@ -819,8 +850,9 @@ */ public void setFillBackgroundColor(short bg) - { + { format.setFillBackground(bg); + checkDefaultBackgroundFills(); } /** @@ -830,17 +862,24 @@ public short getFillBackgroundColor() { - return format.getFillBackground(); + short result = format.getFillBackground(); + //JMH: Do this ridiculous conversion, and let HSSFCellStyle + //internally migrate back and forth + if (result == (HSSFColor.AUTOMATIC.index+1)) + return HSSFColor.AUTOMATIC.index; + else return result; } /** * set the foreground fill color + * <i>Note: Ensure Foreground color is set prior to background color.</i> * @param bg color */ public void setFillForegroundColor(short bg) { format.setFillForeground(bg); + checkDefaultBackgroundFills(); } /** Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java?rev=425023&r1=425022&r2=425023&view=diff ============================================================================== --- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java (original) +++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java Mon Jul 24 05:18:48 2006 @@ -56,7 +56,7 @@ public final static short BOLDWEIGHT_BOLD = 0x2bc; /** - * normal type of black color + * normal type of black color. */ public final static short COLOR_NORMAL = 0x7fff; @@ -266,7 +266,7 @@ /** * set the color for the font * @param color to use - * @see #COLOR_NORMAL + * @see #COLOR_NORMAL Note: Use this rather than HSSFColor.AUTOMATIC for default font color * @see #COLOR_RED */ Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java?rev=425023&r1=425022&r2=425023&view=diff ============================================================================== --- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java (original) +++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java Mon Jul 24 05:18:48 2006 @@ -44,11 +44,16 @@ */ public HSSFColor getColor(short index) { - byte[] b = palette.getColor(index); - if (b != null) - { - return new CustomColor(index, b); - } + //Handle the special AUTOMATIC case + if (index == HSSFColor.AUTOMATIC.index) + return HSSFColor.AUTOMATIC.getInstance(); + else { + byte[] b = palette.getColor(index); + if (b != null) + { + return new CustomColor(index, b); + } + } return null; } Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/util/HSSFColor.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/util/HSSFColor.java?rev=425023&r1=425022&r2=425023&view=diff ============================================================================== --- jakarta/poi/trunk/src/java/org/apache/poi/hssf/util/HSSFColor.java (original) +++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/util/HSSFColor.java Mon Jul 24 05:18:48 2006 @@ -1693,4 +1693,38 @@ return hexString; } } + + /** + * Special Default/Normal/Automatic color. + * <p><i>Note:</i> This class is NOT in the default HashTables returned by HSSFColor. + * The index is a special case which is interpreted in the various setXXXColor calls. + * + * @author Jason + * + */ + public final static class AUTOMATIC extends HSSFColor + { + private static HSSFColor instance = new AUTOMATIC(); + + public final static short index = 0x40; + + public short getIndex() + { + return index; + } + + public short [] getTriplet() + { + return BLACK.triplet; + } + + public String getHexString() + { + return BLACK.hexString; + } + + public static HSSFColor getInstance() { + return instance; + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/