diff --git a/components/fpspreadsheet/source/common/xlsxooxmlchart.pas b/components/fpspreadsheet/source/common/xlsxooxmlchart.pas
index 2bb92ce6b..e815a9c7d 100644
--- a/components/fpspreadsheet/source/common/xlsxooxmlchart.pas
+++ b/components/fpspreadsheet/source/common/xlsxooxmlchart.pas
@@ -154,6 +154,7 @@ const
DEFAULT_FONT_NAME = 'Liberation Sans';
FALSE_TRUE: Array[boolean] of String = ('0', '1');
+ LEGEND_POS: Array[TsChartLegendPosition] of string = ('r', 't', 'b', 'l');
{$INCLUDE xlsxooxmlchart_hatch.inc}
@@ -1064,6 +1065,7 @@ procedure TsSpreadOOXMLChartReader.ReadChartLegend(ANode: TDOMNode;
var
nodeName, s: String;
dummy: Single;
+ lp: TsChartLegendPosition;
begin
if ANode = nil then
exit;
@@ -1076,12 +1078,12 @@ begin
'c:legendPos':
begin
s := GetAttrValue(ANode, 'val');
- case s of
- 't': AChartLegend.Position := lpTop;
- 'b': AChartLegend.Position := lpBottom;
- 'l': AChartLegend.Position := lpLeft;
- 'r': AChartLegend.Position := lpRight;
- end;
+ for lp in TsChartLegendPosition do
+ if s = LEGEND_POS[lp] then
+ begin
+ AChartLegend.Position := lp;
+ break;
+ end;
end;
// Formatting of individual legend items, not supported
@@ -3571,11 +3573,11 @@ begin
AppendToStream(AStream,
indent + '' + LE +
indent + ' ' + LE +
-// indent + ' ' + LE +
+ indent + ' ' + LE +
indent + ' ' + LE +
- indent + ' ' + LE +
+ indent + ' ' + LE +
GetChartFontXML(AIndent + 6, AFont, 'a:defRPr') + LE +
- indent + ' ' + LE +
+ indent + ' ' + LE +
indent + ' ' + LE +
indent + '' + LE
);
@@ -3592,28 +3594,49 @@ procedure TsSpreadOOXMLChartWriter.WriteChartLegendNode(AStream: TStream;
AIndent: Integer; ALegend: TsChartLegend);
var
indent: String;
+ indent2: String;
+ overlay: String = '';
+ legendPos: String = '';
+ formatStr: String = '';
+ fontStr: String = '';
begin
if not ALegend.Visible then
exit;
indent := DupeString(' ', AIndent);
+ indent2 := indent + ' ';
+ // Legend position
+ legendPos := indent2 + Format('', [LEGEND_POS[ALegend.Position]]) + LE;
+
+ // Inside/outside plot area?
+ overlay := indent2 + Format('', [FALSE_TRUE[ALegend.CanOverlapPlotArea]]) + LE;
+
+ // Background and border formatting
+ formatStr :=
+ indent2 + '' + LE +
+ GetChartFillAndLineXML(AIndent + 4, ALegend.Chart, ALegend.Background, ALegend.Border) + LE +
+ indent2 + '' + LE;
+
+ // Font of text items
+ fontStr :=
+ indent2 + '' + LE +
+ indent2 + ' ' + LE +
+ indent2 + ' ' + LE +
+ indent2 + ' ' + LE +
+ indent2 + ' ' + LE +
+ GetChartFontXML(AIndent + 6, ALegend.Font, 'a:defRPr') + LE +
+ indent2 + ' ' + LE +
+ indent2 + ' ' + LE +
+ indent2 + '' + LE;
+
+ // Write out
AppendToStream(AStream,
indent + '' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- GetChartFillAndLineXML(AIndent + 4, ALegend.Chart, ALegend.Background, ALegend.Border) + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- GetChartFontXML(AIndent + 8, ALegend.Font, 'a:defRPr') + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
- indent + ' ' + LE +
+ legendPos +
+ overlay +
+ formatStr +
+ fontStr +
indent + '' + LE
);
end;