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

src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
src/java/org/apache/poi/hssf/usermodel/HSSFPatternFormatting.java
src/java/org/apache/poi/ss/usermodel/PatternFormatting.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPatternFormatting.java

index a9bf301807f68ab757e61d1faf0d5b5bd68d0a3e..6f598dfc66dfc80c593123cf09ff1b131ac78088 100644 (file)
@@ -135,13 +135,13 @@ public final class HSSFConditionalFormattingRule implements ConditionalFormattin
                if ( patternFormatting != null)
                {
                        cfRuleRecord.setPatternFormatting(patternFormatting);
-                       return new HSSFPatternFormatting(cfRuleRecord);
+                       return new HSSFPatternFormatting(cfRuleRecord, workbook);
                }
                else if( create )
                {
                        patternFormatting = new PatternFormatting();
                        cfRuleRecord.setPatternFormatting(patternFormatting);
-                       return new HSSFPatternFormatting(cfRuleRecord);
+                       return new HSSFPatternFormatting(cfRuleRecord, workbook);
                }
                else
                {
index def9d8f2415bf0df2f3aa1707e168eed3712483d..9bd15e9cfba76e5b65f2f8b80f8402f7398f3ccb 100644 (file)
@@ -19,17 +19,21 @@ package org.apache.poi.hssf.usermodel;
 
 import org.apache.poi.hssf.record.CFRuleBase;
 import org.apache.poi.hssf.record.cf.PatternFormatting;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.Color;
 
 /**
  * High level representation for Conditional Formatting settings
  */
 public class HSSFPatternFormatting implements org.apache.poi.ss.usermodel.PatternFormatting
 {
+    private final HSSFWorkbook workbook;
        private final CFRuleBase cfRuleRecord;
        private final PatternFormatting patternFormatting;
        
-       protected HSSFPatternFormatting(CFRuleBase cfRuleRecord)
+       protected HSSFPatternFormatting(CFRuleBase cfRuleRecord, HSSFWorkbook workbook)
        {
+           this.workbook = workbook;
                this.cfRuleRecord = cfRuleRecord; 
                this.patternFormatting = cfRuleRecord.getPatternFormatting();
        }
@@ -39,7 +43,15 @@ public class HSSFPatternFormatting implements org.apache.poi.ss.usermodel.Patter
                return patternFormatting;
        }
 
-       /**
+       public HSSFColor getFillBackgroundColorColor() {
+        return workbook.getCustomPalette().getColor(getFillBackgroundColor());
+    }
+
+    public HSSFColor getFillForegroundColorColor() {
+        return workbook.getCustomPalette().getColor(getFillForegroundColor());
+    }
+
+    /**
         * @see org.apache.poi.hssf.record.cf.PatternFormatting#getFillBackgroundColor()
         */
        public short getFillBackgroundColor()
@@ -63,7 +75,31 @@ public class HSSFPatternFormatting implements org.apache.poi.ss.usermodel.Patter
                return (short)patternFormatting.getFillPattern();
        }
 
-       /**
+       public void setFillBackgroundColor(Color bg) {
+           if (bg != null && !(bg instanceof HSSFColor)) {
+               throw new IllegalArgumentException("Only HSSFColor objects are supported");
+           }
+           HSSFColor hcolor = (HSSFColor)bg;
+           if (hcolor == null) {
+               setFillBackgroundColor((short)0);
+           } else {
+               setFillBackgroundColor(hcolor.getIndex());
+           }
+       }
+
+    public void setFillForegroundColor(Color fg) {
+        if (fg != null && !(fg instanceof HSSFColor)) {
+            throw new IllegalArgumentException("Only HSSFColor objects are supported");
+        }
+        HSSFColor hcolor = (HSSFColor)fg;
+        if (hcolor == null) {
+            setFillForegroundColor((short)0);
+        } else {
+            setFillForegroundColor(hcolor.getIndex());
+        }
+    }
+
+    /**
         * @param bg
         * @see org.apache.poi.hssf.record.cf.PatternFormatting#setFillBackgroundColor(int)
         */
index 2739c96af325bcab7d08fe1c2747243620862b7e..0311ffb75e520db9c873971deef3492517482d4e 100644 (file)
@@ -63,14 +63,16 @@ public interface PatternFormatting {
     public final static short     LEAST_DOTS          = 18 ;\r
 \r
     short getFillBackgroundColor();\r
-\r
     short getFillForegroundColor();\r
+    Color getFillBackgroundColorColor();\r
+    Color getFillForegroundColorColor();\r
 \r
     short getFillPattern();\r
 \r
     void setFillBackgroundColor(short bg);\r
-\r
     void setFillForegroundColor(short fg);\r
+    void setFillBackgroundColor(Color bg);\r
+    void setFillForegroundColor(Color fg);\r
 \r
     void setFillPattern(short fp);\r
 }\r
index f3d1329063bb8e7c9cbadb35eded31d08dbabe37..898fa9b7aa0d31ef41020bffe5ec1a952fd23442 100644 (file)
@@ -18,6 +18,7 @@
  */\r
 package org.apache.poi.xssf.usermodel;\r
 \r
+import org.apache.poi.ss.usermodel.Color;\r
 import org.apache.poi.ss.usermodel.PatternFormatting;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPatternFill;\r
@@ -34,37 +35,65 @@ public class XSSFPatternFormatting implements PatternFormatting {
         _fill = fill;\r
     }\r
 \r
-    public short getFillBackgroundColor(){\r
-        if(!_fill.isSetPatternFill()) return 0;\r
-\r
-        return (short)_fill.getPatternFill().getBgColor().getIndexed();\r
+    public XSSFColor getFillBackgroundColorColor() {\r
+        if(!_fill.isSetPatternFill()) return null;\r
+        return new XSSFColor(_fill.getPatternFill().getBgColor());\r
     }\r
-\r
-    public short getFillForegroundColor(){\r
+    public XSSFColor getFillForegroundColorColor() {\r
         if(!_fill.isSetPatternFill() || ! _fill.getPatternFill().isSetFgColor())\r
-            return 0;\r
-\r
-        return (short)_fill.getPatternFill().getFgColor().getIndexed();\r
+            return null;\r
+        return new XSSFColor(_fill.getPatternFill().getFgColor());\r
     }\r
 \r
-    public short getFillPattern(){\r
+    public short getFillPattern() {\r
         if(!_fill.isSetPatternFill() || !_fill.getPatternFill().isSetPatternType()) return NO_FILL;\r
 \r
         return (short)(_fill.getPatternFill().getPatternType().intValue() - 1);\r
      }\r
 \r
-    public void setFillBackgroundColor(short bg){\r
-        CTPatternFill ptrn = _fill.isSetPatternFill() ? _fill.getPatternFill() : _fill.addNewPatternFill();\r
+    public short getFillBackgroundColor() {\r
+        XSSFColor color = getFillBackgroundColorColor();\r
+        if (color == null) return 0;\r
+        return color.getIndexed();\r
+    }\r
+    public short getFillForegroundColor() {\r
+        XSSFColor color = getFillForegroundColorColor();\r
+        if (color == null) return 0;\r
+        return color.getIndexed();\r
+    }\r
+\r
+    public void setFillBackgroundColor(Color bg) {\r
+        if (bg != null && !(bg instanceof XSSFColor)) {\r
+            throw new IllegalArgumentException("Only XSSFColor objects are supported");\r
+        }\r
+        XSSFColor xcolor = (XSSFColor)bg;\r
+        setFillBackgroundColor(xcolor.getCTColor());\r
+    }\r
+    public void setFillBackgroundColor(short bg) {\r
         CTColor bgColor = CTColor.Factory.newInstance();\r
         bgColor.setIndexed(bg);\r
-        ptrn.setBgColor(bgColor);\r
+        setFillBackgroundColor(bgColor);\r
     }\r
-\r
-    public void setFillForegroundColor(short fg){\r
+    public void setFillBackgroundColor(CTColor color) {\r
         CTPatternFill ptrn = _fill.isSetPatternFill() ? _fill.getPatternFill() : _fill.addNewPatternFill();\r
+        ptrn.setBgColor(color);\r
+    }\r
+    \r
+    public void setFillForegroundColor(Color fg) {\r
+        if (fg != null && !(fg instanceof XSSFColor)) {\r
+            throw new IllegalArgumentException("Only XSSFColor objects are supported");\r
+        }\r
+        XSSFColor xcolor = (XSSFColor)fg;\r
+        setFillForegroundColor(xcolor.getCTColor());\r
+    }\r
+    public void setFillForegroundColor(short fg) {\r
         CTColor fgColor = CTColor.Factory.newInstance();\r
         fgColor.setIndexed(fg);\r
-        ptrn.setFgColor(fgColor);\r
+        setFillForegroundColor(fgColor);\r
+    }\r
+    public void setFillForegroundColor(CTColor color) {\r
+        CTPatternFill ptrn = _fill.isSetPatternFill() ? _fill.getPatternFill() : _fill.addNewPatternFill();\r
+        ptrn.setFgColor(color);\r
     }\r
 \r
     public void setFillPattern(short fp){\r