From 4f0e2e8b83d67f0ba5563f83d7029626a58c25b3 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Thu, 28 Dec 2023 22:41:39 +0000 Subject: [PATCH] fpspreadsheet: Add conditional define FPS_CHARTS (active by default) to compile the lib with and without chart support. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9108 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/common/fpsopendocument.pas | 80 +++++++++++++++---- .../source/common/fpsopendocumentchart.pas | 9 +++ .../source/common/fpspreadsheet.pas | 26 +++++- .../source/common/fpsreaderwriter.pas | 6 ++ .../source/common/fpsxmlcommon.pas | 7 -- .../fpspreadsheet/source/common/xlsxooxml.pas | 33 ++++++-- .../source/design/fpsvisualreg.pas | 11 ++- components/fpspreadsheet/source/fps.inc | 2 + .../source/visual/fpspreadsheetchart.pas | 8 ++ .../source/visual/fpspreadsheetctrls.pas | 1 + 10 files changed, 150 insertions(+), 33 deletions(-) diff --git a/components/fpspreadsheet/source/common/fpsopendocument.pas b/components/fpspreadsheet/source/common/fpsopendocument.pas index bd31ecaf6..de3334ba3 100644 --- a/components/fpspreadsheet/source/common/fpsopendocument.pas +++ b/components/fpspreadsheet/source/common/fpsopendocument.pas @@ -26,14 +26,16 @@ unit fpsOpenDocument; {$mode objfpc}{$H+} {$include ..\fps.inc} -{$define DEBUG_CHART_STYLES} +{$IFDEF FPS_CHARTS} + {$define DEBUG_CHART_STYLES} +{$ENDIF} {$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined} interface uses - {$IFDEF DEBUG_CHART_STYLES} + {$IF DEFINED(DEBUG_CHART_STYLES) or DEFINED(FPSpreadDebug)} LazLoggerBase, {$ENDIF} Classes, SysUtils, @@ -44,8 +46,12 @@ uses {$ELSE} fpszipper, {$ENDIF} - fpstypes, fpsReaderWriter, fpsutils, fpsHeaderFooterParser, - fpsNumFormat, fpsxmlcommon, fpsPagelayout, fpsChart; + fpstypes, fpsReaderWriter, fpsUtils, fpsHeaderFooterParser, + fpsNumFormat, fpsXMLCommon, + {$IFDEF FPS_CHARTS} + fpsChart, + {$ENDIF} + fpsPagelayout; type TDateModeODS=( @@ -124,14 +130,18 @@ type FRepeatedRows: TsRowColRange; FManifestFileEntries: TFPList; + {$IFDEF FPS_CHARTS} FChartReader: TsBasicSpreadChartReader; + {$ENDIF} procedure ApplyColData; procedure ApplyStyleToCell(ACell: PCell; AStyleIndex: Integer); function ApplyStyleToCell(ACell: PCell; AStyleName: String): Boolean; function ApplyTableStyle(ASheet: TsBasicWorksheet; AStyleName: String): Boolean; + {$IFDEF FPS_CHARTS} function CollectChartFilesFromManifest: Boolean; + {$ENDIF} function ExtractBoolFromNode(ANode: TDOMNode): Boolean; function ExtractDateTimeFromNode(ANode: TDOMNode; ANumFormat: TsNumberFormat; const AFormatStr: String): TDateTime; @@ -244,8 +254,9 @@ type FHeaderFooterFontList: TObjectList; FHasColFormats: Boolean; FHasRowFormats: Boolean; - + {$IFDEF FPS_CHARTS} FChartWriter: TsBasicSpreadChartWriter; + {$ENDIF} // Routines to write parts of files procedure WriteAutomaticStyles(AStream: TStream); @@ -372,13 +383,14 @@ var implementation uses - {$IFDEF FPSpreadDebug} - LazLogger, - {$ENDIF} StrUtils, Variants, LazFileUtils, URIParser, LazUTF8, {%H-}fpsPatches, fpsStrings, fpsStreams, fpsCrypto, fpsClasses, fpSpreadsheet, - fpsExprParser, fpsImages, fpsConditionalFormat, fpsOpenDocumentChart; + fpsExprParser, fpsImages, + {$IFDEF FPS_CHARTS} + fpsOpenDocumentChart, + {$ENDIF} + fpsConditionalFormat; const LE = LineEnding; @@ -391,10 +403,10 @@ const OPENDOC_PATH_SETTINGS = 'settings.xml'; OPENDOC_PATH_STYLES = 'styles.xml'; OPENDOC_PATH_MIMETYPE = 'mimetype'; - {%H-}OPENDOC_PATH_METAINF = 'META-INF/'; + {%H-}OPENDOC_PATH_METAINF = 'META-INF/'; OPENDOC_PATH_METAINF_MANIFEST = 'META-INF/manifest.xml'; - OPENDOC_PATH_CHART_CONTENT = 'Object %d/content.xml'; - OPENDOC_PATH_CHART_STYLES = 'Object %d/styles.xml'; + OPENDOC_PATH_CHART_CONTENT = 'Object %d/content.xml'; + OPENDOC_PATH_CHART_STYLES = 'Object %d/styles.xml'; { OpenDocument schemas constants } SCHEMAS_XMLNS_OFFICE = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'; @@ -1216,7 +1228,9 @@ constructor TsSpreadOpenDocReader.Create(AWorkbook: TsBasicWorkbook); begin inherited Create(AWorkbook); + {$IFDEF FPS_CHARTS} FChartReader := TsSpreadOpenDocChartReader.Create(self); + {$ENDIF} InitOpenDocLimitations(FLimitations); @@ -1283,7 +1297,9 @@ begin FHeaderFooterFontList.Free; + {$IFDEF FPS_CHARTS} FChartReader.Free; + {$ENDIF} inherited Destroy; end; @@ -1485,6 +1501,7 @@ begin Result := true; end; +{$IFDEF FPS_CHARTS} { Searches the manifest file entries for the names of files needed by charts. Returns false if there no charts are found. The found filenames are passed over to the chart reader for further processing. } @@ -1532,6 +1549,7 @@ begin FileList.Free; end; end; +{$ENDIF} { Extracts a boolean value from a "boolean" cell node. Is called from ReadBoolean } @@ -3178,9 +3196,11 @@ begin XMLStream.Free; end; + {$IFDEF FPS_CHARTS} // Reading of charts if CollectChartFilesFromManifest then FChartReader.ReadCharts(AStream); + {$ENDIF} // Active sheet if FActiveSheet <> '' then @@ -4996,8 +5016,10 @@ procedure TsSpreadOpenDocReader.ReadShape(ANode: TDOMNode; href: String; img: PsImage; entry: TsOpenDocManifestFileEntry; - chart: TsChart; handled: Boolean; + {$IFDEF FPS_CHARTS} + chart: TsChart; + {$ENDIF} begin nodeName := ANode.NodeName; x := PtsToMM(HTMLLengthStrToPts(GetAttrValue(ANode, 'svg:x'))); @@ -5011,6 +5033,7 @@ procedure TsSpreadOpenDocReader.ReadShape(ANode: TDOMNode; href := GetAttrValue(childNode, 'xlink:href'); if href <> '' then begin + {$IFDEF FPS_CHARTS} if nodeName = 'draw:object' then begin // Is it a chart? @@ -5032,6 +5055,7 @@ procedure TsSpreadOpenDocReader.ReadShape(ANode: TDOMNode; Continue; end; end else + {$ENDIF} if nodeName = 'draw:image' then begin // It is an embedded image. @@ -5806,14 +5830,18 @@ begin FSContent := CreateTempStream(FWorkbook, 'fpsC'); FSMimeType := CreateTempStream(FWorkbook, 'fpsMT'); FSMetaInfManifest := CreateTempStream(FWorkbook, 'fpsMIM'); + {$IFDEF FPS_CHARTS} FChartWriter.CreateStreams; + {$ENDIF} // FSSheets will be created when needed. end; { Destroys the temporary streams that were created by the writer } procedure TsSpreadOpenDocWriter.DestroyStreams; begin + {$IFDEF FPS_CHARTS} FChartWriter.DestroyStreams; + {$ENDIF} DestroyTempStream(FSMeta); DestroyTempStream(FSSettings); DestroyTempStream(FSStyles); @@ -5918,7 +5946,9 @@ begin WriteSettings(); WriteStyles(); WriteContent; + {$IFDEF FPS_CHARTS} FChartWriter.WriteCharts; + {$ENDIF} { Now compress the files } FZip := TZipper.Create; @@ -5931,7 +5961,9 @@ begin FZip.Entries.AddFileEntry(FSMimetype, OPENDOC_PATH_MIMETYPE); FZip.Entries.AddFileEntry(FSMetaInfManifest, OPENDOC_PATH_METAINF_MANIFEST); ZipPictures(FZip); + {$IFDEF FPS_CHARTS} TsSpreadOpenDocChartWriter(FChartWriter).AddChartsToZip(FZip); + {$ENDIF} ResetStreams; @@ -6128,7 +6160,9 @@ begin FSContent.Position := 0; FSMimeType.Position := 0; FSMetaInfManifest.Position := 0; + {$IFDEF FPS_CHARTS} FChartWriter.ResetStreams; + {$ENDIF} end; { Writes the node "office:automatic-styles". Although this node occurs in both @@ -6237,7 +6271,9 @@ begin end; end; + {$IFDEF FPS_CHARTS} TsSpreadOpenDocChartWriter(FChartWriter).AddToMetaInfManifest(FSMetaInfManifest); + {$ENDIF} AppendToStream(FSMetaInfManifest, ''); @@ -7153,6 +7189,7 @@ end; procedure TsSpreadOpenDocWriter.WriteGraphicStyles(AStream: TStream); begin + {$IFDEF FPS_CHARTS} if TsWorkbook(FWorkbook).GetChartCount = 0 then exit; @@ -7164,6 +7201,7 @@ begin '' + '' ); + {$ENDIF} end; procedure TsSpreadOpenDocWriter.WriteMasterStyles(AStream: TStream); @@ -7419,6 +7457,7 @@ end; procedure TsSpreadOpenDocWriter.WriteParagraphStyles(AStream: TStream); begin + {$IFDEF FPS_CHARTS} if TsWorkbook(FWorkbook).GetChartCount = 0 then exit; @@ -7428,6 +7467,7 @@ begin '' + '' ); + {$ENDIF} end; function TsSpreadOpenDocWriter.WritePrintContentStyleXMLAsString( @@ -8169,7 +8209,9 @@ constructor TsSpreadOpenDocWriter.Create(AWorkbook: TsBasicWorkbook); begin inherited Create(AWorkbook); + {$IFDEF FPS_CHARTS} FChartWriter := TsSpreadOpenDocChartWriter.Create(self); + {$ENDIF} FColumnStyleList := TFPList.Create; FRowStyleList := TFPList.Create; @@ -8196,7 +8238,9 @@ begin FRichTextFontList.Free; // Do not destroy fonts, they are owned by Workbook FHeaderFooterFontList.Free; + {$IFDEF FPS_CHARTS} FChartWriter.Free; + {$ENDIF} inherited Destroy; end; @@ -9012,8 +9056,6 @@ var sheet: TsWorksheet absolute ASheet; i: Integer; sheetIdx: Integer; - chart: TsChart; - series: TsChartSeries; img: TsImage; imgType: TsImageType; r1,c1,r2,c2: Cardinal; @@ -9023,13 +9065,18 @@ var xml: String; target, bookmark: String; u: TURI; + {$IFDEF FPS_CHARTS} + chart: TsChart; + series: TsChartSeries; + {$ENDIF} begin - if (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) then + if (sheet.GetImageCount = 0) {$IFDEF FPS_CHARTS}and (sheet.GetChartCount = 0){$ENDIF} then exit; AppendToStream(AStream, ''); + {$IFDEF FPS_CHARTS} sheetIdx := sheet.Index; for i:=0 to TsWorkbook(FWorkbook).GetChartCount-1 do begin @@ -9096,6 +9143,7 @@ begin AppendToStream(AStream, xml); end; + {$ENDIF} for i:=0 to (ASheet as TsWorksheet).GetImageCount-1 do begin diff --git a/components/fpspreadsheet/source/common/fpsopendocumentchart.pas b/components/fpspreadsheet/source/common/fpsopendocumentchart.pas index 17cb451dc..23204c7d2 100644 --- a/components/fpspreadsheet/source/common/fpsopendocumentchart.pas +++ b/components/fpspreadsheet/source/common/fpsopendocumentchart.pas @@ -1,9 +1,12 @@ unit fpsOpenDocumentChart; {$mode objfpc}{$H+} +{$include ..\fps.inc} interface +{$IFDEF FPS_CHARTS} + uses Classes, SysUtils, StrUtils, Contnrs, FPImage, {$IF FPC_FULLVERSION >= 20701} @@ -156,8 +159,12 @@ type procedure WriteCharts; override; end; +{$ENDIF} + implementation +{$IFDEF FPS_CHARTS} + uses fpsOpenDocument; @@ -4227,5 +4234,7 @@ begin inc(AStyleID); end; +{$ENDIF} + end. diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas index bf25971fc..984f2f689 100644 --- a/components/fpspreadsheet/source/common/fpspreadsheet.pas +++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas @@ -24,7 +24,11 @@ uses {$endif}{$endif}{$endif} Classes, SysUtils, fpimage, avglvltree, lconvencoding, fpsTypes, fpsExprParser, fpsClasses, fpsNumFormat, fpsPageLayout, - fpsImages, fpsConditionalFormat, fpsChart; + fpsImages, + {$ifdef FPS_CHARTS} + fpsChart, + {$endif} + fpsConditionalFormat; type { Forward declarations } @@ -251,7 +255,9 @@ type procedure WriteNumber(ACell: PCell; ANumber: Double; ANumFormat: TsNumberFormat; ANumFormatString: String); overload; + {$ifdef FPS_CHARTS} function WriteChartColor(ARow, Acol: Cardinal; AColor: TsColor): PCell; + {$endif} function WriteRPNFormula(ARow, ACol: Cardinal; AFormula: TsRPNFormula): PCell; overload; @@ -635,8 +641,10 @@ type ARowOffs1, AColOffs1: Double; out ARowOffs2, AColOffs2: Double; out x,y: Double); + {$ifdef FPS_CHARTS} { Chart support } function GetChartCount: Integer; + {$endif} { Protection } procedure Protect(AEnable: Boolean); @@ -784,7 +792,9 @@ type FCellFormatList: TsCellFormatList; FConditionalFormatList: TsConditionalFormatList; FEmbeddedObjList: TFPList; + {$ifdef FPS_CHARTS} FCharts: TsChartList; + {$endif} { Internal methods } class procedure GetFormatFromFileHeader(const AFileName: TFileName; @@ -925,11 +935,13 @@ type function HasEmbeddedSheetImages: Boolean; procedure RemoveAllEmbeddedObj; + {$ifdef FPS_CHARTS} { Charts } function AddChart(ASheet: TsBasicWorksheet; ARow, ACol: Cardinal; AWidth, AHeight: Double; AOffsetX: Double = 0.0; AOffsetY: Double = 0.0): TsChart; function GetChartByIndex(AIndex: Integer): TsChart; function GetChartCount: Integer; + {$endif} { Utilities } function ConvertUnits(AValue: Double; AFromUnits, AToUnits: TsSizeUnits): Double; @@ -1555,6 +1567,7 @@ begin end; end; +{$ifdef FPS_CHARTS} {@@ ---------------------------------------------------------------------------- Determines the count of charts on this worksheet -------------------------------------------------------------------------------} @@ -1572,6 +1585,7 @@ begin if chart.SheetIndex = idx then inc(Result); end; end; +{$endif} {@@ ---------------------------------------------------------------------------- Calculates all formulas of the worksheet @@ -4384,6 +4398,7 @@ begin end; end; +{$ifdef FPS_CHARTS} {@@ ---------------------------------------------------------------------------- Writes an rgb color value as number to the specified cell. As requested by the chart module the bytes for red and blue are exchanged. @@ -4392,7 +4407,7 @@ function TsWorksheet.WriteChartColor(ARow, ACol: Cardinal; AColor: TsColor): PCe begin Result := WriteNumber(ARow, ACol, FlipColorBytes(AColor)); end; - +{$endif} {@@ ---------------------------------------------------------------------------- Writes an empty cell @@ -6556,7 +6571,9 @@ begin FCellFormatList := TsCellFormatList.Create(false); FConditionalFormatList := TsConditionalFormatList.Create; FEmbeddedObjList := TFPList.Create; + {$ifdef FPS_CHARTS} FCharts := TsChartList.Create; + {$endif} // Add default cell format InitFormatRecord(fmt); @@ -6589,7 +6606,9 @@ begin RemoveAllEmbeddedObj; FEmbeddedObjList.Free; + {$ifdef FPS_CHARTS} FCharts.Free; + {$endif} inherited Destroy; end; @@ -7807,7 +7826,10 @@ end; {$include fpspreadsheet_hyperlinks.inc} // hyperlinks {$include fpspreadsheet_embobj.inc} // embedded objects {$include fpspreadsheet_clipbrd.inc} // clipboard access + +{$ifdef FPS_CHARTS} {$include fpspreadsheet_chart.inc} // chart support +{$endif} end. {** End Unit: fpspreadsheet } diff --git a/components/fpspreadsheet/source/common/fpsreaderwriter.pas b/components/fpspreadsheet/source/common/fpsreaderwriter.pas index efdb075de..d47be1e30 100644 --- a/components/fpspreadsheet/source/common/fpsreaderwriter.pas +++ b/components/fpspreadsheet/source/common/fpsreaderwriter.pas @@ -19,6 +19,8 @@ unit fpsReaderWriter; {$mode delphi}{$H+} {$endif} +{$include ..\fps.inc} + interface uses @@ -197,6 +199,7 @@ type property NumFormatList: TStringList read FNumFormatList; end; + {$IFDEF FPS_CHARTS} {@@ Helper class for the spreadsheet reader to keep processing of charts out of the main reader unit. } TsBasicSpreadChartReader = class @@ -221,6 +224,7 @@ type procedure WriteCharts; virtual; abstract; property Writer: TsBasicSpreadWriter read FWriter; end; + {$ENDIF} type TsSpreadFileAccess = (faRead, faWrite); @@ -937,6 +941,7 @@ begin end; +{$IFDEF FPS_CHARTS} {------------------------------------------------------------------------------} { TsBasicSpreadChartReader } {------------------------------------------------------------------------------} @@ -957,6 +962,7 @@ constructor TsBasicSpreadChartWriter.Create(AWriter: TsBasicSpreadWriter); begin FWriter := AWriter; end; +{$ENDIF} {------------------------------------------------------------------------------} diff --git a/components/fpspreadsheet/source/common/fpsxmlcommon.pas b/components/fpspreadsheet/source/common/fpsxmlcommon.pas index 1da4b0d04..50b57f211 100644 --- a/components/fpspreadsheet/source/common/fpsxmlcommon.pas +++ b/components/fpspreadsheet/source/common/fpsxmlcommon.pas @@ -67,13 +67,6 @@ implementation uses LazUTF8, - (* - {$IF FPC_FULLVERSION >= 20701} - zipper, - {$ELSE} - fpszipper, - {$ENDIF} - *) fpsStreams, fpsUtils; {------------------------------------------------------------------------------} diff --git a/components/fpspreadsheet/source/common/xlsxooxml.pas b/components/fpspreadsheet/source/common/xlsxooxml.pas index e98decf89..b4e58fd46 100644 --- a/components/fpspreadsheet/source/common/xlsxooxml.pas +++ b/components/fpspreadsheet/source/common/xlsxooxml.pas @@ -184,11 +184,13 @@ type procedure WriteCFColorRangeRule(AStream: TStream; ARule: TsCFColorRangeRule; APriority: Integer); procedure WriteCFDataBarRule(AStream: TStream; ARule: TsCFDatabarRule; APriority: Integer); procedure WriteCFIconSetRule(AStream: TStream; ARule: TsCFIconSetRule; APriority: Integer); + {$ifdef FPS_CHARTS} procedure WriteChart(AStream: TStream; AChartIndex: Integer); procedure WriteChartColors; procedure WriteChartRels; procedure WriteCharts; procedure WriteChartStyles; + {$endif} procedure WriteColBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet); procedure WriteCols(AStream: TStream; AWorksheet: TsBasicWorksheet); procedure WriteComments(AWorksheet: TsBasicWorksheet); @@ -4726,7 +4728,7 @@ begin end; // Charts or embedded images next - if (sheet.GetImageCount > 0) or (book.GetChartCount > 0) then + if (sheet.GetImageCount > 0) {$ifdef FPS_CHARTS}or (book.GetChartCount > 0){$endif} then begin ADrawing_rId := next_rId; inc(next_rId); @@ -5145,7 +5147,7 @@ begin ''); end; - +{$ifdef FPS_CHARTS} procedure TsSpreadOOXMLWriter.WriteChart(AStream: TStream; AChartIndex: Integer); @@ -5246,7 +5248,9 @@ begin '' + LE ); end; +{$endif} +{$ifdef FPS_CHARTS} procedure TsSpreadOOXMLWriter.WriteChartColors; var i, n: Integer; @@ -5306,7 +5310,9 @@ begin ); end; end; +{$endif} +{$ifdef FPS_CHARTS} { Write the relationship file for all workbook's chart. The file defines which xml files contain the ChartStyles and Colors needed by each chart. } procedure TsSpreadOOXMLWriter.WriteChartRels; @@ -5332,7 +5338,9 @@ begin ])); end; end; +{$endif} +{$ifdef FPS_CHARTS} procedure TsSpreadOOXMLWriter.WriteCharts; var i, n: Integer; @@ -5347,7 +5355,9 @@ begin WriteChart(FSCharts[i], i); end; end; +{$endif} +{$ifdef FPS_CHARTS} procedure TsSpreadOOXMLWriter.WriteChartStyles; var i, n: Integer; @@ -5901,6 +5911,7 @@ begin ); end; end; +{$endif} procedure TsSpreadOOXMLWriter.WriteColBreaks(AStream: TStream; AWorksheet: TsBasicWorksheet); @@ -7217,7 +7228,7 @@ var sheetIdx: Integer; chart: TsChart; begin - if (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) then + if (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} then exit; SetLength(FSDrawings, FCurSheetNum + 1); @@ -7238,6 +7249,7 @@ begin inc(rId, 1); end; + {$ifdef FPS_CHARTS} // Repeat for each chart sheetIdx := sheet.Index; j := 1; // Counts the charts in the current sheet @@ -7251,6 +7263,7 @@ begin inc(rId); end; end; + {$endif} // Close node AppendToStream(FSDrawings[FCurSheetNum], @@ -7274,7 +7287,7 @@ var sheet: TsWorksheet absolute AWorksheet; sheetIdx: Integer; begin - if (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) then + if (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} then exit; SetLength(FSDrawingsRels, FCurSheetNum + 1); @@ -7317,6 +7330,7 @@ begin inc(rId); end; + {$ifdef FPS_CHARTS} // Repeat for each chart sheetIdx := sheet.Index; for i := 0 to TsWorkbook(FWorkbook).GetChartCount - 1 do @@ -7331,6 +7345,7 @@ begin inc(rId); end; end; + {$endif} AppendToStream(FSDrawingsRels[FCurSheetNum], ''); @@ -7697,7 +7712,7 @@ begin // Anything to write? if (sheet.Comments.Count = 0) and (sheet.Hyperlinks.Count = 0) and - (sheet.GetImageCount = 0) and (sheet.GetChartCount = 0) and + (sheet.GetImageCount = 0) {$ifdef FPS_CHARTS}and (sheet.GetChartCount = 0){$endif} and (not (sheet.PageLayout.HasHeaderFooterImages)) then exit; @@ -7750,7 +7765,7 @@ begin // Relationships for charts or embedded images // relationship with to the ../drawings/drawingX.xml file containing all // chart/image infos. X is the 1-based sheet index - if (sheet.GetImageCount > 0) or (sheet.GetChartCount > 0) then + if (sheet.GetImageCount > 0) {$ifdef FPS_CHARTS}or (sheet.GetChartCount > 0){$endif} then AppendToStream(FSSheetRels[FCurSheetNum], Format( ' ' + LineEnding, [rId_Drawing, FCurSheetNum + 1, SCHEMAS_DRAWING] @@ -8010,11 +8025,13 @@ begin ''); end; + {$ifdef FPS_CHARTS} { Write all charts } WriteChartRels; WriteChartStyles; WriteChartColors; WriteCharts; + {$endif} { Workbook relations - Mark relation to all sheets } WriteWorkbookRels(FSWorkbookRels); @@ -8064,6 +8081,7 @@ begin AppendToStream(FSContentTypes, '' + LineEnding); + {$ifdef FPS_CHARTS} n := 1; for i:=0 to book.GetWorksheetCount-1 do begin @@ -8076,6 +8094,7 @@ begin inc(n); end; end; + {$endif} for i:=1 to book.GetWorksheetCount do begin @@ -8488,7 +8507,7 @@ begin which contains the image/chart-related data of all images/charts in this sheet. The file in turn requires an entry "drawingX.xml.rels" in the drawings rels folder } - if (worksheet.GetImageCount > 0) or (worksheet.GetChartCount > 0) then + if (worksheet.GetImageCount > 0) {$ifdef FPS_CHARTS}or (worksheet.GetChartCount > 0){$endif} then AppendToStream(FSSheets[FCurSheetNum], Format( '', [rId_Drawing])); diff --git a/components/fpspreadsheet/source/design/fpsvisualreg.pas b/components/fpspreadsheet/source/design/fpsvisualreg.pas index 2266c5a7d..0412e6139 100644 --- a/components/fpspreadsheet/source/design/fpsvisualreg.pas +++ b/components/fpspreadsheet/source/design/fpsvisualreg.pas @@ -1,6 +1,8 @@ unit fpsvisualreg; {$MODE objfpc}{$H+} + +{$INCLUDE ..\fps.inc} {$DEFINE REGISTER_ALL_FILE_FORMATS} {$R ../../resource/fpsvisualreg.res} @@ -19,7 +21,12 @@ uses {$IFDEF REGISTER_ALL_FILE_FORMATS} {%H-}fpsallformats, {$ENDIF} - fpspreadsheetctrls, fpspreadsheetgrid, fpspreadsheetchart, fpsactions; + fpspreadsheetctrls, + fpspreadsheetgrid, + {$IFDEF FPS_CHARTS} + fpspreadsheetchart, + {$ENDIF} + fpsactions; {@@ ---------------------------------------------------------------------------- Registers the visual spreadsheet components in the Lazarus component palette, @@ -35,9 +42,11 @@ begin TsSpreadsheetInspector ]); + {$ifdef FPS_CHARTS} RegisterComponents('Chart', [ TsWorkbookChartSource ]); + {$endif} RegisterActions('FPSpreadsheet', [ // Worksheet-releated actions diff --git a/components/fpspreadsheet/source/fps.inc b/components/fpspreadsheet/source/fps.inc index d2ff3b046..b656afcea 100644 --- a/components/fpspreadsheet/source/fps.inc +++ b/components/fpspreadsheet/source/fps.inc @@ -67,3 +67,5 @@ Therefore, the following define must be activated if FPC is v3.3 or older. } {$DEFINE FPS_PATCHED_ZIPPER} +{ The next define activates chart support. } +{$DEFINE FPS_CHARTS} diff --git a/components/fpspreadsheet/source/visual/fpspreadsheetchart.pas b/components/fpspreadsheet/source/visual/fpspreadsheetchart.pas index 6b100808c..05110afb4 100644 --- a/components/fpspreadsheet/source/visual/fpspreadsheetchart.pas +++ b/components/fpspreadsheet/source/visual/fpspreadsheetchart.pas @@ -13,9 +13,12 @@ LICENSE: See the file COPYING.modifiedLGPL.txt, included in the Lazarus unit fpspreadsheetchart; {$mode objfpc}{$H+} +{$include ..\fps.inc} interface +{$ifdef FPS_CHARTS} + uses // RTL/FCL Classes, Contnrs, SysUtils, Types, FPCanvas, @@ -191,9 +194,12 @@ type procedure Convert_sChartLine_to_Pen(AChart: TsChart; ALine: TsChartLine; APen: TPen); +{$endif} implementation +{$ifdef FPS_CHARTS} + uses Math; @@ -2451,4 +2457,6 @@ begin AChartSeries.TickWidthStyle := twsPercentMin; end; +{$ENDIF} + end. diff --git a/components/fpspreadsheet/source/visual/fpspreadsheetctrls.pas b/components/fpspreadsheet/source/visual/fpspreadsheetctrls.pas index 39f6398e0..cc7bef7fa 100644 --- a/components/fpspreadsheet/source/visual/fpspreadsheetctrls.pas +++ b/components/fpspreadsheet/source/visual/fpspreadsheetctrls.pas @@ -23,6 +23,7 @@ unit fpspreadsheetctrls; {$MODE objfpc}{$H+} +{$include ..\fps.inc} interface