]> source.dussan.org Git - poi.git/commitdiff
Provide format-agnostic conditional formatting font colour getter and setter
authorNick Burch <nick@apache.org>
Tue, 14 Jul 2015 18:05:28 +0000 (18:05 +0000)
committerNick Burch <nick@apache.org>
Tue, 14 Jul 2015 18:05:28 +0000 (18:05 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1691045 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
src/java/org/apache/poi/hssf/usermodel/HSSFFontFormatting.java
src/java/org/apache/poi/ss/usermodel/FontFormatting.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFontFormatting.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java

index b87d8813ca8615c8cce1c32a9c6fd24d47846956..a9bf301807f68ab757e61d1faf0d5b5bd68d0a3e 100644 (file)
@@ -62,13 +62,13 @@ public final class HSSFConditionalFormattingRule implements ConditionalFormattin
                if ( fontFormatting != null)
                {
                        cfRuleRecord.setFontFormatting(fontFormatting);
-                       return new HSSFFontFormatting(cfRuleRecord);
+                       return new HSSFFontFormatting(cfRuleRecord, workbook);
                }
                else if( create )
                {
                        fontFormatting = new FontFormatting();
                        cfRuleRecord.setFontFormatting(fontFormatting);
-                       return new HSSFFontFormatting(cfRuleRecord);
+                       return new HSSFFontFormatting(cfRuleRecord, workbook);
                }
                else
                {
index f07965c7f8f96b8b7566346ce7a3b9ad57ad049c..6447c33e3e854ec221cc0169cf7a4e103b314638 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.poi.hssf.usermodel;
 
 import org.apache.poi.hssf.record.CFRuleBase;
 import org.apache.poi.hssf.record.cf.FontFormatting;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.Color;
 /**
  * High level representation for Font Formatting component
  * of Conditional Formatting settings
@@ -37,10 +39,12 @@ public final class HSSFFontFormatting implements org.apache.poi.ss.usermodel.Fon
        public final static byte U_DOUBLE_ACCOUNTING = FontFormatting.U_DOUBLE_ACCOUNTING;
 
        private final FontFormatting fontFormatting;
+       private final HSSFWorkbook workbook;
        
-       protected HSSFFontFormatting(CFRuleBase cfRuleRecord)
+       protected HSSFFontFormatting(CFRuleBase cfRuleRecord, HSSFWorkbook workbook)
        {
                this.fontFormatting = cfRuleRecord.getFontFormatting();
+               this.workbook = workbook;
        }
        
        protected FontFormatting getFontFormattingBlock()
@@ -69,7 +73,26 @@ public final class HSSFFontFormatting implements org.apache.poi.ss.usermodel.Fon
                return fontFormatting.getFontColorIndex();
        }
 
-       /**
+       public HSSFColor getFontColor() {
+           return workbook.getCustomPalette().getColor(
+                   getFontColorIndex()
+        );
+    }
+
+    public void setFontColor(Color color) {
+        if (color != null && !(color instanceof HSSFColor)) {
+            throw new IllegalArgumentException("Only HSSFColor objects are supported");
+        }
+         
+        HSSFColor hcolor = (HSSFColor)color;
+        if (hcolor == null) {
+            fontFormatting.setFontColorIndex((short)0);
+        } else {
+            fontFormatting.setFontColorIndex(hcolor.getIndex());
+        }
+    }
+
+    /**
         * gets the height of the font in 1/20th point units
         *
         * @return fontheight (in points/20); or -1 if not modified
index 2298d7963567db59c470792b4a2ca1a09b4a6a4f..0e6b7aba88e9c4c4bd5bad23d83c04e4faa60e3d 100644 (file)
@@ -66,15 +66,26 @@ public interface FontFormatting {
     void setEscapementType(short escapementType);\r
 \r
     /**\r
-     * @return font color index\r
+     * @return font colour index, or 0 if not indexed (XSSF only)\r
      */\r
     short getFontColorIndex();\r
 \r
-\r
     /**\r
-     * @param color font color index\r
+     * Sets the indexed colour to use\r
+     * @param color font colour index\r
      */\r
     void setFontColorIndex(short color);\r
+    \r
+    /**\r
+     * @return The colour of the font, or null if no colour applied\r
+     */\r
+    Color getFontColor();\r
+    \r
+    /**\r
+     * Sets the colour to use\r
+     * @param color font colour to use\r
+     */\r
+    void setFontColor(Color color);\r
 \r
     /**\r
      * gets the height of the font in 1/20th point units\r
index a5d8bdd4044fcfb81a00b8519e0d146e23d112fa..40ce715f48612cf549375cbec84c6f71e857f4be 100644 (file)
@@ -80,7 +80,6 @@ public class XSSFFontFormatting implements FontFormatting {
         return (short)idx;\r
     }\r
 \r
-\r
     /**\r
      * @param color font color index\r
      */\r
@@ -91,16 +90,32 @@ public class XSSFFontFormatting implements FontFormatting {
         }\r
     }\r
 \r
-    /**\r
-     *\r
-     * @return xssf color wrapper or null if color info is missing\r
-     */\r
-    public XSSFColor getXSSFColor(){\r
+    public XSSFColor getFontColor() {\r
         if(_font.sizeOfColorArray() == 0) return null;\r
 \r
         return new XSSFColor(_font.getColorArray(0));\r
     }\r
 \r
+    public void setFontColor(Color color) {\r
+        if (color != null && !(color instanceof XSSFColor)) {\r
+            throw new IllegalArgumentException("Only XSSFColor objects are supported");\r
+        }\r
+         \r
+        XSSFColor xcolor = (XSSFColor)color;\r
+        if (xcolor == null) {\r
+            _font.getColorList().clear();\r
+        } else {\r
+            _font.setColorArray(0, xcolor.getCTColor());\r
+        }\r
+    }\r
+\r
+    /**\r
+     * @deprecated use {@link #getFontColor()}\r
+     */\r
+    public XSSFColor getXSSFColor(){\r
+        return getFontColor();\r
+    }\r
+\r
     /**\r
      * gets the height of the font in 1/20th point units\r
      *\r
index 26a04ef18e1e1fd4e5281a109a1fe5f12a84d68b..af3e07a8df985ad257bc0d5ba4590202878ef686 100644 (file)
@@ -40,7 +40,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STConditionalFormatti
  */\r
 public class XSSFSheetConditionalFormatting implements SheetConditionalFormatting {\r
     /** Office 2010 Conditional Formatting extensions namespace */\r
-    protected static final CF_EXT_2009_NS_X14 = "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main";\r
+    protected static final String CF_EXT_2009_NS_X14 = "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main";\r
 \r
     private final XSSFSheet _sheet;\r
 \r