Hi Eike
Am Dienstag, den 07.02.2012, 23:50 +0100 schrieb Eike Rathke:
Hi Dietmar,
On Saturday, 2012-02-04 18:47:40 +0100, Dietmar wrote:
is there a method to convert Borderline2 to Borderline (and vice versa),
I can use in a Java extension?
Unfortunately not.
I have already realized a function, actually w/o having yet looked up
the code you mention below.
Here is the function if someone might want to use it (no guarantee for
correctness):
/** Convert BorderLine2 to BorderLine
* @param inBL2
* @return
*/
private static com.sun.star.table.BorderLine convert2toBorderLine
(com.sun.star.table.BorderLine2 inBL2) {
com.sun.star.table.BorderLine outBL = new BorderLine();
switch (inBL2.LineStyle) {
case com.sun.star.table.BorderLineStyle.NONE:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = 0;
outBL.LineDistance = 0;
outBL.OuterLineWidth = 0;
break;
case com.sun.star.table.BorderLineStyle.SOLID:
case com.sun.star.table.BorderLineStyle.DOTTED:
case com.sun.star.table.BorderLineStyle.DASHED:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = 0;
outBL.LineDistance = 0;
outBL.OuterLineWidth = (short) inBL2.LineWidth;
break;
case com.sun.star.table.BorderLineStyle.DOUBLE:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = (short) inBL2.LineWidth;
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth);
outBL.OuterLineWidth = (short) inBL2.LineWidth;
break;
case com.sun.star.table.BorderLineStyle.THINTHICK_SMALLGAP:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = 26;
outBL.LineDistance = 35;
outBL.OuterLineWidth = (short) inBL2.LineWidth;
break;
case com.sun.star.table.BorderLineStyle.THINTHICK_MEDIUMGAP:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = (short) (inBL2.LineWidth / 2);
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth / 2);
outBL.OuterLineWidth = (short) (inBL2.LineWidth);
break;
case com.sun.star.table.BorderLineStyle.THINTHICK_LARGEGAP:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = 26;
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth);
outBL.OuterLineWidth = 35;
break;
case com.sun.star.table.BorderLineStyle.THICKTHIN_SMALLGAP:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = (short) (inBL2.LineWidth);
outBL.LineDistance = 35;
outBL.OuterLineWidth = 26;
break;
case com.sun.star.table.BorderLineStyle.THICKTHIN_MEDIUMGAP:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = (short) (inBL2.LineWidth);
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth / 2);
outBL.OuterLineWidth = (short) (inBL2.LineWidth / 2);
break;
case com.sun.star.table.BorderLineStyle.THICKTHIN_LARGEGAP:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = 53;
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth);
outBL.OuterLineWidth = 26;
break;
case com.sun.star.table.BorderLineStyle.EMBOSSED:
case com.sun.star.table.BorderLineStyle.ENGRAVED:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = (short) (inBL2.LineWidth / 2);
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth);
outBL.OuterLineWidth = (short) (inBL2.LineWidth / 2);
break;
case com.sun.star.table.BorderLineStyle.OUTSET:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = (short) (inBL2.LineWidth);
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth);
outBL.OuterLineWidth = 26;
break;
case com.sun.star.table.BorderLineStyle.INSET:
outBL.Color = inBL2.Color;
outBL.InnerLineWidth = 26;
outBL.LineDistance = (short) Math.max(35, inBL2.LineWidth);
outBL.OuterLineWidth = (short) (inBL2.LineWidth);
break;
}
return outBL;
}
But that function actually did not help, because as far as I found out,
TableBorder does not work the way it did before (OOo 2.3), but removes
the lines in most cases.
I am still trying to find the cause (and hoping it's fixed in 3.5)
...
I'm working on a TableBorder2 property that contains BorderLine2 instead
of BorderLine, that will be for 3.6 though so probably doesn't help you
right now with your actual problem.
I am looking forward to TabelBorder2
Simple type casting or picking the innerlinewidth etc. shows zero
values.
That might also be due to some bugs around the BorderLine properties,
which we only recently fixed. Master and 3-5 may already be better,
some fixes are also in 3-5-0. Especially if for non-double lines only
InnerLineWidth was set and OuterLineWidth was 0 then no border was
drawn, may be workarounded by setting OuterLineWidth instead.
I will check Tableborders again once 3.5 is out.
Before doing a conversion tool myself, i would like to know if this has
already been done.
If not, can someone point me to the code where Borderline2 is
interpreted, so that I can reuse that code?
You can peek into editeng/source/items/frmitems.cxx methods
SvxBoxItem::LineToSvxLine() and lcl_lineToSvxLine() and
editeng/source/items/borderline.cxx method
SvxBorderLine::GuessLinesWidths().
Eike
Thanks
Dietmar
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.