[ooo-build-commit] .: 2 commits - patches/dev300
Katarina Machalkova
bubli at kemper.freedesktop.org
Thu Apr 15 08:04:09 PDT 2010
patches/dev300/apply | 34
patches/dev300/xlsx-shared-border-types-dotted-dashed.diff | 4334 +++++++
patches/dev300/xlsx-shared-calc-distributed-cell-text-sc.diff | 1903 +++
patches/dev300/xlsx-shared-calc-perf-xls-import-cellstyles.diff | 433
patches/dev300/xlsx-shared-oox-calc-export-export-pivot-content.diff | 50
patches/dev300/xlsx-shared-oox-calc-export-sotstorage-init.diff | 24
patches/dev300/xlsx-shared-oox-chart-export-part1.diff | 4734 +++++++
patches/dev300/xlsx-shared-oox-drawingml-fix-shapes-map-crash.diff | 215
patches/dev300/xlsx-shared-oox-smartart-import-m13.diff | 6096 ++++++++++
patches/dev300/xlsx-shared-xlsx-arabic-export-crash.diff | 19
patches/dev300/xlsx-shared-xlsx-export-cell-style-max-builtin.diff | 29
patches/dev300/xlsx-shared-xlsx-export-no-more-svstream-sotstorage.diff | 36
patches/dev300/xlsx-shared-xlsx-export-perf-rowbuffer.diff | 235
patches/dev300/xlsx-shared-xlsx-export-row-limit-fix.diff | 3513 +++++
patches/dev300/xlsx-shared-xlsx-export-set-xml-2007-flavour.diff | 25
patches/dev300/xlsx-shared-xlsx-export-simple-autofilter.diff | 68
patches/dev300/xlsx-shared-xlsx-export-skip-auto-format.diff | 29
patches/dev300/xlsx-shared-xlsx-shared-import-and-export.diff | 582
patches/dev300/xlsx-shared-xlsx-snapshot.diff | 2491 ++++
19 files changed, 24847 insertions(+), 3 deletions(-)
New commits:
commit 0c188c5b56da40bc64789d37a76ad31b1cf657ed
Author: Katarina Machalkova <kmachalkova at suse.cz>
Date: Thu Apr 15 16:55:39 2010 +0200
New section [OOXMLExportDevel] with shared filter stuff
* patches/dev300/apply:
* patches/dev300/xlsx-shared-border-types-dotted-dashed.diff:
* patches/dev300/xlsx-shared-calc-distributed-cell-text-sc.diff:
* patches/dev300/xlsx-shared-calc-perf-xls-import-cellstyles.diff:
* patches/dev300/xlsx-shared-oox-calc-export-export-pivot-content.diff:
* patches/dev300/xlsx-shared-oox-calc-export-sotstorage-init.diff:
* patches/dev300/xlsx-shared-oox-chart-export-part1.diff:
* patches/dev300/xlsx-shared-oox-drawingml-fix-shapes-map-crash.diff:
* patches/dev300/xlsx-shared-oox-smartart-import-m13.diff:
* patches/dev300/xlsx-shared-xlsx-arabic-export-crash.diff:
* patches/dev300/xlsx-shared-xlsx-export-cell-style-max-builtin.diff:
* patches/dev300/xlsx-shared-xlsx-export-no-more-svstream-sotstorage.diff:
* patches/dev300/xlsx-shared-xlsx-export-perf-rowbuffer.diff:
* patches/dev300/xlsx-shared-xlsx-export-row-limit-fix.diff:
* patches/dev300/xlsx-shared-xlsx-export-set-xml-2007-flavour.diff:
* patches/dev300/xlsx-shared-xlsx-export-simple-autofilter.diff:
* patches/dev300/xlsx-shared-xlsx-export-skip-auto-format.diff:
* patches/dev300/xlsx-shared-xlsx-shared-import-and-export.diff:
* patches/dev300/xlsx-shared-xlsx-snapshot.diff:
diff --git a/patches/dev300/apply b/patches/dev300/apply
index 36e639a..c467fa4 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -37,7 +37,7 @@ Experimental: VBAUntested, ArkOnlyExperimental, \
KDE4Experimental, MinGW, CalcExperimental, \
OOXMLExportExperimental, CrossWin32Patches, AutoLayout, \
WriterNavigation, SystemGraphiteWithSTLport, \
- HPPA, AXP, Speed, SystemMySQLWithSTLport
+ HPPA, AXP, Speed, SystemMySQLWithSTLport, OOXMLExportDevel
DebianLooseSections: DebianBaseNoHelpContent
# Optional sections
Optional : LiberationFontsOnWindows, NovellOnlyExtensionFixes, Win32OnlyExtensionFixes, Linux32OnlyExtensionFixes
@@ -3356,6 +3356,32 @@ xlsx-export-no-more-svstream-sotstorage.diff, n#566581, kohei
# Only process rows with non-empty cells, to improve performance.
xlsx-export-perf-rowbuffer.diff, n#558577, kohei
+[ OOXMLExportDevel ]
+# this is shared binary/ooxml filter, WIP
+# doesn't include
+# xlsx-export-row-limit-fix.diff, n#504623, kohei
+# xlsx-export-perf-rowbuffer.diff, n#558577, kohei
+# oox-chart-export-part1.diff, Fong
+
+xlsx-shared-border-types-dotted-dashed.diff
+xlsx-shared-calc-distributed-cell-text-sc.diff
+xlsx-shared-calc-perf-xls-import-cellstyles.diff
+xlsx-shared-oox-calc-export-export-pivot-content.diff
+xlsx-shared-oox-calc-export-sotstorage-init.diff
+xlsx-shared-oox-chart-export-part1.diff
+xlsx-shared-oox-drawingml-fix-shapes-map-crash.diff
+xlsx-shared-oox-smartart-import-m13.diff
+xlsx-shared-xlsx-arabic-export-crash.diff
+xlsx-shared-xlsx-export-cell-style-max-builtin.diff
+xlsx-shared-xlsx-export-no-more-svstream-sotstorage.diff
+xlsx-shared-xlsx-export-perf-rowbuffer.diff
+xlsx-shared-xlsx-export-row-limit-fix.diff
+xlsx-shared-xlsx-export-set-xml-2007-flavour.diff
+xlsx-shared-xlsx-export-simple-autofilter.diff
+xlsx-shared-xlsx-export-skip-auto-format.diff
+xlsx-shared-xlsx-shared-import-and-export.diff
+xlsx-shared-xlsx-snapshot.diff
+
[ OOXMLExport ]
# hack to ignore writerfilter when odf-converter is present
odf-converter-ignore-writerfilter.diff, n#348471, n#502173, jholesov
diff --git a/patches/dev300/xlsx-shared-border-types-dotted-dashed.diff b/patches/dev300/xlsx-shared-border-types-dotted-dashed.diff
new file mode 100644
index 0000000..b489f57
--- /dev/null
+++ b/patches/dev300/xlsx-shared-border-types-dotted-dashed.diff
@@ -0,0 +1,4334 @@
+diff --git drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx
+index ddab5bb..cf12676 100644
+--- drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx
++++ drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx
+@@ -59,6 +59,7 @@ namespace drawinglayer
+ double mfExtendOuterStart;
+ double mfExtendOuterEnd;
+ basegfx::BColor maRGBColor;
++ short mnStyle;
+
+ // bitfield
+ unsigned mbCreateInside : 1;
+@@ -122,7 +123,8 @@ namespace drawinglayer
+ double fExtendOuterEnd,
+ bool bCreateInside,
+ bool bCreateOutside,
+- const basegfx::BColor& rRGBColor);
++ const basegfx::BColor& rRGBColor,
++ const short nStyle );
+
+ // get data
+ const basegfx::B2DPoint& getStart() const { return maStart; }
+@@ -136,7 +138,8 @@ namespace drawinglayer
+ double getExtendOuterEnd() const { return mfExtendOuterEnd; }
+ bool getCreateInside() const { return mbCreateInside; }
+ bool getCreateOutside() const { return mbCreateOutside; }
+- const basegfx::BColor& getRGBColor() const { return maRGBColor; }
++ const basegfx::BColor& getRGBColor () const { return maRGBColor; }
++ short getStyle () const { return mnStyle; }
+
+ // compare operator
+ virtual bool operator==(const BasePrimitive2D& rPrimitive) const;
+diff --git drawinglayer/source/primitive2d/borderlineprimitive2d.cxx drawinglayer/source/primitive2d/borderlineprimitive2d.cxx
+index a2fda82..d605d68 100644
+--- drawinglayer/source/primitive2d/borderlineprimitive2d.cxx
++++ drawinglayer/source/primitive2d/borderlineprimitive2d.cxx
+@@ -41,6 +41,7 @@
+ #include <basegfx/polygon/b2dpolygon.hxx>
+ #include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
+ #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
++#include <svtools/borderhelper.hxx>
+ #include <numeric>
+
+ //////////////////////////////////////////////////////////////////////////////
+@@ -165,14 +166,29 @@ namespace drawinglayer
+ // create filled polygon primitive
+ const basegfx::B2DVector aLineWidthOffset((getCorrectedLeftWidth() * 0.5) * aPerpendicular);
+
+- aPolygon.append(aTmpStart + aLineWidthOffset);
+- aPolygon.append(aTmpEnd + aLineWidthOffset);
+- aPolygon.append(aTmpEnd - aLineWidthOffset);
+- aPolygon.append(aTmpStart - aLineWidthOffset);
+- aPolygon.setClosed(true);
++ aPolygon.append( aTmpStart );
++ aPolygon.append( aTmpEnd );
+
++ basegfx::B2DPolyPolygon aDashed = svtools::ApplyLineDashing(
++ aPolygon, getStyle(), MAP_100TH_MM );
++ for (sal_uInt32 i = 0; i < aDashed.count(); i++ )
++ {
++ basegfx::B2DPolygon aDash = aDashed.getB2DPolygon( i );
++ basegfx::B2DPoint aDashStart = aDash.getB2DPoint( 0 );
++ basegfx::B2DPoint aDashEnd = aDash.getB2DPoint( aDash.count() - 1 );
++
++ basegfx::B2DPolygon aDashPolygon;
++ aDashPolygon.append( aDashStart + aLineWidthOffset );
++ aDashPolygon.append( aDashEnd + aLineWidthOffset );
++ aDashPolygon.append( aDashEnd - aLineWidthOffset );
++ aDashPolygon.append( aDashStart - aLineWidthOffset );
++ aDashPolygon.setClosed( true );
++
++ aDashed.setB2DPolygon( i, aDashPolygon );
++ }
++
+ xRetval[0] = Primitive2DReference(new PolyPolygonColorPrimitive2D(
+- basegfx::B2DPolyPolygon(aPolygon), getRGBColor()));
++ basegfx::B2DPolyPolygon( aDashed ), getRGBColor()));
+ }
+ }
+ }
+@@ -193,7 +209,8 @@ namespace drawinglayer
+ double fExtendOuterEnd,
+ bool bCreateInside,
+ bool bCreateOutside,
+- const basegfx::BColor& rRGBColor)
++ const basegfx::BColor& rRGBColor,
++ short nStyle)
+ : BasePrimitive2D(),
+ maStart(rStart),
+ maEnd(rEnd),
+@@ -205,6 +222,7 @@ namespace drawinglayer
+ mfExtendOuterStart(fExtendOuterStart),
+ mfExtendOuterEnd(fExtendOuterEnd),
+ maRGBColor(rRGBColor),
++ mnStyle(nStyle),
+ mbCreateInside(bCreateInside),
+ mbCreateOutside(bCreateOutside)
+ {
+@@ -227,7 +245,8 @@ namespace drawinglayer
+ && getExtendOuterEnd() == rCompare.getExtendOuterEnd()
+ && getCreateInside() == rCompare.getCreateInside()
+ && getCreateOutside() == rCompare.getCreateOutside()
+- && getRGBColor() == rCompare.getRGBColor());
++ && getRGBColor() == rCompare.getRGBColor()
++ && getStyle() == rCompare.getStyle());
+ }
+
+ return false;
+diff --git filter/source/xslt/export/uof/odf2uof_spreadsheet.xsl filter/source/xslt/export/uof/odf2uof_spreadsheet.xsl
+index 1507305..606542c 100644
+--- filter/source/xslt/export/uof/odf2uof_spreadsheet.xsl
++++ filter/source/xslt/export/uof/odf2uof_spreadsheet.xsl
+@@ -4262,7 +4262,7 @@
+ <xsl:element name="uof:å·¦">
+ <xsl:attribute name="uof:locID">u0057</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),$uofUnit)"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+@@ -4274,7 +4274,7 @@
+ <xsl:element name="uof:ä¸">
+ <xsl:attribute name="uof:locID">u0058</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),$uofUnit)"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+@@ -4286,7 +4286,7 @@
+ <xsl:element name="uof:å³">
+ <xsl:attribute name="uof:locID">u0059</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),$uofUnit)"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+@@ -4298,7 +4298,7 @@
+ <xsl:element name="uof:ä¸">
+ <xsl:attribute name="uof:locID">u0060</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),$uofUnit)"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+diff --git filter/source/xslt/export/uof/odf2uof_text.xsl filter/source/xslt/export/uof/odf2uof_text.xsl
+index cea93c8..08586d0 100644
+--- filter/source/xslt/export/uof/odf2uof_text.xsl
++++ filter/source/xslt/export/uof/odf2uof_text.xsl
+@@ -3248,7 +3248,7 @@
+ <xsl:element name="uof:å·¦">
+ <xsl:attribute name="uof:locID">u0057</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),substring($ooUnit,1,2))"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+@@ -3266,7 +3266,7 @@
+ <xsl:element name="uof:ä¸">
+ <xsl:attribute name="uof:locID">u0058</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),substring($ooUnit,1,2))"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+@@ -3284,7 +3284,7 @@
+ <xsl:element name="uof:å³">
+ <xsl:attribute name="uof:locID">u0059</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),substring($ooUnit,1,2))"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+@@ -3302,7 +3302,7 @@
+ <xsl:element name="uof:ä¸">
+ <xsl:attribute name="uof:locID">u0060</xsl:attribute>
+ <xsl:attribute name="uof:attrList">ç±»å 宽度 è¾¹è· é¢è² é´å½±</xsl:attribute>
+- <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
++ <xsl:attribute name="uof:ç±»å"><xsl:choose><xsl:when test="$border!='none'"><xsl:choose><xsl:when test="substring-before(substring-after($border,' '),' ')='solid'">single</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='double'">double</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dashed'">dash</xsl:when><xsl:when test="substring-before(substring-after($border,' '),' ')='dotted'">dotted</xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise>none</xsl:otherwise></xsl:choose></xsl:attribute>
+ <xsl:if test="$border!='none'">
+ <xsl:attribute name="uof:宽度"><xsl:value-of select="substring-before(substring-before($border,' '),substring($ooUnit,1,2))"/></xsl:attribute>
+ <xsl:attribute name="uof:é¢è²"><xsl:value-of select="substring-after(substring-after($border,' '),' ')"/></xsl:attribute>
+diff --git offapi/com/sun/star/table/BorderLine.idl offapi/com/sun/star/table/BorderLine.idl
+index 94c93c5..3484aa8 100644
+--- offapi/com/sun/star/table/BorderLine.idl
++++ offapi/com/sun/star/table/BorderLine.idl
+@@ -74,7 +74,6 @@ published struct BorderLine
+ double line (in 1/100 mm).
+ */
+ short LineDistance;
+-
+ };
+
+ //=============================================================================
+diff --git offapi/com/sun/star/table/BorderLine2.idl offapi/com/sun/star/table/BorderLine2.idl
+new file mode 100644
+index 0000000..d0fe233
+--- /dev/null
++++ offapi/com/sun/star/table/BorderLine2.idl
+@@ -0,0 +1,56 @@
++/*************************************************************************
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * Copyright 2008 by Sun Microsystems, Inc.
++ *
++ * OpenOffice.org - a multi-platform office productivity suite
++ *
++ * $RCSfile: BorderLine.idl,v $
++ * $Revision: 1.8 $
++ *
++ * This file is part of OpenOffice.org.
++ *
++ * OpenOffice.org is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 3
++ * only, as published by the Free Software Foundation.
++ *
++ * OpenOffice.org is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU Lesser General Public License version 3 for more details
++ * (a copy is included in the LICENSE file that accompanied this code).
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * version 3 along with OpenOffice.org. If not, see
++ * <http://www.openoffice.org/license.html>
++ * for a copy of the LGPLv3 License.
++ *
++ ************************************************************************/
++
++#ifndef __com_sun_star_table_BorderLine2_idl__
++#define __com_sun_star_table_BorderLine2_idl__
++
++
++#include <com/sun/star/table/BorderLine.idl>
++#include <com/sun/star/table/BorderLineStyle.idl>
++
++//=============================================================================
++
++module com { module sun { module star { module table {
++
++//=============================================================================
++
++struct BorderLine2 : BorderLine
++{
++ /** Style of the border. @see BorderLineStyle
++ */
++ short LineStyle;
++};
++
++//=============================================================================
++
++}; }; }; };
++
++#endif
++
+diff --git offapi/com/sun/star/table/BorderLineStyle.idl offapi/com/sun/star/table/BorderLineStyle.idl
+new file mode 100644
+index 0000000..17f15ad
+--- /dev/null
++++ offapi/com/sun/star/table/BorderLineStyle.idl
+@@ -0,0 +1,63 @@
++/*************************************************************************
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * Copyright 2008 by Sun Microsystems, Inc.
++ *
++ * OpenOffice.org - a multi-platform office productivity suite
++ *
++ * $RCSfile: TableSortFieldType.idl,v $
++ * $Revision: 1.7 $
++ *
++ * This file is part of OpenOffice.org.
++ *
++ * OpenOffice.org is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 3
++ * only, as published by the Free Software Foundation.
++ *
++ * OpenOffice.org is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU Lesser General Public License version 3 for more details
++ * (a copy is included in the LICENSE file that accompanied this code).
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * version 3 along with OpenOffice.org. If not, see
++ * <http://www.openoffice.org/license.html>
++ * for a copy of the LGPLv3 License.
++ *
++ ************************************************************************/
++#ifndef __com_sun_star_table_BorderLineStyle_idl__
++#define __com_sun_star_table_BorderLineStyle_idl__
++
++
++//=============================================================================
++
++module com { module sun { module star { module table {
++
++//=============================================================================
++
++constants BorderLineStyle
++{
++ //-------------------------------------------------------------------------
++ /** Solid border line.
++ */
++ const short SOLID = 0;
++
++ //-------------------------------------------------------------------------
++ /** Dotted border line.
++ */
++ const short DOTTED = 1;
++
++ //-------------------------------------------------------------------------
++ /** Dashed border line.
++ */
++ const short DASHED = 2;
++
++};
++
++//=============================================================================
++
++}; }; }; };
++
++#endif
+diff --git offapi/com/sun/star/table/makefile.mk offapi/com/sun/star/table/makefile.mk
+index dbcb959..0f72fd6 100644
+--- offapi/com/sun/star/table/makefile.mk
++++ offapi/com/sun/star/table/makefile.mk
+@@ -45,6 +45,8 @@ IDLFILES=\
+ AccessibleCellView.idl \
+ AccessibleTableView.idl \
+ BorderLine.idl\
++ BorderLine2.idl\
++ BorderLineStyle.idl\
+ Cell.idl\
+ CellAddress.idl\
+ CellContentType.idl\
+diff --git oox/inc/oox/helper/helper.hxx oox/inc/oox/helper/helper.hxx
+index 2a8bd6f..6db2fe7 100644
+--- oox/inc/oox/helper/helper.hxx
++++ oox/inc/oox/helper/helper.hxx
+@@ -78,6 +78,10 @@ const sal_Int32 API_RGB_TRANSPARENT = -1; /// Transparent color fo
+ const sal_Int32 API_RGB_BLACK = 0x000000; /// Black color for API calls.
+ const sal_Int32 API_RGB_WHITE = 0xFFFFFF; /// White color for API calls.
+
++const sal_Int16 API_LINE_SOLID = 0;
++const sal_Int16 API_LINE_DOTTED = 1;
++const sal_Int16 API_LINE_DASHED = 2;
++
+ const sal_Int16 API_LINE_NONE = 0;
+ const sal_Int16 API_LINE_HAIR = 2;
+ const sal_Int16 API_LINE_THIN = 35;
+diff --git oox/inc/oox/xls/stylesbuffer.hxx oox/inc/oox/xls/stylesbuffer.hxx
+index ead9f05..9be9938 100644
+--- oox/inc/oox/xls/stylesbuffer.hxx
++++ oox/inc/oox/xls/stylesbuffer.hxx
+@@ -36,7 +36,7 @@
+ #include <com/sun/star/table/CellHoriJustify.hpp>
+ #include <com/sun/star/table/CellOrientation.hpp>
+ #include <com/sun/star/table/CellVertJustify.hpp>
+-#include <com/sun/star/table/TableBorder.hpp>
++#include <com/sun/star/table/BorderLine2.hpp>
+ #include "oox/helper/containerhelper.hxx"
+ #include "oox/drawingml/color.hxx"
+ #include "oox/xls/numberformatsbuffer.hxx"
+@@ -503,10 +503,12 @@ struct BorderModel
+ /** Contains API attributes of a complete cell border. */
+ struct ApiBorderData
+ {
+- typedef ::com::sun::star::table::TableBorder ApiTableBorder;
+- typedef ::com::sun::star::table::BorderLine ApiBorderLine;
++ typedef ::com::sun::star::table::BorderLine2 ApiBorderLine;
+
+- ApiTableBorder maBorder; /// Left/right/top/bottom line format.
++ ApiBorderLine maLeft; /// Left line format
++ ApiBorderLine maRight; /// Right line format
++ ApiBorderLine maTop; /// Top line format
++ ApiBorderLine maBottom; /// Bottom line format
+ ApiBorderLine maTLtoBR; /// Diagonal top-left to bottom-right line format.
+ ApiBorderLine maBLtoTR; /// Diagonal bottom-left to top-right line format.
+ bool mbBorderUsed; /// True = left/right/top/bottom line format used.
+@@ -559,7 +561,7 @@ private:
+
+ /** Converts border line data to an API struct, returns true, if the line is marked as used. */
+ bool convertBorderLine(
+- ::com::sun::star::table::BorderLine& rBorderLine,
++ ::com::sun::star::table::BorderLine2& rBorderLine,
+ const BorderLineModel& rModel );
+
+ private:
+diff --git oox/source/drawingml/table/tablecell.cxx oox/source/drawingml/table/tablecell.cxx
+index 2f8dc14..aa9c7ec 100644
+--- oox/source/drawingml/table/tablecell.cxx
++++ oox/source/drawingml/table/tablecell.cxx
+@@ -40,7 +40,7 @@
+ #include <com/sun/star/beans/XMultiPropertySet.hpp>
+ #include <com/sun/star/table/XTable.hpp>
+ #include <com/sun/star/table/XMergeableCellRange.hpp>
+-#include <com/sun/star/table/BorderLine.hpp>
++#include <com/sun/star/table/BorderLine2.hpp>
+ #include <com/sun/star/drawing/LineStyle.hpp>
+ #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
+ #include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
+@@ -51,7 +51,7 @@ using namespace ::oox::core;
+ using namespace ::com::sun::star;
+ using namespace ::com::sun::star::uno;
+ using namespace ::com::sun::star::beans;
+-using ::com::sun::star::table::BorderLine;
++using ::com::sun::star::table::BorderLine2;
+ using ::com::sun::star::drawing::LineStyle;
+
+ namespace oox { namespace drawingml { namespace table {
+@@ -79,7 +79,7 @@ void applyLineAttributes( const ::oox::core::XmlFilterBase& rFilterBase,
+ Reference< XPropertySet >& rxPropSet, oox::drawingml::LineProperties& rLineProperties,
+ sal_Int32 nPropId )
+ {
+- BorderLine aBorderLine( 0, 0, 0, 0 );
++ BorderLine2 aBorderLine( 0, 0, 0, 0, API_LINE_SOLID );
+ if( rLineProperties.maLineFill.moFillType.differsFrom( XML_noFill ) )
+ {
+ Color aColor = rLineProperties.maLineFill.getBestSolidColor();
+diff --git oox/source/drawingml/table/tableproperties.cxx oox/source/drawingml/table/tableproperties.cxx
+index 9e1d288..4ed7ba3 100644
+--- oox/source/drawingml/table/tableproperties.cxx
++++ oox/source/drawingml/table/tableproperties.cxx
+@@ -35,7 +35,7 @@
+ #include <com/sun/star/beans/XMultiPropertySet.hpp>
+ #include <com/sun/star/lang/XMultiServiceFactory.hpp>
+ #include <com/sun/star/table/XMergeableCellRange.hpp>
+-#include <com/sun/star/table/BorderLine.hpp>
++#include <com/sun/star/table/BorderLine2.hpp>
+ #include "oox/core/namespaces.hxx"
+ #include "oox/core/xmlfilterbase.hxx"
+ #include "oox/helper/propertyset.hxx"
+diff --git oox/source/drawingml/table/tablerow.cxx oox/source/drawingml/table/tablerow.cxx
+index f41513d..977ddc0 100644
+--- oox/source/drawingml/table/tablerow.cxx
++++ oox/source/drawingml/table/tablerow.cxx
+@@ -37,7 +37,7 @@
+ #include "oox/helper/propertyset.hxx"
+ #include <com/sun/star/table/XTable.hpp>
+ #include <com/sun/star/table/XMergeableCellRange.hpp>
+-#include <com/sun/star/table/BorderLine.hpp>
++#include <com/sun/star/table/BorderLine2.hpp>
+
+ using rtl::OUString;
+ using namespace ::oox::core;
+diff --git oox/source/xls/stylesbuffer.cxx oox/source/xls/stylesbuffer.cxx
+index ac309b5..fd16a00 100644
+--- oox/source/xls/stylesbuffer.cxx
++++ oox/source/xls/stylesbuffer.cxx
+@@ -75,6 +75,7 @@ using ::com::sun::star::awt::FontDescriptor;
+ using ::com::sun::star::awt::XDevice;
+ using ::com::sun::star::awt::XFont2;
+ using ::com::sun::star::table::BorderLine;
++using ::com::sun::star::table::BorderLine2;
+ using ::com::sun::star::text::XText;
+ using ::com::sun::star::style::XStyle;
+ using ::oox::core::FilterBase;
+@@ -1552,7 +1553,7 @@ inline sal_Int32 lclGetBorderLineWidth( const BorderLine& rBorderLine )
+ return rBorderLine.OuterLineWidth + rBorderLine.LineDistance + rBorderLine.InnerLineWidth;
+ }
+
+-const BorderLine* lclGetThickerLine( const BorderLine& rBorderLine1, sal_Bool bValid1, const BorderLine& rBorderLine2, sal_Bool bValid2 )
++const BorderLine2* lclGetThickerLine( const BorderLine2& rBorderLine1, sal_Bool bValid1, const BorderLine2& rBorderLine2, sal_Bool bValid2 )
+ {
+ if( bValid1 && bValid2 )
+ return (lclGetBorderLineWidth( rBorderLine1 ) < lclGetBorderLineWidth( rBorderLine2 )) ? &rBorderLine2 : &rBorderLine1;
+@@ -1690,21 +1691,10 @@ void Border::finalizeImport()
+ maApiData.mbBorderUsed = maModel.maLeft.mbUsed || maModel.maRight.mbUsed || maModel.maTop.mbUsed || maModel.maBottom.mbUsed;
+ maApiData.mbDiagUsed = maModel.maDiagonal.mbUsed;
+
+- maApiData.maBorder.IsLeftLineValid = convertBorderLine( maApiData.maBorder.LeftLine, maModel.maLeft );
+- maApiData.maBorder.IsRightLineValid = convertBorderLine( maApiData.maBorder.RightLine, maModel.maRight );
+- maApiData.maBorder.IsTopLineValid = convertBorderLine( maApiData.maBorder.TopLine, maModel.maTop );
+- maApiData.maBorder.IsBottomLineValid = convertBorderLine( maApiData.maBorder.BottomLine, maModel.maBottom );
+-
+- if( !mbDxf )
+- {
+- maApiData.maBorder.IsVerticalLineValid = maApiData.maBorder.IsLeftLineValid || maApiData.maBorder.IsRightLineValid;
+- if( const BorderLine* pVertLine = lclGetThickerLine( maApiData.maBorder.LeftLine, maApiData.maBorder.IsLeftLineValid, maApiData.maBorder.RightLine, maApiData.maBorder.IsRightLineValid ) )
+- maApiData.maBorder.VerticalLine = *pVertLine;
+-
+- maApiData.maBorder.IsHorizontalLineValid = maApiData.maBorder.IsTopLineValid || maApiData.maBorder.IsBottomLineValid;
+- if( const BorderLine* pHorLine = lclGetThickerLine( maApiData.maBorder.TopLine, maApiData.maBorder.IsTopLineValid, maApiData.maBorder.BottomLine, maApiData.maBorder.IsBottomLineValid ) )
+- maApiData.maBorder.HorizontalLine = *pHorLine;
+- }
++ convertBorderLine( maApiData.maLeft, maModel.maLeft );
++ convertBorderLine( maApiData.maRight, maModel.maRight );
++ convertBorderLine( maApiData.maTop, maModel.maTop );
++ convertBorderLine( maApiData.maBottom, maModel.maBottom );
+
+ if( maModel.mbDiagTLtoBR )
+ convertBorderLine( maApiData.maTLtoBR, maModel.maDiagonal );
+@@ -1715,7 +1705,12 @@ void Border::finalizeImport()
+ void Border::writeToPropertyMap( PropertyMap& rPropMap ) const
+ {
+ if( maApiData.mbBorderUsed )
+- rPropMap[ PROP_TableBorder ] <<= maApiData.maBorder;
++ {
++ rPropMap[ PROP_LeftBorder ] <<= maApiData.maLeft;
++ rPropMap[ PROP_RightBorder ] <<= maApiData.maRight;
++ rPropMap[ PROP_TopBorder ] <<= maApiData.maTop;
++ rPropMap[ PROP_BottomBorder ] <<= maApiData.maBottom;
++ }
+ if( maApiData.mbDiagUsed )
+ {
+ rPropMap[ PROP_DiagonalTLBR ] <<= maApiData.maTLtoBR;
+@@ -1734,18 +1729,16 @@ bool lcl_isBorder(const ::com::sun::star::table::BorderLine& rBorder)
+
+ bool Border::hasBorder() const
+ {
+- const ApiBorderData::ApiTableBorder& rTabBorder = maApiData.maBorder;
+-
+- if (rTabBorder.IsBottomLineValid && lcl_isBorder(rTabBorder.BottomLine))
++ if (lcl_isBorder(maApiData.maBottom))
+ return true;
+
+- if (rTabBorder.IsTopLineValid && lcl_isBorder(rTabBorder.TopLine))
++ if (lcl_isBorder(maApiData.maTop))
+ return true;
+
+- if (rTabBorder.IsLeftLineValid && lcl_isBorder(rTabBorder.LeftLine))
++ if (lcl_isBorder(maApiData.maLeft))
+ return true;
+
+- if (rTabBorder.IsRightLineValid && lcl_isBorder(rTabBorder.RightLine))
++ if (lcl_isBorder(maApiData.maRight))
+ return true;
+
+ return false;
+@@ -1764,15 +1757,25 @@ BorderLineModel* Border::getBorderLine( sal_Int32 nElement )
+ return 0;
+ }
+
+-bool Border::convertBorderLine( BorderLine& rBorderLine, const BorderLineModel& rModel )
++bool Border::convertBorderLine( BorderLine2& rBorderLine, const BorderLineModel& rModel )
+ {
+ rBorderLine.Color = rModel.maColor.getColor( getBaseFilter(), API_RGB_BLACK );
+ switch( rModel.mnStyle )
+ {
+ case XML_dashDot: lclSetBorderLineWidth( rBorderLine, API_LINE_THIN ); break;
+ case XML_dashDotDot: lclSetBorderLineWidth( rBorderLine, API_LINE_THIN ); break;
+- case XML_dashed: lclSetBorderLineWidth( rBorderLine, API_LINE_THIN ); break;
+- case XML_dotted: lclSetBorderLineWidth( rBorderLine, API_LINE_THIN ); break;
++ case XML_dashed:
++ {
++ lclSetBorderLineWidth( rBorderLine, API_LINE_THIN );
++ rBorderLine.LineStyle = API_LINE_DASHED;
++ break;
++ }
++ case XML_dotted:
++ {
++ lclSetBorderLineWidth( rBorderLine, API_LINE_THIN );
++ rBorderLine.LineStyle = API_LINE_DOTTED;
++ break;
++ }
+ case XML_double: lclSetBorderLineWidth( rBorderLine, API_LINE_THIN, API_LINE_THIN, API_LINE_THIN ); break;
+ case XML_hair: lclSetBorderLineWidth( rBorderLine, API_LINE_HAIR ); break;
+ case XML_medium: lclSetBorderLineWidth( rBorderLine, API_LINE_MEDIUM ); break;
+diff --git sc/source/filter/excel/xestyle.cxx sc/source/filter/excel/xestyle.cxx
+index 2a35a31..e9a87d1 100644
+--- sc/source/filter/excel/xestyle.cxx
++++ sc/source/filter/excel/xestyle.cxx
+@@ -1572,9 +1572,26 @@ void lclGetBorderLine(
+ else if( nOuterWidth > DEF_LINE_WIDTH_2 )
+ rnXclLine = EXC_LINE_THICK;
+ else if( nOuterWidth > DEF_LINE_WIDTH_1 )
++ {
+ rnXclLine = EXC_LINE_MEDIUM;
+- else if( nOuterWidth > DEF_LINE_WIDTH_0 )
++ if ( pLine->GetStyle( ) == DASHED )
++ rnXclLine = EXC_LINE_MEDIUMDASHED;
++ }
++ else if( nOuterWidth > DEF_LINE_WIDTH_0 )
++ {
+ rnXclLine = EXC_LINE_THIN;
++ switch ( pLine->GetStyle( ) )
++ {
++ case DASHED:
++ rnXclLine = EXC_LINE_DASHED;
++ break;
++ case DOTTED:
++ rnXclLine = EXC_LINE_DOTTED;
++ break;
++ default:
++ break;
++ }
++ }
+ else if( nOuterWidth > 0 )
+ rnXclLine = EXC_LINE_HAIR;
+ else
+@@ -1740,6 +1757,9 @@ static const char* ToLineStyle( sal_uInt8 nLineStyle )
+ case EXC_LINE_THICK: return "thick";
+ case EXC_LINE_DOUBLE: return "double";
+ case EXC_LINE_HAIR: return "hair";
++ case EXC_LINE_DOTTED: return "dotted";
++ case EXC_LINE_DASHED: return "dashed";
++ case EXC_LINE_MEDIUMDASHED: return "mediumdashed";
+ }
+ return "*unknown*";
+ }
+diff --git sc/source/filter/excel/xistyle.cxx sc/source/filter/excel/xistyle.cxx
+index 6e29ba0..f66c363 100644
+--- sc/source/filter/excel/xistyle.cxx
++++ sc/source/filter/excel/xistyle.cxx
+@@ -878,23 +878,23 @@ namespace {
+ /** Converts the passed line style to a SvxBorderLine, or returns false, if style is "no line". */
+ bool lclConvertBorderLine( SvxBorderLine& rLine, const XclImpPalette& rPalette, sal_uInt8 nXclLine, sal_uInt16 nXclColor )
+ {
+- static const sal_uInt16 ppnLineParam[][ 3 ] =
++ static const sal_uInt16 ppnLineParam[][ 4 ] =
+ {
+- // outer width, inner width, distance
+- { 0, 0, 0 }, // 0 = none
+- { DEF_LINE_WIDTH_1, 0, 0 }, // 1 = thin
+- { DEF_LINE_WIDTH_2, 0, 0 }, // 2 = medium
+- { DEF_LINE_WIDTH_1, 0, 0 }, // 3 = dashed
+- { DEF_LINE_WIDTH_0, 0, 0 }, // 4 = dotted
+- { DEF_LINE_WIDTH_3, 0, 0 }, // 5 = thick
+- { DEF_LINE_WIDTH_1, DEF_LINE_WIDTH_1, DEF_LINE_WIDTH_1 }, // 6 = double
+- { DEF_LINE_WIDTH_0, 0, 0 }, // 7 = hair
+- { DEF_LINE_WIDTH_2, 0, 0 }, // 8 = med dash
+- { DEF_LINE_WIDTH_1, 0, 0 }, // 9 = thin dashdot
+- { DEF_LINE_WIDTH_2, 0, 0 }, // A = med dashdot
+- { DEF_LINE_WIDTH_1, 0, 0 }, // B = thin dashdotdot
+- { DEF_LINE_WIDTH_2, 0, 0 }, // C = med dashdotdot
+- { DEF_LINE_WIDTH_2, 0, 0 } // D = med slant dashdot
++ // outer width, inner width, distance type
++ { 0, 0, 0, SOLID }, // 0 = none
++ { DEF_LINE_WIDTH_1, 0, 0, SOLID }, // 1 = thin
++ { DEF_LINE_WIDTH_2, 0, 0, SOLID }, // 2 = medium
++ { DEF_LINE_WIDTH_1, 0, 0, DASHED }, // 3 = dashed
++ { DEF_LINE_WIDTH_1, 0, 0, DOTTED }, // 4 = dotted
++ { DEF_LINE_WIDTH_3, 0, 0, SOLID }, // 5 = thick
++ { DEF_LINE_WIDTH_1, DEF_LINE_WIDTH_1, DEF_LINE_WIDTH_1 }, // 6 = double
++ { DEF_LINE_WIDTH_0, 0, 0, SOLID }, // 7 = hair
++ { DEF_LINE_WIDTH_2, 0, 0, DASHED }, // 8 = med dash
++ { DEF_LINE_WIDTH_1, 0, 0, SOLID }, // 9 = thin dashdot
++ { DEF_LINE_WIDTH_2, 0, 0, SOLID }, // A = med dashdot
++ { DEF_LINE_WIDTH_1, 0, 0, SOLID }, // B = thin dashdotdot
++ { DEF_LINE_WIDTH_2, 0, 0, SOLID }, // C = med dashdotdot
++ { DEF_LINE_WIDTH_2, 0, 0, SOLID } // D = med slant dashdot
+ };
+
+ if( nXclLine == EXC_LINE_NONE )
+@@ -906,6 +906,7 @@ bool lclConvertBorderLine( SvxBorderLine& rLine, const XclImpPalette& rPalette,
+ rLine.SetOutWidth( ppnLineParam[ nXclLine ][ 0 ] );
+ rLine.SetInWidth( ppnLineParam[ nXclLine ][ 1 ] );
+ rLine.SetDistance( ppnLineParam[ nXclLine ][ 2 ] );
++ rLine.SetStyle( (SvxBorderStyle)ppnLineParam[ nXclLine ][ 3 ] );
+ return true;
+ }
+
+diff --git sc/source/filter/html/htmlexp.cxx sc/source/filter/html/htmlexp.cxx
+index 9698b9d..70f39ba 100644
+--- sc/source/filter/html/htmlexp.cxx
++++ sc/source/filter/html/htmlexp.cxx
+@@ -558,7 +558,14 @@ void ScHTMLExport::BorderToStyle( ByteString& rOut, const char* pBorderName,
+ // thickness
+ int nWidth = pLine->GetOutWidth();
+ int nPxWidth = ( nWidth > 0 )? std::max( int( nWidth / TWIPS_PER_PIXEL ), 1 ): 0;
+- (rOut += ByteString::CreateFromInt32( nPxWidth )) += "px solid #";
++ (rOut += ByteString::CreateFromInt32( nPxWidth )) += "px ";
++ switch ( pLine->GetStyle() )
++ {
++ case DOTTED: rOut += "dotted"; break;
++ case DASHED: rOut += "dashed"; break;
++ default: rOut += "solid";
++ }
++ rOut += " #";
+
+ // color
+ char hex[7];
+diff --git sc/source/filter/inc/xlstyle.hxx sc/source/filter/inc/xlstyle.hxx
+index e18f48b..373d701 100644
+--- sc/source/filter/inc/xlstyle.hxx
++++ sc/source/filter/inc/xlstyle.hxx
+@@ -51,9 +51,12 @@ class XclRoot;
+ const sal_uInt8 EXC_LINE_NONE = 0x00;
+ const sal_uInt8 EXC_LINE_THIN = 0x01;
+ const sal_uInt8 EXC_LINE_MEDIUM = 0x02;
++const sal_uInt8 EXC_LINE_DASHED = 0x03;
++const sal_uInt8 EXC_LINE_DOTTED = 0x04;
+ const sal_uInt8 EXC_LINE_THICK = 0x05;
+ const sal_uInt8 EXC_LINE_DOUBLE = 0x06;
+ const sal_uInt8 EXC_LINE_HAIR = 0x07;
++const sal_uInt8 EXC_LINE_MEDIUMDASHED = 0x08;
+
+ // Background patterns --------------------------------------------------------
+
+#diff --git sc/source/filter/xlsx/xlsx-xestyle.cxx sc/source/filter/xlsx/xlsx-xestyle.cxx
+#index d882080..f60c37f 100644
+#--- sc/source/filter/xlsx/xlsx-xestyle.cxx
+#+++ sc/source/filter/xlsx/xlsx-xestyle.cxx
+#@@ -1557,9 +1557,26 @@ void lclGetBorderLine(
+# else if( nOuterWidth > DEF_LINE_WIDTH_2 )
+# rnXclLine = EXC_LINE_THICK;
+# else if( nOuterWidth > DEF_LINE_WIDTH_1 )
+#+ {
+# rnXclLine = EXC_LINE_MEDIUM;
+#+ if ( pLine->GetStyle( ) == EXC_LINE_DASHED )
+#+ rnXclLine = EXC_LINE_MEDIUMDASHED;
+#+ }
+# else if( nOuterWidth > DEF_LINE_WIDTH_0 )
+#+ {
+# rnXclLine = EXC_LINE_THIN;
+#+ switch ( pLine->GetStyle( ) )
+#+ {
+#+ case DOTTED:
+#+ rnXclLine = EXC_LINE_DOTTED;
+#+ break;
+#+ case DASHED:
+#+ rnXclLine = EXC_LINE_DASHED;
+#+ break;
+#+ default:
+#+ break;
+#+ }
+#+ }
+# else if( nOuterWidth > 0 )
+# rnXclLine = EXC_LINE_HAIR;
+# else
+#@@ -1725,6 +1742,9 @@ static const char* ToLineStyle( sal_uInt8 nLineStyle )
+# case EXC_LINE_THICK: return "thick";
+# case EXC_LINE_DOUBLE: return "double";
+# case EXC_LINE_HAIR: return "hair";
+#+ case EXC_LINE_DOTTED: return "dotted";
+#+ case EXC_LINE_DASHED: return "dashed";
+#+ case EXC_LINE_MEDIUMDASHED: return "mediumdashed";
+# }
+# return "*unknown*";
+# }
+diff --git sc/source/ui/unoobj/cellsuno.cxx sc/source/ui/unoobj/cellsuno.cxx
+index 11ecd43..1b1c8a0 100644
+--- sc/source/ui/unoobj/cellsuno.cxx
++++ sc/source/ui/unoobj/cellsuno.cxx
+@@ -62,6 +62,7 @@
+ #include <com/sun/star/table/CellVertJustify2.hpp>
+ #include <com/sun/star/table/ShadowFormat.hpp>
+ #include <com/sun/star/table/TableBorder.hpp>
++#include <com/sun/star/table/BorderLine2.hpp>
+ #include <com/sun/star/sheet/CellFlags.hpp>
+ #include <com/sun/star/sheet/FormulaResult.hpp>
+ #include <com/sun/star/beans/PropertyAttribute.hpp>
+@@ -162,7 +163,7 @@ const SfxItemPropertySet* lcl_GetCellsPropertySet()
+ {
+ {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 },
+@@ -213,13 +214,13 @@ const SfxItemPropertySet* lcl_GetCellsPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, &::getCppuType((const sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
+ {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 },
+@@ -234,13 +235,13 @@ const SfxItemPropertySet* lcl_GetCellsPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, TOP_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+@@ -263,7 +264,7 @@ const SfxItemPropertySet* lcl_GetRangePropertySet()
+ {
+ {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 },
+@@ -314,13 +315,13 @@ const SfxItemPropertySet* lcl_GetRangePropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, &::getCppuType((const sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
+ {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 },
+@@ -336,14 +337,14 @@ const SfxItemPropertySet* lcl_GetRangePropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, TOP_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+@@ -366,7 +367,7 @@ const SfxItemPropertySet* lcl_GetCellPropertySet()
+ {
+ {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 },
+@@ -417,15 +418,15 @@ const SfxItemPropertySet* lcl_GetCellPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_FORMLOC), SC_WID_UNO_FORMLOC, &getCppuType((rtl::OUString*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_FORMRT), SC_WID_UNO_FORMRT, &getCppuType((table::CellContentType*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, &::getCppuType((const sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
+ {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 },
+@@ -441,14 +442,14 @@ const SfxItemPropertySet* lcl_GetCellPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, TOP_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+@@ -471,7 +472,7 @@ const SfxItemPropertySet* lcl_GetColumnPropertySet()
+ {
+ {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 },
+@@ -522,8 +523,8 @@ const SfxItemPropertySet* lcl_GetColumnPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, &::getCppuType((const sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
+@@ -532,7 +533,7 @@ const SfxItemPropertySet* lcl_GetColumnPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), SC_WID_UNO_NEWPAGE, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_OWIDTH), SC_WID_UNO_OWIDTH, &getBooleanCppuType(), 0, 0 },
+@@ -549,14 +550,14 @@ const SfxItemPropertySet* lcl_GetColumnPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, TOP_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+@@ -577,7 +578,7 @@ const SfxItemPropertySet* lcl_GetRowPropertySet()
+ {
+ {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 },
+@@ -628,8 +629,8 @@ const SfxItemPropertySet* lcl_GetRowPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHGT), SC_WID_UNO_CELLHGT, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, &::getCppuType((const sal_Int32*)0), 0, 0 },
+@@ -639,7 +640,7 @@ const SfxItemPropertySet* lcl_GetRowPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), SC_WID_UNO_NEWPAGE, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_OHEIGHT), SC_WID_UNO_OHEIGHT, &getBooleanCppuType(), 0, 0 },
+@@ -656,14 +657,14 @@ const SfxItemPropertySet* lcl_GetRowPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, TOP_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+@@ -685,7 +686,7 @@ const SfxItemPropertySet* lcl_GetSheetPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_AUTOPRINT),SC_WID_UNO_AUTOPRINT,&getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_BORDCOL), SC_WID_UNO_BORDCOL, &getCppuType((sal_Int32*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 },
+@@ -739,15 +740,15 @@ const SfxItemPropertySet* lcl_GetSheetPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_COPYBACK), SC_WID_UNO_COPYBACK,&getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_COPYFORM), SC_WID_UNO_COPYFORM,&getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_COPYSTYL), SC_WID_UNO_COPYSTYL,&getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
+- {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine2*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, &::getCppuType((const sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ISACTIVE), SC_WID_UNO_ISACTIVE,&getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
+ {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), SC_WID_UNO_LINKDISPBIT,&getCppuType((uno::Reference<awt::XBitmap>*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), SC_WID_UNO_LINKDISPNAME,&getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 },
+@@ -768,7 +769,7 @@ const SfxItemPropertySet* lcl_GetSheetPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_PRINTBORD),SC_WID_UNO_PRINTBORD,&getBooleanCppuType(), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_PROTECT), SC_WID_UNO_PROTECT, &getBooleanCppuType(), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((sal_Int32*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
+@@ -777,7 +778,7 @@ const SfxItemPropertySet* lcl_GetSheetPropertySet()
+ {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_TABLAYOUT),SC_WID_UNO_TABLAYOUT,&getCppuType((sal_Int16*)0), 0, 0 },
+- {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
++ {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine2*)0), 0, TOP_BORDER | CONVERT_TWIPS },
+ {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
+diff --git sc/source/ui/view/formatsh.cxx sc/source/ui/view/formatsh.cxx
+index fb9f77d..ef619e4 100644
+--- sc/source/ui/view/formatsh.cxx
++++ sc/source/ui/view/formatsh.cxx
+@@ -1536,6 +1536,7 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
+ pDefLine->SetOutWidth( pLine->GetOutWidth() );
+ pDefLine->SetInWidth ( pLine->GetInWidth() );
+ pDefLine->SetDistance( pLine->GetDistance() );
++ pDefLine->SetStyle( pLine->GetStyle( ) );
+ pTabViewShell->SetSelectionFrameLines( pDefLine, FALSE );
+ }
+ else
+diff --git sc/source/ui/view/viewfun2.cxx sc/source/ui/view/viewfun2.cxx
+index e2255e0..9c0f929 100644
+--- sc/source/ui/view/viewfun2.cxx
++++ sc/source/ui/view/viewfun2.cxx
+@@ -3002,6 +3002,7 @@ void ScViewFunc::UpdateLineAttrs( SvxBorderLine& rLine,
+ rLine.SetOutWidth ( pDestLine->GetOutWidth() );
+ rLine.SetInWidth ( pDestLine->GetInWidth() );
+ rLine.SetDistance ( pDestLine->GetDistance() );
++ rLine.SetStyle ( pDestLine->GetStyle() );
+ }
+ else
+ {
+@@ -3009,6 +3010,7 @@ void ScViewFunc::UpdateLineAttrs( SvxBorderLine& rLine,
+ rLine.SetOutWidth ( pSrcLine->GetOutWidth() );
+ rLine.SetInWidth ( pSrcLine->GetInWidth() );
+ rLine.SetDistance ( pSrcLine->GetDistance() );
++ rLine.SetStyle ( pSrcLine->GetStyle() );
+ }
+ }
+ }
+diff --git svtools/inc/borderhelper.hxx svtools/inc/borderhelper.hxx
+new file mode 100644
+index 0000000..a3c5cb0
+--- /dev/null
++++ svtools/inc/borderhelper.hxx
+@@ -0,0 +1,49 @@
++/*************************************************************************
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * Copyright 2008 by Sun Microsystems, Inc.
++ *
++ * OpenOffice.org - a multi-platform office productivity suite
++ *
++ * $RCSfile: ctrlbox.hxx,v $
++ * $Revision: 1.15 $
++ *
++ * This file is part of OpenOffice.org.
++ *
++ * OpenOffice.org is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 3
++ * only, as published by the Free Software Foundation.
++ *
++ * OpenOffice.org is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU Lesser General Public License version 3 for more details
++ * (a copy is included in the LICENSE file that accompanied this code).
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * version 3 along with OpenOffice.org. If not, see
++ * <http://www.openoffice.org/license.html>
++ * for a copy of the LGPLv3 License.
++ *
++ ************************************************************************/
++
++#ifndef _BORDERHELPER_HXX
++#define _BORDERHELPER_HXX
++
++#include "svtools/svtdllapi.h"
++
++#include <basegfx/polygon/b2dpolypolygon.hxx>
++#include <basegfx/polygon/b2dpolygon.hxx>
++#include <vcl/outdev.hxx>
++
++namespace svtools
++{
++ SVT_DLLPUBLIC basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon,
++ USHORT nDashing, MapUnit eUnit );
++
++ SVT_DLLPUBLIC void DrawLine( OutputDevice& rDev, const Point& rBeg,
++ const Point& rEnd, sal_uInt32 nWidth, USHORT nDashing );
++}
++
++#endif
+diff --git svtools/inc/ctrlbox.hxx svtools/inc/ctrlbox.hxx
+index 1feb2df..a4d7dc8 100644
+--- svtools/inc/ctrlbox.hxx
++++ svtools/inc/ctrlbox.hxx
+@@ -57,6 +57,10 @@ class ImpColorList;
+ class ImpLineList;
+ class FontList;
+
++#define STYLE_SOLID ( ( USHORT ) 0 )
++#define STYLE_DOTTED ( ( USHORT ) 1 )
++#define STYLE_DASHED ( ( USHORT ) 2 )
++
+ /*************************************************************************
+
+ Beschreibung
+@@ -258,7 +262,8 @@ class SVT_DLLPUBLIC LineListBox : public ListBox
+ FieldUnit eUnit;
+ FieldUnit eSourceUnit;
+
+- SVT_DLLPRIVATE void ImpGetLine( long nLine1, long nLine2, long nDistance, Bitmap& rBmp, XubString& rStr );
++ SVT_DLLPRIVATE void ImpGetLine( long nLine1, long nLine2, long nDistance,
++ USHORT nStyle, Bitmap& rBmp, XubString& rStr );
+ using Window::ImplInit;
+ SVT_DLLPRIVATE void ImplInit();
+ void UpdateLineColors( void );
+@@ -273,24 +278,30 @@ public:
+
+ using ListBox::InsertEntry;
+ virtual USHORT InsertEntry( const XubString& rStr, USHORT nPos = LISTBOX_APPEND );
+- virtual USHORT InsertEntry( long nLine1, long nLine2 = 0, long nDistance = 0, USHORT nPos = LISTBOX_APPEND );
++ virtual USHORT InsertEntry( long nLine1, long nLine2 = 0, long nDistance = 0,
++ USHORT nStyle = STYLE_SOLID, USHORT nPos = LISTBOX_APPEND );
+ using ListBox::RemoveEntry;
+ virtual void RemoveEntry( USHORT nPos );
+ virtual void Clear();
+
+ using ListBox::GetEntryPos;
+- USHORT GetEntryPos( long nLine1, long nLine2 = 0, long nDistance = 0 ) const;
++ USHORT GetEntryPos( long nLine1, long nLine2 = 0, long nDistance = 0,
++ USHORT nStyle = STYLE_SOLID ) const;
+ long GetEntryLine1( USHORT nPos ) const;
+ long GetEntryLine2( USHORT nPos ) const;
+ long GetEntryDistance( USHORT nPos ) const;
++ USHORT GetEntryStyle( USHORT nPos ) const;
+
+ inline void SelectEntry( const XubString& rStr, BOOL bSelect = TRUE ) { ListBox::SelectEntry( rStr, bSelect ); }
+- void SelectEntry( long nLine1, long nLine2 = 0, long nDistance = 0, BOOL bSelect = TRUE );
++ void SelectEntry( long nLine1, long nLine2 = 0, long nDistance = 0,
++ USHORT nStyle = STYLE_SOLID, BOOL bSelect = TRUE );
+ long GetSelectEntryLine1( USHORT nSelIndex = 0 ) const;
+ long GetSelectEntryLine2( USHORT nSelIndex = 0 ) const;
+ long GetSelectEntryDistance( USHORT nSelIndex = 0 ) const;
++ USHORT GetSelectEntryStyle( USHORT nSelIndex = 0 ) const;
+ inline BOOL IsEntrySelected( const XubString& rStr ) const { return ListBox::IsEntrySelected( rStr ); }
+- BOOL IsEntrySelected( long nLine1, long nLine2 = 0, long nDistance = 0 ) const;
++ BOOL IsEntrySelected( long nLine1, long nLine2 = 0, long nDistance = 0,
++ USHORT nStyle1 = STYLE_SOLID ) const;
+
+ inline void SetUnit( FieldUnit eNewUnit ) { eUnit = eNewUnit; }
+ inline FieldUnit GetUnit() const { return eUnit; }
+@@ -308,9 +319,9 @@ private:
+ void* GetEntryData( USHORT nPos ) const;
+ };
+
+-inline void LineListBox::SelectEntry( long nLine1, long nLine2, long nDistance, BOOL bSelect )
++inline void LineListBox::SelectEntry( long nLine1, long nLine2, long nDistance, USHORT nStyle, BOOL bSelect )
+ {
+- USHORT nPos = GetEntryPos( nLine1, nLine2, nDistance );
++ USHORT nPos = GetEntryPos( nLine1, nLine2, nDistance, nStyle );
+ if ( nPos != LISTBOX_ENTRY_NOTFOUND )
+ ListBox::SelectEntryPos( nPos, bSelect );
+ }
+@@ -342,9 +353,19 @@ inline long LineListBox::GetSelectEntryDistance( USHORT nSelIndex ) const
+ return 0;
+ }
+
+-inline BOOL LineListBox::IsEntrySelected( long nLine1, long nLine2, long nDistance ) const
++inline USHORT LineListBox::GetSelectEntryStyle( USHORT nSelIndex ) const
++{
++ USHORT nStyle = STYLE_SOLID;
++ USHORT nPos = GetSelectEntryPos( nSelIndex );
++ if ( nPos != LISTBOX_ENTRY_NOTFOUND )
++ nStyle = GetEntryStyle( nPos );
++
++ return nStyle;
++}
++
++inline BOOL LineListBox::IsEntrySelected( long nLine1, long nLine2, long nDistance, USHORT nStyle ) const
+ {
+- USHORT nPos = GetEntryPos( nLine1, nLine2, nDistance );
++ USHORT nPos = GetEntryPos( nLine1, nLine2, nDistance, nStyle );
+ if ( nPos != LISTBOX_ENTRY_NOTFOUND )
+ return IsEntryPosSelected( nPos );
+ else
+diff --git svtools/prj/d.lst svtools/prj/d.lst
+index 684c3a1..2e8b5b9 100644
+--- svtools/prj/d.lst
++++ svtools/prj/d.lst
+@@ -43,6 +43,7 @@ mkdir: %_DEST%\inc%_EXT%\svtools
+ ..\inc\cntnrsrt.hxx %_DEST%\inc%_EXT%\svtools\cntnrsrt.hxx
+ ..\inc\svtools\colrdlg.hxx %_DEST%\inc%_EXT%\svtools\colrdlg.hxx
+ ..\inc\svtools\colctrl.hxx %_DEST%\inc%_EXT%\svtools\colctrl.hxx
++..\inc\borderhelper.hxx %_DEST%\inc%_EXT%\svtools\borderhelper.hxx
+ ..\inc\ctrlbox.hxx %_DEST%\inc%_EXT%\svtools\ctrlbox.hxx
+ ..\inc\ctrltool.hxx %_DEST%\inc%_EXT%\svtools\ctrltool.hxx
+ ..\inc\collatorres.hxx %_DEST%\inc%_EXT%\svtools\collatorres.hxx
+diff --git svtools/source/control/ctrlbox.cxx svtools/source/control/ctrlbox.cxx
+index 01cd788..951c296 100644
+--- svtools/source/control/ctrlbox.cxx
++++ svtools/source/control/ctrlbox.cxx
+@@ -46,8 +46,11 @@
+ #include <svtools/svtools.hrc>
+ #include <ctrlbox.hxx>
+ #include <ctrltool.hxx>
++#include <borderhelper.hxx>
+
+ #include <vcl/i18nhelp.hxx>
++#include <basegfx/polygon/b2dpolygon.hxx>
++#include <basegfx/polygon/b2dpolygontools.hxx>
+
+ #define IMGTEXTSPACE 2
+ #define EXTRAFONTSIZE 5
+@@ -255,6 +258,7 @@ struct ImpLineListData
+ long nLine1;
+ long nLine2;
+ long nDistance;
++ USHORT nStyle;
+ };
+
+ DECLARE_LIST( ImpLineList, ImpLineListData* )
+@@ -268,8 +272,107 @@ inline const Color& LineListBox::GetPaintColor( void ) const
+
+ // -----------------------------------------------------------------------
+
++
++inline void lclDrawPolygon( OutputDevice& rDev, const basegfx::B2DPolygon& rPolygon, long nWidth, USHORT nDashing )
++{
++ USHORT nOldAA = rDev.GetAntialiasing();
++ rDev.SetAntialiasing( nOldAA & !ANTIALIASING_ENABLE_B2DDRAW );
++
++ Color aOldColor = rDev.GetFillColor( );
++ rDev.SetFillColor( rDev.GetLineColor( ) );
++
++ basegfx::B2DPolyPolygon aPolygons = svtools::ApplyLineDashing( rPolygon, nDashing, rDev.GetMapMode().GetMapUnit() );
++ for ( sal_uInt32 i = 0; i < aPolygons.count( ); i++ )
++ {
++ basegfx::B2DPolygon aDash = aPolygons.getB2DPolygon( i );
++ basegfx::B2DPoint aStart = aDash.getB2DPoint( 0 );
++ basegfx::B2DPoint aEnd = aDash.getB2DPoint( aDash.count() - 1 );
++
++ basegfx::B2DVector aVector( aEnd - aStart );
++ aVector.normalize( );
++ const basegfx::B2DVector aPerpendicular(basegfx::getPerpendicular(aVector));
++
++ const basegfx::B2DVector aWidthOffset( nWidth / 2 * aPerpendicular);
++ basegfx::B2DPolygon aDashPolygon;
++ aDashPolygon.append( aStart + aWidthOffset );
++ aDashPolygon.append( aEnd + aWidthOffset );
++ aDashPolygon.append( aEnd - aWidthOffset );
++ aDashPolygon.append( aStart - aWidthOffset );
++ aDashPolygon.setClosed( true );
++
++ rDev.DrawPolygon( aDashPolygon );
++ }
++
++ rDev.SetFillColor( aOldColor );
++ rDev.SetAntialiasing( nOldAA );
++}
++
++namespace svtools
++{
++ basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, USHORT nDashing, MapUnit eUnit )
++ {
++ ::std::vector < double >aPattern;
++ switch ( nDashing )
++ {
++ case STYLE_DOTTED:
++ if ( eUnit == MAP_TWIP )
++ {
++ aPattern.push_back( 30.0 );
++ aPattern.push_back( 110.0 );
++ }
++ else if ( eUnit == MAP_100TH_MM )
++ {
++ aPattern.push_back( 50 );
++ aPattern.push_back( 200 );
++ }
++ else if ( eUnit == MAP_PIXEL )
++ {
++ aPattern.push_back( 1.0 );
++ aPattern.push_back( 3.0 );
++ }
++ break;
++ case STYLE_DASHED:
++ if ( eUnit == MAP_TWIP )
++ {
++ aPattern.push_back( 110 );
++ aPattern.push_back( 110 );
++ }
++ else if ( eUnit == MAP_100TH_MM )
++ {
++ aPattern.push_back( 200 );
++ aPattern.push_back( 200 );
++ }
++ else if ( eUnit == MAP_PIXEL )
++ {
++ aPattern.push_back( 10 );
++ aPattern.push_back( 20 );
++ }
++ break;
++ default:
++ break;
++ }
++
++ basegfx::B2DPolyPolygon aPolygons;
++ if ( ! aPattern.empty() )
++ basegfx::tools::applyLineDashing( rPolygon, aPattern, &aPolygons );
++ else
++ aPolygons.append( rPolygon );
++
++ return aPolygons;
++ }
++
++ void DrawLine( OutputDevice& rDev, const Point& rP1, const Point& rP2,
++ sal_uInt32 nWidth, USHORT nDashing )
++ {
++ basegfx::B2DPolygon aPolygon;
++ aPolygon.append( basegfx::B2DPoint( rP1.X(), rP1.Y() ) );
++ aPolygon.append( basegfx::B2DPoint( rP2.X(), rP2.Y() ) );
++ lclDrawPolygon( rDev, aPolygon, nWidth, nDashing );
++ }
++}
++
+ void LineListBox::ImpGetLine( long nLine1, long nLine2, long nDistance,
+- Bitmap& rBmp, XubString& rStr )
++ USHORT nStyle, Bitmap& rBmp, XubString& rStr )
+ {
+ Size aSize = GetOutputSizePixel();
+ aSize.Width() -= 20;
+@@ -296,8 +399,8 @@ void LineListBox::ImpGetLine( long nLine1, long nLine2, long nDistance,
+ // Linien malen
+ aSize = aVirDev.PixelToLogic( aSize );
+ long nPix = aVirDev.PixelToLogic( Size( 0, 1 ) ).Height();
+- long n1 = nLine1 / 100;
+- long n2 = nLine2 / 100;
++ sal_uInt32 n1 = nLine1 / 100;
++ sal_uInt32 n2 = nLine2 / 100;
+ long nDist = nDistance / 100;
+ n1 += nPix-1;
+ n1 -= n1%nPix;
+@@ -320,13 +423,18 @@ void LineListBox::ImpGetLine( long nLine1, long nLine2, long nDistance,
+ aVirDev.SetFillColor( GetSettings().GetStyleSettings().GetFieldColor() );
+ aVirDev.DrawRect( Rectangle( Point(), aSize ) );
+
+- aVirDev.SetFillColor( GetPaintColor() );
+- aVirDev.DrawRect( Rectangle( 0, 0, aSize.Width(), n1-nPix ) );
++ Color oldColor = aVirDev.GetLineColor( );
++ aVirDev.SetLineColor( GetPaintColor( ) );
++
++ double y1 = n1 / 2;
++ svtools::DrawLine( aVirDev, Point( 0, y1 ), Point( aSize.Width( ), y1 ), n1, nStyle );
++
+ if ( n2 )
+ {
+- aVirDev.DrawRect( Rectangle( 0, n1+nDist,
+- aSize.Width(), n1+nDist+n2-nPix ) );
++ double y2 = n1 + nDist + n2 / 2;
++ svtools::DrawLine( aVirDev, Point( 0, y2 ), Point( aSize.Width(), y2 ), n2, STYLE_SOLID );
+ }
++ aVirDev.SetLineColor( oldColor );
+ rBmp = aVirDev.GetBitmap( Point(), Size( aSize.Width(), n1+nDist+n2 ) );
+ }
+ // Twips nach Unit
+@@ -417,11 +525,11 @@ USHORT LineListBox::InsertEntry( const XubString& rStr, USHORT nPos )
+ // -----------------------------------------------------------------------
+
+ USHORT LineListBox::InsertEntry( long nLine1, long nLine2, long nDistance,
+- USHORT nPos )
++ USHORT nStyle, USHORT nPos )
+ {
+ XubString aStr;
+ Bitmap aBmp;
+- ImpGetLine( nLine1, nLine2, nDistance, aBmp, aStr );
++ ImpGetLine( nLine1, nLine2, nDistance, nStyle, aBmp, aStr );
+ nPos = ListBox::InsertEntry( aStr, aBmp, nPos );
+ if ( nPos != LISTBOX_ERROR )
+ {
+@@ -429,6 +537,7 @@ USHORT LineListBox::InsertEntry( long nLine1, long nLine2, long nDistance,
+ pData->nLine1 = nLine1;
+ pData->nLine2 = nLine2;
+ pData->nDistance = nDistance;
++ pData->nStyle = nStyle;
+ pLineList->Insert( pData, nPos );
+ }
+
+@@ -466,7 +575,7 @@ void LineListBox::Clear()
+ // -----------------------------------------------------------------------
+
+ USHORT LineListBox::GetEntryPos( long nLine1, long nLine2,
+- long nDistance ) const
++ long nDistance, USHORT nStyle ) const
+ {
+ ULONG n = 0;
+ ULONG nCount = pLineList->Count();
+@@ -477,7 +586,8 @@ USHORT LineListBox::GetEntryPos( long nLine1, long nLine2,
+ {
+ if ( (pData->nLine1 == nLine1) &&
+ (pData->nLine2 == nLine2) &&
+- (pData->nDistance == nDistance) )
++ (pData->nDistance == nDistance) &&
++ (pData->nStyle == nStyle) )
+ return (USHORT)n;
+ }
+
+@@ -522,6 +632,18 @@ long LineListBox::GetEntryDistance( USHORT nPos ) const
+
+ // -----------------------------------------------------------------------
+
++USHORT LineListBox::GetEntryStyle( USHORT nPos ) const
++{
++ USHORT nStyle = STYLE_SOLID;
++ ImpLineListData* pData = pLineList->GetObject( nPos );
++ if ( pData )
++ nStyle = pData->nStyle;
++
++ return nStyle;
++}
++
++// -----------------------------------------------------------------------
++
+ void LineListBox::UpdateLineColors( void )
+ {
+ if( UpdatePaintLineColor() )
+@@ -544,7 +666,8 @@ void LineListBox::UpdateLineColors( void )
+ {
+ // exchange listbox data
+ ListBox::RemoveEntry( USHORT( n ) );
+- ImpGetLine( pData->nLine1, pData->nLine2, pData->nDistance, aBmp, aStr );
++ ImpGetLine( pData->nLine1, pData->nLine2, pData->nDistance,
++ pData->nStyle, aBmp, aStr );
+ ListBox::InsertEntry( aStr, aBmp, USHORT( n ) );
+ }
+ }
+diff --git svtools/source/svrtf/rtfkeywd.hxx svtools/source/svrtf/rtfkeywd.hxx
+index 87258b5..13e1f8c 100644
+--- svtools/source/svrtf/rtfkeywd.hxx
++++ svtools/source/svrtf/rtfkeywd.hxx
+@@ -72,6 +72,8 @@
+ #define OOO_STRING_SVTOOLS_RTF_BRDRCF "\\brdrcf"
+ #define OOO_STRING_SVTOOLS_RTF_BRDRDB "\\brdrdb"
+ #define OOO_STRING_SVTOOLS_RTF_BRDRDOT "\\brdrdot"
++#define OOO_STRING_SVTOOLS_RTF_BRDRDASH "\\brdrdash"
++#define OOO_STRING_SVTOOLS_RTF_BRDRDASHSM "\\brdrdashsm"
+ #define OOO_STRING_SVTOOLS_RTF_BRDRHAIR "\\brdrhair"
+ #define OOO_STRING_SVTOOLS_RTF_BRDRL "\\brdrl"
+ #define OOO_STRING_SVTOOLS_RTF_BRDRR "\\brdrr"
+diff --git svtools/util/makefile.mk svtools/util/makefile.mk
+index e95c557..15ea4de 100644
+--- svtools/util/makefile.mk
++++ svtools/util/makefile.mk
+@@ -152,7 +152,8 @@ SHL1STDLIBS+= \
+ $(VOSLIB) \
+ $(SALLIB) \
+ $(ICUUCLIB) \
+- $(JVMFWKLIB)
++ $(JVMFWKLIB) \
++ $(BASEGFXLIB)
+
+ .IF "$(OS)"=="MACOSX"
+ # static libraries go at end
+diff --git svx/inc/svx/borderline.hxx svx/inc/svx/borderline.hxx
+index 2337c66..5e4be3b 100644
+--- svx/inc/svx/borderline.hxx
++++ svx/inc/svx/borderline.hxx
+@@ -93,6 +93,13 @@
+
+ // ============================================================================
+
++enum SvxBorderStyle
++{
++ SOLID,
++ DOTTED,
++ DASHED
++};
++
+ class SVX_DLLPUBLIC SvxBorderLine
+ {
+ protected:
+@@ -100,9 +107,11 @@ protected:
+ USHORT nOutWidth;
+ USHORT nInWidth;
+ USHORT nDistance;
++ SvxBorderStyle m_nStyle;
+
+ public:
... etc. - the rest is truncated
More information about the ooo-build-commit
mailing list