From 64f5eff9226340da4ce3f8ce4f8b443f7f6d1679 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 28 Sep 2016 05:56:38 +0000 Subject: [PATCH] fpspreadsheet: Read/write zoom factor from/to OpenDocument files. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5227 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpsopendocument.pas | 23 +++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index e514e798f..a39da4f54 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -3450,12 +3450,14 @@ var nodeName, cfgName, cfgValue, tblName: String; sheet: TsWorksheet; vsm, hsm, hsp, vsp: Integer; + zoom: Double; showGrid, showHeaders: Boolean; actCol, actRow: Cardinal; i: Integer; begin showGrid := true; showHeaders := true; + zoom := 100.0; cfgItemSetNode := AOfficeSettingsNode.FirstChild; while Assigned(cfgItemSetNode) do begin @@ -3525,6 +3527,7 @@ begin 'HorizontalSplitMode': hsm := StrToInt(cfgValue); 'VerticalSplitPosition': vsp := StrToInt(cfgValue); 'HorizontalSplitPosition': hsp := StrToInt(cfgValue); + 'ZoomValue': zoom := StrToFloat(cfgValue, FPointSeparatorSettings); end; end; node := node.NextSibling; @@ -3539,6 +3542,8 @@ begin end; // Active cell sheet.SelectCell(actRow, actCol); + // Zoom factor + sheet.ZoomFactor := zoom / 100.0; end; end; cfgTableItemNode := cfgTableItemNode.NextSibling; @@ -3574,7 +3579,6 @@ end; '' + '', [ } - procedure TsSpreadOpenDocReader.ReadShapes(ATableNode: TDOMNode); var shapesNode, shapeNode, childShapeNode: TDOMNode; @@ -4535,6 +4539,7 @@ var showGrid, showHeaders: Boolean; sheet: TsWorksheet; actSheet: String; + zoomvalue: String; begin // Open/LibreOffice allow to change showGrid and showHeaders only globally. // As a compromise, we check whether there is at least one page with these @@ -4542,10 +4547,14 @@ begin showGrid := true; showHeaders := true; actSheet := 'Table1'; + zoomValue := '100'; for i:=0 to Workbook.GetWorksheetCount-1 do begin sheet := Workbook.GetWorksheetByIndex(i); - if sheet = Workbook.ActiveWorksheet then actSheet := UTF8TextToXMLText(sheet.Name); + if sheet = Workbook.ActiveWorksheet then begin + actSheet := UTF8TextToXMLText(sheet.Name); +// zoomValue := IntToStr(round(sheet.ZoomFactor)); + end; if not (soShowGridLines in sheet.Options) then showGrid := false; if not (soShowHeaders in sheet.Options) then showHeaders := false; end; @@ -4562,7 +4571,7 @@ begin '' + '' + ''+actSheet+'' + - '100' + + ''+zoomValue+'' + '100' + 'false' + ''+FALSE_TRUE[showGrid]+'' + @@ -6197,7 +6206,9 @@ var vsm: Integer; // VerticalSplitMode asr: Integer; // ActiveSplitRange actX, actY: Integer; // Active cell col/row index + zoom: String; begin + zoom := '100'; for i:=0 to Workbook.GetWorksheetCount-1 do begin sheet := Workbook.GetWorksheetByIndex(i); @@ -6233,6 +6244,8 @@ begin actY := sheet.TopPaneHeight; end; + zoom := IntToStr(round(sheet.ZoomFactor*100.0)); + AppendToStream(AStream, ''+IntToStr(actX)+''); AppendToStream(AStream, @@ -6255,6 +6268,10 @@ begin '0'); AppendToStream(AStream, ''+IntToStr(sheet.TopPaneHeight)+''); + AppendToStream(AStream, + '0'); + AppendToStream(AStream, + ''+zoom+''); AppendToStream(AStream, 'true'); // this "ShowGrid" overrides the global setting. But Open/LibreOffice do not allow to change ShowGrid per sheet.