fpspreadsheet: Destroy charts along with their worksheet.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9164 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
82ec07edc6
commit
1c088daf23
@ -733,7 +733,8 @@ type
|
||||
FName: String;
|
||||
FIndex: Integer; // Index in workbook's chart list
|
||||
FWorkbook: TsBasicWorkbook;
|
||||
FSheetIndex: Integer;
|
||||
FWorksheet: TsBasicWorksheet;
|
||||
// FSheetIndex: Integer;
|
||||
FRow, FCol: Cardinal;
|
||||
FOffsetX, FOffsetY: Double;
|
||||
FWidth, FHeight: Double; // Width, Height of the chart, in mm.
|
||||
@ -766,7 +767,7 @@ type
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function GetWorksheet: TsBasicWorksheet;
|
||||
// function GetWorksheet: TsBasicWorksheet;
|
||||
|
||||
procedure DeleteSeries(AIndex: Integer);
|
||||
|
||||
@ -779,8 +780,12 @@ type
|
||||
property Name: String read FName write FName;
|
||||
{ Index of chart in workbook's chart list. }
|
||||
property Index: Integer read FIndex write FIndex;
|
||||
{ Worksheet into which the chart is embedded }
|
||||
property Worksheet: TsBasicWorksheet read FWorksheet write FWorksheet;
|
||||
(*
|
||||
{ Index of worksheet sheet which contains the chart. }
|
||||
property SheetIndex: Integer read FSheetIndex write FSheetIndex;
|
||||
*)
|
||||
{ Row index of the cell in which the chart has its top/left corner (anchor) }
|
||||
property Row: Cardinal read FRow write FRow;
|
||||
{ Column index of the cell in which the chart has its top/left corner (anchor) }
|
||||
@ -1461,7 +1466,7 @@ begin
|
||||
if Sheet <> '' then
|
||||
Result := Sheet
|
||||
else
|
||||
Result := FChart.GetWorksheet.Name;
|
||||
Result := FChart.Worksheet.Name;
|
||||
end;
|
||||
|
||||
function TsChartCellAddr.IsUsed: Boolean;
|
||||
@ -1498,7 +1503,7 @@ begin
|
||||
if Sheet1 <> '' then
|
||||
Result := Sheet1
|
||||
else
|
||||
Result := FChart.GetWorksheet.Name;
|
||||
Result := FChart.Worksheet.Name;
|
||||
end;
|
||||
|
||||
function TsChartRange.GetSheet2Name: String;
|
||||
@ -1506,7 +1511,7 @@ begin
|
||||
if Sheet2 <> '' then
|
||||
Result := Sheet2
|
||||
else
|
||||
Result := FChart.GetWorksheet.Name;
|
||||
Result := FChart.Worksheet.Name;
|
||||
end;
|
||||
|
||||
function TsChartRange.IsEmpty: Boolean;
|
||||
@ -2581,7 +2586,7 @@ begin
|
||||
|
||||
fgradients.AddLinearGradient('g1', scRed, scBlue, 0, 0, 1, 1, 0, 0);
|
||||
|
||||
FSheetIndex := 0;
|
||||
FWorksheet := nil;
|
||||
FRow := 0;
|
||||
FCol := 0;
|
||||
FOffsetX := 0.0;
|
||||
@ -2700,11 +2705,12 @@ begin
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
{
|
||||
function TsChart.GetWorksheet: TsBasicWorksheet;
|
||||
begin
|
||||
Result := TsWorkbook(FWorkbook).GetWorksheetByIndex(FSheetIndex);
|
||||
end;
|
||||
|
||||
}
|
||||
function TsChart.IsScatterChart: Boolean;
|
||||
begin
|
||||
Result := GetChartType = ctScatter;
|
||||
|
@ -9070,7 +9070,6 @@ procedure TsSpreadOpenDocWriter.WriteShapes(AStream: TStream;
|
||||
var
|
||||
sheet: TsWorksheet absolute ASheet;
|
||||
i: Integer;
|
||||
sheetIdx: Integer;
|
||||
img: TsImage;
|
||||
imgType: TsImageType;
|
||||
r1,c1,r2,c2: Cardinal;
|
||||
@ -9092,11 +9091,10 @@ begin
|
||||
'<table:shapes>');
|
||||
|
||||
{$IFDEF FPS_CHARTS}
|
||||
sheetIdx := sheet.Index;
|
||||
for i:=0 to TsWorkbook(FWorkbook).GetChartCount-1 do
|
||||
begin
|
||||
chart := TsWorkbook(FWorkbook).GetChartByIndex(i);
|
||||
if chart.SheetIndex <> sheetIdx then
|
||||
if chart.Worksheet <> sheet then
|
||||
Continue;
|
||||
if chart.Series.Count = 0 then
|
||||
Continue;
|
||||
|
@ -3251,7 +3251,7 @@ begin
|
||||
if (Axis = chart.XAxis) and (not chart.IsScatterChart) and (chart.Series.Count > 0) then
|
||||
begin
|
||||
series := chart.Series[0];
|
||||
sheet := TsWorkbook(Writer.Workbook).GetWorksheetByIndex(chart.SheetIndex);
|
||||
sheet := TsWorksheet(chart.Worksheet);
|
||||
r1 := series.LabelRange.Row1;
|
||||
c1 := series.LabelRange.Col1;
|
||||
r2 := series.LabelRange.Row2;
|
||||
|
@ -644,6 +644,8 @@ type
|
||||
{$ifdef FPS_CHARTS}
|
||||
{ Chart support }
|
||||
function GetChartCount: Integer;
|
||||
procedure RemoveAllCharts;
|
||||
procedure RemoveChart(AChart: TsChart);
|
||||
{$endif}
|
||||
|
||||
{ Protection }
|
||||
@ -1273,6 +1275,9 @@ end;
|
||||
-------------------------------------------------------------------------------}
|
||||
destructor TsWorksheet.Destroy;
|
||||
begin
|
||||
{$IFDEF FPS_CHARTS}
|
||||
RemoveAllCharts;
|
||||
{$ENDIF}
|
||||
RemoveAllImages;
|
||||
RemoveAllRows;
|
||||
RemoveAllCols;
|
||||
@ -1582,9 +1587,35 @@ begin
|
||||
for i := 0 to Workbook.GetChartCount-1 do
|
||||
begin
|
||||
chart := Workbook.GetChartByIndex(i);
|
||||
if chart.SheetIndex = idx then inc(Result);
|
||||
if chart.Worksheet = self then inc(Result);
|
||||
end;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Destroys all charts from the worksheet
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.RemoveAllCharts;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := Workbook.FCharts.Count-1 downto 0 do
|
||||
if Workbook.GetChartByIndex(i).Worksheet = Self then
|
||||
Workbook.FCharts.Delete(i); // This destroys the chart
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Removes the specified chart from the worksheet and destroys it
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.RemoveChart(AChart: TsChart);
|
||||
var
|
||||
idx: Integer;
|
||||
begin
|
||||
if AChart.Worksheet <> self then
|
||||
exit;
|
||||
|
||||
idx := Workbook.FCharts.IndexOf(AChart);
|
||||
if idx > -1 then Workbook.FCharts.Delete(idx); // This destroys the chart
|
||||
end;
|
||||
{$endif}
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
|
@ -15,7 +15,7 @@ begin
|
||||
if (ASheet = nil) then
|
||||
raise Exception.Create('To do: Insert chart as new ChartSheet');
|
||||
Result.Workbook := self;
|
||||
Result.SheetIndex := GetWorksheetIndex(ASheet);
|
||||
Result.Worksheet := ASheet;
|
||||
Result.Row := ARow;
|
||||
Result.Col := ACol;
|
||||
Result.OffsetX := AOffsetX;
|
||||
|
@ -7357,7 +7357,7 @@ procedure TsSpreadOOXMLWriter.WriteDrawings(AWorksheet: TsBasicWorksheet);
|
||||
cOffs1 := AChart.OffsetY;
|
||||
w := AChart.Width;
|
||||
h := AChart.Height;
|
||||
sheet := TsWorkbook(FWorkbook).GetWorksheetByIndex(AChart.SheetIndex);
|
||||
sheet := TsWorksheet(AChart.Worksheet);
|
||||
sheet.CalcDrawingExtent(true, w, h, r1, c1, r2, c2, rOffs1, cOffs1, rOffs2, cOffs2, x, y);
|
||||
|
||||
AppendToStream(AStream,
|
||||
@ -7401,7 +7401,6 @@ var
|
||||
i, j: Integer;
|
||||
rId: Integer;
|
||||
sheet: TsWorksheet absolute AWorksheet;
|
||||
sheetIdx: Integer;
|
||||
chart: TsChart;
|
||||
begin
|
||||
if (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} then
|
||||
@ -7427,12 +7426,11 @@ begin
|
||||
|
||||
{$ifdef FPS_CHARTS}
|
||||
// Repeat for each chart
|
||||
sheetIdx := sheet.Index;
|
||||
j := 1; // Counts the charts in the current sheet
|
||||
for i := 0 to TsWorkbook(FWorkbook).GetChartCount - 1 do
|
||||
begin
|
||||
chart := TsWorkbook(FWorkbook).GetChartByIndex(i);
|
||||
if chart.SheetIndex = sheetIdx then
|
||||
if chart.Worksheet = AWorksheet then
|
||||
begin
|
||||
DoWriteChart(FSDrawings[FCurSheetNum], chart, j, rId);
|
||||
inc(j);
|
||||
@ -7461,7 +7459,6 @@ var
|
||||
target, bookmark: String;
|
||||
u: TURI;
|
||||
sheet: TsWorksheet absolute AWorksheet;
|
||||
sheetIdx: Integer;
|
||||
begin
|
||||
if (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} then
|
||||
exit;
|
||||
@ -7508,11 +7505,10 @@ begin
|
||||
|
||||
{$ifdef FPS_CHARTS}
|
||||
// Repeat for each chart
|
||||
sheetIdx := sheet.Index;
|
||||
for i := 0 to TsWorkbook(FWorkbook).GetChartCount - 1 do
|
||||
begin
|
||||
chart := TsWorkbook(FWorkbook).GetChartByIndex(i);
|
||||
if chart.SheetIndex = sheetIdx then
|
||||
if chart.Worksheet = AWorksheet then
|
||||
begin
|
||||
AppendToStream(FSDrawingsRels[FCurSheetNum], Format(
|
||||
' <Relationship Id="rId%d" Type="%s" Target="../charts/chart%d.xml"/>' + LE, [
|
||||
|
Loading…
Reference in New Issue
Block a user